gdbarch software_single_step frame_info to regcache: rs6000

gdb:

2016-11-22  Yao Qi  <yao.qi@linaro.org>

	* rs6000-aix-tdep.c (branch_dest): Replace parameter frame with
	regcache.  Call get_regcache_arch instead of get_frame_arch.
	Call regcache_raw_get_unsigned instead of
	get_frame_register_unsigned.
	(rs6000_software_single_step): Likewise.
	* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Call
	get_regcache_arch instead of get_frame_arch.  Call
	regcache_read_pc instead of get_frame_pc.
This commit is contained in:
Yao Qi
2016-11-22 14:05:05 +00:00
parent ad76968956
commit 41e26ad32d
3 changed files with 32 additions and 17 deletions

View File

@@ -1,3 +1,14 @@
2016-11-22 Yao Qi <yao.qi@linaro.org>
* rs6000-aix-tdep.c (branch_dest): Replace parameter frame with
regcache. Call get_regcache_arch instead of get_frame_arch.
Call regcache_raw_get_unsigned instead of
get_frame_register_unsigned.
(rs6000_software_single_step): Likewise.
* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Call
get_regcache_arch instead of get_frame_arch. Call
regcache_read_pc instead of get_frame_pc.
2016-11-22 Yao Qi <yao.qi@linaro.org> 2016-11-22 Yao Qi <yao.qi@linaro.org>
* s390-linux-tdep.c (s390_software_single_step): Call * s390-linux-tdep.c (s390_software_single_step): Call

View File

@@ -597,10 +597,10 @@ rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
/* Calculate the destination of a branch/jump. Return -1 if not a branch. */ /* Calculate the destination of a branch/jump. Return -1 if not a branch. */
static CORE_ADDR static CORE_ADDR
branch_dest (struct frame_info *frame, int opcode, int instr, branch_dest (struct regcache *regcache, int opcode, int instr,
CORE_ADDR pc, CORE_ADDR safety) CORE_ADDR pc, CORE_ADDR safety)
{ {
struct gdbarch *gdbarch = get_frame_arch (frame); struct gdbarch *gdbarch = get_regcache_arch (regcache);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR dest; CORE_ADDR dest;
@@ -633,29 +633,33 @@ branch_dest (struct frame_info *frame, int opcode, int instr,
if (ext_op == 16) /* br conditional register */ if (ext_op == 16) /* br conditional register */
{ {
dest = get_frame_register_unsigned (frame, tdep->ppc_lr_regnum) & ~3; dest = regcache_raw_get_unsigned (regcache, tdep->ppc_lr_regnum) & ~3;
/* If we are about to return from a signal handler, dest is /* If we are about to return from a signal handler, dest is
something like 0x3c90. The current frame is a signal handler something like 0x3c90. The current frame is a signal handler
caller frame, upon completion of the sigreturn system call caller frame, upon completion of the sigreturn system call
execution will return to the saved PC in the frame. */ execution will return to the saved PC in the frame. */
if (dest < AIX_TEXT_SEGMENT_BASE) if (dest < AIX_TEXT_SEGMENT_BASE)
dest = read_memory_unsigned_integer {
(get_frame_base (frame) + SIG_FRAME_PC_OFFSET, struct frame_info *frame = get_current_frame ();
tdep->wordsize, byte_order);
dest = read_memory_unsigned_integer
(get_frame_base (frame) + SIG_FRAME_PC_OFFSET,
tdep->wordsize, byte_order);
}
} }
else if (ext_op == 528) /* br cond to count reg */ else if (ext_op == 528) /* br cond to count reg */
{ {
dest = get_frame_register_unsigned (frame, dest = regcache_raw_get_unsigned (regcache,
tdep->ppc_ctr_regnum) & ~3; tdep->ppc_ctr_regnum) & ~3;
/* If we are about to execute a system call, dest is something /* If we are about to execute a system call, dest is something
like 0x22fc or 0x3b00. Upon completion the system call like 0x22fc or 0x3b00. Upon completion the system call
will return to the address in the link register. */ will return to the address in the link register. */
if (dest < AIX_TEXT_SEGMENT_BASE) if (dest < AIX_TEXT_SEGMENT_BASE)
dest = get_frame_register_unsigned (frame, dest = regcache_raw_get_unsigned (regcache,
tdep->ppc_lr_regnum) & ~3; tdep->ppc_lr_regnum) & ~3;
} }
else else
return -1; return -1;
@@ -672,8 +676,8 @@ branch_dest (struct frame_info *frame, int opcode, int instr,
static VEC (CORE_ADDR) * static VEC (CORE_ADDR) *
rs6000_software_single_step (struct frame_info *frame) rs6000_software_single_step (struct frame_info *frame)
{ {
struct gdbarch *gdbarch = get_frame_arch (frame); struct regcache *regcache = get_current_regcache ();
struct address_space *aspace = get_frame_address_space (frame); struct gdbarch *gdbarch = get_regcache_arch (regcache);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int ii, insn; int ii, insn;
CORE_ADDR loc; CORE_ADDR loc;
@@ -681,7 +685,7 @@ rs6000_software_single_step (struct frame_info *frame)
int opcode; int opcode;
VEC (CORE_ADDR) *next_pcs; VEC (CORE_ADDR) *next_pcs;
loc = get_frame_pc (frame); loc = regcache_read_pc (regcache);
insn = read_memory_integer (loc, 4, byte_order); insn = read_memory_integer (loc, 4, byte_order);
@@ -691,7 +695,7 @@ rs6000_software_single_step (struct frame_info *frame)
breaks[0] = loc + PPC_INSN_SIZE; breaks[0] = loc + PPC_INSN_SIZE;
opcode = insn >> 26; opcode = insn >> 26;
breaks[1] = branch_dest (frame, opcode, insn, loc, breaks[0]); breaks[1] = branch_dest (regcache, opcode, insn, loc, breaks[0]);
/* Don't put two breakpoints on the same address. */ /* Don't put two breakpoints on the same address. */
if (breaks[1] == breaks[0]) if (breaks[1] == breaks[0])

View File

@@ -1146,10 +1146,10 @@ ppc_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
VEC (CORE_ADDR) * VEC (CORE_ADDR) *
ppc_deal_with_atomic_sequence (struct frame_info *frame) ppc_deal_with_atomic_sequence (struct frame_info *frame)
{ {
struct gdbarch *gdbarch = get_frame_arch (frame); struct regcache *regcache = get_current_regcache ();
struct address_space *aspace = get_frame_address_space (frame); struct gdbarch *gdbarch = get_regcache_arch (regcache);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR pc = get_frame_pc (frame); CORE_ADDR pc = regcache_read_pc (regcache);
CORE_ADDR breaks[2] = {-1, -1}; CORE_ADDR breaks[2] = {-1, -1};
CORE_ADDR loc = pc; CORE_ADDR loc = pc;
CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */ CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */