This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 4/5] tests: Don't use ptrace detach stopped trick. Raise can return.


On older kernels the ptrace detach stop trick doesn't work reliably.
Just keep the child processes attached and stopped during the tests,
dwfl_linux_proc_attach will handle that fine now. Also on older kernels
raise would sometimes return anyway and cause a spurious assert. Just
ignore it.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
---
 tests/ChangeLog         | 12 ++++++++++++
 tests/backtrace-data.c  |  2 +-
 tests/backtrace-dwarf.c | 13 +------------
 tests/backtrace.c       | 13 +------------
 4 files changed, 15 insertions(+), 25 deletions(-)

diff --git a/tests/ChangeLog b/tests/ChangeLog
index 0c112cf..63b7bed 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,5 +1,17 @@
 2014-01-04  Mark Wielaard  <mjw@redhat.com>
 
+	* backtrace-data.c (main): Don't assert if raise returns.
+	* backtrace-dwarf.c (report_pid): Call dwfl_linux_proc_attach with
+	assume_ptrace_attached true.
+	(ptrace_detach_stopped): Removed function.
+	(main): Don't call ptrace_detach_stopped.
+	* backtrace.c (ptrace_detach_stopped): Removed function.
+	(report_pid): Call dwfl_linux_proc_attach with assume_ptrace_attached
+	true.
+	(exec_dump): Don't call ptrace_detach_stopped.
+
+2014-01-04  Mark Wielaard  <mjw@redhat.com>
+
 	* backtrace-subr.sh (check_native_core): Skip, exit 77, the test
 	if we cannot adjust core ulimit.
 
diff --git a/tests/backtrace-data.c b/tests/backtrace-data.c
index 9fa3c4a..dd74160 100644
--- a/tests/backtrace-data.c
+++ b/tests/backtrace-data.c
@@ -278,7 +278,7 @@ main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)))
       assert_perror (errno);
       assert (l == 0);
       raise (SIGUSR1);
-      assert (0);
+      return 0;
     default:
       break;
   }
diff --git a/tests/backtrace-dwarf.c b/tests/backtrace-dwarf.c
index 3a3e763..f75e120 100644
--- a/tests/backtrace-dwarf.c
+++ b/tests/backtrace-dwarf.c
@@ -42,7 +42,7 @@ report_pid (Dwfl *dwfl, pid_t pid)
   if (dwfl_report_end (dwfl, NULL, NULL) != 0)
     error (2, 0, "dwfl_report_end: %s", dwfl_errmsg (-1));
 
-  result = dwfl_linux_proc_attach (dwfl, pid, false);
+  result = dwfl_linux_proc_attach (dwfl, pid, true);
   if (result < 0)
     error (2, 0, "dwfl_linux_proc_attach: %s", dwfl_errmsg (-1));
   else if (result > 0)
@@ -106,15 +106,6 @@ thread_callback (Dwfl_Thread *thread, void *thread_arg)
   error (1, 0, "dwfl_thread_getframes: %s", dwfl_errmsg (-1));
 }
 
-static void
-ptrace_detach_stopped (pid_t pid)
-{
-  errno = 0;
-  long l = ptrace (PTRACE_DETACH, pid, NULL, (void *) (intptr_t) SIGSTOP);
-  assert_perror (errno);
-  assert (l == 0);
-}
-
 int
 main (int argc __attribute__ ((unused)), char **argv)
 {
@@ -151,8 +142,6 @@ main (int argc __attribute__ ((unused)), char **argv)
   assert (WIFSTOPPED (status));
   assert (WSTOPSIG (status) == SIGABRT);
 
-  ptrace_detach_stopped (pid);
-
   Dwfl *dwfl = pid_to_dwfl (pid);
   dwfl_getthreads (dwfl, thread_callback, NULL);
 
diff --git a/tests/backtrace.c b/tests/backtrace.c
index 64f90c4..758dfed 100644
--- a/tests/backtrace.c
+++ b/tests/backtrace.c
@@ -260,15 +260,6 @@ prepare_thread (pid_t pid2 __attribute__ ((unused)),
 #define tgkill(pid, tid, sig) syscall (__NR_tgkill, (pid), (tid), (sig))
 
 static void
-ptrace_detach_stopped (pid_t pid)
-{
-  errno = 0;
-  long l = ptrace (PTRACE_DETACH, pid, NULL, (void *) (intptr_t) SIGSTOP);
-  assert_perror (errno);
-  assert (l == 0);
-}
-
-static void
 report_pid (Dwfl *dwfl, pid_t pid)
 {
   int result = dwfl_linux_proc_report (dwfl, pid);
@@ -280,7 +271,7 @@ report_pid (Dwfl *dwfl, pid_t pid)
   if (dwfl_report_end (dwfl, NULL, NULL) != 0)
     error (2, 0, "dwfl_report_end: %s", dwfl_errmsg (-1));
 
-  result = dwfl_linux_proc_attach (dwfl, pid, false);
+  result = dwfl_linux_proc_attach (dwfl, pid, true);
   if (result < 0)
     error (2, 0, "dwfl_linux_proc_attach: %s", dwfl_errmsg (-1));
   else if (result > 0)
@@ -397,8 +388,6 @@ exec_dump (const char *exec)
       prepare_thread (pid2, jmp);
     }
   dwfl_end (dwfl);
-  ptrace_detach_stopped (pid);
-  ptrace_detach_stopped (pid2);
   check_tid = pid2;
   dwfl = pid_to_dwfl (pid);
   dump (dwfl);
-- 
1.8.4.2


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]