From f630df09b1fd954eda16e2f779da0b5ecc9d80d3 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 13 Apr 2015 17:26:08 -0400 Subject: [PATCH] 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). --- src/thread/i386/__set_thread_area.s | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/thread/i386/__set_thread_area.s b/src/thread/i386/__set_thread_area.s index ad538151..1d852689 100644 --- a/src/thread/i386/__set_thread_area.s +++ b/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 -- 2.25.1