From 4453c6dc677c67dba7385cbabd165577ceba8d1a Mon Sep 17 00:00:00 2001 From: Peter Wemm Date: Thu, 14 Apr 2005 00:02:37 +0000 Subject: [PATCH] Attempt i386_set_gsbase() before using the user_ldt code. Unimplemented sysarch() calls return EINVAL, not SIGSYS.. so we can trivially adapt. --- lib/libc/i386/gen/_set_tp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/libc/i386/gen/_set_tp.c b/lib/libc/i386/gen/_set_tp.c index 2380e99fe04a..287e0f2a6d0a 100644 --- a/lib/libc/i386/gen/_set_tp.c +++ b/lib/libc/i386/gen/_set_tp.c @@ -36,8 +36,11 @@ _set_tp(void *tp) { #ifndef COMPAT_32BIT union descriptor ldt; - int sel; + int error, sel; + error = i386_set_gsbase(tp); + if (error == 0) + return; memset(&ldt, 0, sizeof(ldt)); ldt.sd.sd_lolimit = 0xffff; /* 4G limit */ ldt.sd.sd_lobase = ((uintptr_t)tp) & 0xffffff;