X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Fxstormy16-tdep.c;h=153375a1bd117e830888e8c773967c25bc03a629;hb=65d40437e2704e635e7144319e956edf3e7fa026;hp=b2686cbf8f8f9282076992715d35b990aa2e9692;hpb=ecd75fc8eed3bde86036141228074a20e55dcfc9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c index b2686cbf8f..153375a1bd 100644 --- a/gdb/xstormy16-tdep.c +++ b/gdb/xstormy16-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for the Sanyo Xstormy16a (LC590000) processor. - Copyright (C) 2001-2014 Free Software Foundation, Inc. + Copyright (C) 2001-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -29,14 +29,11 @@ #include "value.h" #include "dis-asm.h" #include "inferior.h" -#include -#include "gdb_assert.h" #include "arch-utils.h" -#include "floatformat.h" #include "regcache.h" -#include "doublest.h" #include "osabi.h" #include "objfiles.h" +#include "common/byte-vector.h" enum gdb_regnum { @@ -105,7 +102,7 @@ enum static const char * xstormy16_register_name (struct gdbarch *gdbarch, int regnum) { - static char *register_names[] = { + static const char *register_names[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "psw", "sp", "pc" @@ -278,21 +275,17 @@ xstormy16_push_dummy_call (struct gdbarch *gdbarch, wordaligned. */ for (j = nargs - 1; j >= i; j--) { - gdb_byte *val; - struct cleanup *back_to; const gdb_byte *bytes = value_contents (args[j]); typelen = TYPE_LENGTH (value_enclosing_type (args[j])); slacklen = typelen & 1; - val = xmalloc (typelen + slacklen); - back_to = make_cleanup (xfree, val); - memcpy (val, bytes, typelen); - memset (val + typelen, 0, slacklen); + gdb::byte_vector val (typelen + slacklen); + memcpy (val.data (), bytes, typelen); + memset (val.data () + typelen, 0, slacklen); /* Now write this data to the stack. The stack grows upwards. */ - write_memory (stack_dest, val, typelen + slacklen); + write_memory (stack_dest, val.data (), typelen + slacklen); stack_dest += typelen + slacklen; - do_cleanups (back_to); } store_unsigned_integer (buf, xstormy16_pc_size, byte_order, bp_addr); @@ -376,7 +369,7 @@ xstormy16_analyze_prologue (struct gdbarch *gdbarch, /* Probably only in optimized case but legal action for prologue. */ else if ((inst & 0xff00) == 0x4600 /* 46SD mov rD, rS */ && (inst & 0x00f0) >= 0x0020 && (inst & 0x00f0) <= 0x0070 - && (inst & 0x000f) >= 0x00a0 && (inst & 0x000f) <= 0x000d) + && (inst & 0x000f) >= 0x000a && (inst & 0x000f) <= 0x000d) ; /* Optional copying of args in r2-r7 to stack. */ @@ -435,7 +428,7 @@ xstormy16_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) return plg_end; /* Found a function. */ - sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL); + sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL).symbol; /* Don't use line number debug info for assembly source files. */ if (sym && SYMBOL_LANGUAGE (sym) != language_asm) { @@ -455,11 +448,14 @@ xstormy16_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) return (CORE_ADDR) pc; } -/* The epilogue is defined here as the area at the end of a function, +/* Implement the stack_frame_destroyed_p gdbarch method. + + 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. */ + static int -xstormy16_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) +xstormy16_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); CORE_ADDR func_addr = 0, func_end = 0; @@ -505,14 +501,9 @@ xstormy16_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) return 0; } -static const unsigned char * -xstormy16_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, - int *lenptr) -{ - static unsigned char breakpoint[] = { 0x06, 0x0 }; - *lenptr = sizeof (breakpoint); - return breakpoint; -} +constexpr gdb_byte xstormy16_break_insn[] = { 0x06, 0x0 }; + +typedef BP_MANIPULATION (xstormy16_break_insn) xstormy16_breakpoint; /* Given a pointer to a jump table entry, return the address of the function it jumps to. Return 0 if not found. */ @@ -677,7 +668,7 @@ xstormy16_frame_cache (struct frame_info *this_frame, void **this_cache) int i; if (*this_cache) - return *this_cache; + return (struct xstormy16_frame_cache *) *this_cache; cache = xstormy16_alloc_frame_cache (); *this_cache = cache; @@ -813,6 +804,9 @@ xstormy16_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT); set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT); + set_gdbarch_wchar_bit (gdbarch, 2 * TARGET_CHAR_BIT); + set_gdbarch_wchar_signed (gdbarch, 1); + set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT); set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT); set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT); @@ -837,18 +831,19 @@ xstormy16_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) frame_base_set_default (gdbarch, &xstormy16_frame_base); set_gdbarch_skip_prologue (gdbarch, xstormy16_skip_prologue); - set_gdbarch_in_function_epilogue_p (gdbarch, - xstormy16_in_function_epilogue_p); + set_gdbarch_stack_frame_destroyed_p (gdbarch, + xstormy16_stack_frame_destroyed_p); /* These values and methods are used when gdb calls a target function. */ set_gdbarch_push_dummy_call (gdbarch, xstormy16_push_dummy_call); - set_gdbarch_breakpoint_from_pc (gdbarch, xstormy16_breakpoint_from_pc); + set_gdbarch_breakpoint_kind_from_pc (gdbarch, + xstormy16_breakpoint::kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, + xstormy16_breakpoint::bp_from_kind); set_gdbarch_return_value (gdbarch, xstormy16_return_value); set_gdbarch_skip_trampoline_code (gdbarch, xstormy16_skip_trampoline_code); - set_gdbarch_print_insn (gdbarch, print_insn_xstormy16); - gdbarch_init_osabi (info, gdbarch); dwarf2_append_unwinders (gdbarch); @@ -861,9 +856,6 @@ xstormy16_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) Initializer function for the Sanyo Xstormy16a module. Called by gdb at start-up. */ -/* -Wmissing-prototypes */ -extern initialize_file_ftype _initialize_xstormy16_tdep; - void _initialize_xstormy16_tdep (void) {