summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2003-06-05 14:26:58 +0000
committerDaniel Jacobowitz <dan@debian.org>2003-06-05 14:26:58 +0000
commit5f74e6eca785b0394d15e44fb4e1827472926005 (patch)
tree845951ff93777406dc89b3119ea2a1b18772c33e
parent272c07045b06bf05000ca07924f29270033b7702 (diff)
downloadgdb-5f74e6eca785b0394d15e44fb4e1827472926005.tar.gz
* 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.
-rw-r--r--gdb/gdbserver/ChangeLog10
-rw-r--r--gdb/gdbserver/linux-low.c25
-rw-r--r--gdb/gdbserver/remote-utils.c6
-rw-r--r--gdb/gdbserver/target.h3
4 files changed, 36 insertions, 8 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 7e998d094ed..3a324d630f2 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,13 @@
+2003-06-05 Daniel Jacobowitz <drow@mvista.com>
+
+ * 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 <jimb@redhat.com>
* 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 aad2ecdafa5..4ad204ed3ac 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 d5699379bd5..eb56c1039a8 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 e554c0ac7e1..c09ac8da73d 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;