2010-06-08 Hui Zhu <teawater@gmail.com>
authorHui Zhu <teawater@gmail.com>
Tue, 8 Jun 2010 02:25:31 +0000 (02:25 +0000)
committerHui Zhu <teawater@gmail.com>
Tue, 8 Jun 2010 02:25:31 +0000 (02:25 +0000)
* record.c (record_wait): Move signal out of replay code.

gdb/ChangeLog
gdb/record.c

index 955b848..83d00ab 100644 (file)
@@ -1,3 +1,7 @@
+2010-06-08  Hui Zhu  <teawater@gmail.com>
+
+       * record.c (record_wait): Move signal out of replay code.
+
 2010-06-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix PR 10640.
index 546557d..b3d11b6 100644 (file)
@@ -1069,6 +1069,9 @@ record_wait (struct target_ops *ops,
                        "record_resume_step = %d\n",
                        record_resume_step);
 
+  record_get_sig = 0;
+  signal (SIGINT, record_sig_handler);
+
   if (!RECORD_IS_REPLAY && ops != &record_core_ops)
     {
       if (record_resume_step)
@@ -1088,6 +1091,9 @@ record_wait (struct target_ops *ops,
              ret = record_beneath_to_wait (record_beneath_to_wait_ops,
                                            ptid, status, options);
 
+             if (record_resume_step)
+               return ret;
+
              /* Is this a SIGTRAP?  */
              if (status->kind == TARGET_WAITKIND_STOPPED
                  && status->value.sig == TARGET_SIGNAL_TRAP)
@@ -1183,8 +1189,6 @@ record_wait (struct target_ops *ops,
            }
        }
 
-      record_get_sig = 0;
-      signal (SIGINT, record_sig_handler);
       /* If GDB is in terminal_inferior mode, it will not get the signal.
          And in GDB replay mode, GDB doesn't need to be in terminal_inferior
          mode, because inferior will not executed.
@@ -1298,8 +1302,6 @@ Process record: hit hw watchpoint.\n");
        }
       while (continue_flag);
 
-      signal (SIGINT, handle_sigint);
-
 replay_out:
       if (record_get_sig)
        status->value.sig = TARGET_SIGNAL_INT;
@@ -1312,6 +1314,8 @@ replay_out:
       discard_cleanups (old_cleanups);
     }
 
+  signal (SIGINT, handle_sigint);
+
   do_cleanups (set_cleanups);
   return inferior_ptid;
 }