[PATCH 4/5] tests: Don't use ptrace detach stopped trick. Raise can return.
Mark Wielaard
mjw at redhat.com
Sun Jan 5 21:02:19 UTC 2014
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 at 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 at 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 at 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
More information about the elfutils-devel
mailing list