diff options
Diffstat (limited to 'gdb/mn10300-tdep.c')
-rw-r--r-- | gdb/mn10300-tdep.c | 226 |
1 files changed, 102 insertions, 124 deletions
diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c index fa43e8b..b4df2e6 100644 --- a/gdb/mn10300-tdep.c +++ b/gdb/mn10300-tdep.c @@ -22,7 +22,7 @@ #include "dis-asm.h" #include "gdbtypes.h" #include "regcache.h" -#include "gdbcore.h" /* For write_memory_unsigned_integer. */ +#include "gdbcore.h" /* For write_memory_unsigned_integer. */ #include "value.h" #include "frame.h" #include "frame-unwind.h" @@ -36,12 +36,11 @@ #include "mn10300-tdep.h" - /* The am33-2 has 64 registers. */ #define MN10300_MAX_NUM_REGS 64 /* Big enough to hold the size of the largest register in bytes. */ -#define MN10300_MAX_REGISTER_SIZE 64 +#define MN10300_MAX_REGISTER_SIZE 64 /* This structure holds the results of a prologue analysis. */ struct mn10300_prologue @@ -80,7 +79,6 @@ struct mn10300_prologue int reg_offset[MN10300_MAX_NUM_REGS]; }; - /* Compute the alignment required by a type. */ static int @@ -124,7 +122,7 @@ mn10300_type_align (struct type *type) return mn10300_type_align (check_typedef (type)); default: - internal_error (_("bad switch")); + internal_error (_ ("bad switch")); } } @@ -173,7 +171,7 @@ mn10300_store_return_value (struct gdbarch *gdbarch, struct type *type, { int len = type->length (); int reg, regsz; - + if (type->code () == TYPE_CODE_PTR) reg = 4; else @@ -190,7 +188,7 @@ mn10300_store_return_value (struct gdbarch *gdbarch, struct type *type, regcache->raw_write_part (reg + 1, 0, len - regsz, valbuf + regsz); } else - internal_error (_("Cannot store return value %d bytes long."), len); + internal_error (_ ("Cannot store return value %d bytes long."), len); } static void @@ -222,7 +220,7 @@ mn10300_extract_return_value (struct gdbarch *gdbarch, struct type *type, memcpy ((char *) valbuf + regsz, buf, len - regsz); } else - internal_error (_("Cannot extract return value %d bytes long."), len); + internal_error (_ ("Cannot extract return value %d bytes long."), len); } /* Determine, for architecture GDBARCH, how a return value of TYPE @@ -257,42 +255,36 @@ register_name (int reg, const char **regs, long num_regs) static const char * mn10300_generic_register_name (struct gdbarch *gdbarch, int reg) { - static const char *regs[] = - { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3", - "sp", "pc", "mdr", "psw", "lir", "lar", "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "fp" - }; + static const char *regs[] + = { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3", "sp", "pc", "mdr", + "psw", "lir", "lar", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "fp" }; return register_name (reg, regs, ARRAY_SIZE (regs)); } - static const char * am33_register_name (struct gdbarch *gdbarch, int reg) { - static const char *regs[] = - { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3", - "sp", "pc", "mdr", "psw", "lir", "lar", "", - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", "" - }; + static const char *regs[] + = { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3", + "sp", "pc", "mdr", "psw", "lir", "lar", "", "r0", + "r1", "r2", "r3", "r4", "r5", "r6", "r7", "ssp", + "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", "" }; return register_name (reg, regs, ARRAY_SIZE (regs)); } static const char * am33_2_register_name (struct gdbarch *gdbarch, int reg) { - static const char *regs[] = - { - "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3", - "sp", "pc", "mdr", "psw", "lir", "lar", "mdrq", "r0", - "r1", "r2", "r3", "r4", "r5", "r6", "r7", "ssp", - "msp", "usp", "mcrh", "mcrl", "mcvf", "fpcr", "", "", - "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", - "fs8", "fs9", "fs10", "fs11", "fs12", "fs13", "fs14", "fs15", - "fs16", "fs17", "fs18", "fs19", "fs20", "fs21", "fs22", "fs23", - "fs24", "fs25", "fs26", "fs27", "fs28", "fs29", "fs30", "fs31" - }; + static const char *regs[] + = { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3", + "sp", "pc", "mdr", "psw", "lir", "lar", "mdrq", "r0", + "r1", "r2", "r3", "r4", "r5", "r6", "r7", "ssp", + "msp", "usp", "mcrh", "mcrl", "mcvf", "fpcr", "", "", + "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", + "fs8", "fs9", "fs10", "fs11", "fs12", "fs13", "fs14", "fs15", + "fs16", "fs17", "fs18", "fs19", "fs20", "fs21", "fs22", "fs23", + "fs24", "fs25", "fs26", "fs27", "fs28", "fs29", "fs30", "fs31" }; return register_name (reg, regs, ARRAY_SIZE (regs)); } @@ -308,7 +300,7 @@ mn10300_register_type (struct gdbarch *gdbarch, int reg) The Matsushita mn10x00 processors have single byte instructions so we need a single byte breakpoint. Matsushita hasn't defined one, so we defined it ourselves. */ -constexpr gdb_byte mn10300_break_insn[] = {0xff}; +constexpr gdb_byte mn10300_break_insn[] = { 0xff }; typedef BP_MANIPULATION (mn10300_break_insn) mn10300_breakpoint; @@ -327,7 +319,7 @@ push_reg (pv_t *regs, struct pv_area *stack, int regnum) static int translate_rreg (int rreg) { - /* The higher register numbers actually correspond to the + /* The higher register numbers actually correspond to the basic machine's address and data registers. */ if (rreg > 7 && rreg < 12) return E_A0_REGNUM + rreg - 8; @@ -347,8 +339,7 @@ check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value) { struct mn10300_prologue *result = (struct mn10300_prologue *) result_untyped; - if (value.kind == pvk_register - && value.k == 0 + if (value.kind == pvk_register && value.k == 0 && pv_is_register (addr, E_SP_REGNUM) && size == register_size (result->gdbarch, value.reg)) result->reg_offset[value.reg] = addr.k; @@ -359,9 +350,8 @@ check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value) returned in RESULT. See struct mn10300_prologue above for more information. */ static void -mn10300_analyze_prologue (struct gdbarch *gdbarch, - CORE_ADDR start_pc, CORE_ADDR limit_pc, - struct mn10300_prologue *result) +mn10300_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc, + CORE_ADDR limit_pc, struct mn10300_prologue *result) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); CORE_ADDR pc; @@ -514,7 +504,6 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, gdb_byte buf[1]; LONGEST imm8; - status = target_read_memory (pc + 2, buf, 1); if (status != 0) break; @@ -553,7 +542,6 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, if (status != 0) break; - imm32 = extract_signed_integer (buf, 4, byte_order); regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], imm32); @@ -570,8 +558,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, aN = instr[0] & 0x03; imm8 = extract_signed_integer (&instr[1], 1, byte_order); - regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN], - imm8); + regs[E_A0_REGNUM + aN] + = pv_add_constant (regs[E_A0_REGNUM + aN], imm8); pc += 2; } @@ -588,11 +576,10 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, if (status != 0) break; - imm16 = extract_signed_integer (buf, 2, byte_order); - regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN], - imm16); + regs[E_A0_REGNUM + aN] + = pv_add_constant (regs[E_A0_REGNUM + aN], imm16); pc += 4; } @@ -611,8 +598,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, imm32 = extract_signed_integer (buf, 2, byte_order); - regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN], - imm32); + regs[E_A0_REGNUM + aN] + = pv_add_constant (regs[E_A0_REGNUM + aN], imm32); pc += 6; } /* fmov fsM, (rN) */ @@ -631,8 +618,7 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, rN = buf[0] & 0x0f; fsM = (Y << 4) | sM; - stack.store (regs[translate_rreg (rN)], 4, - regs[E_FS0_REGNUM + fsM]); + stack.store (regs[translate_rreg (rN)], 4, regs[E_FS0_REGNUM + fsM]); pc += 3; } @@ -651,8 +637,7 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, sM = (buf[0] & 0xf0) >> 4; fsM = (Y << 4) | sM; - stack.store (regs[E_SP_REGNUM], 4, - regs[E_FS0_REGNUM + fsM]); + stack.store (regs[E_SP_REGNUM], 4, regs[E_FS0_REGNUM + fsM]); pc += 3; } @@ -662,7 +647,6 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, int fsM, sM, Z, rN, rI; gdb_byte buf[2]; - status = target_read_memory (pc + 2, buf, 2); if (status != 0) break; @@ -697,8 +681,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, fsM = (Y << 4) | sM; d8 = extract_signed_integer (&buf[1], 1, byte_order); - stack.store (pv_add_constant (regs[translate_rreg (rN)], d8), - 4, regs[E_FS0_REGNUM + fsM]); + stack.store (pv_add_constant (regs[translate_rreg (rN)], d8), 4, + regs[E_FS0_REGNUM + fsM]); pc += 4; } @@ -720,8 +704,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, fsM = (Y << 4) | sM; d24 = extract_signed_integer (&buf[1], 3, byte_order); - stack.store (pv_add_constant (regs[translate_rreg (rN)], d24), - 4, regs[E_FS0_REGNUM + fsM]); + stack.store (pv_add_constant (regs[translate_rreg (rN)], d24), 4, + regs[E_FS0_REGNUM + fsM]); pc += 6; } @@ -743,8 +727,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, fsM = (Y << 4) | sM; d32 = extract_signed_integer (&buf[1], 4, byte_order); - stack.store (pv_add_constant (regs[translate_rreg (rN)], d32), - 4, regs[E_FS0_REGNUM + fsM]); + stack.store (pv_add_constant (regs[translate_rreg (rN)], d32), 4, + regs[E_FS0_REGNUM + fsM]); pc += 7; } @@ -765,8 +749,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, fsM = (Y << 4) | sM; d8 = extract_signed_integer (&buf[1], 1, byte_order); - stack.store (pv_add_constant (regs[E_SP_REGNUM], d8), - 4, regs[E_FS0_REGNUM + fsM]); + stack.store (pv_add_constant (regs[E_SP_REGNUM], d8), 4, + regs[E_FS0_REGNUM + fsM]); pc += 4; } @@ -787,8 +771,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, fsM = (Y << 4) | sM; d24 = extract_signed_integer (&buf[1], 3, byte_order); - stack.store (pv_add_constant (regs[E_SP_REGNUM], d24), - 4, regs[E_FS0_REGNUM + fsM]); + stack.store (pv_add_constant (regs[E_SP_REGNUM], d24), 4, + regs[E_FS0_REGNUM + fsM]); pc += 6; } @@ -809,8 +793,8 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, fsM = (Y << 4) | sM; d32 = extract_signed_integer (&buf[1], 4, byte_order); - stack.store (pv_add_constant (regs[E_SP_REGNUM], d32), - 4, regs[E_FS0_REGNUM + fsM]); + stack.store (pv_add_constant (regs[E_SP_REGNUM], d32), 4, + regs[E_FS0_REGNUM + fsM]); pc += 7; } @@ -832,8 +816,7 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch, rN_regnum = translate_rreg (rN); - stack.store (regs[rN_regnum], 4, - regs[E_FS0_REGNUM + fsM]); + stack.store (regs[rN_regnum], 4, regs[E_FS0_REGNUM + fsM]); regs[rN_regnum] = pv_add_constant (regs[rN_regnum], 4); pc += 3; @@ -1043,7 +1026,7 @@ mn10300_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) invoke mn10300_analyze_prologue and return its result. */ static struct mn10300_prologue * mn10300_analyze_frame_prologue (frame_info_ptr this_frame, - void **this_prologue_cache) + void **this_prologue_cache) { if (!*this_prologue_cache) { @@ -1059,10 +1042,9 @@ mn10300_analyze_frame_prologue (frame_info_ptr this_frame, if (!func_start) stop_addr = func_start; - mn10300_analyze_prologue (get_frame_arch (this_frame), - func_start, stop_addr, - ((struct mn10300_prologue *) - *this_prologue_cache)); + mn10300_analyze_prologue ( + get_frame_arch (this_frame), func_start, stop_addr, + ((struct mn10300_prologue *) *this_prologue_cache)); } return (struct mn10300_prologue *) *this_prologue_cache; @@ -1095,14 +1077,12 @@ mn10300_frame_base (frame_info_ptr this_frame, void **this_prologue_cache) } static void -mn10300_frame_this_id (frame_info_ptr this_frame, - void **this_prologue_cache, +mn10300_frame_this_id (frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id) { - *this_id = frame_id_build (mn10300_frame_base (this_frame, - this_prologue_cache), - get_frame_func (this_frame)); - + *this_id + = frame_id_build (mn10300_frame_base (this_frame, this_prologue_cache), + get_frame_func (this_frame)); } static struct value * @@ -1127,15 +1107,14 @@ mn10300_frame_prev_register (frame_info_ptr this_frame, return frame_unwind_got_register (this_frame, regnum, regnum); } -static const struct frame_unwind mn10300_frame_unwind = { - "mn10300 prologue", - NORMAL_FRAME, - default_frame_unwind_stop_reason, - mn10300_frame_this_id, - mn10300_frame_prev_register, - NULL, - default_frame_sniffer -}; +static const struct frame_unwind mn10300_frame_unwind + = { "mn10300 prologue", + NORMAL_FRAME, + default_frame_unwind_stop_reason, + mn10300_frame_this_id, + mn10300_frame_prev_register, + NULL, + default_frame_sniffer }; static void mn10300_frame_unwind_init (struct gdbarch *gdbarch) @@ -1152,19 +1131,16 @@ mn10300_frame_unwind_init (struct gdbarch *gdbarch) */ static CORE_ADDR -mn10300_push_dummy_call (struct gdbarch *gdbarch, - struct value *target_func, - struct regcache *regcache, - CORE_ADDR bp_addr, - int nargs, struct value **args, - CORE_ADDR sp, +mn10300_push_dummy_call (struct gdbarch *gdbarch, struct value *target_func, + struct regcache *regcache, CORE_ADDR bp_addr, + int nargs, struct value **args, CORE_ADDR sp, function_call_return_method return_method, CORE_ADDR struct_addr) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); const int push_size = register_size (gdbarch, E_PC_REGNUM); int regs_used; - int len, arg_len; + int len, arg_len; int stack_offset = 0; int argnum; const gdb_byte *val; @@ -1223,8 +1199,9 @@ mn10300_push_dummy_call (struct gdbarch *gdbarch, while (regs_used < 2 && arg_len > 0) { - regcache_cooked_write_unsigned (regcache, regs_used, - extract_unsigned_integer (val, push_size, byte_order)); + regcache_cooked_write_unsigned ( + regcache, regs_used, + extract_unsigned_integer (val, push_size, byte_order)); val += push_size; arg_len -= push_size; regs_used++; @@ -1274,7 +1251,7 @@ mn10300_push_dummy_call (struct gdbarch *gdbarch, construct the frame ID of the dummy call. */ { CORE_ADDR func_addr = find_function_addr (target_func, NULL); - CORE_ADDR unwound_sp + CORE_ADDR unwound_sp = gdbarch_unwind_sp (gdbarch, create_new_frame (sp, func_addr)); if (sp != unwound_sp) regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, @@ -1298,39 +1275,42 @@ mn10300_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2) initializer in gcc/config/mn10300/mn10300.h. Registers which appear in GCC's numbering, but have no counterpart in GDB's world, are marked with a -1. */ - static int dwarf2_to_gdb[] = { - E_D0_REGNUM, E_D1_REGNUM, E_D2_REGNUM, E_D3_REGNUM, - E_A0_REGNUM, E_A1_REGNUM, E_A2_REGNUM, E_A3_REGNUM, - -1, E_SP_REGNUM, + static int dwarf2_to_gdb[] + = { E_D0_REGNUM, E_D1_REGNUM, E_D2_REGNUM, + E_D3_REGNUM, E_A0_REGNUM, E_A1_REGNUM, + E_A2_REGNUM, E_A3_REGNUM, -1, + E_SP_REGNUM, - E_E0_REGNUM, E_E1_REGNUM, E_E2_REGNUM, E_E3_REGNUM, - E_E4_REGNUM, E_E5_REGNUM, E_E6_REGNUM, E_E7_REGNUM, + E_E0_REGNUM, E_E1_REGNUM, E_E2_REGNUM, + E_E3_REGNUM, E_E4_REGNUM, E_E5_REGNUM, + E_E6_REGNUM, E_E7_REGNUM, - E_FS0_REGNUM + 0, E_FS0_REGNUM + 1, E_FS0_REGNUM + 2, E_FS0_REGNUM + 3, - E_FS0_REGNUM + 4, E_FS0_REGNUM + 5, E_FS0_REGNUM + 6, E_FS0_REGNUM + 7, + E_FS0_REGNUM + 0, E_FS0_REGNUM + 1, E_FS0_REGNUM + 2, + E_FS0_REGNUM + 3, E_FS0_REGNUM + 4, E_FS0_REGNUM + 5, + E_FS0_REGNUM + 6, E_FS0_REGNUM + 7, - E_FS0_REGNUM + 8, E_FS0_REGNUM + 9, E_FS0_REGNUM + 10, E_FS0_REGNUM + 11, - E_FS0_REGNUM + 12, E_FS0_REGNUM + 13, E_FS0_REGNUM + 14, E_FS0_REGNUM + 15, + E_FS0_REGNUM + 8, E_FS0_REGNUM + 9, E_FS0_REGNUM + 10, + E_FS0_REGNUM + 11, E_FS0_REGNUM + 12, E_FS0_REGNUM + 13, + E_FS0_REGNUM + 14, E_FS0_REGNUM + 15, - E_FS0_REGNUM + 16, E_FS0_REGNUM + 17, E_FS0_REGNUM + 18, E_FS0_REGNUM + 19, - E_FS0_REGNUM + 20, E_FS0_REGNUM + 21, E_FS0_REGNUM + 22, E_FS0_REGNUM + 23, + E_FS0_REGNUM + 16, E_FS0_REGNUM + 17, E_FS0_REGNUM + 18, + E_FS0_REGNUM + 19, E_FS0_REGNUM + 20, E_FS0_REGNUM + 21, + E_FS0_REGNUM + 22, E_FS0_REGNUM + 23, - E_FS0_REGNUM + 24, E_FS0_REGNUM + 25, E_FS0_REGNUM + 26, E_FS0_REGNUM + 27, - E_FS0_REGNUM + 28, E_FS0_REGNUM + 29, E_FS0_REGNUM + 30, E_FS0_REGNUM + 31, + E_FS0_REGNUM + 24, E_FS0_REGNUM + 25, E_FS0_REGNUM + 26, + E_FS0_REGNUM + 27, E_FS0_REGNUM + 28, E_FS0_REGNUM + 29, + E_FS0_REGNUM + 30, E_FS0_REGNUM + 31, - E_MDR_REGNUM, E_PSW_REGNUM, E_PC_REGNUM - }; + E_MDR_REGNUM, E_PSW_REGNUM, E_PC_REGNUM }; - if (dwarf2 < 0 - || dwarf2 >= ARRAY_SIZE (dwarf2_to_gdb)) + if (dwarf2 < 0 || dwarf2 >= ARRAY_SIZE (dwarf2_to_gdb)) return -1; return dwarf2_to_gdb[dwarf2]; } static struct gdbarch * -mn10300_gdbarch_init (struct gdbarch_info info, - struct gdbarch_list *arches) +mn10300_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) { int num_regs; @@ -1362,7 +1342,7 @@ mn10300_gdbarch_init (struct gdbarch_info info, set_gdbarch_fp0_regnum (gdbarch, 32); break; default: - internal_error (_("mn10300_gdbarch_init: Unknown mn10300 variant")); + internal_error (_ ("mn10300_gdbarch_init: Unknown mn10300 variant")); break; } @@ -1388,12 +1368,11 @@ mn10300_gdbarch_init (struct gdbarch_info info, /* Stage 2 */ set_gdbarch_return_value (gdbarch, mn10300_return_value); - + /* Stage 3 -- get target calls working. */ set_gdbarch_push_dummy_call (gdbarch, mn10300_push_dummy_call); /* set_gdbarch_return_value (store, extract) */ - mn10300_frame_unwind_init (gdbarch); /* Hook in ABI-specific overrides, if they have been registered. */ @@ -1401,21 +1380,20 @@ mn10300_gdbarch_init (struct gdbarch_info info, return gdbarch; } - + /* Dump out the mn10300 specific architecture information. */ static void mn10300_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file) { mn10300_gdbarch_tdep *tdep = gdbarch_tdep<mn10300_gdbarch_tdep> (gdbarch); - gdb_printf (file, "mn10300_dump_tdep: am33_mode = %d\n", - tdep->am33_mode); + gdb_printf (file, "mn10300_dump_tdep: am33_mode = %d\n", tdep->am33_mode); } void _initialize_mn10300_tdep (); + void _initialize_mn10300_tdep () { gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep); } - |