X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ffrv-tdep.c;h=fd76e522ba50fd8c3d7ca11d1cbe2a7b2a65bac8;hb=a435742a7fb32f6320ce0e6074e2500e28378104;hp=7ce08c05150814f9462e337a3d49ed7b9dcb11ef;hpb=087ccc6a4f8c754a4f4d31810839a631dbeabe0d;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c index 7ce08c0515..fd76e522ba 100644 --- a/gdb/frv-tdep.c +++ b/gdb/frv-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger. - Copyright (C) 2002-2016 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -39,8 +39,6 @@ #include "frv-tdep.h" #include "objfiles.h" -extern void _initialize_frv_tdep (void); - struct frv_unwind_cache /* was struct frame_extra_info */ { /* The previous frame's inner-most stack address. Used as this @@ -87,7 +85,7 @@ struct gdbarch_tdep int num_hw_breakpoints; /* Register names. */ - char **register_names; + const char **register_names; }; /* Return the FR-V ABI associated with GDBARCH. */ @@ -147,8 +145,8 @@ new_variant (void) /* By default, don't supply any general-purpose or floating-point register names. */ var->register_names - = (char **) xmalloc ((frv_num_regs + frv_num_pseudo_regs) - * sizeof (char *)); + = (const char **) xmalloc ((frv_num_regs + frv_num_pseudo_regs) + * sizeof (const char *)); for (r = 0; r < frv_num_regs + frv_num_pseudo_regs; r++) var->register_names[r] = ""; @@ -297,16 +295,16 @@ frv_register_type (struct gdbarch *gdbarch, int reg) } static enum register_status -frv_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, +frv_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache, int reg, gdb_byte *buffer) { enum register_status status; if (reg == iacc0_regnum) { - status = regcache_raw_read (regcache, iacc0h_regnum, buffer); + status = regcache->raw_read (iacc0h_regnum, buffer); if (status == REG_VALID) - status = regcache_raw_read (regcache, iacc0l_regnum, (bfd_byte *) buffer + 4); + status = regcache->raw_read (iacc0l_regnum, (bfd_byte *) buffer + 4); } else if (accg0_regnum <= reg && reg <= accg7_regnum) { @@ -317,7 +315,7 @@ frv_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int byte_num = (reg - accg0_regnum) % 4; gdb_byte buf[4]; - status = regcache_raw_read (regcache, raw_regnum, buf); + status = regcache->raw_read (raw_regnum, buf); if (status == REG_VALID) { memset (buffer, 0, 4); @@ -339,8 +337,8 @@ frv_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, { if (reg == iacc0_regnum) { - regcache_raw_write (regcache, iacc0h_regnum, buffer); - regcache_raw_write (regcache, iacc0l_regnum, (bfd_byte *) buffer + 4); + regcache->raw_write (iacc0h_regnum, buffer); + regcache->raw_write (iacc0l_regnum, (bfd_byte *) buffer + 4); } else if (accg0_regnum <= reg && reg <= accg7_regnum) { @@ -351,9 +349,9 @@ frv_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int byte_num = (reg - accg0_regnum) % 4; gdb_byte buf[4]; - regcache_raw_read (regcache, raw_regnum, buf); + regcache->raw_read (raw_regnum, buf); buf[byte_num] = ((bfd_byte *) buffer)[0]; - regcache_raw_write (regcache, raw_regnum, buf); + regcache->raw_write (raw_regnum, buf); } } @@ -424,13 +422,9 @@ frv_register_sim_regno (struct gdbarch *gdbarch, int reg) internal_error (__FILE__, __LINE__, _("Bad register number %d"), reg); } -static const unsigned char * -frv_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenp) -{ - static unsigned char breakpoint[] = {0xc0, 0x70, 0x00, 0x01}; - *lenp = sizeof (breakpoint); - return breakpoint; -} +constexpr gdb_byte frv_break_insn[] = {0xc0, 0x70, 0x00, 0x01}; + +typedef BP_MANIPULATION (frv_break_insn) frv_breakpoint; /* Define the maximum number of instructions which may be packed into a bundle (VLIW instruction). */ @@ -530,7 +524,7 @@ frv_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, J - The register number of GRj in the instruction description. K - The register number of GRk in the instruction description. I - The register number of GRi. - S - a signed imediate offset. + S - a signed immediate offset. U - an unsigned immediate offset. The dots below the numbers indicate where hex digit boundaries @@ -1080,8 +1074,8 @@ frv_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) s = lookup_minimal_symbol_by_pc (call_dest); if (s.minsym != NULL - && MSYMBOL_LINKAGE_NAME (s.minsym) != NULL - && strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "__main") == 0) + && s.minsym->linkage_name () != NULL + && strcmp (s.minsym->linkage_name (), "__main") == 0) { pc += 4; return pc; @@ -1116,7 +1110,7 @@ static void frv_extract_return_value (struct type *type, struct regcache *regcache, gdb_byte *valbuf) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int len = TYPE_LENGTH (type); @@ -1199,7 +1193,8 @@ static CORE_ADDR frv_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, - int struct_return, CORE_ADDR struct_addr) + function_call_return_method return_method, + CORE_ADDR struct_addr) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int argreg; @@ -1236,7 +1231,7 @@ frv_push_dummy_call (struct gdbarch *gdbarch, struct value *function, argreg = 8; - if (struct_return) + if (return_method == return_method_struct) regcache_cooked_write_unsigned (regcache, struct_return_regnum, struct_addr); @@ -1245,7 +1240,7 @@ frv_push_dummy_call (struct gdbarch *gdbarch, struct value *function, arg = args[argnum]; arg_type = check_typedef (value_type (arg)); len = TYPE_LENGTH (arg_type); - typecode = TYPE_CODE (arg_type); + typecode = arg_type->code (); if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION) { @@ -1258,7 +1253,7 @@ frv_push_dummy_call (struct gdbarch *gdbarch, struct value *function, else if (abi == FRV_ABI_FDPIC && len == 4 && typecode == TYPE_CODE_PTR - && TYPE_CODE (TYPE_TARGET_TYPE (arg_type)) == TYPE_CODE_FUNC) + && TYPE_TARGET_TYPE (arg_type)->code () == TYPE_CODE_FUNC) { /* The FDPIC ABI requires function descriptors to be passed instead of entry points. */ @@ -1333,12 +1328,12 @@ frv_store_return_value (struct type *type, struct regcache *regcache, bfd_byte val[4]; memset (val, 0, sizeof (val)); memcpy (val + (4 - len), valbuf, len); - regcache_cooked_write (regcache, 8, val); + regcache->cooked_write (8, val); } else if (len == 8) { - regcache_cooked_write (regcache, 8, valbuf); - regcache_cooked_write (regcache, 9, (bfd_byte *) valbuf + 4); + regcache->cooked_write (8, valbuf); + regcache->cooked_write (9, (bfd_byte *) valbuf + 4); } else internal_error (__FILE__, __LINE__, @@ -1350,9 +1345,9 @@ frv_return_value (struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - int struct_return = TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY; + int struct_return = valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY; if (writebuf != NULL) { @@ -1372,12 +1367,6 @@ frv_return_value (struct gdbarch *gdbarch, struct value *function, return RETURN_VALUE_REGISTER_CONVENTION; } -static CORE_ADDR -frv_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) -{ - return frame_unwind_register_unsigned (next_frame, pc_regnum); -} - /* Given a GDB frame, determine the address of the calling function's frame. This will be used to create a new GDB frame struct. */ @@ -1444,24 +1433,6 @@ static const struct frame_base frv_frame_base = { frv_frame_base_address }; -static CORE_ADDR -frv_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame) -{ - return frame_unwind_register_unsigned (next_frame, sp_regnum); -} - - -/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy - frame. The frame ID's base needs to match the TOS value saved by - save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint. */ - -static struct frame_id -frv_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame) -{ - CORE_ADDR sp = get_frame_register_unsigned (this_frame, sp_regnum); - return frame_id_build (sp, get_frame_pc (this_frame)); -} - static struct gdbarch * frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) { @@ -1537,15 +1508,14 @@ frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_skip_prologue (gdbarch, frv_skip_prologue); set_gdbarch_skip_main_prologue (gdbarch, frv_skip_main_prologue); - set_gdbarch_breakpoint_from_pc (gdbarch, frv_breakpoint_from_pc); + set_gdbarch_breakpoint_kind_from_pc (gdbarch, frv_breakpoint::kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, frv_breakpoint::bp_from_kind); set_gdbarch_adjust_breakpoint_address (gdbarch, frv_adjust_breakpoint_address); set_gdbarch_return_value (gdbarch, frv_return_value); /* Frame stuff. */ - set_gdbarch_unwind_pc (gdbarch, frv_unwind_pc); - set_gdbarch_unwind_sp (gdbarch, frv_unwind_sp); set_gdbarch_frame_align (gdbarch, frv_frame_align); frame_base_set_default (gdbarch, &frv_frame_base); /* We set the sniffer lower down after the OSABI hooks have been @@ -1553,7 +1523,6 @@ frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Settings for calling functions in the inferior. */ set_gdbarch_push_dummy_call (gdbarch, frv_push_dummy_call); - set_gdbarch_dummy_id (gdbarch, frv_dummy_id); /* Settings that should be unnecessary. */ set_gdbarch_inner_than (gdbarch, core_addr_lessthan); @@ -1585,7 +1554,6 @@ frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) break; } - set_gdbarch_print_insn (gdbarch, print_insn_frv); if (frv_abi (gdbarch) == FRV_ABI_FDPIC) set_gdbarch_convert_from_func_ptr_addr (gdbarch, frv_convert_from_func_ptr_addr); @@ -1605,8 +1573,9 @@ frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) return gdbarch; } +void _initialize_frv_tdep (); void -_initialize_frv_tdep (void) +_initialize_frv_tdep () { register_gdbarch_init (bfd_arch_frv, frv_gdbarch_init); }