* linux-low.c (linux_wait_for_event): Correct comment typos.
authorDaniel Jacobowitz <drow@false.org>
Thu, 5 Jun 2003 14:26:58 +0000 (14:26 +0000)
committerDaniel Jacobowitz <drow@false.org>
Thu, 5 Jun 2003 14:26:58 +0000 (14:26 +0000)
(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
gdb/gdbserver/linux-low.c
gdb/gdbserver/remote-utils.c
gdb/gdbserver/target.h

index 7e998d094ed1f9d6ba5d7ee8a2999e7268aba6f6..3a324d630f245cc744e18b4c5ad5b5888d14b8e5 100644 (file)
@@ -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
index aad2ecdafa564f9cd639b2632198202cd2ab83cd..4ad204ed3acec687bf750337d5b5365b73aeeecf 100644 (file)
@@ -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);
+}
+
 \f
 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
index d5699379bd5f36fd57716398ecb61aac1e07be51..eb56c1039a83c78eda219905a1ce71735501ddfe 100644 (file)
@@ -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);
     }
 }
 
index e554c0ac7e1a9908ba32414e130f0659fd8cfffb..c09ac8da73ddb9496c32563b553b4593acbff93d 100644 (file)
@@ -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;