Fixed segfault in traced process when receiving a signal
Specifically, when a signal was received while enabling a breakpoint
diff --git a/sysdeps/linux-gnu/trace.c b/sysdeps/linux-gnu/trace.c
index f348fc8..a90d46a 100644
--- a/sysdeps/linux-gnu/trace.c
+++ b/sysdeps/linux-gnu/trace.c
@@ -197,13 +197,25 @@
void
continue_after_signal(pid_t pid, int signum) {
- /* We should always trace syscalls to be able to control fork(), clone(), execve()... */
- ptrace(PTRACE_SYSCALL, pid, 0, signum);
+ struct process *proc;
+
+ proc = pid2proc(pid);
+ if (proc && proc->breakpoint_being_enabled) {
+#if defined __sparc__ || defined __ia64___
+ ptrace(PTRACE_SYSCALL, pid, 0, signum);
+#else
+ ptrace(PTRACE_SINGLESTEP, pid, 0, signum);
+#endif
+ } else {
+ ptrace(PTRACE_SYSCALL, pid, 0, signum);
+ }
}
void
continue_process(pid_t pid) {
- continue_after_signal(pid, 0);
+ /* We always trace syscalls to control fork(), clone(), execve()... */
+
+ ptrace(PTRACE_SYSCALL, pid, 0, 0);
}
void