From 61a31a67699c3604f4e0edbd6cbc0e0e9cc772cc Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 10 Mar 2013 18:07:57 +0000 Subject: [PATCH] gdb/ * common/linux-ptrace.c (linux_ptrace_test_ret_to_nx): Call also kill for CHILD, ignore PTRACE_KILL errors, move the inner block variable kill_status to outer block. --- gdb/ChangeLog | 6 ++++++ gdb/common/linux-ptrace.c | 38 +++++++++++++++----------------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d88f65c8fe3..5dbee6b02c0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2013-03-10 Jan Kratochvil + + * common/linux-ptrace.c (linux_ptrace_test_ret_to_nx): Call also kill + for CHILD, ignore PTRACE_KILL errors, move the inner block variable + kill_status to outer block. + 2013-03-10 Jan Kratochvil Fix entry-values if the callee called a noreturn function. diff --git a/gdb/common/linux-ptrace.c b/gdb/common/linux-ptrace.c index e1001c67290..d5ac061ccb7 100644 --- a/gdb/common/linux-ptrace.c +++ b/gdb/common/linux-ptrace.c @@ -74,7 +74,7 @@ linux_ptrace_test_ret_to_nx (void) pid_t child, got_pid; gdb_byte *return_address, *pc; long l; - int status; + int status, kill_status; return_address = mmap (NULL, 2, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); @@ -177,32 +177,24 @@ linux_ptrace_test_ret_to_nx (void) } pc = (void *) (uintptr_t) l; - if (ptrace (PTRACE_KILL, child, NULL, NULL) != 0) + kill (child, SIGKILL); + ptrace (PTRACE_KILL, child, NULL, NULL); + + errno = 0; + got_pid = waitpid (child, &kill_status, 0); + if (got_pid != child) { - warning (_("linux_ptrace_test_ret_to_nx: Cannot PTRACE_KILL: %s"), - strerror (errno)); + warning (_("linux_ptrace_test_ret_to_nx: " + "PTRACE_KILL waitpid returned %ld: %s"), + (long) got_pid, strerror (errno)); return; } - else + if (!WIFSIGNALED (kill_status)) { - int kill_status; - - errno = 0; - got_pid = waitpid (child, &kill_status, 0); - if (got_pid != child) - { - warning (_("linux_ptrace_test_ret_to_nx: " - "PTRACE_KILL waitpid returned %ld: %s"), - (long) got_pid, strerror (errno)); - return; - } - if (!WIFSIGNALED (kill_status)) - { - warning (_("linux_ptrace_test_ret_to_nx: " - "PTRACE_KILL status %d is not WIFSIGNALED!"), - status); - return; - } + warning (_("linux_ptrace_test_ret_to_nx: " + "PTRACE_KILL status %d is not WIFSIGNALED!"), + status); + return; } /* + 1 is there as x86* stops after the 'int3' instruction. */ -- 2.30.2