gdb: fix python/lib/gdb/__init__.py formatting
[deliverable/binutils-gdb.git] / gdb / infrun.c
index 427c694bb7606452d3099c8973ad978428adebb0..9469b74af397dac9a3d47e362a49107e4e25cd67 100644 (file)
@@ -521,6 +521,9 @@ holding the child stopped.  Try \"set detach-on-fork\" or \
                 breakpoint.  If a "cloned-VM" event was propagated
                 better throughout the core, this wouldn't be
                 required.  */
+             scoped_restore restore_in_initial_library_scan
+               = make_scoped_restore (&child_inf->in_initial_library_scan,
+                                      true);
              solib_create_inferior_hook (0);
            }
        }
@@ -656,6 +659,8 @@ holding the child stopped.  Try \"set detach-on-fork\" or \
             shared libraries, and install the solib event breakpoint.
             If a "cloned-VM" event was propagated better throughout
             the core, this wouldn't be required.  */
+         scoped_restore restore_in_initial_library_scan
+           = make_scoped_restore (&child_inf->in_initial_library_scan, true);
          solib_create_inferior_hook (0);
        }
 
@@ -3665,8 +3670,7 @@ do_target_wait_1 (inferior *inf, ptid_t ptid,
    more events.  Polls for events from all inferiors/targets.  */
 
 static bool
-do_target_wait (ptid_t wait_ptid, execution_control_state *ecs,
-               target_wait_flags options)
+do_target_wait (execution_control_state *ecs, target_wait_flags options)
 {
   int num_inferiors = 0;
   int random_selector;
@@ -3676,10 +3680,9 @@ do_target_wait (ptid_t wait_ptid, execution_control_state *ecs,
      polling the rest of the inferior list starting from that one in a
      circular fashion until the whole list is polled once.  */
 
-  auto inferior_matches = [&wait_ptid] (inferior *inf)
+  auto inferior_matches = [] (inferior *inf)
     {
-      return (inf->process_target () != NULL
-             && ptid_t (inf->pid).matches (wait_ptid));
+      return inf->process_target () != nullptr;
     };
 
   /* First see how many matching inferiors we have.  */
@@ -3718,7 +3721,7 @@ do_target_wait (ptid_t wait_ptid, execution_control_state *ecs,
 
   auto do_wait = [&] (inferior *inf)
   {
-    ecs->ptid = do_target_wait_1 (inf, wait_ptid, &ecs->ws, options);
+    ecs->ptid = do_target_wait_1 (inf, minus_one_ptid, &ecs->ws, options);
     ecs->target = inf->process_target ();
     return (ecs->ws.kind != TARGET_WAITKIND_IGNORE);
   };
@@ -4075,7 +4078,7 @@ fetch_inferior_event ()
        the event.  */
     scoped_disable_commit_resumed disable_commit_resumed ("handling event");
 
-    if (!do_target_wait (minus_one_ptid, ecs, TARGET_WNOHANG))
+    if (!do_target_wait (ecs, TARGET_WNOHANG))
       {
        infrun_debug_printf ("do_target_wait returned no event");
        disable_commit_resumed.reset_and_commit ();
@@ -5493,10 +5496,18 @@ handle_inferior_event (struct execution_control_state *ecs)
        struct gdbarch *gdbarch = regcache->arch ();
        inferior *parent_inf = find_inferior_ptid (ecs->target, ecs->ptid);
 
-       /* If this is a fork (child gets its own address space copy) and some
-          displaced step buffers were in use at the time of the fork, restore
-          the displaced step buffer bytes in the child process.  */
-       if (ecs->ws.kind == TARGET_WAITKIND_FORKED)
+       /* If this is a fork (child gets its own address space copy)
+          and some displaced step buffers were in use at the time of
+          the fork, restore the displaced step buffer bytes in the
+          child process.
+
+          Architectures which support displaced stepping and fork
+          events must supply an implementation of
+          gdbarch_displaced_step_restore_all_in_ptid.  This is not
+          enforced during gdbarch validation to support architectures
+          which support displaced stepping but not forks.  */
+       if (ecs->ws.kind == TARGET_WAITKIND_FORKED
+           && gdbarch_supports_displaced_stepping (gdbarch))
          gdbarch_displaced_step_restore_all_in_ptid
            (gdbarch, parent_inf, ecs->ws.value.related_pid);
 
@@ -7248,7 +7259,7 @@ process_event_stop_test (struct execution_control_state *ecs)
   bool refresh_step_info = true;
   if ((ecs->event_thread->suspend.stop_pc == stop_pc_sal.pc)
       && (ecs->event_thread->current_line != stop_pc_sal.line
-         || ecs->event_thread->current_symtab != stop_pc_sal.symtab))
+         || ecs->event_thread->current_symtab != stop_pc_sal.symtab))
     {
       /* We are at a different line.  */
 
This page took 0.027597 seconds and 4 git commands to generate.