gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 10 Mar 2013 18:07:57 +0000 (18:07 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 10 Mar 2013 18:07:57 +0000 (18:07 +0000)
* 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
gdb/common/linux-ptrace.c

index d88f65c..5dbee6b 100644 (file)
@@ -1,5 +1,11 @@
 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.
        * dwarf2-frame-tailcall.c (dwarf2_tailcall_sniffer_first): Use
        get_frame_address_in_block.  Add new comment.
index e1001c6..d5ac061 100644 (file)
@@ -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.  */