From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36706) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UvRRD-0001YY-PP for qemu-devel@nongnu.org; Sat, 06 Jul 2013 08:18:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UvRRC-0002MF-4p for qemu-devel@nongnu.org; Sat, 06 Jul 2013 08:18:03 -0400 Received: from cantor2.suse.de ([195.135.220.15]:53399 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UvRRB-0002Lp-Uf for qemu-devel@nongnu.org; Sat, 06 Jul 2013 08:18:02 -0400 From: Alexander Graf Date: Sat, 6 Jul 2013 14:17:54 +0200 Message-Id: <1373113077-11698-7-git-send-email-agraf@suse.de> In-Reply-To: <1373113077-11698-1-git-send-email-agraf@suse.de> References: <1373113077-11698-1-git-send-email-agraf@suse.de> Subject: [Qemu-devel] [PATCH 6/9] linux-user: Add i386 TLS setter List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Riku Voipio We can easily set the TLS on i386. Add code to do so. Signed-off-by: Alexander Graf --- linux-user/i386/target_cpu.h | 12 ++++++++++-- linux-user/syscall.c | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/linux-user/i386/target_cpu.h b/linux-user/i386/target_cpu.h index abcac79..1170d84 100644 --- a/linux-user/i386/target_cpu.h +++ b/linux-user/i386/target_cpu.h @@ -28,6 +28,14 @@ static inline void cpu_clone_regs(CPUX86State *env, target_ulong newsp) env->regs[R_EAX] = 0; } -/* TODO: need to implement cpu_set_tls() */ +#if defined(TARGET_ABI32) +abi_long do_set_thread_area(CPUX86State *env, abi_ulong ptr); -#endif +static inline void cpu_set_tls(CPUX86State *env, target_ulong newtls) +{ + do_set_thread_area(env, newtls); + cpu_x86_load_seg(env, R_GS, env->segs[R_GS].selector); +} +#endif /* defined(TARGET_ABI32) */ + +#endif /* !defined(TARGET_CPU_H) */ diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 8eb5c31..e7d5143 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -3983,7 +3983,7 @@ static abi_long do_modify_ldt(CPUX86State *env, int func, abi_ulong ptr, } #if defined(TARGET_I386) && defined(TARGET_ABI32) -static abi_long do_set_thread_area(CPUX86State *env, abi_ulong ptr) +abi_long do_set_thread_area(CPUX86State *env, abi_ulong ptr) { uint64_t *gdt_table = g2h(env->gdt.base); struct target_modify_ldt_ldt_s ldt_info; -- 1.6.0.2