elf.h: add ELFCOMPRESS_ZSTD
[musl] / src / thread / i386 / __set_thread_area.s
index 1d85268..aa6852b 100644 (file)
@@ -1,15 +1,16 @@
 .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)
-       xor %edx,%edx
-       mov %gs,%dx
-       sub $3,%edx
-       sar $3,%edx
+       call 1f
+1:     addl $4f-1b,(%esp)
+       pop %ecx
+       mov (%ecx),%edx
        push %edx
        mov %esp,%ebx
        xor %eax,%eax
@@ -18,6 +19,7 @@ __set_thread_area:
        testl %eax,%eax
        jnz 2f
        movl (%esp),%edx
+       movl %edx,(%ecx)
        leal 3(,%edx,8),%edx
 3:     movw %dx,%gs
 1:
@@ -26,6 +28,7 @@ __set_thread_area:
        ret
 2:
        mov %ebx,%ecx
+       xor %eax,%eax
        xor %ebx,%ebx
        xor %edx,%edx
        mov %ebx,(%esp)
@@ -38,3 +41,7 @@ __set_thread_area:
        mov $7,%dl
        inc %al
        jmp 3b
+
+.data
+       .align 4
+4:     .long -1