diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2010-06-19 17:59:06 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2010-06-19 17:59:06 +0000 |
commit | 13def385c0d3121354e8616a93d3ad55815e4859 (patch) | |
tree | 565a1e191550437980f821a1f89b4b1f97deb3a5 /gdb | |
parent | d2ed6730f2ef390d50a47ea03ee3a5b1dd5e37f0 (diff) | |
download | gdb-13def385c0d3121354e8616a93d3ad55815e4859.zip gdb-13def385c0d3121354e8616a93d3ad55815e4859.tar.gz gdb-13def385c0d3121354e8616a93d3ad55815e4859.tar.bz2 |
* spu-tdep.c (spu_frame_unwind_cache): Use LSLR register
value instead of hard-coded SPU_LS_SIZE.
(spu_software_single_step): Likewise.
* spu-tdep.h (SPU_LS_SIZE): Remove.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/spu-tdep.c | 22 | ||||
-rw-r--r-- | gdb/spu-tdep.h | 3 |
3 files changed, 24 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 48e6250..762f0b6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2010-06-19 Ulrich Weigand <uweigand@de.ibm.com> + * spu-tdep.c (spu_frame_unwind_cache): Use LSLR register + value instead of hard-coded SPU_LS_SIZE. + (spu_software_single_step): Likewise. + * spu-tdep.h (SPU_LS_SIZE): Remove. + +2010-06-19 Ulrich Weigand <uweigand@de.ibm.com> + * spu-multiarch.c (spu_xfer_partial): Wrap around local store limit on local store memory accesses. * spu-linux-nat.c (spu_xfer_partial): Likewise. diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c index 072ae8c..b3f50a1 100644 --- a/gdb/spu-tdep.c +++ b/gdb/spu-tdep.c @@ -987,8 +987,14 @@ spu_frame_unwind_cache (struct frame_info *this_frame, { CORE_ADDR reg; LONGEST backchain; + ULONGEST lslr; int status; + /* Get local store limit. */ + lslr = get_frame_register_unsigned (this_frame, SPU_LSLR_REGNUM); + if (!lslr) + lslr = (ULONGEST) -1; + /* Get the backchain. */ reg = get_frame_register_unsigned (this_frame, SPU_SP_REGNUM); status = safe_read_memory_integer (SPUADDR (id, reg), 4, byte_order, @@ -996,10 +1002,10 @@ spu_frame_unwind_cache (struct frame_info *this_frame, /* A zero backchain terminates the frame chain. Also, sanity check against the local store size limit. */ - if (status && backchain > 0 && backchain < SPU_LS_SIZE) + if (status && backchain > 0 && backchain <= lslr) { /* Assume the link register is saved into its slot. */ - if (backchain + 16 < SPU_LS_SIZE) + if (backchain + 16 <= lslr) info->saved_regs[SPU_LR_REGNUM].addr = SPUADDR (id, backchain + 16); /* Frame bases. */ @@ -1501,6 +1507,7 @@ spu_software_single_step (struct frame_info *frame) unsigned int insn; int offset, reg; gdb_byte buf[4]; + ULONGEST lslr; pc = get_frame_pc (frame); @@ -1508,13 +1515,18 @@ spu_software_single_step (struct frame_info *frame) return 1; insn = extract_unsigned_integer (buf, 4, byte_order); + /* Get local store limit. */ + lslr = get_frame_register_unsigned (frame, SPU_LSLR_REGNUM); + if (!lslr) + lslr = (ULONGEST) -1; + /* Next sequential instruction is at PC + 4, except if the current instruction is a PPE-assisted call, in which case it is at PC + 8. Wrap around LS limit to be on the safe side. */ if ((insn & 0xffffff00) == 0x00002100) - next_pc = (SPUADDR_ADDR (pc) + 8) & (SPU_LS_SIZE - 1); + next_pc = (SPUADDR_ADDR (pc) + 8) & lslr; else - next_pc = (SPUADDR_ADDR (pc) + 4) & (SPU_LS_SIZE - 1); + next_pc = (SPUADDR_ADDR (pc) + 4) & lslr; insert_single_step_breakpoint (gdbarch, aspace, SPUADDR (SPUADDR_SPU (pc), next_pc)); @@ -1531,7 +1543,7 @@ spu_software_single_step (struct frame_info *frame) target += extract_unsigned_integer (buf, 4, byte_order) & -4; } - target = target & (SPU_LS_SIZE - 1); + target = target & lslr; if (target != next_pc) insert_single_step_breakpoint (gdbarch, aspace, SPUADDR (SPUADDR_SPU (pc), target)); diff --git a/gdb/spu-tdep.h b/gdb/spu-tdep.h index 4b83f74..b2c0d82 100644 --- a/gdb/spu-tdep.h +++ b/gdb/spu-tdep.h @@ -47,9 +47,6 @@ enum spu_regnum SPU_DECR_STATUS_REGNUM = 135 /* Decrementer status. */ }; -/* Local store. */ -#define SPU_LS_SIZE 0x40000 - /* Address conversions. In a combined PPU/SPU debugging session, we have to consider multiple |