* linux-low.c (linux_wait_for_event): Do not pass signals while
authorDaniel Jacobowitz <drow@false.org>
Tue, 4 Sep 2007 21:30:23 +0000 (21:30 +0000)
committerDaniel Jacobowitz <drow@false.org>
Tue, 4 Sep 2007 21:30:23 +0000 (21:30 +0000)
single-stepping.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c

index 0b5d751fef36ff8764913265d76dd09f655c11d4..13bb16cfe170b37b85f99dd0b6580aa4b0501c96 100644 (file)
@@ -1,3 +1,8 @@
+2007-09-04  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * linux-low.c (linux_wait_for_event): Do not pass signals while
+       single-stepping.
+
 2007-09-03  Pedro Alves  <pedro_alves@portugalmail.pt>
 
        * win32-low.c (create_process): New.
index 7911f2e5558bf1df7aecff1c72bafec067ed391d..aaa09ef819e6e658b96399eefa6744bbc87b6cc4 100644 (file)
@@ -589,12 +589,14 @@ linux_wait_for_event (struct thread_info *child)
       /* If GDB is not interested in this signal, don't stop other
         threads, and don't report it to GDB.  Just resume the
         inferior right away.  We do this for threading-related
-        signals as well as any that GDB specifically requested
-        we ignore.  But never ignore SIGSTOP if we sent it
-        ourselves.  */
+        signals as well as any that GDB specifically requested we
+        ignore.  But never ignore SIGSTOP if we sent it ourselves,
+        and do not ignore signals when stepping - they may require
+        special handling to skip the signal handler.  */
       /* FIXME drow/2002-06-09: Get signal numbers from the inferior's
         thread library?  */
       if (WIFSTOPPED (wstat)
+         && !event_child->stepping
          && ((using_threads && (WSTOPSIG (wstat) == __SIGRTMIN
                                 || WSTOPSIG (wstat) == __SIGRTMIN + 1))
              || (pass_signals[target_signal_from_host (WSTOPSIG (wstat))]