X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Flm32-tdep.c;h=78ba1b02270364bb0264b1b70d7e6c145871259e;hb=5f23a08201ed01570b34f5cff99a95fc7b9e2fdb;hp=3ac7f89d5d971a4661d4dbf6f7b511110a33d2ef;hpb=ecd75fc8eed3bde86036141228074a20e55dcfc9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/lm32-tdep.c b/gdb/lm32-tdep.c index 3ac7f89d5d..78ba1b0227 100644 --- a/gdb/lm32-tdep.c +++ b/gdb/lm32-tdep.c @@ -1,7 +1,7 @@ /* Target-dependent code for Lattice Mico32 processor, for GDB. Contributed by Jon Beniston - Copyright (C) 2009-2014 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -36,8 +36,7 @@ #include "trad-frame.h" #include "reggroups.h" #include "opcodes/lm32-desc.h" - -#include +#include /* Macros to extract fields from an instruction. */ #define LM32_OPCODE(insn) ((insn >> 26) & 0x3f) @@ -92,7 +91,7 @@ lm32_register_reggroup_p (struct gdbarch *gdbarch, int regnum, static const char * lm32_register_name (struct gdbarch *gdbarch, int reg_nr) { - static char *register_names[] = { + static const char *register_names[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", @@ -199,7 +198,7 @@ lm32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) CORE_ADDR post_prologue_pc = skip_prologue_using_sal (gdbarch, func_addr); if (post_prologue_pc != 0) - return max (pc, post_prologue_pc); + return std::max (pc, post_prologue_pc); } /* Can't determine prologue from the symbol table, need to examine @@ -217,16 +216,10 @@ lm32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) } /* Create a breakpoint instruction. */ +constexpr gdb_byte lm32_break_insn[4] = { OP_RAISE << 2, 0, 0, 2 }; -static const gdb_byte * -lm32_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, - int *lenptr) -{ - static const gdb_byte breakpoint[4] = { OP_RAISE << 2, 0, 0, 2 }; +typedef BP_MANIPULATION (lm32_break_insn) lm32_breakpoint; - *lenptr = sizeof (breakpoint); - return breakpoint; -} /* Setup registers and stack for faking a call to a function in the inferior. */ @@ -235,7 +228,8 @@ static CORE_ADDR lm32_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 first_arg_reg = SIM_LM32_R1_REGNUM; @@ -247,7 +241,7 @@ lm32_push_dummy_call (struct gdbarch *gdbarch, struct value *function, /* If we're returning a large struct, a pointer to the address to store it at is passed as a first hidden parameter. */ - if (struct_return) + if (return_method == return_method_struct) { regcache_cooked_write_unsigned (regcache, first_arg_reg, struct_addr); first_arg_reg++; @@ -291,7 +285,8 @@ lm32_push_dummy_call (struct gdbarch *gdbarch, struct value *function, regcache_cooked_write_unsigned (regcache, first_arg_reg + i, val); else { - write_memory (sp, (void *) &val, TYPE_LENGTH (arg_type)); + write_memory_unsigned_integer (sp, TYPE_LENGTH (arg_type), byte_order, + val); sp -= 4; } } @@ -309,7 +304,7 @@ static void lm32_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); ULONGEST l; CORE_ADDR return_buffer; @@ -346,7 +341,7 @@ static void lm32_store_return_value (struct type *type, struct regcache *regcache, const gdb_byte *valbuf) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); ULONGEST val; int len = TYPE_LENGTH (type); @@ -388,26 +383,6 @@ lm32_return_value (struct gdbarch *gdbarch, struct value *function, return RETURN_VALUE_REGISTER_CONVENTION; } -static CORE_ADDR -lm32_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) -{ - return frame_unwind_register_unsigned (next_frame, SIM_LM32_PC_REGNUM); -} - -static CORE_ADDR -lm32_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame) -{ - return frame_unwind_register_unsigned (next_frame, SIM_LM32_SP_REGNUM); -} - -static struct frame_id -lm32_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame) -{ - CORE_ADDR sp = get_frame_register_unsigned (this_frame, SIM_LM32_SP_REGNUM); - - return frame_id_build (sp, get_frame_pc (this_frame)); -} - /* Put here the code to store, into fi->saved_regs, the addresses of the saved registers of frame described by FRAME_INFO. This includes special registers such as pc and fp saved in special ways @@ -424,7 +399,7 @@ lm32_frame_cache (struct frame_info *this_frame, void **this_prologue_cache) int i; if ((*this_prologue_cache)) - return (*this_prologue_cache); + return (struct lm32_frame_cache *) (*this_prologue_cache); info = FRAME_OBSTACK_ZALLOC (struct lm32_frame_cache); (*this_prologue_cache) = info; @@ -527,7 +502,7 @@ lm32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) return arches->gdbarch; /* None found, create a new architecture from the information provided. */ - tdep = XMALLOC (struct gdbarch_tdep); + tdep = XCNEW (struct gdbarch_tdep); gdbarch = gdbarch_alloc (&info, tdep); /* Type sizes. */ @@ -557,31 +532,23 @@ lm32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Frame unwinding. */ set_gdbarch_frame_align (gdbarch, lm32_frame_align); frame_base_set_default (gdbarch, &lm32_frame_base); - set_gdbarch_unwind_pc (gdbarch, lm32_unwind_pc); - set_gdbarch_unwind_sp (gdbarch, lm32_unwind_sp); - set_gdbarch_dummy_id (gdbarch, lm32_dummy_id); frame_unwind_append_unwinder (gdbarch, &lm32_frame_unwind); /* Breakpoints. */ - set_gdbarch_breakpoint_from_pc (gdbarch, lm32_breakpoint_from_pc); + set_gdbarch_breakpoint_kind_from_pc (gdbarch, lm32_breakpoint::kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, lm32_breakpoint::bp_from_kind); set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1); /* Calling functions in the inferior. */ set_gdbarch_push_dummy_call (gdbarch, lm32_push_dummy_call); set_gdbarch_return_value (gdbarch, lm32_return_value); - /* Instruction disassembler. */ - set_gdbarch_print_insn (gdbarch, print_insn_lm32); - lm32_add_reggroups (gdbarch); set_gdbarch_register_reggroup_p (gdbarch, lm32_register_reggroup_p); return gdbarch; } -/* -Wmissing-prototypes */ -extern initialize_file_ftype _initialize_lm32_tdep; - void _initialize_lm32_tdep (void) {