diff options
author | dim <dim@FreeBSD.org> | 2010-11-11 20:52:24 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2010-11-11 20:52:24 +0000 |
commit | 37e50857240f22fdc2beb83a5bf670c44a94212d (patch) | |
tree | 9a6496b320a182a536b4a33b916ab30b48840f06 /contrib/gdb | |
parent | cfbe0682af24afabd3a5a9652758cf3ef046843b (diff) | |
parent | 56b80da7cac820e4575a4eca93a1c13c386ccec5 (diff) | |
download | FreeBSD-src-37e50857240f22fdc2beb83a5bf670c44a94212d.zip FreeBSD-src-37e50857240f22fdc2beb83a5bf670c44a94212d.tar.gz |
Sync: merge r214895 through r215140 from ^/head.
Diffstat (limited to 'contrib/gdb')
-rw-r--r-- | contrib/gdb/gdb/mips-tdep.c | 17 | ||||
-rw-r--r-- | contrib/gdb/gdb/mips-tdep.h | 2 | ||||
-rw-r--r-- | contrib/gdb/gdb/mipsfbsd-tdep.h | 4 |
3 files changed, 14 insertions, 9 deletions
diff --git a/contrib/gdb/gdb/mips-tdep.c b/contrib/gdb/gdb/mips-tdep.c index cd37764..d4a4c73 100644 --- a/contrib/gdb/gdb/mips-tdep.c +++ b/contrib/gdb/gdb/mips-tdep.c @@ -1495,6 +1495,7 @@ mips_mdebug_frame_cache (struct frame_info *next_frame, void **this_cache) int kernel_trap; /* What registers have been saved? Bitmasks. */ unsigned long gen_mask, float_mask; + long reg_offset; if ((*this_cache) != NULL) return (*this_cache); @@ -1513,6 +1514,8 @@ mips_mdebug_frame_cache (struct frame_info *next_frame, void **this_cache) /* Extract the frame's base. */ cache->base = (frame_unwind_register_signed (next_frame, NUM_REGS + PROC_FRAME_REG (proc_desc)) + PROC_FRAME_OFFSET (proc_desc) - PROC_FRAME_ADJUST (proc_desc)); + /* Save registers offset from scratching by following find_proc_desc call */ + reg_offset = PROC_REG_OFFSET (proc_desc); kernel_trap = PROC_REG_MASK (proc_desc) & 1; gen_mask = kernel_trap ? 0xFFFFFFFF : PROC_REG_MASK (proc_desc); @@ -1567,8 +1570,7 @@ mips_mdebug_frame_cache (struct frame_info *next_frame, void **this_cache) /* Fill in the offsets for the registers which gen_mask says were saved. */ { - CORE_ADDR reg_position = (cache->base - + PROC_REG_OFFSET (proc_desc)); + CORE_ADDR reg_position = (cache->base + reg_offset); int ireg; for (ireg = MIPS_NUMREGS - 1; gen_mask; --ireg, gen_mask <<= 1) if (gen_mask & 0x80000000) @@ -2162,15 +2164,18 @@ restart: { PROC_REG_MASK (&temp_proc_desc) |= 1 << reg; set_reg_offset (temp_saved_regs, reg, sp + low_word); + /* Do we have registers offset yet? */ + if (!PROC_REG_OFFSET (&temp_proc_desc)) + PROC_REG_OFFSET (&temp_proc_desc) = low_word - PROC_FRAME_OFFSET (&temp_proc_desc); } else if ((high_word & 0xFFE0) == 0xffa0) /* sd reg,offset($sp) */ { - /* Irix 6.2 N32 ABI uses sd instructions for saving $gp and $ra, - but the register size used is only 32 bits. Make the address - for the saved register point to the lower 32 bits. */ PROC_REG_MASK (&temp_proc_desc) |= 1 << reg; set_reg_offset (temp_saved_regs, reg, - sp + low_word + 8 - mips_regsize (current_gdbarch)); + sp + low_word); + /* Do we have registers offset yet? */ + if (!PROC_REG_OFFSET (&temp_proc_desc)) + PROC_REG_OFFSET (&temp_proc_desc) = low_word - PROC_FRAME_OFFSET (&temp_proc_desc); } else if (high_word == 0x27be) /* addiu $30,$sp,size */ { diff --git a/contrib/gdb/gdb/mips-tdep.h b/contrib/gdb/gdb/mips-tdep.h index af9a3c8..5c78591 100644 --- a/contrib/gdb/gdb/mips-tdep.h +++ b/contrib/gdb/gdb/mips-tdep.h @@ -78,7 +78,7 @@ enum { MIPS_EMBED_BADVADDR_REGNUM = 35, MIPS_EMBED_CAUSE_REGNUM = 36, MIPS_EMBED_PC_REGNUM = 37, - MIPS_EMBED_FP0_REGNUM = 38 + MIPS_EMBED_FP0_REGNUM = 40 }; /* Defined in mips-tdep.c and used in remote-mips.c */ diff --git a/contrib/gdb/gdb/mipsfbsd-tdep.h b/contrib/gdb/gdb/mipsfbsd-tdep.h index 6b00bb4..2ac3d70 100644 --- a/contrib/gdb/gdb/mipsfbsd-tdep.h +++ b/contrib/gdb/gdb/mipsfbsd-tdep.h @@ -34,7 +34,7 @@ void mipsfbsd_fill_reg (char *, int); void mipsfbsd_supply_fpreg (char *, int); void mipsfbsd_fill_fpreg (char *, int); -#define SIZEOF_STRUCT_REG (38 * mips_regsize (current_gdbarch)) -#define SIZEOF_STRUCT_FPREG (33 * mips_regsize (current_gdbarch)) +#define SIZEOF_STRUCT_REG (40 * mips_regsize (current_gdbarch)) +#define SIZEOF_STRUCT_FPREG (34 * mips_regsize (current_gdbarch)) #endif /* mipsfbsd_TDEP_H */ |