Browse Source

allow i386 __set_thread_area to be called more than once

previously a new GDT slot was requested, even if one had already been
obtained by a previous call. instead extract the old slot number from
GS and reuse it if it was already set. the formula (GS-3)/8 for the
slot number automatically yields -1 (request for new slot) if GS is
zero (unset).
Rich Felker 10 years ago
parent
commit
f630df09b1
1 changed files with 5 additions and 1 deletions
  1. 5 1
      src/thread/i386/__set_thread_area.s

+ 5 - 1
src/thread/i386/__set_thread_area.s

@@ -6,7 +6,11 @@ __set_thread_area:
 	push $0x51
 	push $0xfffff
 	push 16(%esp)
-	push $-1
+	xor %edx,%edx
+	mov %gs,%dx
+	sub $3,%edx
+	sar $3,%edx
+	push %edx
 	mov %esp,%ebx
 	xor %eax,%eax
 	mov $243,%al