Explorar o código

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 %!s(int64=10) %!d(string=hai) anos
pai
achega
f630df09b1
Modificáronse 1 ficheiros con 5 adicións e 1 borrados
  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