aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/infrun.c16
2 files changed, 14 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 155fb66..c127010 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/infrun.c b/gdb/infrun.c
index de1827e..d6c49ab 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -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)