run copyright.sh for 2011.
[deliverable/binutils-gdb.git] / gdb / inf-loop.c
index 94ced19ad980c484e1c7f2b5196bfb63e192c658..42a16e0455441beb64e9b535bbd2fac9e4a9b9fc 100644 (file)
@@ -1,5 +1,6 @@
 /* Handling of inferior events for the event loop for GDB, the GNU debugger.
-   Copyright (C) 1999, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2007, 2008, 2009, 2010, 2011
+   Free Software Foundation, Inc.
    Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
 
    This file is part of GDB.
@@ -46,13 +47,14 @@ inferior_event_handler (enum inferior_event_type event_type,
 {
   struct gdb_exception e;
   int was_sync = 0;
+
   switch (event_type)
     {
     case INF_ERROR:
       printf_unfiltered (_("error detected from target.\n"));
-      target_async (NULL, 0);
-      pop_target ();
-      do_all_continuations (1);
+      pop_all_targets_above (file_stratum, 0);
+      discard_all_intermediate_continuations ();
+      discard_all_continuations ();
       async_enable_stdin ();
       break;
 
@@ -64,9 +66,9 @@ inferior_event_handler (enum inferior_event_type event_type,
       if (!catch_errors (fetch_inferior_event_wrapper, 
                         client_data, "", RETURN_MASK_ALL))
        {
-         target_async (NULL, 0);
-         pop_target ();
-         do_all_continuations (1);
+         pop_all_targets_above (file_stratum, 0);
+         discard_all_intermediate_continuations ();
+         discard_all_continuations ();
          async_enable_stdin ();
          display_gdb_prompt (0);
        }
@@ -89,6 +91,11 @@ inferior_event_handler (enum inferior_event_type event_type,
       was_sync = sync_execution;
       async_enable_stdin ();
 
+      /* Do all continuations associated with the whole inferior (not
+        a particular thread).  */
+      if (!ptid_equal (inferior_ptid, null_ptid))
+       do_all_inferior_continuations ();
+
       /* If we were doing a multi-step (eg: step n, next n), but it
         got interrupted by a breakpoint, still do the pending
         continuations.  The continuation itself is responsible for
@@ -96,13 +103,23 @@ inferior_event_handler (enum inferior_event_type event_type,
         touch the inferior memory, e.g. to remove breakpoints, so run
         them before running breakpoint commands, which may resume the
         target.  */
-      do_all_intermediate_continuations (0);
+      if (non_stop
+         && target_has_execution
+         && !ptid_equal (inferior_ptid, null_ptid))
+       do_all_intermediate_continuations_thread (inferior_thread ());
+      else
+       do_all_intermediate_continuations ();
 
       /* Always finish the previous command before running any
         breakpoint commands.  Any stop cancels the previous command.
         E.g. a "finish" or "step-n" command interrupted by an
         unrelated breakpoint is canceled.  */
-      do_all_continuations (0);
+      if (non_stop
+         && target_has_execution
+         && !ptid_equal (inferior_ptid, null_ptid))
+       do_all_continuations_thread (inferior_thread ());
+      else
+       do_all_continuations ();
 
       if (current_language != expected_language
          && language_mode == language_mode_auto)
@@ -113,29 +130,24 @@ inferior_event_handler (enum inferior_event_type event_type,
         be informed.  */
       TRY_CATCH (e, RETURN_MASK_ALL)
        {
-         bpstat_do_actions (&stop_bpstat);
+         bpstat_do_actions ();
        }
 
-      /* If no breakpoint command resumed the inferior, prepare for
-        interaction with the user.  */
-      if (!is_running (inferior_ptid))
-       {
-         if (was_sync)
-           {
-             display_gdb_prompt (0);
-           }
-         else
-           {
-             if (exec_done_display_p)
-               printf_unfiltered (_("completed.\n"));
-           }
-       }
+      if (!was_sync
+         && exec_done_display_p
+         && (ptid_equal (inferior_ptid, null_ptid)
+             || !is_running (inferior_ptid)))
+       printf_unfiltered (_("completed.\n"));
       break;
 
     case INF_EXEC_CONTINUE:
       /* Is there anything left to do for the command issued to
          complete? */
-      do_all_intermediate_continuations (0);
+
+      if (non_stop)
+       do_all_intermediate_continuations_thread (inferior_thread ());
+      else
+       do_all_intermediate_continuations ();
       break;
 
     case INF_QUIT_REQ: 
This page took 0.025306 seconds and 4 git commands to generate.