From: Ulrich Weigand Date: Wed, 17 Jun 2009 18:33:28 +0000 (+0000) Subject: * infrun.c (cleanup_displaced_step_closure): Remove. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9f5a595d690a517ab5cf8d59f7d6b09125594d52;p=binutils-gdb.git * infrun.c (cleanup_displaced_step_closure): Remove. (displaced_step_clear_cleanup): Move to before displaced_step_prepare. (displaced_step_prepare): Use displaced_step_clear_cleanup instead of cleanup_displaced_step_closure. (handle_inferior_event, keep_going): Use thread architecture instead of current_gdbarch. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 320c1780b3c..b1409cc8674 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2009-06-17 Ulrich Weigand + + * infrun.c (cleanup_displaced_step_closure): Remove. + (displaced_step_clear_cleanup): Move to before displaced_step_prepare. + (displaced_step_prepare): Use displaced_step_clear_cleanup instead + of cleanup_displaced_step_closure. + (handle_inferior_event, keep_going): Use thread architecture instead + of current_gdbarch. + 2009-06-17 Ulrich Weigand * infrun.c (handle_inferior_event): Use current frame architecture diff --git a/gdb/infrun.c b/gdb/infrun.c index ad91a6275d0..da2dc72a386 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -763,11 +763,9 @@ displaced_step_clear (void) } static void -cleanup_displaced_step_closure (void *ptr) +displaced_step_clear_cleanup (void *ignore) { - struct displaced_step_closure *closure = ptr; - - gdbarch_displaced_step_free_closure (current_gdbarch, closure); + displaced_step_clear (); } /* Dump LEN bytes at BUF in hex to FILE, followed by a newline. */ @@ -878,7 +876,15 @@ displaced_step_prepare (ptid_t ptid) /* We don't support the fully-simulated case at present. */ gdb_assert (closure); - make_cleanup (cleanup_displaced_step_closure, closure); + /* Save the information we need to fix things up if the step + succeeds. */ + displaced_step_ptid = ptid; + displaced_step_gdbarch = gdbarch; + displaced_step_closure = closure; + displaced_step_original = original; + displaced_step_copy = copy; + + make_cleanup (displaced_step_clear_cleanup, 0); /* Resume execution at the copy. */ regcache_write_pc (regcache, copy); @@ -891,22 +897,9 @@ displaced_step_prepare (ptid_t ptid) fprintf_unfiltered (gdb_stdlog, "displaced: displaced pc to 0x%s\n", paddr_nz (copy)); - /* Save the information we need to fix things up if the step - succeeds. */ - displaced_step_ptid = ptid; - displaced_step_gdbarch = gdbarch; - displaced_step_closure = closure; - displaced_step_original = original; - displaced_step_copy = copy; return 1; } -static void -displaced_step_clear_cleanup (void *ignore) -{ - displaced_step_clear (); -} - static void write_memory_ptid (ptid_t ptid, CORE_ADDR memaddr, const gdb_byte *myaddr, int len) { @@ -2923,6 +2916,7 @@ targets should add new threads to the thread list themselves in non-stop mode.") if (thread_hop_needed) { + struct regcache *thread_regcache; int remove_status = 0; if (debug_infrun) @@ -2945,7 +2939,8 @@ targets should add new threads to the thread list themselves in non-stop mode.") /* If the arch can displace step, don't remove the breakpoints. */ - if (!use_displaced_stepping (current_gdbarch)) + thread_regcache = get_thread_regcache (ecs->ptid); + if (!use_displaced_stepping (get_regcache_arch (thread_regcache))) remove_status = remove_breakpoints (); /* Did we fail to remove breakpoints? If so, try @@ -4281,7 +4276,8 @@ keep_going (struct execution_control_state *ecs) if (ecs->event_thread->stepping_over_breakpoint) { - if (! use_displaced_stepping (current_gdbarch)) + struct regcache *thread_regcache = get_thread_regcache (ecs->ptid); + if (!use_displaced_stepping (get_regcache_arch (thread_regcache))) /* Since we can't do a displaced step, we have to remove the breakpoint while we step it. To keep things simple, we remove them all. */