]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add configure check for arm64 user_regs_struct.
authorMark Wielaard <mark@klomp.org>
Fri, 18 Jul 2014 20:45:37 +0000 (20:45 +0000)
committerMark Wielaard <mark@klomp.org>
Fri, 18 Jul 2014 20:45:37 +0000 (20:45 +0000)
old glibc defined kernel user_pt_regs, but newer glibc instead
define user_regs_struct. Add a configure test to see what we need.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14176

configure.ac
coregrind/vgdb-invoker-ptrace.c

index c91ea9464425f1aaab5fb3a194eabfc3a62c42bb..238e62414443e1f3f29d25ec03fc26f4778ceb93 100644 (file)
@@ -1461,6 +1461,22 @@ AC_LANG(C)
 
 AM_CONDITIONAL(CXX_CAN_INCLUDE_THREAD_HEADER, test x$ac_cxx_can_include_thread_header = xyes)
 
+
+# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
+# of the user_regs_struct from sys/user.h. They are structurally the same
+# but we get either one or the other.
+
+AC_CHECK_TYPE([struct user_regs_struct],
+              [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
+              [[#include <sys/ptrace.h>]
+               [#include <sys/time.h>]
+               [#include <sys/user.h>]])
+if test "$sys_user_has_user_regs" = "yes"; then
+  AC_DEFINE(HAVE_SYS_USER_REGS, 1,
+            [Define to 1 if <sys/user.h> defines struct user_regs_struct])
+fi
+
+
 #----------------------------------------------------------------------------
 # Checking for supported compiler flags.
 #----------------------------------------------------------------------------
index 0ad631a44641a87fda97d3d4f980d44276832a8d..acb4d0dac92f50fa19b036ee661e9f0330813e29 100644 (file)
@@ -515,7 +515,13 @@ void detach_from_all_threads (pid_t pid)
 }
 
 #  if defined(VGA_arm64)
+/* arm64 is extra special, old glibc defined kernel user_pt_regs, but
+   newer glibc instead define user_regs_struct. */
+#    ifdef HAVE_SYS_USER_REGS
+static struct user_regs_struct user_save;
+#    else
 static struct user_pt_regs user_save;
+#    endif
 #  else
 static struct user user_save;
 #  endif
@@ -783,7 +789,13 @@ Bool invoker_invoke_gdbserver (pid_t pid)
    long res;
    Bool stopped;
 #  if defined(VGA_arm64)
+/* arm64 is extra special, old glibc defined kernel user_pt_regs, but
+   newer glibc instead define user_regs_struct. */
+#    ifdef HAVE_SYS_USER_REGS
+   struct user_regs_struct user_mod;
+#    else
    struct user_pt_regs user_mod;
+#    endif
 #  else
    struct user user_mod;
 #  endif