install dynamic tls synchronously at dlopen, streamline access
[musl] / src / thread / i386 / __set_thread_area.s
index cccf1cd..c2c21dd 100644 (file)
@@ -1,22 +1,46 @@
 .text
 .global __set_thread_area
+.hidden __set_thread_area
 .type   __set_thread_area,@function
 __set_thread_area:
        push %ebx
        push $0x51
        push $0xfffff
        push 16(%esp)
-       push $-1
+       call 1f
+1:     addl $4f-1b,(%esp)
+       pop %ecx
+       mov (%ecx),%edx
+       push %edx
        mov %esp,%ebx
        xor %eax,%eax
        mov $243,%al
        int $128
        testl %eax,%eax
-       jnz 1f
-       movl (%esp),%ecx
-       leal 3(,%ecx,8),%ecx
-       movw %cx,%gs
+       jnz 2f
+       movl (%esp),%edx
+       movl %edx,(%ecx)
+       leal 3(,%edx,8),%edx
+3:     movw %dx,%gs
 1:
        addl $16,%esp
        popl %ebx
        ret
+2:
+       mov %ebx,%ecx
+       xor %ebx,%ebx
+       xor %edx,%edx
+       mov %ebx,(%esp)
+       mov $1,%bl
+       mov $16,%dl
+       mov $123,%al
+       int $128
+       testl %eax,%eax
+       jnz 1b
+       mov $7,%dl
+       inc %al
+       jmp 3b
+
+.data
+       .align 4
+4:     .long -1