]> granicus.if.org Git - strace/commitdiff
Rework ifdefery around print_user_desc
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 21 Dec 2016 18:01:21 +0000 (18:01 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 21 Dec 2016 23:35:27 +0000 (23:35 +0000)
* configure.ac (AC_CHECK_TYPES): Check for struct user_desc
in <asm/ldt.h>.
* 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.

clone.c
configure.ac
defs.h
ldt.c
linux/dummy.h

diff --git a/clone.c b/clone.c
index 075bb75c53f3319516e044139f87934e0840faaf..3bc1e22ec7d5407d8fc82441949769f9d2f31b46 100644 (file)
--- a/clone.c
+++ b/clone.c
 # 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=");
index 9f44d12e548a51abf5bec3029a651feb6f8a9593..174d25523c0981bec47978a0d014cafdd46ed9fb 100644 (file)
@@ -295,6 +295,8 @@ AC_CHECK_TYPES([struct stat64, struct __old_kernel_stat],,,
 [#include <sys/types.h>
 #include <asm/stat.h>])
 
+AC_CHECK_TYPES([struct user_desc],,, [#include <asm/ldt.h>])
+
 AC_CHECK_MEMBERS([struct stat.st_mtime_nsec, struct stat64.st_mtime_nsec],,,
 [#include <sys/types.h>
 #include <asm/stat.h>])
diff --git a/defs.h b/defs.h
index 97219df8687c00a71629dc5e6efba66222e74057..7869f9078b31ac758e2b64a9e2ccd74fa16d84a0 100644 (file)
--- 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 7d5c7bf8865dec25848899187849f760f3284d8c..6880cc9fbfc50ec79208e3b4e4d350ec5e8fdc01 100644 (file)
--- 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 <asm/ldt.h>
 
@@ -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)
index 4cb9ad465c947a481df5a067721d6c7aa38c55ec..0aee35b5aa7976106156c5493522b4ced2069ed0 100644 (file)
 #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