* infrun.c (handle_inferior_event): Also ignore a
authorPedro Alves <palves@redhat.com>
Fri, 11 Jul 2008 17:46:40 +0000 (17:46 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 11 Jul 2008 17:46:40 +0000 (17:46 +0000)
TARGET_SIGNAL_TRAP on a STOP_QUIETLY_NO_SIGSTOP.

gdb/ChangeLog
gdb/infrun.c

index e5c54e6cb11ec6a81a94a90c05fc054311b7ec2c..d7a95ab74505ed52452dda8dcc23b94afee54e9b 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-11  Pedro Alves  <pedro@codesourcery.com>
+
+       * infrun.c (handle_inferior_event): Also ignore a
+       TARGET_SIGNAL_TRAP on a STOP_QUIETLY_NO_SIGSTOP.
+
 2008-07-11  Tom Tromey  <tromey@redhat.com>
 
        * completer.c (complete_line_internal): New function, from
index 44e67900e327fedd769c39c26d2df2a67a0bdc42..d99a40ebbe47f99714bd188b6dac5c25c9ddd9d7 100644 (file)
@@ -2543,13 +2543,20 @@ targets should add new threads to the thread list themselves in non-stop mode.")
        }
 
       /* 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_CONT,SIGSTOP) call.
-         See more comments in inferior.h.  On the other hand, if we
+        the stop_signal here, because some kernels don't ignore a
+        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.  */
+        will handle the SIGSTOP if it should show up later.
+
+        Also consider that the attach is complete when we see a
+        SIGTRAP.  Some systems (e.g. Windows), and stubs supporting
+        target extended-remote report it instead of a SIGSTOP
+        (e.g. gdbserver).  We already rely on SIGTRAP being our
+        signal, so this is no exception.  */
       if (stop_soon == STOP_QUIETLY_NO_SIGSTOP
-         && stop_signal == TARGET_SIGNAL_STOP)
+         && (stop_signal == TARGET_SIGNAL_STOP
+             || stop_signal == TARGET_SIGNAL_TRAP))
        {
          stop_stepping (ecs);
          stop_signal = TARGET_SIGNAL_0;