X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fbfin-tdep.c;h=63fbf6209e2c86dcdeea54e6c0b510f0f3599ff6;hb=12279366d71627bfbdd74d1a6675dca825d8feca;hp=c75858ba985595d26a02104bb67c7a0ccea9aa4e;hpb=cd6c3b4ffc4ea6f56f12581419e2eed885441beb;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c index c75858ba98..63fbf6209e 100644 --- a/gdb/bfin-tdep.c +++ b/gdb/bfin-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for Analog Devices Blackfin processor, for GDB. - Copyright (C) 2005-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2018 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. @@ -241,6 +241,8 @@ static const int map_gcc_gdb[] = BFIN_LB1_REGNUM }; +/* Big enough to hold the size of the largest register in bytes. */ +#define BFIN_MAX_REGISTER_SIZE 4 struct bfin_frame_cache { @@ -601,20 +603,12 @@ bfin_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size) return bfin_breakpoint; } -/* This function implements the 'breakpoint_from_pc' gdbarch method. - It returns a pointer to a string of bytes that encode a breakpoint - instruction, stores the length of the string to *lenptr, and - adjusts the program counter (if necessary) to point to the actual - memory location where the breakpoint should be inserted. */ - -GDBARCH_BREAKPOINT_FROM_PC (bfin) - static void bfin_extract_return_value (struct type *type, struct regcache *regs, gdb_byte *dst) { - struct gdbarch *gdbarch = get_regcache_arch (regs); + struct gdbarch *gdbarch = regs->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); bfd_byte *valbuf = dst; int len = TYPE_LENGTH (type); @@ -694,10 +688,10 @@ bfin_register_name (struct gdbarch *gdbarch, int i) } static enum register_status -bfin_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, +bfin_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache, int regnum, gdb_byte *buffer) { - gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE); + gdb_byte buf[BFIN_MAX_REGISTER_SIZE]; enum register_status status; if (regnum != BFIN_CC_REGNUM) @@ -705,7 +699,7 @@ bfin_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, _("invalid register number %d"), regnum); /* Extract the CC bit from the ASTAT register. */ - status = regcache_raw_read (regcache, BFIN_ASTAT_REGNUM, buf); + status = regcache->raw_read (BFIN_ASTAT_REGNUM, buf); if (status == REG_VALID) { buffer[1] = buffer[2] = buffer[3] = 0; @@ -718,7 +712,7 @@ static void bfin_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buffer) { - gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE); + gdb_byte buf[BFIN_MAX_REGISTER_SIZE]; if (regnum != BFIN_CC_REGNUM) internal_error (__FILE__, __LINE__, @@ -817,7 +811,7 @@ bfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) return arches->gdbarch; } - tdep = XNEW (struct gdbarch_tdep); + tdep = XCNEW (struct gdbarch_tdep); gdbarch = gdbarch_alloc (&info, tdep); tdep->bfin_abi = abi; @@ -838,12 +832,12 @@ bfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_return_value (gdbarch, bfin_return_value); set_gdbarch_skip_prologue (gdbarch, bfin_skip_prologue); set_gdbarch_inner_than (gdbarch, core_addr_lessthan); - SET_GDBARCH_BREAKPOINT_MANIPULATION (bfin); + set_gdbarch_breakpoint_kind_from_pc (gdbarch, bfin_breakpoint_kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, bfin_sw_breakpoint_from_kind); set_gdbarch_decr_pc_after_break (gdbarch, 2); set_gdbarch_frame_args_skip (gdbarch, 8); set_gdbarch_unwind_pc (gdbarch, bfin_unwind_pc); set_gdbarch_frame_align (gdbarch, bfin_frame_align); - set_gdbarch_print_insn (gdbarch, print_insn_bfin); /* Hook in ABI-specific overrides, if they have been registered. */ gdbarch_init_osabi (info, gdbarch); @@ -857,9 +851,6 @@ bfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) return gdbarch; } -/* Provide a prototype to silence -Wmissing-prototypes. */ -extern initialize_file_ftype _initialize_bfin_tdep; - void _initialize_bfin_tdep (void) {