From e5379b03cf80d6b0bd9a8d7dd03e2220a61956a2 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Thu, 5 Jun 2003 14:26:58 +0000 Subject: * linux-low.c (linux_wait_for_event): Correct comment typos. (linux_resume_one_process): Call check_removed_breakpoint. (linux_send_signal): New function. (linux_target_ops): Add linux_send_signal. * remote-utils.c (putpkt, input_interrupt): Use send_signal instead of kill. * target.h (struct target_ops): Add send_signal. --- gdb/gdbserver/ChangeLog | 10 ++++++++++ gdb/gdbserver/linux-low.c | 25 +++++++++++++++++++++---- gdb/gdbserver/remote-utils.c | 6 ++---- gdb/gdbserver/target.h | 3 +++ 4 files changed, 36 insertions(+), 8 deletions(-) (limited to 'gdb') diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 7e998d0..3a324d6 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,13 @@ +2003-06-05 Daniel Jacobowitz + + * linux-low.c (linux_wait_for_event): Correct comment typos. + (linux_resume_one_process): Call check_removed_breakpoint. + (linux_send_signal): New function. + (linux_target_ops): Add linux_send_signal. + * remote-utils.c (putpkt, input_interrupt): Use send_signal instead + of kill. + * target.h (struct target_ops): Add send_signal. + 2003-05-29 Jim Blandy * linux-low.c (usr_store_inferior_registers): Transfer buf in diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index aad2ecd..4ad204e 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -399,7 +399,7 @@ linux_wait_for_event (struct thread_info *child) /* Check for a process with a pending status. */ /* It is possible that the user changed the pending task's registers since it stopped. We correctly handle the change of PC if we hit a breakpoint - (in check_removed_breakpoints); signals should be reported anyway. */ + (in check_removed_breakpoint); signals should be reported anyway. */ if (child == NULL) { event_child = (struct process_info *) @@ -541,7 +541,7 @@ linux_wait_for_event (struct thread_info *child) if (check_breakpoints (stop_pc) != 0) { /* We hit one of our own breakpoints. We mark it as a pending - breakpoint, so that check_removed_breakpoints () will do the PC + breakpoint, so that check_removed_breakpoint () will do the PC adjustment for us at the appropriate time. */ event_child->pending_is_breakpoint = 1; event_child->pending_stop_pc = stop_pc; @@ -587,7 +587,7 @@ linux_wait_for_event (struct thread_info *child) will give us a new action for this thread, but clear it for consistency anyway. It's safe to clear the stepping flag because the only consumer of get_stop_pc () after this point - is check_removed_breakpoints, and pending_is_breakpoint is not + is check_removed_breakpoint, and pending_is_breakpoint is not set. It might be wiser to use a step_completed flag instead. */ if (event_child->stepping) { @@ -786,7 +786,7 @@ linux_resume_one_process (struct inferior_list_entry *entry, process->pending_signals = p_sig; } - if (process->status_pending_p) + if (process->status_pending_p && !check_removed_breakpoint (process)) return; saved_inferior = current_inferior; @@ -1228,6 +1228,22 @@ linux_look_up_symbols (void) #endif } +static void +linux_send_signal (int signum) +{ + extern int signal_pid; + + if (cont_thread > 0) + { + struct process_info *process; + + process = get_thread_process (current_inferior); + kill (process->lwpid, signum); + } + else + kill (signal_pid, signum); +} + static struct target_ops linux_target_ops = { linux_create_inferior, @@ -1241,6 +1257,7 @@ static struct target_ops linux_target_ops = { linux_read_memory, linux_write_memory, linux_look_up_symbols, + linux_send_signal, }; static void diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c index d569937..eb56c10 100644 --- a/gdb/gdbserver/remote-utils.c +++ b/gdb/gdbserver/remote-utils.c @@ -46,8 +46,6 @@ static int remote_desc; extern int using_threads; extern int debug_threads; -extern int signal_pid; - /* Open a connection to a remote debugger. NAME is the filename used for communication. */ @@ -326,7 +324,7 @@ putpkt (char *buf) /* Check for an input interrupt while we're here. */ if (buf3[0] == '\003') - kill (signal_pid, SIGINT); + (*the_target->send_signal) (SIGINT); } while (buf3[0] != '+'); @@ -363,7 +361,7 @@ input_interrupt (int unused) return; } - kill (signal_pid, SIGINT); + (*the_target->send_signal) (SIGINT); } } diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h index e554c0a..c09ac8d 100644 --- a/gdb/gdbserver/target.h +++ b/gdb/gdbserver/target.h @@ -104,6 +104,9 @@ struct target_ops symbols. */ void (*look_up_symbols) (void); + + /* Send a signal to the inferior process, however is appropriate. */ + void (*send_signal) (int); }; extern struct target_ops *the_target; -- cgit v1.1