summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2014-01-04 23:28:33 +0100
committerMark Wielaard <[email protected]>2014-01-04 23:28:33 +0100
commit70c3a53baa06b6cdee6e92bd673c1cf977066bc1 (patch)
treead91972832cd09e80015250ba72671f256ca8f1d
parent0c4a868fa4c3e2a45663a78cc6d1e31089c3b0dc (diff)
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 <[email protected]>
-rw-r--r--tests/ChangeLog12
-rw-r--r--tests/backtrace-data.c2
-rw-r--r--tests/backtrace-dwarf.c13
-rw-r--r--tests/backtrace.c13
4 files changed, 15 insertions, 25 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 0c112cf2..63b7bed7 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,5 +1,17 @@
2014-01-04 Mark Wielaard <[email protected]>
+ * 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 <[email protected]>
+
* 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 9fa3c4a9..dd74160a 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 3a3e7632..f75e1202 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 64f90c43..758dfed6 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);