From f2ea0907de3f3f7f59a0efdea58305184917e6cf Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 16 Sep 2003 15:56:03 +0000 Subject: [PATCH] * sh-tdep.h (struct gdbarch_tdep): Remove. Change all register numbers to enumeration values. * sh-tdep.c: Accomodate above change. (SH_NUM_REGS): Rename from SH_DEFAULT_NUM_REGS. (NUM_PSEUDO_REGS_SH_MEDIA): Remove (sh5 only). (NUM_PSEUDO_REGS_SH_COMPACT): Remove (sh5 only). (IS_ADD_IMM_SP): Rename from IS_ADD_SP. (IS_FPUSH): Rename from IS_FMOV. (sh_extract_struct_value_address): Remove useless comment. (sh_dsp_register_sim_regno): Use register values from sh-tdep.h instead of own local values. (sh_dump_tdep): Remove. (_initialize_sh_tdep): Accomodate removing sh_dump_tdep. * sh3-rom.c (sh3_supply_register): Accomodate sh-tdep.h changes. --- gdb/ChangeLog | 17 +++ gdb/sh-tdep.c | 376 ++++++++++++++++---------------------------------- gdb/sh-tdep.h | 65 +++++---- gdb/sh3-rom.c | 4 +- 4 files changed, 168 insertions(+), 294 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2d2d746dced..2633f22d286 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2003-09-16 Corinna Vinschen + + * sh-tdep.h (struct gdbarch_tdep): Remove. Change all register + numbers to enumeration values. + * sh-tdep.c: Accomodate above change. + (SH_NUM_REGS): Rename from SH_DEFAULT_NUM_REGS. + (NUM_PSEUDO_REGS_SH_MEDIA): Remove (sh5 only). + (NUM_PSEUDO_REGS_SH_COMPACT): Remove (sh5 only). + (IS_ADD_IMM_SP): Rename from IS_ADD_SP. + (IS_FPUSH): Rename from IS_FMOV. + (sh_extract_struct_value_address): Remove useless comment. + (sh_dsp_register_sim_regno): Use register values from sh-tdep.h + instead of own local values. + (sh_dump_tdep): Remove. + (_initialize_sh_tdep): Accomodate removing sh_dump_tdep. + * sh3-rom.c (sh3_supply_register): Accomodate sh-tdep.h changes. + 2003-09-15 Andrew Cagney * doublest.c (convert_floatformat_to_doublest): No longer need to diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index 6ec46a1a2b8..110c3e393a2 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -53,7 +53,7 @@ static void (*sh_show_regs) (void); -#define SH_DEFAULT_NUM_REGS 59 +#define SH_NUM_REGS 59 /* Define other aspects of the stack frame. we keep a copy of the worked out return pc lying around, since it @@ -256,9 +256,6 @@ sh_sh4_register_name (int reg_nr) return register_names[reg_nr]; } -#define NUM_PSEUDO_REGS_SH_MEDIA 80 -#define NUM_PSEUDO_REGS_SH_COMPACT 51 - static const unsigned char * sh_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr) { @@ -325,7 +322,7 @@ sh_push_dummy_code (struct gdbarch *gdbarch, /* ADD #imm,r15 01111111iiiiiiii r15+imm-->r15 */ -#define IS_ADD_SP(x) (((x) & 0xff00) == 0x7f00) +#define IS_ADD_IMM_SP(x) (((x) & 0xff00) == 0x7f00) #define IS_MOV_R3(x) (((x) & 0xff00) == 0x1a00) #define IS_SHLL_R3(x) ((x) == 0x4300) @@ -337,7 +334,9 @@ sh_push_dummy_code (struct gdbarch *gdbarch, /* FMOV.S FRm,@-Rn Rn-4-->Rn, FRm-->(Rn) 1111nnnnmmmm1011 FMOV DRm,@-Rn Rn-8-->Rn, DRm-->(Rn) 1111nnnnmmm01011 FMOV XDm,@-Rn Rn-8-->Rn, XDm-->(Rn) 1111nnnnmmm11011 */ -#define IS_FMOV(x) (((x) & 0xf00f) == 0xf00b) +/* CV, 2003-08-28: Only suitable with Rn == SP, therefore name changed to + make this entirely clear. */ +#define IS_FPUSH(x) (((x) & 0xf00f) == 0xf00b) /* MOV Rm,Rn Rm-->Rn 0110nnnnmmmm0011 MOV.L Rm,@(disp,Rn) Rm-->(dispx4+Rn) 0001nnnnmmmmdddd @@ -401,8 +400,8 @@ sh_skip_prologue_hard_way (CORE_ADDR start_pc) { int w = read_memory_integer (here, 2); here += 2; - if (IS_FMOV (w) || IS_PUSH (w) || IS_STS (w) || IS_MOV_R3 (w) - || IS_ADD_R3SP (w) || IS_ADD_SP (w) || IS_SHLL_R3 (w) + if (IS_FPUSH (w) || IS_PUSH (w) || IS_STS (w) || IS_MOV_R3 (w) + || IS_ADD_R3SP (w) || IS_ADD_IMM_SP (w) || IS_SHLL_R3 (w) || IS_ARG_MOV (w) || IS_MOV_TO_R14 (w)) { start_pc = here; @@ -536,7 +535,7 @@ sh_nofp_frame_init_saved_regs (struct frame_info *fi) int depth; int pc; int opc; - int insn; + int inst; int r3_val = 0; char *dummy_regs = deprecated_generic_find_dummy_frame (get_frame_pc (fi), get_frame_base (fi)); @@ -563,7 +562,7 @@ sh_nofp_frame_init_saved_regs (struct frame_info *fi) depth = 0; - /* Loop around examining the prologue insns until we find something + /* Loop around examining the prologue inst until we find something that does not appear to be part of the prologue. But give up after 20 of them, since we're getting silly then. */ @@ -576,38 +575,38 @@ sh_nofp_frame_init_saved_regs (struct frame_info *fi) for (opc = pc + (2 * 28); pc < opc; pc += 2) { - insn = read_memory_integer (pc, 2); + inst = read_memory_integer (pc, 2); /* See where the registers will be saved to */ - if (IS_PUSH (insn)) + if (IS_PUSH (inst)) { - rn = GET_PUSHED_REG (insn); + rn = GET_PUSHED_REG (inst); where[rn] = depth; depth += 4; } - else if (IS_STS (insn)) + else if (IS_STS (inst)) { where[PR_REGNUM] = depth; /* If we're storing the pr then this isn't a leaf */ get_frame_extra_info (fi)->leaf_function = 0; depth += 4; } - else if (IS_MOV_R3 (insn)) + else if (IS_MOV_R3 (inst)) { - r3_val = ((insn & 0xff) ^ 0x80) - 0x80; + r3_val = ((inst & 0xff) ^ 0x80) - 0x80; } - else if (IS_SHLL_R3 (insn)) + else if (IS_SHLL_R3 (inst)) { r3_val <<= 1; } - else if (IS_ADD_R3SP (insn)) + else if (IS_ADD_R3SP (inst)) { depth += -r3_val; } - else if (IS_ADD_SP (insn)) + else if (IS_ADD_IMM_SP (inst)) { - depth -= ((insn & 0xff) ^ 0x80) - 0x80; + depth -= ((inst & 0xff) ^ 0x80) - 0x80; } - else if (IS_MOV_SP_FP (insn)) + else if (IS_MOV_SP_FP (inst)) break; #if 0 /* This used to just stop when it found an instruction that was not considered part of the prologue. Now, we just @@ -655,7 +654,7 @@ fv_reg_base_num (int fv_regnum) int fp_regnum; fp_regnum = FP0_REGNUM + - (fv_regnum - gdbarch_tdep (current_gdbarch)->FV0_REGNUM) * 4; + (fv_regnum - FV0_REGNUM) * 4; return fp_regnum; } @@ -666,7 +665,7 @@ dr_reg_base_num (int dr_regnum) int fp_regnum; fp_regnum = FP0_REGNUM + - (dr_regnum - gdbarch_tdep (current_gdbarch)->DR0_REGNUM) * 2; + (dr_regnum - DR0_REGNUM) * 2; return fp_regnum; } @@ -679,10 +678,9 @@ sh_fp_frame_init_saved_regs (struct frame_info *fi) int depth; int pc; int opc; - int insn; + int inst; int r3_val = 0; char *dummy_regs = deprecated_generic_find_dummy_frame (get_frame_pc (fi), get_frame_base (fi)); - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); if (get_frame_saved_regs (fi) == NULL) frame_saved_regs_zalloc (fi); @@ -706,7 +704,7 @@ sh_fp_frame_init_saved_regs (struct frame_info *fi) depth = 0; - /* Loop around examining the prologue insns until we find something + /* Loop around examining the prologue inst until we find something that does not appear to be part of the prologue. But give up after 20 of them, since we're getting silly then. */ @@ -719,40 +717,40 @@ sh_fp_frame_init_saved_regs (struct frame_info *fi) for (opc = pc + (2 * 28); pc < opc; pc += 2) { - insn = read_memory_integer (pc, 2); + inst = read_memory_integer (pc, 2); /* See where the registers will be saved to */ - if (IS_PUSH (insn)) + if (IS_PUSH (inst)) { - rn = GET_PUSHED_REG (insn); + rn = GET_PUSHED_REG (inst); where[rn] = depth; depth += 4; } - else if (IS_STS (insn)) + else if (IS_STS (inst)) { where[PR_REGNUM] = depth; /* If we're storing the pr then this isn't a leaf */ get_frame_extra_info (fi)->leaf_function = 0; depth += 4; } - else if (IS_MOV_R3 (insn)) + else if (IS_MOV_R3 (inst)) { - r3_val = ((insn & 0xff) ^ 0x80) - 0x80; + r3_val = ((inst & 0xff) ^ 0x80) - 0x80; } - else if (IS_SHLL_R3 (insn)) + else if (IS_SHLL_R3 (inst)) { r3_val <<= 1; } - else if (IS_ADD_R3SP (insn)) + else if (IS_ADD_R3SP (inst)) { depth += -r3_val; } - else if (IS_ADD_SP (insn)) + else if (IS_ADD_IMM_SP (inst)) { - depth -= ((insn & 0xff) ^ 0x80) - 0x80; + depth -= ((inst & 0xff) ^ 0x80) - 0x80; } - else if (IS_FMOV (insn)) + else if (IS_FPUSH (inst)) { - if (read_register (tdep->FPSCR_REGNUM) & FPSCR_SZ) + if (read_register (FPSCR_REGNUM) & FPSCR_SZ) { depth += 8; } @@ -761,7 +759,7 @@ sh_fp_frame_init_saved_regs (struct frame_info *fi) depth += 4; } } - else if (IS_MOV_SP_FP (insn)) + else if (IS_MOV_SP_FP (inst)) break; #if 0 /* This used to just stop when it found an instruction that was not considered part of the prologue. Now, we just @@ -842,7 +840,6 @@ static CORE_ADDR sh_extract_struct_value_address (struct regcache *regcache) { ULONGEST addr; - /*FIXME: Is R0 really correct here? Not STRUCT_RETURN_REGNUM? */ regcache_cooked_read_unsigned (regcache, STRUCT_RETURN_REGNUM, &addr); return addr; } @@ -959,7 +956,6 @@ sh_push_dummy_call_fpu (struct gdbarch *gdbarch, char valbuf[4]; int len; int odd_sized_struct; - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* first force sp to a 4-byte alignment */ sp = sh_frame_align (gdbarch, sp); @@ -1070,7 +1066,6 @@ sh_push_dummy_call_nofpu (struct gdbarch *gdbarch, char valbuf[4]; int len; int odd_sized_struct; - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* first force sp to a 4-byte alignment */ sp = sh_frame_align (gdbarch, sp); @@ -1240,8 +1235,6 @@ sh3e_sh4_store_return_value (struct type *type, struct regcache *regcache, static void sh_generic_show_regs (void) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n", paddr (read_register (PC_REGNUM)), (long) read_register (SR_REGNUM), @@ -1276,8 +1269,6 @@ sh_generic_show_regs (void) static void sh3_show_regs (void) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n", paddr (read_register (PC_REGNUM)), (long) read_register (SR_REGNUM), @@ -1289,8 +1280,8 @@ sh3_show_regs (void) (long) read_register (GBR_REGNUM), (long) read_register (VBR_REGNUM)); printf_filtered (" SSR=%08lx SPC=%08lx", - (long) read_register (tdep->SSR_REGNUM), - (long) read_register (tdep->SPC_REGNUM)); + (long) read_register (SSR_REGNUM), + (long) read_register (SPC_REGNUM)); printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", (long) read_register (0), @@ -1327,8 +1318,8 @@ sh2e_show_regs (void) (long) read_register (GBR_REGNUM), (long) read_register (VBR_REGNUM)); printf_filtered (" FPUL=%08lx FPSCR=%08lx", - (long) read_register (gdbarch_tdep (current_gdbarch)->FPUL_REGNUM), - (long) read_register (gdbarch_tdep (current_gdbarch)->FPSCR_REGNUM)); + (long) read_register (FPUL_REGNUM), + (long) read_register (FPSCR_REGNUM)); printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", (long) read_register (0), @@ -1372,8 +1363,6 @@ sh2e_show_regs (void) static void sh3e_show_regs (void) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n", paddr (read_register (PC_REGNUM)), (long) read_register (SR_REGNUM), @@ -1385,11 +1374,11 @@ sh3e_show_regs (void) (long) read_register (GBR_REGNUM), (long) read_register (VBR_REGNUM)); printf_filtered (" SSR=%08lx SPC=%08lx", - (long) read_register (tdep->SSR_REGNUM), - (long) read_register (tdep->SPC_REGNUM)); + (long) read_register (SSR_REGNUM), + (long) read_register (SPC_REGNUM)); printf_filtered (" FPUL=%08lx FPSCR=%08lx", - (long) read_register (tdep->FPUL_REGNUM), - (long) read_register (tdep->FPSCR_REGNUM)); + (long) read_register (FPUL_REGNUM), + (long) read_register (FPSCR_REGNUM)); printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", (long) read_register (0), @@ -1433,8 +1422,6 @@ sh3e_show_regs (void) static void sh3_dsp_show_regs (void) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n", paddr (read_register (PC_REGNUM)), (long) read_register (SR_REGNUM), @@ -1447,11 +1434,11 @@ sh3_dsp_show_regs (void) (long) read_register (VBR_REGNUM)); printf_filtered (" SSR=%08lx SPC=%08lx", - (long) read_register (tdep->SSR_REGNUM), - (long) read_register (tdep->SPC_REGNUM)); + (long) read_register (SSR_REGNUM), + (long) read_register (SPC_REGNUM)); printf_filtered (" DSR=%08lx", - (long) read_register (tdep->DSR_REGNUM)); + (long) read_register (DSR_REGNUM)); printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", (long) read_register (0), @@ -1473,28 +1460,26 @@ sh3_dsp_show_regs (void) (long) read_register (15)); printf_filtered ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n", - (long) read_register (tdep->A0G_REGNUM) & 0xff, - (long) read_register (tdep->A0_REGNUM), - (long) read_register (tdep->M0_REGNUM), - (long) read_register (tdep->X0_REGNUM), - (long) read_register (tdep->Y0_REGNUM), - (long) read_register (tdep->RS_REGNUM), - (long) read_register (tdep->MOD_REGNUM)); + (long) read_register (A0G_REGNUM) & 0xff, + (long) read_register (A0_REGNUM), + (long) read_register (M0_REGNUM), + (long) read_register (X0_REGNUM), + (long) read_register (Y0_REGNUM), + (long) read_register (RS_REGNUM), + (long) read_register (MOD_REGNUM)); printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n", - (long) read_register (tdep->A1G_REGNUM) & 0xff, - (long) read_register (tdep->A1_REGNUM), - (long) read_register (tdep->M1_REGNUM), - (long) read_register (tdep->X1_REGNUM), - (long) read_register (tdep->Y1_REGNUM), - (long) read_register (tdep->RE_REGNUM)); + (long) read_register (A1G_REGNUM) & 0xff, + (long) read_register (A1_REGNUM), + (long) read_register (M1_REGNUM), + (long) read_register (X1_REGNUM), + (long) read_register (Y1_REGNUM), + (long) read_register (RE_REGNUM)); } static void sh4_show_regs (void) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - - int pr = read_register (tdep->FPSCR_REGNUM) & 0x80000; + int pr = read_register (FPSCR_REGNUM) & 0x80000; printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n", paddr (read_register (PC_REGNUM)), (long) read_register (SR_REGNUM), @@ -1506,11 +1491,11 @@ sh4_show_regs (void) (long) read_register (GBR_REGNUM), (long) read_register (VBR_REGNUM)); printf_filtered (" SSR=%08lx SPC=%08lx", - (long) read_register (tdep->SSR_REGNUM), - (long) read_register (tdep->SPC_REGNUM)); + (long) read_register (SSR_REGNUM), + (long) read_register (SPC_REGNUM)); printf_filtered (" FPUL=%08lx FPSCR=%08lx", - (long) read_register (tdep->FPUL_REGNUM), - (long) read_register (tdep->FPSCR_REGNUM)); + (long) read_register (FPUL_REGNUM), + (long) read_register (FPSCR_REGNUM)); printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", (long) read_register (0), @@ -1558,8 +1543,6 @@ sh4_show_regs (void) static void sh_dsp_show_regs (void) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n", paddr (read_register (PC_REGNUM)), (long) read_register (SR_REGNUM), @@ -1572,7 +1555,7 @@ sh_dsp_show_regs (void) (long) read_register (VBR_REGNUM)); printf_filtered (" DSR=%08lx", - (long) read_register (tdep->DSR_REGNUM)); + (long) read_register (DSR_REGNUM)); printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", (long) read_register (0), @@ -1594,20 +1577,20 @@ sh_dsp_show_regs (void) (long) read_register (15)); printf_filtered ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n", - (long) read_register (tdep->A0G_REGNUM) & 0xff, - (long) read_register (tdep->A0_REGNUM), - (long) read_register (tdep->M0_REGNUM), - (long) read_register (tdep->X0_REGNUM), - (long) read_register (tdep->Y0_REGNUM), - (long) read_register (tdep->RS_REGNUM), - (long) read_register (tdep->MOD_REGNUM)); + (long) read_register (A0G_REGNUM) & 0xff, + (long) read_register (A0_REGNUM), + (long) read_register (M0_REGNUM), + (long) read_register (X0_REGNUM), + (long) read_register (Y0_REGNUM), + (long) read_register (RS_REGNUM), + (long) read_register (MOD_REGNUM)); printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n", - (long) read_register (tdep->A1G_REGNUM) & 0xff, - (long) read_register (tdep->A1_REGNUM), - (long) read_register (tdep->M1_REGNUM), - (long) read_register (tdep->X1_REGNUM), - (long) read_register (tdep->Y1_REGNUM), - (long) read_register (tdep->RE_REGNUM)); + (long) read_register (A1G_REGNUM) & 0xff, + (long) read_register (A1_REGNUM), + (long) read_register (M1_REGNUM), + (long) read_register (X1_REGNUM), + (long) read_register (Y1_REGNUM), + (long) read_register (RE_REGNUM)); } static void @@ -1622,11 +1605,9 @@ sh_show_regs_command (char *args, int from_tty) static struct type * sh_sh3e_register_type (struct gdbarch *gdbarch, int reg_nr) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - if ((reg_nr >= FP0_REGNUM - && (reg_nr <= tdep->FP_LAST_REGNUM)) - || (reg_nr == tdep->FPUL_REGNUM)) + && (reg_nr <= FP_LAST_REGNUM)) + || (reg_nr == FPUL_REGNUM)) return builtin_type_float; else return builtin_type_int; @@ -1644,17 +1625,15 @@ sh_sh4_build_float_register_type (int high) static struct type * sh_sh4_register_type (struct gdbarch *gdbarch, int reg_nr) { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if ((reg_nr >= FP0_REGNUM - && (reg_nr <= tdep->FP_LAST_REGNUM)) - || (reg_nr == tdep->FPUL_REGNUM)) + && (reg_nr <= FP_LAST_REGNUM)) + || (reg_nr == FPUL_REGNUM)) return builtin_type_float; - else if (reg_nr >= tdep->DR0_REGNUM - && reg_nr <= tdep->DR_LAST_REGNUM) + else if (reg_nr >= DR0_REGNUM + && reg_nr <= DR_LAST_REGNUM) return builtin_type_double; - else if (reg_nr >= tdep->FV0_REGNUM - && reg_nr <= tdep->FV_LAST_REGNUM) + else if (reg_nr >= FV0_REGNUM + && reg_nr <= FV_LAST_REGNUM) return sh_sh4_build_float_register_type (3); else return builtin_type_int; @@ -1696,10 +1675,8 @@ static void sh_sh4_register_convert_to_virtual (int regnum, struct type *type, char *from, char *to) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - - if (regnum >= tdep->DR0_REGNUM - && regnum <= tdep->DR_LAST_REGNUM) + if (regnum >= DR0_REGNUM + && regnum <= DR_LAST_REGNUM) { DOUBLEST val; floatformat_to_doublest (&floatformat_ieee_double_littlebyte_bigword, from, &val); @@ -1713,10 +1690,8 @@ static void sh_sh4_register_convert_to_raw (struct type *type, int regnum, const void *from, void *to) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - - if (regnum >= tdep->DR0_REGNUM - && regnum <= tdep->DR_LAST_REGNUM) + if (regnum >= DR0_REGNUM + && regnum <= DR_LAST_REGNUM) { DOUBLEST val = extract_typed_floating (from, type); floatformat_from_doublest (&floatformat_ieee_double_littlebyte_bigword, &val, to); @@ -1731,10 +1706,9 @@ sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, { int base_regnum, portion; char temp_buffer[MAX_REGISTER_SIZE]; - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if (reg_nr >= tdep->DR0_REGNUM - && reg_nr <= tdep->DR_LAST_REGNUM) + if (reg_nr >= DR0_REGNUM + && reg_nr <= DR_LAST_REGNUM) { base_regnum = dr_reg_base_num (reg_nr); @@ -1749,8 +1723,8 @@ sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, gdbarch_register_type (gdbarch, reg_nr), temp_buffer, buffer); } - else if (reg_nr >= tdep->FV0_REGNUM - && reg_nr <= tdep->FV_LAST_REGNUM) + else if (reg_nr >= FV0_REGNUM + && reg_nr <= FV_LAST_REGNUM) { base_regnum = fv_reg_base_num (reg_nr); @@ -1768,10 +1742,9 @@ sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, { int base_regnum, portion; char temp_buffer[MAX_REGISTER_SIZE]; - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if (reg_nr >= tdep->DR0_REGNUM - && reg_nr <= tdep->DR_LAST_REGNUM) + if (reg_nr >= DR0_REGNUM + && reg_nr <= DR_LAST_REGNUM) { base_regnum = dr_reg_base_num (reg_nr); @@ -1785,8 +1758,8 @@ sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, (temp_buffer + register_size (gdbarch, base_regnum) * portion)); } - else if (reg_nr >= tdep->FV0_REGNUM - && reg_nr <= tdep->FV_LAST_REGNUM) + else if (reg_nr >= FV0_REGNUM + && reg_nr <= FV_LAST_REGNUM) { base_regnum = fv_reg_base_num (reg_nr); @@ -1805,7 +1778,7 @@ do_fv_register_info (struct gdbarch *gdbarch, struct ui_file *file, { int first_fp_reg_num = fv_reg_base_num (fv_regnum); fprintf_filtered (file, "fv%d\t0x%08x\t0x%08x\t0x%08x\t0x%08x\n", - fv_regnum - gdbarch_tdep (gdbarch)->FV0_REGNUM, + fv_regnum - FV0_REGNUM, (int) read_register (first_fp_reg_num), (int) read_register (first_fp_reg_num + 1), (int) read_register (first_fp_reg_num + 2), @@ -1820,7 +1793,7 @@ do_dr_register_info (struct gdbarch *gdbarch, struct ui_file *file, int first_fp_reg_num = dr_reg_base_num (dr_regnum); fprintf_filtered (file, "dr%d\t0x%08x%08x\n", - dr_regnum - gdbarch_tdep (gdbarch)->DR0_REGNUM, + dr_regnum - DR0_REGNUM, (int) read_register (first_fp_reg_num), (int) read_register (first_fp_reg_num + 1)); } @@ -1829,16 +1802,14 @@ static void sh_print_pseudo_register (struct gdbarch *gdbarch, struct ui_file *file, int regnum) { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if (regnum < NUM_REGS || regnum >= NUM_REGS + NUM_PSEUDO_REGS) internal_error (__FILE__, __LINE__, "Invalid pseudo register number %d\n", regnum); - else if (regnum >= tdep->DR0_REGNUM - && regnum <= tdep->DR_LAST_REGNUM) + else if (regnum >= DR0_REGNUM + && regnum <= DR_LAST_REGNUM) do_dr_register_info (gdbarch, file, regnum); - else if (regnum >= tdep->FV0_REGNUM - && regnum <= tdep->FV_LAST_REGNUM) + else if (regnum >= FV0_REGNUM + && regnum <= FV_LAST_REGNUM) do_fv_register_info (gdbarch, file, regnum); } @@ -1958,7 +1929,7 @@ sh_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, regnum ++; } else - regnum += (gdbarch_tdep (gdbarch)->FP_LAST_REGNUM - FP0_REGNUM); /* skip FP regs */ + regnum += (FP_LAST_REGNUM - FP0_REGNUM); /* skip FP regs */ } else { @@ -2020,45 +1991,21 @@ sh_linux_svr4_fetch_link_map_offsets (void) } #endif /* SVR4_SHARED_LIBS */ - -enum -{ - DSP_DSR_REGNUM = 24, - DSP_A0G_REGNUM, - DSP_A0_REGNUM, - DSP_A1G_REGNUM, - DSP_A1_REGNUM, - DSP_M0_REGNUM, - DSP_M1_REGNUM, - DSP_X0_REGNUM, - DSP_X1_REGNUM, - DSP_Y0_REGNUM, - DSP_Y1_REGNUM, - - DSP_MOD_REGNUM = 40, - - DSP_RS_REGNUM = 43, - DSP_RE_REGNUM, - - DSP_R0_BANK_REGNUM = 51, - DSP_R7_BANK_REGNUM = DSP_R0_BANK_REGNUM + 7 -}; - static int sh_dsp_register_sim_regno (int nr) { if (legacy_register_sim_regno (nr) < 0) return legacy_register_sim_regno (nr); - if (nr >= DSP_DSR_REGNUM && nr <= DSP_Y1_REGNUM) - return nr - DSP_DSR_REGNUM + SIM_SH_DSR_REGNUM; - if (nr == DSP_MOD_REGNUM) + if (nr >= DSR_REGNUM && nr <= Y1_REGNUM) + return nr - DSR_REGNUM + SIM_SH_DSR_REGNUM; + if (nr == MOD_REGNUM) return SIM_SH_MOD_REGNUM; - if (nr == DSP_RS_REGNUM) + if (nr == RS_REGNUM) return SIM_SH_RS_REGNUM; - if (nr == DSP_RE_REGNUM) + if (nr == RE_REGNUM) return SIM_SH_RE_REGNUM; - if (nr >= DSP_R0_BANK_REGNUM && nr <= DSP_R7_BANK_REGNUM) - return nr - DSP_R0_BANK_REGNUM + SIM_SH_R0_BANK_REGNUM; + if (nr >= R0_BANK_REGNUM && nr <= R7_BANK_REGNUM) + return nr - R0_BANK_REGNUM + SIM_SH_R0_BANK_REGNUM; return nr; } @@ -2068,7 +2015,6 @@ static struct gdbarch * sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) { struct gdbarch *gdbarch; - struct gdbarch_tdep *tdep; sh_show_regs = sh_generic_show_regs; switch (info.bfd_arch_info->mach) @@ -2109,40 +2055,12 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* None found, create a new architecture from the information provided. */ - tdep = XMALLOC (struct gdbarch_tdep); - gdbarch = gdbarch_alloc (&info, tdep); + gdbarch = gdbarch_alloc (&info, NULL); /* NOTE: cagney/2002-12-06: This can be deleted when this arch is ready to unwind the PC first (see frame.c:get_prev_frame()). */ set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default); - /* Initialize the register numbers that are not common to all the - variants to -1, if necessary thse will be overwritten in the case - statement below. */ - tdep->FPUL_REGNUM = -1; - tdep->FPSCR_REGNUM = -1; - tdep->DSR_REGNUM = -1; - tdep->FP_LAST_REGNUM = -1; - tdep->A0G_REGNUM = -1; - tdep->A0_REGNUM = -1; - tdep->A1G_REGNUM = -1; - tdep->A1_REGNUM = -1; - tdep->M0_REGNUM = -1; - tdep->M1_REGNUM = -1; - tdep->X0_REGNUM = -1; - tdep->X1_REGNUM = -1; - tdep->Y0_REGNUM = -1; - tdep->Y1_REGNUM = -1; - tdep->MOD_REGNUM = -1; - tdep->RS_REGNUM = -1; - tdep->RE_REGNUM = -1; - tdep->SSR_REGNUM = -1; - tdep->SPC_REGNUM = -1; - tdep->DR0_REGNUM = -1; - tdep->DR_LAST_REGNUM = -1; - tdep->FV0_REGNUM = -1; - tdep->FV_LAST_REGNUM = -1; - set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT); set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT); set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT); @@ -2152,7 +2070,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT); set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT); - set_gdbarch_num_regs (gdbarch, SH_DEFAULT_NUM_REGS); + set_gdbarch_num_regs (gdbarch, SH_NUM_REGS); set_gdbarch_sp_regnum (gdbarch, 15); set_gdbarch_deprecated_fp_regnum (gdbarch, 14); set_gdbarch_pc_regnum (gdbarch, 16); @@ -2223,9 +2141,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu); set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address); - tdep->FPUL_REGNUM = 23; - tdep->FPSCR_REGNUM = 24; - tdep->FP_LAST_REGNUM = 40; set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs); break; @@ -2239,20 +2154,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_nofpu); set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address); - tdep->DSR_REGNUM = 24; - tdep->A0G_REGNUM = 25; - tdep->A0_REGNUM = 26; - tdep->A1G_REGNUM = 27; - tdep->A1_REGNUM = 28; - tdep->M0_REGNUM = 29; - tdep->M1_REGNUM = 30; - tdep->X0_REGNUM = 31; - tdep->X1_REGNUM = 32; - tdep->Y0_REGNUM = 33; - tdep->Y1_REGNUM = 34; - tdep->MOD_REGNUM = 40; - tdep->RS_REGNUM = 43; - tdep->RE_REGNUM = 44; set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs); break; @@ -2265,8 +2166,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_nofpu); set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address); - tdep->SSR_REGNUM = 41; - tdep->SPC_REGNUM = 42; set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs); break; @@ -2283,11 +2182,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu); set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address); - tdep->FPUL_REGNUM = 23; - tdep->FPSCR_REGNUM = 24; - tdep->FP_LAST_REGNUM = 40; - tdep->SSR_REGNUM = 41; - tdep->SPC_REGNUM = 42; set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_fp_frame_init_saved_regs); break; @@ -2301,22 +2195,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_nofpu); set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address); - tdep->DSR_REGNUM = 24; - tdep->A0G_REGNUM = 25; - tdep->A0_REGNUM = 26; - tdep->A1G_REGNUM = 27; - tdep->A1_REGNUM = 28; - tdep->M0_REGNUM = 29; - tdep->M1_REGNUM = 30; - tdep->X0_REGNUM = 31; - tdep->X1_REGNUM = 32; - tdep->Y0_REGNUM = 33; - tdep->Y1_REGNUM = 34; - tdep->MOD_REGNUM = 40; - tdep->RS_REGNUM = 43; - tdep->RE_REGNUM = 44; - tdep->SSR_REGNUM = 41; - tdep->SPC_REGNUM = 42; set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs); break; @@ -2333,15 +2211,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value); set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu); set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address); - tdep->FPUL_REGNUM = 23; - tdep->FPSCR_REGNUM = 24; - tdep->FP_LAST_REGNUM = 40; - tdep->SSR_REGNUM = 41; - tdep->SPC_REGNUM = 42; - tdep->DR0_REGNUM = 59; - tdep->DR_LAST_REGNUM = 66; - tdep->FV0_REGNUM = 67; - tdep->FV_LAST_REGNUM = 70; set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_fp_frame_init_saved_regs); break; @@ -2363,17 +2232,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) return gdbarch; } -static void -sh_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file) -{ - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - - if (tdep == NULL) - return; - - /* FIXME: dump the rest of gdbarch_tdep. */ -} - extern initialize_file_ftype _initialize_sh_tdep; /* -Wmissing-prototypes */ void @@ -2381,7 +2239,7 @@ _initialize_sh_tdep (void) { struct cmd_list_element *c; - gdbarch_register (bfd_arch_sh, sh_gdbarch_init, sh_dump_tdep); + gdbarch_register (bfd_arch_sh, sh_gdbarch_init, NULL); add_com ("regs", class_vars, sh_show_regs_command, "Print all registers"); } diff --git a/gdb/sh-tdep.h b/gdb/sh-tdep.h index 0d5847f97b7..e609b52848a 100644 --- a/gdb/sh-tdep.h +++ b/gdb/sh-tdep.h @@ -24,52 +24,51 @@ /* Contributed by Steve Chamberlain sac@cygnus.com */ -struct gdbarch_tdep - { - int FPUL_REGNUM; /* sh3e, sh4 */ - int FPSCR_REGNUM; /* sh3e, sh4 */ - int DSR_REGNUM; /* sh-dsp, sh3-dsp */ - int FP_LAST_REGNUM; /* sh3e, sh4 */ - int A0G_REGNUM; /* sh-dsp, sh3-dsp */ - int A0_REGNUM; /* sh-dsp, sh3-dsp */ - int A1G_REGNUM; /* sh-dsp, sh3-dsp */ - int A1_REGNUM; /* sh-dsp, sh3-dsp */ - int M0_REGNUM; /* sh-dsp, sh3-dsp */ - int M1_REGNUM; /* sh-dsp, sh3-dsp */ - int X0_REGNUM; /* sh-dsp, sh3-dsp */ - int X1_REGNUM; /* sh-dsp, sh3-dsp */ - int Y0_REGNUM; /* sh-dsp, sh3-dsp */ - int Y1_REGNUM; /* sh-dsp, sh3-dsp */ - int MOD_REGNUM; /* sh-dsp, sh3-dsp */ - int SSR_REGNUM; /* sh3, sh3-dsp, sh3e, sh4 */ - int SPC_REGNUM; /* sh3, sh3-dsp, sh3e, sh4 */ - int RS_REGNUM; /* sh-dsp, sh3-dsp */ - int RE_REGNUM; /* sh-dsp, sh3-dsp */ - int DR0_REGNUM; /* sh4 */ - int DR_LAST_REGNUM; /* sh4 */ - int FV0_REGNUM; /* sh4 */ - int FV_LAST_REGNUM; /* sh4 */ - /* FPP stands for Floating Point Pair, to avoid confusion with - GDB's FP0_REGNUM, which is the number of the first Floating - point register. Unfortunately on the sh5, the floating point - registers are called FR, and the floating point pairs are called FP. */ - }; - -/* Registers common to all the SH variants. */ +/* Registers for all SH variants. Used also by sh3-rom.c. */ enum { R0_REGNUM = 0, STRUCT_RETURN_REGNUM = 2, ARG0_REGNUM = 4, ARGLAST_REGNUM = 7, + FP_REGNUM = 14, PR_REGNUM = 17, GBR_REGNUM = 18, VBR_REGNUM = 19, MACH_REGNUM = 20, MACL_REGNUM = 21, SR_REGNUM = 22, + FPUL_REGNUM = 23, + /* Floating point registers */ + FPSCR_REGNUM = 24, FLOAT_ARG0_REGNUM = 29, - FLOAT_ARGLAST_REGNUM = 36 + FLOAT_ARGLAST_REGNUM = 36, + FP_LAST_REGNUM = 40, + /* sh3,sh4 registers */ + SSR_REGNUM = 41, + SPC_REGNUM = 42, + /* DSP registers */ + DSR_REGNUM = 24, + A0G_REGNUM = 25, + A0_REGNUM = 26, + A1G_REGNUM = 27, + A1_REGNUM = 28, + M0_REGNUM = 29, + M1_REGNUM = 30, + X0_REGNUM = 31, + X1_REGNUM = 32, + Y0_REGNUM = 33, + Y1_REGNUM = 34, + MOD_REGNUM = 40, + RS_REGNUM = 43, + RE_REGNUM = 44, + R0_BANK_REGNUM = 51, + R7_BANK_REGNUM = 58, + /* Floating point pseudo registers */ + DR0_REGNUM = 59, + DR_LAST_REGNUM = 66, + FV0_REGNUM = 67, + FV_LAST_REGNUM = 70 }; extern gdbarch_init_ftype sh64_gdbarch_init; diff --git a/gdb/sh3-rom.c b/gdb/sh3-rom.c index ec274ef26df..a2e21c198c8 100644 --- a/gdb/sh3-rom.c +++ b/gdb/sh3-rom.c @@ -77,9 +77,9 @@ sh3_supply_register (char *regname, int regnamelen, char *val, int vallen) break; case 'S': if (regname[1] == 'S' && regname[2] == 'R') - regno = gdbarch_tdep (current_gdbarch)->SSR_REGNUM; + regno = SSR_REGNUM; else if (regname[1] == 'P' && regname[2] == 'C') - regno = gdbarch_tdep (current_gdbarch)->SPC_REGNUM; + regno = SPC_REGNUM; break; } } -- 2.30.2