| Index: gdb/sh-tdep.c
|
| diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
|
| index 519a8b4fe97860eada9f7eef1cd1e75e78905afa..a8e31b167868359859f5ab8785bd26c4c2158000 100644
|
| --- a/gdb/sh-tdep.c
|
| +++ b/gdb/sh-tdep.c
|
| @@ -41,8 +41,10 @@
|
| #include "osabi.h"
|
| #include "reggroups.h"
|
| #include "regset.h"
|
| +#include "objfiles.h"
|
|
|
| #include "sh-tdep.h"
|
| +#include "sh64-tdep.h"
|
|
|
| #include "elf-bfd.h"
|
| #include "solib-svr4.h"
|
| @@ -59,7 +61,7 @@ static struct cmd_list_element *showshcmdlist = NULL;
|
|
|
| static const char sh_cc_gcc[] = "gcc";
|
| static const char sh_cc_renesas[] = "renesas";
|
| -static const char *sh_cc_enum[] = {
|
| +static const char *const sh_cc_enum[] = {
|
| sh_cc_gcc,
|
| sh_cc_renesas,
|
| NULL
|
| @@ -67,8 +69,6 @@ static const char *sh_cc_enum[] = {
|
|
|
| static const char *sh_active_calling_convention = sh_cc_gcc;
|
|
|
| -static void (*sh_show_regs) (struct frame_info *);
|
| -
|
| #define SH_NUM_REGS 67
|
|
|
| struct sh_frame_cache
|
| @@ -89,9 +89,24 @@ struct sh_frame_cache
|
| static int
|
| sh_is_renesas_calling_convention (struct type *func_type)
|
| {
|
| - return ((func_type
|
| - && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GNU_renesas_sh)
|
| - || sh_active_calling_convention == sh_cc_renesas);
|
| + int val = 0;
|
| +
|
| + if (func_type)
|
| + {
|
| + func_type = check_typedef (func_type);
|
| +
|
| + if (TYPE_CODE (func_type) == TYPE_CODE_PTR)
|
| + func_type = check_typedef (TYPE_TARGET_TYPE (func_type));
|
| +
|
| + if (TYPE_CODE (func_type) == TYPE_CODE_FUNC
|
| + && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GNU_renesas_sh)
|
| + val = 1;
|
| + }
|
| +
|
| + if (sh_active_calling_convention == sh_cc_renesas)
|
| + val = 1;
|
| +
|
| + return val;
|
| }
|
|
|
| static const char *
|
| @@ -518,22 +533,18 @@ sh_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
|
|
|
| static CORE_ADDR
|
| sh_analyze_prologue (struct gdbarch *gdbarch,
|
| - CORE_ADDR pc, CORE_ADDR current_pc,
|
| + CORE_ADDR pc, CORE_ADDR limit_pc,
|
| struct sh_frame_cache *cache, ULONGEST fpscr)
|
| {
|
| enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
| ULONGEST inst;
|
| - CORE_ADDR opc;
|
| int offset;
|
| int sav_offset = 0;
|
| int r3_val = 0;
|
| int reg, sav_reg = -1;
|
|
|
| - if (pc >= current_pc)
|
| - return current_pc;
|
| -
|
| cache->uses_fp = 0;
|
| - for (opc = pc + (2 * 28); pc < opc; pc += 2)
|
| + for (; pc < limit_pc; pc += 2)
|
| {
|
| inst = read_memory_unsigned_integer (pc, 2, byte_order);
|
| /* See where the registers will be saved to. */
|
| @@ -598,7 +609,8 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
|
| }
|
| }
|
| }
|
| - else if (IS_MOVI20 (inst))
|
| + else if (IS_MOVI20 (inst)
|
| + && (pc + 2 < limit_pc))
|
| {
|
| if (sav_reg < 0)
|
| {
|
| @@ -640,14 +652,17 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
|
| }
|
| else if (IS_MOV_SP_FP (inst))
|
| {
|
| + pc += 2;
|
| + /* Don't go any further than six more instructions. */
|
| + limit_pc = min (limit_pc, pc + (2 * 6));
|
| +
|
| cache->uses_fp = 1;
|
| /* At this point, only allow argument register moves to other
|
| registers or argument register moves to @(X,fp) which are
|
| moving the register arguments onto the stack area allocated
|
| by a former add somenumber to SP call. Don't allow moving
|
| to an fp indirect address above fp + cache->sp_offset. */
|
| - pc += 2;
|
| - for (opc = pc + 12; pc < opc; pc += 2)
|
| + for (; pc < limit_pc; pc += 2)
|
| {
|
| inst = read_memory_integer (pc, 2, byte_order);
|
| if (IS_MOV_ARG_TO_IND_R14 (inst))
|
| @@ -679,9 +694,12 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
|
| jsr, which will be very confusing. Most likely the next
|
| instruction is going to be IS_MOV_SP_FP in the delay slot. If
|
| so, note that before returning the current pc. */
|
| - inst = read_memory_integer (pc + 2, 2, byte_order);
|
| - if (IS_MOV_SP_FP (inst))
|
| - cache->uses_fp = 1;
|
| + if (pc + 2 < limit_pc)
|
| + {
|
| + inst = read_memory_integer (pc + 2, 2, byte_order);
|
| + if (IS_MOV_SP_FP (inst))
|
| + cache->uses_fp = 1;
|
| + }
|
| break;
|
| }
|
| #if 0 /* This used to just stop when it found an instruction
|
| @@ -697,55 +715,42 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
|
| }
|
|
|
| /* Skip any prologue before the guts of a function. */
|
| -
|
| -/* Skip the prologue using the debug information. If this fails we'll
|
| - fall back on the 'guess' method below. */
|
| static CORE_ADDR
|
| -after_prologue (CORE_ADDR pc)
|
| +sh_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
|
| {
|
| - struct symtab_and_line sal;
|
| - CORE_ADDR func_addr, func_end;
|
| -
|
| - /* If we can not find the symbol in the partial symbol table, then
|
| - there is no hope we can determine the function's start address
|
| - with this code. */
|
| - if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
|
| - return 0;
|
| -
|
| - /* Get the line associated with FUNC_ADDR. */
|
| - sal = find_pc_line (func_addr, 0);
|
| -
|
| - /* There are only two cases to consider. First, the end of the source line
|
| - is within the function bounds. In that case we return the end of the
|
| - source line. Second is the end of the source line extends beyond the
|
| - bounds of the current function. We need to use the slow code to
|
| - examine instructions in that case. */
|
| - if (sal.end < func_end)
|
| - return sal.end;
|
| - else
|
| - return 0;
|
| -}
|
| -
|
| -static CORE_ADDR
|
| -sh_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
|
| -{
|
| - CORE_ADDR pc;
|
| + CORE_ADDR post_prologue_pc, func_addr, func_end_addr, limit_pc;
|
| struct sh_frame_cache cache;
|
|
|
| /* See if we can determine the end of the prologue via the symbol table.
|
| If so, then return either PC, or the PC after the prologue, whichever
|
| is greater. */
|
| - pc = after_prologue (start_pc);
|
| + if (find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr))
|
| + {
|
| + post_prologue_pc = skip_prologue_using_sal (gdbarch, func_addr);
|
| + if (post_prologue_pc != 0)
|
| + return max (pc, post_prologue_pc);
|
| + }
|
|
|
| - /* If after_prologue returned a useful address, then use it. Else
|
| - fall back on the instruction skipping code. */
|
| - if (pc)
|
| - return max (pc, start_pc);
|
| + /* Can't determine prologue from the symbol table, need to examine
|
| + instructions. */
|
| +
|
| + /* Find an upper limit on the function prologue using the debug
|
| + information. If the debug information could not be used to provide
|
| + that bound, then use an arbitrary large number as the upper bound. */
|
| + limit_pc = skip_prologue_using_sal (gdbarch, pc);
|
| + if (limit_pc == 0)
|
| + /* Don't go any further than 28 instructions. */
|
| + limit_pc = pc + (2 * 28);
|
| +
|
| + /* Do not allow limit_pc to be past the function end, if we know
|
| + where that end is... */
|
| + if (func_end_addr != 0)
|
| + limit_pc = min (limit_pc, func_end_addr);
|
|
|
| cache.sp_offset = -4;
|
| - pc = sh_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache, 0);
|
| - if (!cache.uses_fp)
|
| - return start_pc;
|
| + post_prologue_pc = sh_analyze_prologue (gdbarch, pc, limit_pc, &cache, 0);
|
| + if (cache.uses_fp)
|
| + pc = post_prologue_pc;
|
|
|
| return pc;
|
| }
|
| @@ -1391,10 +1396,12 @@ sh_store_return_value_fpu (struct type *type, struct regcache *regcache,
|
| }
|
|
|
| static enum return_value_convention
|
| -sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *func_type,
|
| +sh_return_value_nofpu (struct gdbarch *gdbarch, struct value *function,
|
| struct type *type, struct regcache *regcache,
|
| gdb_byte *readbuf, const gdb_byte *writebuf)
|
| {
|
| + struct type *func_type = function ? value_type (function) : NULL;
|
| +
|
| if (sh_use_struct_convention_nofpu (
|
| sh_is_renesas_calling_convention (func_type), type))
|
| return RETURN_VALUE_STRUCT_CONVENTION;
|
| @@ -1406,10 +1413,12 @@ sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *func_type,
|
| }
|
|
|
| static enum return_value_convention
|
| -sh_return_value_fpu (struct gdbarch *gdbarch, struct type *func_type,
|
| +sh_return_value_fpu (struct gdbarch *gdbarch, struct value *function,
|
| struct type *type, struct regcache *regcache,
|
| gdb_byte *readbuf, const gdb_byte *writebuf)
|
| {
|
| + struct type *func_type = function ? value_type (function) : NULL;
|
| +
|
| if (sh_use_struct_convention (
|
| sh_is_renesas_calling_convention (func_type), type))
|
| return RETURN_VALUE_STRUCT_CONVENTION;
|
| @@ -1420,714 +1429,6 @@ sh_return_value_fpu (struct gdbarch *gdbarch, struct type *func_type,
|
| return RETURN_VALUE_REGISTER_CONVENTION;
|
| }
|
|
|
| -/* Print the registers in a form similar to the E7000. */
|
| -
|
| -static void
|
| -sh_generic_show_regs (struct frame_info *frame)
|
| -{
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum
|
| - (get_frame_arch (frame))), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -}
|
| -
|
| -static void
|
| -sh3_show_regs (struct frame_info *frame)
|
| -{
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum
|
| - (get_frame_arch (frame))), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -}
|
| -
|
| -static void
|
| -sh2e_show_regs (struct frame_info *frame)
|
| -{
|
| - struct gdbarch *gdbarch = get_frame_arch (frame);
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum (gdbarch)), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx FPUL %08lx FPSCR %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -
|
| - printf_filtered
|
| - ("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 0),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 1),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 2),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 3),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 4),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 5),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 6),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 7));
|
| - printf_filtered
|
| - ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 8),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 9),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 10),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 11),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 12),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 13),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 14),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 15));
|
| -}
|
| -
|
| -static void
|
| -sh2a_show_regs (struct frame_info *frame)
|
| -{
|
| - struct gdbarch *gdbarch = get_frame_arch (frame);
|
| - int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
|
| -
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum (gdbarch)), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx TBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, TBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx FPUL %08lx FPSCR %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -
|
| - printf_filtered
|
| - (pr ? "DR0-DR6 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
|
| - : "FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 0),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 1),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 2),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 3),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 4),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 5),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 6),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 7));
|
| - printf_filtered
|
| - (pr ? "DR8-DR14 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
|
| - : "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 8),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 9),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 10),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 11),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 12),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 13),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 14),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 15));
|
| - printf_filtered
|
| - ("BANK=%-3d\n", (int) get_frame_register_unsigned (frame, BANK_REGNUM));
|
| - printf_filtered
|
| - ("R0b-R7b %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 0),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 1),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 2),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 3),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 4),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 5),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 6),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 7));
|
| - printf_filtered
|
| - ("R8b-R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 8),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 9),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 10),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 11),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 12),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 13),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 14));
|
| - printf_filtered
|
| - ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 15),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 16),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 17),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 18),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 19));
|
| -}
|
| -
|
| -static void
|
| -sh2a_nofpu_show_regs (struct frame_info *frame)
|
| -{
|
| - int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
|
| -
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum
|
| - (get_frame_arch (frame))), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx TBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, TBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx FPUL %08lx FPSCR %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -
|
| - printf_filtered
|
| - ("BANK=%-3d\n", (int) get_frame_register_unsigned (frame, BANK_REGNUM));
|
| - printf_filtered
|
| - ("R0b-R7b %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 0),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 1),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 2),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 3),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 4),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 5),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 6),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 7));
|
| - printf_filtered
|
| - ("R8b-R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 8),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 9),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 10),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 11),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 12),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 13),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 14));
|
| - printf_filtered
|
| - ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 15),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 16),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 17),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 18),
|
| - (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 19));
|
| -}
|
| -
|
| -static void
|
| -sh3e_show_regs (struct frame_info *frame)
|
| -{
|
| - struct gdbarch *gdbarch = get_frame_arch (frame);
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum (gdbarch)), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx FPUL %08lx FPSCR %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -
|
| - printf_filtered
|
| - ("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 0),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 1),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 2),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 3),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 4),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 5),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 6),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 7));
|
| - printf_filtered
|
| - ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 8),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 9),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 10),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 11),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 12),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 13),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 14),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 15));
|
| -}
|
| -
|
| -static void
|
| -sh3_dsp_show_regs (struct frame_info *frame)
|
| -{
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum
|
| - (get_frame_arch (frame))), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx DSR %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, DSR_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -
|
| - printf_filtered
|
| - ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
|
| - (long) get_frame_register_unsigned (frame, A0G_REGNUM) & 0xff,
|
| - (long) get_frame_register_unsigned (frame, A0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, M0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, X0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, Y0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, RS_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MOD_REGNUM));
|
| - printf_filtered
|
| - ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
|
| - (long) get_frame_register_unsigned (frame, A1G_REGNUM) & 0xff,
|
| - (long) get_frame_register_unsigned (frame, A1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, M1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, X1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, Y1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, RE_REGNUM));
|
| -}
|
| -
|
| -static void
|
| -sh4_show_regs (struct frame_info *frame)
|
| -{
|
| - struct gdbarch *gdbarch = get_frame_arch (frame);
|
| - int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
|
| -
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum (gdbarch)), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx FPUL %08lx FPSCR %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -
|
| - printf_filtered
|
| - (pr ? "DR0-DR6 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
|
| - : "FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 0),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 1),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 2),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 3),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 4),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 5),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 6),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 7));
|
| - printf_filtered
|
| - (pr ? "DR8-DR14 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
|
| - : "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 8),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 9),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 10),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 11),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 12),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 13),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 14),
|
| - (long) get_frame_register_unsigned
|
| - (frame, gdbarch_fp0_regnum (gdbarch) + 15));
|
| -}
|
| -
|
| -static void
|
| -sh4_nofpu_show_regs (struct frame_info *frame)
|
| -{
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum
|
| - (get_frame_arch (frame))), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| - printf_filtered
|
| - (" SSR %08lx SPC %08lx FPUL %08lx FPSCR %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, SSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, SPC_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -}
|
| -
|
| -static void
|
| -sh_dsp_show_regs (struct frame_info *frame)
|
| -{
|
| - printf_filtered
|
| - (" PC %s SR %08lx PR %08lx MACH %08lx\n",
|
| - phex (get_frame_register_unsigned (frame,
|
| - gdbarch_pc_regnum
|
| - (get_frame_arch (frame))), 4),
|
| - (long) get_frame_register_unsigned (frame, SR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, PR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACH_REGNUM));
|
| -
|
| - printf_filtered
|
| - (" GBR %08lx VBR %08lx DSR %08lx MACL %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, GBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, VBR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, DSR_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MACL_REGNUM));
|
| -
|
| - printf_filtered
|
| - ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 0),
|
| - (long) get_frame_register_unsigned (frame, 1),
|
| - (long) get_frame_register_unsigned (frame, 2),
|
| - (long) get_frame_register_unsigned (frame, 3),
|
| - (long) get_frame_register_unsigned (frame, 4),
|
| - (long) get_frame_register_unsigned (frame, 5),
|
| - (long) get_frame_register_unsigned (frame, 6),
|
| - (long) get_frame_register_unsigned (frame, 7));
|
| - printf_filtered
|
| - ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
| - (long) get_frame_register_unsigned (frame, 8),
|
| - (long) get_frame_register_unsigned (frame, 9),
|
| - (long) get_frame_register_unsigned (frame, 10),
|
| - (long) get_frame_register_unsigned (frame, 11),
|
| - (long) get_frame_register_unsigned (frame, 12),
|
| - (long) get_frame_register_unsigned (frame, 13),
|
| - (long) get_frame_register_unsigned (frame, 14),
|
| - (long) get_frame_register_unsigned (frame, 15));
|
| -
|
| - printf_filtered
|
| - ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
|
| - (long) get_frame_register_unsigned (frame, A0G_REGNUM) & 0xff,
|
| - (long) get_frame_register_unsigned (frame, A0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, M0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, X0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, Y0_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, RS_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, MOD_REGNUM));
|
| - printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
|
| - (long) get_frame_register_unsigned (frame, A1G_REGNUM) & 0xff,
|
| - (long) get_frame_register_unsigned (frame, A1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, M1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, X1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, Y1_REGNUM),
|
| - (long) get_frame_register_unsigned (frame, RE_REGNUM));
|
| -}
|
| -
|
| -static void
|
| -sh_show_regs_command (char *args, int from_tty)
|
| -{
|
| - if (sh_show_regs)
|
| - (*sh_show_regs) (get_current_frame ());
|
| -}
|
| -
|
| static struct type *
|
| sh_sh2a_register_type (struct gdbarch *gdbarch, int reg_nr)
|
| {
|
| @@ -2563,7 +1864,16 @@ sh_frame_cache (struct frame_info *this_frame, void **this_cache)
|
| if (cache->pc != 0)
|
| {
|
| ULONGEST fpscr;
|
| - fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
|
| +
|
| + /* Check for the existence of the FPSCR register. If it exists,
|
| + fetch its value for use in prologue analysis. Passing a zero
|
| + value is the best choice for architecture variants upon which
|
| + there's no FPSCR register. */
|
| + if (gdbarch_register_reggroup_p (gdbarch, FPSCR_REGNUM, all_reggroup))
|
| + fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
|
| + else
|
| + fpscr = 0;
|
| +
|
| sh_analyze_prologue (gdbarch, cache->pc, current_pc, cache, fpscr);
|
| }
|
|
|
| @@ -2677,6 +1987,57 @@ static const struct frame_base sh_frame_base = {
|
| sh_frame_base_address
|
| };
|
|
|
| +static struct sh_frame_cache *
|
| +sh_make_stub_cache (struct frame_info *this_frame)
|
| +{
|
| + struct gdbarch *gdbarch = get_frame_arch (this_frame);
|
| + struct sh_frame_cache *cache;
|
| +
|
| + cache = sh_alloc_frame_cache ();
|
| +
|
| + cache->saved_sp
|
| + = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
|
| +
|
| + return cache;
|
| +}
|
| +
|
| +static void
|
| +sh_stub_this_id (struct frame_info *this_frame, void **this_cache,
|
| + struct frame_id *this_id)
|
| +{
|
| + struct sh_frame_cache *cache;
|
| +
|
| + if (*this_cache == NULL)
|
| + *this_cache = sh_make_stub_cache (this_frame);
|
| + cache = *this_cache;
|
| +
|
| + *this_id = frame_id_build (cache->saved_sp, get_frame_pc (this_frame));
|
| +}
|
| +
|
| +static int
|
| +sh_stub_unwind_sniffer (const struct frame_unwind *self,
|
| + struct frame_info *this_frame,
|
| + void **this_prologue_cache)
|
| +{
|
| + CORE_ADDR addr_in_block;
|
| +
|
| + addr_in_block = get_frame_address_in_block (this_frame);
|
| + if (in_plt_section (addr_in_block, NULL))
|
| + return 1;
|
| +
|
| + return 0;
|
| +}
|
| +
|
| +static const struct frame_unwind sh_stub_unwind =
|
| +{
|
| + NORMAL_FRAME,
|
| + default_frame_unwind_stop_reason,
|
| + sh_stub_this_id,
|
| + sh_frame_prev_register,
|
| + NULL,
|
| + sh_stub_unwind_sniffer
|
| +};
|
| +
|
| /* The epilogue is defined here as the area at the end of a function,
|
| either on the `ret' instruction itself or after an instruction which
|
| destroys the function's stack frame. */
|
| @@ -2848,6 +2209,17 @@ sh_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name,
|
|
|
| return NULL;
|
| }
|
| +
|
| +/* This is the implementation of gdbarch method
|
| + return_in_first_hidden_param_p. */
|
| +
|
| +static int
|
| +sh_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
|
| + struct type *type)
|
| +{
|
| + return 0;
|
| +}
|
| +
|
|
|
|
|
| static struct gdbarch *
|
| @@ -2856,56 +2228,9 @@ 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)
|
| - {
|
| - case bfd_mach_sh2e:
|
| - sh_show_regs = sh2e_show_regs;
|
| - break;
|
| - case bfd_mach_sh2a:
|
| - sh_show_regs = sh2a_show_regs;
|
| - break;
|
| - case bfd_mach_sh2a_nofpu:
|
| - sh_show_regs = sh2a_nofpu_show_regs;
|
| - break;
|
| - case bfd_mach_sh_dsp:
|
| - sh_show_regs = sh_dsp_show_regs;
|
| - break;
|
| -
|
| - case bfd_mach_sh3:
|
| - case bfd_mach_sh3_nommu:
|
| - case bfd_mach_sh2a_nofpu_or_sh3_nommu:
|
| - sh_show_regs = sh3_show_regs;
|
| - break;
|
| -
|
| - case bfd_mach_sh3e:
|
| - case bfd_mach_sh2a_or_sh3e:
|
| - sh_show_regs = sh3e_show_regs;
|
| - break;
|
| -
|
| - case bfd_mach_sh3_dsp:
|
| - case bfd_mach_sh4al_dsp:
|
| - sh_show_regs = sh3_dsp_show_regs;
|
| - break;
|
| -
|
| - case bfd_mach_sh4:
|
| - case bfd_mach_sh4a:
|
| - case bfd_mach_sh2a_or_sh4:
|
| - sh_show_regs = sh4_show_regs;
|
| - break;
|
| -
|
| - case bfd_mach_sh4_nofpu:
|
| - case bfd_mach_sh4_nommu_nofpu:
|
| - case bfd_mach_sh4a_nofpu:
|
| - case bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu:
|
| - sh_show_regs = sh4_nofpu_show_regs;
|
| - break;
|
| -
|
| - case bfd_mach_sh5:
|
| - sh_show_regs = sh64_show_regs;
|
| - /* SH5 is handled entirely in sh64-tdep.c. */
|
| - return sh64_gdbarch_init (info, arches);
|
| - }
|
| + /* SH5 is handled entirely in sh64-tdep.c. */
|
| + if (info.bfd_arch_info->mach == bfd_mach_sh5)
|
| + return sh64_gdbarch_init (info, arches);
|
|
|
| /* If there is already a candidate, use it. */
|
| arches = gdbarch_list_lookup_by_info (arches, &info);
|
| @@ -2946,6 +2271,8 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
| set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
|
|
|
| set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_nofpu);
|
| + set_gdbarch_return_in_first_hidden_param_p (gdbarch,
|
| + sh_return_in_first_hidden_param_p);
|
|
|
| set_gdbarch_believe_pcc_promotion (gdbarch, 1);
|
|
|
| @@ -3066,6 +2393,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
| gdbarch_init_osabi (info, gdbarch);
|
|
|
| dwarf2_append_unwinders (gdbarch);
|
| + frame_unwind_append_unwinder (gdbarch, &sh_stub_unwind);
|
| frame_unwind_append_unwinder (gdbarch, &sh_frame_unwind);
|
|
|
| return gdbarch;
|
| @@ -3094,8 +2422,12 @@ _initialize_sh_tdep (void)
|
|
|
| gdbarch_register (bfd_arch_sh, sh_gdbarch_init, NULL);
|
|
|
| - add_com ("regs", class_vars, sh_show_regs_command, _("Print all registers"));
|
| -
|
| + /* We can't use an alias here because 'info registers' has not yet been
|
| + registered. */
|
| + c = add_com ("regs", class_vars, all_registers_info,
|
| + _("Print all registers"));
|
| + deprecate_cmd (c, "info all-registers");
|
| +
|
| add_prefix_cmd ("sh", no_class, set_sh_command, "SH specific commands.",
|
| &setshcmdlist, "set sh ", 0, &setlist);
|
| add_prefix_cmd ("sh", no_class, show_sh_command, "SH specific commands.",
|
|
|