diff options
author | Daniel Jacobowitz <drow@false.org> | 2008-05-01 18:50:14 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2008-05-01 18:50:14 +0000 |
commit | a0ef42744d050b642351a3974faca030269f5504 (patch) | |
tree | c0e178b652d3d2b7d98a598b7e2bb4c35dcf8161 /gdb/infrun.c | |
parent | ca38c58efa3ca0ac1f632640c131db93164ac5f2 (diff) | |
download | gdb-a0ef42744d050b642351a3974faca030269f5504.zip gdb-a0ef42744d050b642351a3974faca030269f5504.tar.gz gdb-a0ef42744d050b642351a3974faca030269f5504.tar.bz2 |
2008-05-01 Daniel Jacobowitz <dan@codesourcery.com>
Pedro Alves <pedro@codesourcery.com>
Based on work by Jan Kratochvil <jan.kratochvil@redhat.com> and Jeff
Johnston <jjohnstn@redhat.com>.
* NEWS: Mention attach to stopped process fix.
* infcmd.c (detach_command, disconnect_command): Discard the thread
list.
* infrun.c (handle_inferior_event): Do not ignore non-SIGSTOP while
attaching. Use signal_stop_state.
(signal_stop_state): Check stop_soon.
* linux-nat.c (kill_lwp): Declare earlier.
(pid_is_stopped, linux_nat_post_attach_wait): New.
(lin_lwp_attach_lwp): Use linux_nat_post_attach_wait. Update
comments.
(linux_nat_attach): Use linux_nat_post_attach_wait.
(detach_callback, linux_nat_detach): Improve handling for signalled
processes.
(linux_nat_pid_to_str): Always print out the LWP ID if it differs
from the process ID.
* Makefile.in (infcmd.o): Update.
2008-05-01 Jan Kratochvil <jan.kratochvil@redhat.com>
Daniel Jacobowitz <dan@codesourcery.com>
* gdb.threads/attach-into-signal.c, gdb.threads/attach-into-signal.exp,
gdb.threads/attach-stopped.c, gdb.threads/attach-stopped.exp,
gdb.threads/attachstop-mt.c, gdb.threads/attachstop-mt.exp: New.
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r-- | gdb/infrun.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/gdb/infrun.c b/gdb/infrun.c index f576a59..16a802b 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1946,13 +1946,15 @@ handle_inferior_event (struct execution_control_state *ecs) /* This originates from attach_command(). We need to overwrite the stop_signal here, because some kernels don't ignore a - SIGSTOP in a subsequent ptrace(PTRACE_SONT,SOGSTOP) call. - See more comments in inferior.h. */ - if (stop_soon == STOP_QUIETLY_NO_SIGSTOP) + SIGSTOP in a subsequent ptrace(PTRACE_CONT,SIGSTOP) call. + See more comments in inferior.h. On the other hand, if we + get a non-SIGSTOP, report it to the user - assume the backend + will handle the SIGSTOP if it should show up later. */ + if (stop_soon == STOP_QUIETLY_NO_SIGSTOP + && stop_signal == TARGET_SIGNAL_STOP) { stop_stepping (ecs); - if (stop_signal == TARGET_SIGNAL_STOP) - stop_signal = TARGET_SIGNAL_0; + stop_signal = TARGET_SIGNAL_0; return; } @@ -2023,7 +2025,7 @@ process_event_stop_test: target_terminal_ours_for_output (); print_stop_reason (SIGNAL_RECEIVED, stop_signal); } - if (signal_stop[stop_signal]) + if (signal_stop_state (stop_signal)) { stop_stepping (ecs); return; @@ -3276,7 +3278,9 @@ hook_stop_stub (void *cmd) int signal_stop_state (int signo) { - return signal_stop[signo]; + /* Always stop on signals if we're just gaining control of the + program. */ + return signal_stop[signo] || stop_soon != NO_STOP_QUIETLY; } int |