summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/thread/i386/__set_thread_area.s13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/thread/i386/__set_thread_area.s b/src/thread/i386/__set_thread_area.s
index 1d852689..3a558fb0 100644
--- a/src/thread/i386/__set_thread_area.s
+++ b/src/thread/i386/__set_thread_area.s
@@ -6,10 +6,10 @@ __set_thread_area:
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 +18,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:
@@ -38,3 +39,7 @@ __set_thread_area:
mov $7,%dl
inc %al
jmp 3b
+
+.data
+ .align 4
+4: .long -1