OSDN Git Service

* infrun.c (adjust_pc_after_break): Do not call get_thread_regcache
authoruweigand <uweigand>
Fri, 22 Aug 2008 14:47:06 +0000 (14:47 +0000)
committeruweigand <uweigand>
Fri, 22 Aug 2008 14:47:06 +0000 (14:47 +0000)
if the thread has already exited.

gdb/ChangeLog
gdb/infrun.c

index 155fb66..c127010 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-22  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * infrun.c (adjust_pc_after_break): Do not call get_thread_regcache
+       if the thread has already exited.
+
 2008-08-22  Pedro Alves  <pedro@codesourcery.com>
 
        * infrun.c (proceed): Move back setting previous_inferior_ptid
index de1827e..d6c49ab 100644 (file)
@@ -1750,15 +1750,10 @@ context_switch_to (ptid_t ptid)
 static void
 adjust_pc_after_break (struct execution_control_state *ecs)
 {
-  struct regcache *regcache = get_thread_regcache (ecs->ptid);
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+  struct regcache *regcache;
+  struct gdbarch *gdbarch;
   CORE_ADDR breakpoint_pc;
 
-  /* If this target does not decrement the PC after breakpoints, then
-     we have nothing to do.  */
-  if (gdbarch_decr_pc_after_break (gdbarch) == 0)
-    return;
-
   /* If we've hit a breakpoint, we'll normally be stopped with SIGTRAP.  If
      we aren't, just return.
 
@@ -1786,6 +1781,13 @@ adjust_pc_after_break (struct execution_control_state *ecs)
   if (ecs->ws.value.sig != TARGET_SIGNAL_TRAP)
     return;
 
+  /* If this target does not decrement the PC after breakpoints, then
+     we have nothing to do.  */
+  regcache = get_thread_regcache (ecs->ptid);
+  gdbarch = get_regcache_arch (regcache);
+  if (gdbarch_decr_pc_after_break (gdbarch) == 0)
+    return;
+
   /* Find the location where (if we've hit a breakpoint) the
      breakpoint would be.  */
   breakpoint_pc = regcache_read_pc (regcache)