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.
This commit is contained in:
parent
05c56a9d39
commit
61a31a6769
2 changed files with 21 additions and 23 deletions
|
@ -1,3 +1,9 @@
|
|||
2013-03-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* 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 <jan.kratochvil@redhat.com>
|
||||
|
||||
Fix entry-values if the callee called a noreturn function.
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue