* infrun.c (handle_inferior_event): Do not look up regcache
authorUlrich Weigand <uweigand@de.ibm.com>
Mon, 8 Feb 2010 19:50:04 +0000 (19:50 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Mon, 8 Feb 2010 19:50:04 +0000 (19:50 +0000)
for exited processes.

gdb/ChangeLog
gdb/infrun.c

index b5e75e0..f06ec83 100644 (file)
@@ -1,3 +1,8 @@
+2010-02-08  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * infrun.c (handle_inferior_event): Do not look up regcache
+       for exited processes.
+
 Mon Feb  8 13:17:10 2010  Chris Moller  <moller@mollerware.com>
 
        PR gdb/10728
index 8307986..a715596 100644 (file)
@@ -2664,7 +2664,6 @@ handle_inferior_event (struct execution_control_state *ecs)
 {
   struct frame_info *frame;
   struct gdbarch *gdbarch;
-  struct regcache *regcache;
   int sw_single_step_trap_p = 0;
   int stopped_by_watchpoint;
   int stepped_after_stopped_by_watchpoint = 0;
@@ -2735,18 +2734,21 @@ handle_inferior_event (struct execution_control_state *ecs)
      non-executable stack.  This happens for call dummy breakpoints
      for architectures like SPARC that place call dummies on the
      stack.  */
-  regcache = get_thread_regcache (ecs->ptid);
   if (ecs->ws.kind == TARGET_WAITKIND_STOPPED
       && (ecs->ws.value.sig == TARGET_SIGNAL_ILL
          || ecs->ws.value.sig == TARGET_SIGNAL_SEGV
-         || ecs->ws.value.sig == TARGET_SIGNAL_EMT)
-      && breakpoint_inserted_here_p (get_regcache_aspace (regcache),
-                                    regcache_read_pc (regcache)))
+         || ecs->ws.value.sig == TARGET_SIGNAL_EMT))
     {
-      if (debug_infrun)
-       fprintf_unfiltered (gdb_stdlog,
-                           "infrun: Treating signal as SIGTRAP\n");
-      ecs->ws.value.sig = TARGET_SIGNAL_TRAP;
+      struct regcache *regcache = get_thread_regcache (ecs->ptid);
+
+      if (breakpoint_inserted_here_p (get_regcache_aspace (regcache),
+                                     regcache_read_pc (regcache)))
+       {
+         if (debug_infrun)
+           fprintf_unfiltered (gdb_stdlog,
+                               "infrun: Treating signal as SIGTRAP\n");
+         ecs->ws.value.sig = TARGET_SIGNAL_TRAP;
+       }
     }
 
   /* Mark the non-executing threads accordingly.  In all-stop, all