From f94e84780e96221a4b3e8eb39bfa2d227d367f69 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Wed, 9 Apr 2014 12:30:38 +0000 Subject: x32: decode clone LDT user_desc entries for x86 processes * mem.c [X32]: Include asm/ldt.h. [X32] (print_ldt_entry, sys_modify_ldt, sys_set_thread_area, sys_get_thread_area): Define. * process.c [X32]: Include asm/ldt.h. (sys_clone) [X32]: Decode LDT entry if current_personality == 1. --- mem.c | 8 ++++---- process.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mem.c b/mem.c index 264faab..9207fb2 100644 --- a/mem.c +++ b/mem.c @@ -33,12 +33,12 @@ #include "defs.h" #include #include -#if defined(I386) || defined(X86_64) +#if defined(I386) || defined(X86_64) || defined(X32) # include # ifdef HAVE_STRUCT_USER_DESC # define modify_ldt_ldt_s user_desc # endif -#endif /* I386 || X86_64 */ +#endif /* I386 || X86_64 || X32 */ static unsigned long get_pagesize() @@ -543,7 +543,7 @@ sys_getpagesize(struct tcb *tcp) } #endif -#if defined(I386) || defined(X86_64) +#if defined(I386) || defined(X86_64) || defined(X32) void print_ldt_entry(struct modify_ldt_ldt_s *ldt_entry) { @@ -635,7 +635,7 @@ sys_get_thread_area(struct tcb *tcp) return 0; } -#endif /* I386 || X86_64 */ +#endif /* I386 || X86_64 || X32 */ #if defined(M68K) int diff --git a/process.c b/process.c index 600a86b..963d3b1 100644 --- a/process.c +++ b/process.c @@ -491,13 +491,13 @@ static const struct xlat clone_flags[] = { XLAT_END }; -#if defined I386 || defined X86_64 +#if defined I386 || defined X86_64 || defined X32 # include # ifdef HAVE_STRUCT_USER_DESC # define modify_ldt_ldt_s user_desc # endif extern void print_ldt_entry(); -#endif /* I386 || X86_64 */ +#endif /* I386 || X86_64 || X32 */ #if defined IA64 # define ARG_FLAGS 0 @@ -556,7 +556,7 @@ sys_clone(struct tcb *tcp) if (flags & CLONE_PARENT_SETTID) tprintf(", parent_tidptr=%#lx", tcp->u_arg[ARG_PTID]); if (flags & CLONE_SETTLS) { -#if defined I386 || defined X86_64 +#if defined I386 || defined X86_64 || defined X32 # ifndef I386 if (current_personality == 1) # endif @@ -572,7 +572,7 @@ sys_clone(struct tcb *tcp) } } else -#endif /* I386 || X86_64 */ +#endif /* I386 || X86_64 || X32 */ tprintf(", tls=%#lx", tcp->u_arg[ARG_TLS]); } if (flags & (CLONE_CHILD_SETTID|CLONE_CHILD_CLEARTID)) -- cgit v1.2.3