From: Dmitry V. Levin Date: Wed, 21 Dec 2016 18:01:21 +0000 (+0000) Subject: Rework ifdefery around print_user_desc X-Git-Tag: v4.16~303 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c6d15a9b0d7cc937daba027851cca5b2eaf9bd66;p=strace Rework ifdefery around print_user_desc * configure.ac (AC_CHECK_TYPES): Check for struct user_desc in . * clone.c (print_tls_arg): New function. (SYS_FUNC(clone)): Use it. (print_user_desc): Move prototype ... * defs.h [HAVE_STRUCT_USER_DESC]: ... here. * ldt.c: Check for HAVE_STRUCT_USER_DESC instead of architectures. * linux/dummy.h: Likewise. --- diff --git a/clone.c b/clone.c index 075bb75c..3bc1e22e 100644 --- a/clone.c +++ b/clone.c @@ -75,9 +75,24 @@ # define ARG_CTID 4 #endif -#if defined I386 || defined X86_64 || defined X32 -extern void print_user_desc(struct tcb *, long); -#endif /* I386 || X86_64 || X32 */ +static void +print_tls_arg(struct tcb *const tcp, const kernel_ureg_t addr) +{ +#ifdef HAVE_STRUCT_USER_DESC +# if SUPPORTED_PERSONALITIES > 1 + if (current_personality == 1) +# endif + { + print_user_desc(tcp, tcp->u_arg[ARG_TLS]); + } +# if SUPPORTED_PERSONALITIES > 1 + else +# endif +#endif /* HAVE_STRUCT_USER_DESC */ + { + printaddr(tcp->u_arg[ARG_TLS]); + } +} SYS_FUNC(clone) { @@ -105,22 +120,8 @@ SYS_FUNC(clone) printaddr(tcp->u_arg[ARG_PTID]); } if (flags & CLONE_SETTLS) { -#if defined I386 || defined X86_64 || defined X32 -# ifndef I386 - if (current_personality == 1) -# endif - { - tprints(", tls="); - print_user_desc(tcp, tcp->u_arg[ARG_TLS]); - } -# ifndef I386 - else -# endif -#endif /* I386 || X86_64 || X32 */ - { - tprints(", tls="); - printaddr(tcp->u_arg[ARG_TLS]); - } + tprints(", tls="); + print_tls_arg(tcp, tcp->u_arg[ARG_TLS]); } if (flags & (CLONE_CHILD_SETTID|CLONE_CHILD_CLEARTID)) { tprints(", child_tidptr="); diff --git a/configure.ac b/configure.ac index 9f44d12e..174d2552 100644 --- a/configure.ac +++ b/configure.ac @@ -295,6 +295,8 @@ AC_CHECK_TYPES([struct stat64, struct __old_kernel_stat],,, [#include #include ]) +AC_CHECK_TYPES([struct user_desc],,, [#include ]) + AC_CHECK_MEMBERS([struct stat.st_mtime_nsec, struct stat64.st_mtime_nsec],,, [#include #include ]) diff --git a/defs.h b/defs.h index 97219df8..7869f907 100644 --- a/defs.h +++ b/defs.h @@ -777,6 +777,10 @@ extern void print_timeval32_pair(struct tcb *tcp, long); extern void print_itimerval32(struct tcb *tcp, long); #endif +#ifdef HAVE_STRUCT_USER_DESC +extern void print_user_desc(struct tcb *, long); +#endif + /* Strace log generation machinery. * * printing_tcp: tcb which has incomplete line being printed right now. diff --git a/ldt.c b/ldt.c index 7d5c7bf8..6880cc9f 100644 --- a/ldt.c +++ b/ldt.c @@ -33,7 +33,7 @@ #include "defs.h" -#if defined I386 || defined X86_64 || defined X32 +#ifdef HAVE_STRUCT_USER_DESC # include @@ -105,7 +105,7 @@ SYS_FUNC(get_thread_area) return 0; } -#endif /* I386 || X86_64 || X32 */ +#endif /* HAVE_STRUCT_USER_DESC */ #if defined(M68K) || defined(MIPS) SYS_FUNC(set_thread_area) diff --git a/linux/dummy.h b/linux/dummy.h index 4cb9ad46..0aee35b5 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -39,15 +39,18 @@ #define sys_vm86old printargs /* machine-specific */ -#if !(defined I386 || defined X86_64 || defined X32) +#ifndef HAVE_STRUCT_USER_DESC # define sys_modify_ldt printargs -# ifndef M68K -# define sys_get_thread_area printargs -# ifndef MIPS -# define sys_set_thread_area printargs -# endif -# endif #endif + +#if !(defined HAVE_STRUCT_USER_DESC || defined M68K || defined MIPS) +# define sys_set_thread_area printargs +#endif + +#if !(defined HAVE_STRUCT_USER_DESC || defined M68K) +# define sys_get_thread_area printargs +#endif + #ifdef ALPHA # define sys_getdtablesize printargs #endif