diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 67f5cd4777..e93af27ea0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2013-08-07 Raunaq Bathija + Ulrich Weigand + + * gdb_ptrace.h: Use ptrace64 instead of ptrace if HAVE_PTRACE64 + is defined. + * rs6000-nat.c: Check for __ld_info64_ if compiling 64 BIT gdb. + (rs6000_ptrace32): Call ptrace64 instead of ptrace if present. + (rs6000_ptrace64): Call ptace64 instead of ptracex if present. + * configure.ac: Check for ptrace64. + * configure, config.in: Regenerate. + 2013-08-07 Raunaq Bathija Ulrich Weigand diff --git a/gdb/config.in b/gdb/config.in index 92c278978f..76abd04a09 100644 --- a/gdb/config.in +++ b/gdb/config.in @@ -333,6 +333,9 @@ /* Define if has pstatus_t. */ #undef HAVE_PSTATUS_T +/* Define to 1 if you have the `ptrace64' function. */ +#undef HAVE_PTRACE64 + /* Define if sys/ptrace.h defines the PTRACE_GETFPXREGS request. */ #undef HAVE_PTRACE_GETFPXREGS diff --git a/gdb/configure b/gdb/configure index 4833297971..80678256bf 100755 --- a/gdb/configure +++ b/gdb/configure @@ -10181,7 +10181,7 @@ for ac_func in canonicalize_file_name realpath getrusage getuid getgid \ sigaction sigprocmask sigsetmask socketpair syscall \ ttrace wborder wresize setlocale iconvlist libiconvlist btowc \ setrlimit getrlimit posix_madvise waitpid lstat \ - fdwalk pipe2 + fdwalk pipe2 ptrace64 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/gdb/configure.ac b/gdb/configure.ac index 48f37c89c7..667821f1ec 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -1166,7 +1166,7 @@ AC_CHECK_FUNCS([canonicalize_file_name realpath getrusage getuid getgid \ sigaction sigprocmask sigsetmask socketpair syscall \ ttrace wborder wresize setlocale iconvlist libiconvlist btowc \ setrlimit getrlimit posix_madvise waitpid lstat \ - fdwalk pipe2]) + fdwalk pipe2 ptrace64]) AM_LANGINFO_CODESET # Check the return and argument types of ptrace. No canned test for diff --git a/gdb/gdb_ptrace.h b/gdb/gdb_ptrace.h index 5c2a43314d..053a718586 100644 --- a/gdb/gdb_ptrace.h +++ b/gdb/gdb_ptrace.h @@ -135,7 +135,15 @@ extern PTRACE_TYPE_RET ptrace(); zero. */ #ifdef PTRACE_TYPE_ARG5 -# define ptrace(request, pid, addr, data) ptrace (request, pid, addr, data, 0) +# ifdef HAVE_PTRACE64 +# define ptrace(request, pid, addr, data) \ + ptrace64 (request, pid, addr, data, 0) +# undef PTRACE_TYPE_ARG3 +# define PTRACE_TYPE_ARG3 long long +# else +# define ptrace(request, pid, addr, data) \ + ptrace (request, pid, addr, data, 0) +# endif #endif #endif /* gdb_ptrace.h */ diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index 6769618154..0953356d7f 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -65,7 +65,7 @@ /* In 32-bit compilation mode (which is the only mode from which ptrace() works on 4.3), __ld_info32 is #defined as equivalent to ld_info. */ -#ifdef __ld_info32 +#if defined (__ld_info32) || defined (__ld_info64) # define ARCH3264 #endif @@ -131,7 +131,11 @@ regmap (struct gdbarch *gdbarch, int regno, int *isfloat) static int rs6000_ptrace32 (int req, int id, int *addr, int data, int *buf) { + #ifdef HAVE_PTRACE64 + int ret = ptrace64 (req, id, (long long) addr, data, buf); + #else int ret = ptrace (req, id, (int *)addr, data, buf); + #endif #if 0 printf ("rs6000_ptrace32 (%d, %d, 0x%x, %08x, 0x%x) = 0x%x\n", req, id, (unsigned int)addr, data, (unsigned int)buf, ret); @@ -145,7 +149,11 @@ static int rs6000_ptrace64 (int req, int id, long long addr, int data, void *buf) { #ifdef ARCH3264 + #ifdef HAVE_PTRACE64 + int ret = ptrace64 (req, id, addr, data, buf); + #else int ret = ptracex (req, id, addr, data, buf); + #endif #else int ret = 0; #endif