mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
2006-04-03 Andrew Stubbs <andrew.stubbs@st.com>
* sh-tdep.c (sh_dwarf2_frame_init_reg): New function. (sh_gdbarch_init): Call dwarf2_frame_set_init_reg().
This commit is contained in:
parent
26d01138dd
commit
357d3800d1
@ -1,3 +1,8 @@
|
||||
2006-04-03 Andrew Stubbs <andrew.stubbs@st.com>
|
||||
|
||||
* sh-tdep.c (sh_dwarf2_frame_init_reg): New function.
|
||||
(sh_gdbarch_init): Call dwarf2_frame_set_init_reg().
|
||||
|
||||
2006-03-31 Andrew Stubbs <andrew.stubbs@st.com>
|
||||
|
||||
* value.h (struct internalvar): Add field 'endian'.
|
||||
|
@ -2114,6 +2114,57 @@ sh_sh2a_register_sim_regno (int nr)
|
||||
return legacy_register_sim_regno (nr);
|
||||
}
|
||||
|
||||
/* Set up the register unwinding such that call-clobbered registers are
|
||||
not displayed in frames >0 because the true value is not certain.
|
||||
The 'undefined' registers will show up as 'not available' unless the
|
||||
CFI says otherwise.
|
||||
|
||||
This function is currently set up for SH4 and compatible only. */
|
||||
|
||||
static void
|
||||
sh_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
|
||||
struct dwarf2_frame_state_reg *reg)
|
||||
{
|
||||
/* Mark the PC as the destination for the return address. */
|
||||
if (regnum == PC_REGNUM)
|
||||
reg->how = DWARF2_FRAME_REG_RA;
|
||||
|
||||
/* Mark the stack pointer as the call frame address. */
|
||||
else if (regnum == SP_REGNUM)
|
||||
reg->how = DWARF2_FRAME_REG_CFA;
|
||||
|
||||
/* The above was taken from the default init_reg in dwarf2-frame.c
|
||||
while the below is SH specific. */
|
||||
|
||||
/* Caller save registers. */
|
||||
else if ((regnum >= R0_REGNUM && regnum <= R0_REGNUM+7)
|
||||
|| (regnum >= FR0_REGNUM && regnum <= FR0_REGNUM+11)
|
||||
|| (regnum >= DR0_REGNUM && regnum <= DR0_REGNUM+5)
|
||||
|| (regnum >= FV0_REGNUM && regnum <= FV0_REGNUM+2)
|
||||
|| (regnum == MACH_REGNUM)
|
||||
|| (regnum == MACL_REGNUM)
|
||||
|| (regnum == FPUL_REGNUM)
|
||||
|| (regnum == SR_REGNUM))
|
||||
reg->how = DWARF2_FRAME_REG_UNDEFINED;
|
||||
|
||||
/* Callee save registers. */
|
||||
else if ((regnum >= R0_REGNUM+8 && regnum <= R0_REGNUM+15)
|
||||
|| (regnum >= FR0_REGNUM+12 && regnum <= FR0_REGNUM+15)
|
||||
|| (regnum >= DR0_REGNUM+6 && regnum <= DR0_REGNUM+8)
|
||||
|| (regnum == FV0_REGNUM+3))
|
||||
reg->how = DWARF2_FRAME_REG_SAME_VALUE;
|
||||
|
||||
/* Other registers. These are not in the ABI and may or may not
|
||||
mean anything in frames >0 so don't show them. */
|
||||
else if ((regnum >= R0_BANK0_REGNUM && regnum <= R0_BANK0_REGNUM+15)
|
||||
|| (regnum == GBR_REGNUM)
|
||||
|| (regnum == VBR_REGNUM)
|
||||
|| (regnum == FPSCR_REGNUM)
|
||||
|| (regnum == SSR_REGNUM)
|
||||
|| (regnum == SPC_REGNUM))
|
||||
reg->how = DWARF2_FRAME_REG_UNDEFINED;
|
||||
}
|
||||
|
||||
static struct sh_frame_cache *
|
||||
sh_alloc_frame_cache (void)
|
||||
{
|
||||
@ -2492,6 +2543,8 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
|
||||
set_gdbarch_in_function_epilogue_p (gdbarch, sh_in_function_epilogue_p);
|
||||
|
||||
dwarf2_frame_set_init_reg (gdbarch, sh_dwarf2_frame_init_reg);
|
||||
|
||||
switch (info.bfd_arch_info->mach)
|
||||
{
|
||||
case bfd_mach_sh:
|
||||
|
@ -41,6 +41,7 @@ enum
|
||||
FPUL_REGNUM = 23,
|
||||
/* Floating point registers */
|
||||
FPSCR_REGNUM = 24,
|
||||
FR0_REGNUM = 25,
|
||||
FLOAT_ARG0_REGNUM = 29,
|
||||
FLOAT_ARGLAST_REGNUM = 36,
|
||||
FP_LAST_REGNUM = 40,
|
||||
|
Loading…
Reference in New Issue
Block a user