diff options
Diffstat (limited to 'gdb/aarch64-tdep.c')
-rw-r--r-- | gdb/aarch64-tdep.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index a1daa9a..d8349e4 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -3371,14 +3371,21 @@ void aarch64_displaced_step_fixup (struct gdbarch *gdbarch, struct displaced_step_copy_insn_closure *dsc_, CORE_ADDR from, CORE_ADDR to, - struct regcache *regs) + struct regcache *regs, bool completed_p) { - aarch64_displaced_step_copy_insn_closure *dsc - = (aarch64_displaced_step_copy_insn_closure *) dsc_; + CORE_ADDR pc = regcache_read_pc (regs); - ULONGEST pc; + /* If the displaced instruction didn't complete successfully then all we + need to do is restore the program counter. */ + if (!completed_p) + { + pc = from + (pc - to); + regcache_write_pc (regs, pc); + return; + } - regcache_cooked_read_unsigned (regs, AARCH64_PC_REGNUM, &pc); + aarch64_displaced_step_copy_insn_closure *dsc + = (aarch64_displaced_step_copy_insn_closure *) dsc_; displaced_debug_printf ("PC after stepping: %s (was %s).", paddress (gdbarch, pc), paddress (gdbarch, to)); |