X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmsp430-tdep.c;h=4042ec3e32e7a9f8024fa44bf5f9b19822eca31b;hb=11cf4ffb5e256d268a8f4cea0fc88a0a46bf824c;hp=66ce9cbc678ef8e53eb6dc621a4b2866c2358dcb;hpb=ecd75fc8eed3bde86036141228074a20e55dcfc9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/msp430-tdep.c b/gdb/msp430-tdep.c index 66ce9cbc67..4042ec3e32 100644 --- a/gdb/msp430-tdep.c +++ b/gdb/msp430-tdep.c @@ -1,7 +1,7 @@ /* Target-dependent code for the Texas Instruments MSP430 for GDB, the GNU debugger. - Copyright (C) 2012-2014 Free Software Foundation, Inc. + Copyright (C) 2012-2016 Free Software Foundation, Inc. Contributed by Red Hat, Inc. @@ -306,7 +306,8 @@ struct msp430_get_opcode_byte_handle static int msp430_get_opcode_byte (void *handle) { - struct msp430_get_opcode_byte_handle *opcdata = handle; + struct msp430_get_opcode_byte_handle *opcdata + = (struct msp430_get_opcode_byte_handle *) handle; int status; gdb_byte byte; @@ -502,10 +503,11 @@ msp430_analyze_frame_prologue (struct frame_info *this_frame, stop_addr = func_start; msp430_analyze_prologue (get_frame_arch (this_frame), func_start, - stop_addr, *this_prologue_cache); + stop_addr, + (struct msp430_prologue *) *this_prologue_cache); } - return *this_prologue_cache; + return (struct msp430_prologue *) *this_prologue_cache; } /* Given a frame and a prologue cache, return this frame's base. */ @@ -581,13 +583,9 @@ static const struct frame_unwind msp430_unwind = { static int msp430_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg) { - if (reg < MSP430_NUM_REGS) + if (reg >= 0 && reg < MSP430_NUM_REGS) return reg + MSP430_NUM_REGS; - else - { - warning (_("Unmapped DWARF Register #%d encountered."), reg); - return -1; - } + return -1; } /* Implement the "return_value" gdbarch method. */ @@ -770,10 +768,16 @@ msp430_push_dummy_call (struct gdbarch *gdbarch, struct value *function, int size = 2; if (code_model == MSP_LARGE_CODE_MODEL - && TYPE_CODE (arg_type) == TYPE_CODE_PTR) + && (TYPE_CODE (arg_type) == TYPE_CODE_PTR + || TYPE_CODE (arg_type) == TYPE_CODE_REF + || TYPE_CODE (arg_type) == TYPE_CODE_STRUCT + || TYPE_CODE (arg_type) == TYPE_CODE_UNION)) { - /* Pointer arguments using large memory model are passed - using entire register. */ + /* When using the large memory model, pointer, + reference, struct, and union arguments are + passed using the entire register. (As noted + earlier, aggregates are always passed by + reference.) */ if (offset != 0) continue; size = 4; @@ -834,8 +838,7 @@ msp430_in_return_stub (struct gdbarch *gdbarch, CORE_ADDR pc, const char *name) { return (name != NULL - && strncmp (msp430_epilog_name_prefix, name, - strlen (msp430_epilog_name_prefix)) == 0); + && startswith (name, msp430_epilog_name_prefix)); } /* Implement the "skip_trampoline_code" gdbarch method. */ @@ -850,7 +853,7 @@ msp430_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc) if (!bms.minsym) return pc; - stub_name = SYMBOL_LINKAGE_NAME (bms.minsym); + stub_name = MSYMBOL_LINKAGE_NAME (bms.minsym); if (gdbarch_tdep (gdbarch)->code_model == MSP_SMALL_CODE_MODEL && msp430_in_return_stub (gdbarch, pc, stub_name)) @@ -952,7 +955,7 @@ msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* None found, create a new architecture from the information provided. */ - tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep)); + tdep = XNEW (struct gdbarch_tdep); gdbarch = gdbarch_alloc (&info, tdep); tdep->elf_flags = elf_flags; tdep->isa = isa;