From: Philippe Waroquiers Date: Sat, 3 Aug 2013 20:34:58 +0000 (+0000) Subject: Update configure machinery to detect PTRACE_GETREGS X-Git-Tag: svn/VALGRIND_3_9_0~209 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=db725f0f656c641fb6ea31c18126016f2642b2f1;p=thirdparty%2Fvalgrind.git Update configure machinery to detect PTRACE_GETREGS Using #ifdef PTRACE_GETREGS gives difficulties as in some platforms (e.g. mips) PTRACE_GETREGS is not defined as a preprocessor symbols unless linux/ptrace.h is included. However, including linux/ptrace.h causes compilation error on some other platforms => better detect that PTRACE_GETREGS can be used using the configure machinery. This should make vgdb PTRACE_GETREGS working again on various platforms (x86/amd64/mips/...) as PTRACE_GETREGS was disabled on all of these following r13471 git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13482 --- diff --git a/configure.in b/configure.in index 232ddcbc8b..6ac32b0410 100644 --- a/configure.in +++ b/configure.in @@ -1040,6 +1040,25 @@ AC_MSG_RESULT([no]) AM_CONDITIONAL([HAVE_GNU_STPNCPY], [test x$ac_have_gnu_stpncpy = xyes]) +# Check for PTRACE_GETREGS + +AC_MSG_CHECKING([for PTRACE_GETREGS]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +#include +]], [[ + void *p; + long res = ptrace (PTRACE_GETREGS, 0, p, p); +]])], [ +AC_MSG_RESULT([yes]) +AC_DEFINE([HAVE_PTRACE_GETREGS], 1, + [Define to 1 if you have the `PTRACE_GETREGS' ptrace request.]) +], [ +AC_MSG_RESULT([no]) +]) + + # Check for CLOCK_MONOTONIC AC_MSG_CHECKING([for CLOCK_MONOTONIC]) diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c index 2df024f246..bfd9a75eba 100644 --- a/coregrind/vgdb.c +++ b/coregrind/vgdb.c @@ -691,7 +691,7 @@ static struct user user_save; // runtime check not yet done. // 0 : PTRACE_GETREGS runtime check has failed. // 1 : PTRACE_GETREGS defined and runtime check ok. -#ifdef PTRACE_GETREGS +#ifdef HAVE_PTRACE_GETREGS static int has_working_ptrace_getregs = -1; #endif @@ -702,7 +702,7 @@ static Bool getregs (int pid, void *regs, long regs_bsz) { DEBUG(1, "getregs regs_bsz %ld\n", regs_bsz); -# ifdef PTRACE_GETREGS +# ifdef HAVE_PTRACE_GETREGS if (has_working_ptrace_getregs) { // Platforms having GETREGS long res; @@ -773,7 +773,7 @@ Bool setregs (int pid, void *regs, long regs_bsz) DEBUG(1, "setregs regs_bsz %ld\n", regs_bsz); // Note : the below is checking for GETREGS, not SETREGS // as if one is defined and working, the other one should also work. -# ifdef PTRACE_GETREGS +# ifdef HAVE_PTRACE_GETREGS if (has_working_ptrace_getregs) { // Platforms having SETREGS long res;