diff options
author | Yao Qi <yao.qi@linaro.org> | 2016-11-22 14:05:05 +0000 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2016-11-22 14:05:05 +0000 |
commit | cd76b525eda02c30c4412698a2ff309b975d417a (patch) | |
tree | b728a315626ee8247604152f0ea03f5b112d709a /gdb/sparc-tdep.c | |
parent | 3889f4909e0db5f5ca8ca043ef9825f0ad971fd6 (diff) | |
download | gdb-cd76b525eda02c30c4412698a2ff309b975d417a.zip gdb-cd76b525eda02c30c4412698a2ff309b975d417a.tar.gz gdb-cd76b525eda02c30c4412698a2ff309b975d417a.tar.bz2 |
gdbarch software_single_step frame_info to regcache: sparc
gdb:
2016-11-22 Yao Qi <yao.qi@linaro.org>
* sparc-tdep.c (sparc_analyze_control_transfer): Replace parameter
frame with regcache. Call get_current_frame.
(sparc_software_single_step): Call get_regcache_arch instead of
get_frame_arch. Call regcache_raw_get_unsigned instead of
get_frame_register_unsigned.
Diffstat (limited to 'gdb/sparc-tdep.c')
-rw-r--r-- | gdb/sparc-tdep.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index ea2435e..18b627d 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -1501,7 +1501,7 @@ sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum, software single-step mechanism. */ static CORE_ADDR -sparc_analyze_control_transfer (struct frame_info *frame, +sparc_analyze_control_transfer (struct regcache *regcache, CORE_ADDR pc, CORE_ADDR *npc) { unsigned long insn = sparc_fetch_instruction (pc); @@ -1552,8 +1552,11 @@ sparc_analyze_control_transfer (struct frame_info *frame, } else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a) { + struct frame_info *frame = get_current_frame (); + /* Trap instruction (TRAP). */ - return gdbarch_tdep (get_frame_arch (frame))->step_trap (frame, insn); + return gdbarch_tdep (get_regcache_arch (regcache))->step_trap (frame, + insn); } /* FIXME: Handle DONE and RETRY instructions. */ @@ -1602,19 +1605,19 @@ sparc_step_trap (struct frame_info *frame, unsigned long insn) static VEC (CORE_ADDR) * sparc_software_single_step (struct frame_info *frame) { - struct gdbarch *arch = get_frame_arch (frame); + struct regcache *regcache = get_current_regcache (); + struct gdbarch *arch = get_regcache_arch (regcache); struct gdbarch_tdep *tdep = gdbarch_tdep (arch); - struct address_space *aspace = get_frame_address_space (frame); CORE_ADDR npc, nnpc; CORE_ADDR pc, orig_npc; VEC (CORE_ADDR) *next_pcs = NULL; - pc = get_frame_register_unsigned (frame, tdep->pc_regnum); - orig_npc = npc = get_frame_register_unsigned (frame, tdep->npc_regnum); + pc = regcache_raw_get_unsigned (regcache, tdep->pc_regnum); + orig_npc = npc = regcache_raw_get_unsigned (regcache, tdep->npc_regnum); /* Analyze the instruction at PC. */ - nnpc = sparc_analyze_control_transfer (frame, pc, &npc); + nnpc = sparc_analyze_control_transfer (regcache, pc, &npc); if (npc != 0) VEC_safe_push (CORE_ADDR, next_pcs, npc); |