projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix build failure in darwin-nat.c
[deliverable/binutils-gdb.git]
/
gdb
/
msp430-tdep.c
diff --git
a/gdb/msp430-tdep.c
b/gdb/msp430-tdep.c
index 166f2807e462791d99c222cdc6d25079bf06ebc0..771ac9cd04a22085eee8fd05e27c5329a1f8887d 100644
(file)
--- 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.
/* Target-dependent code for the Texas Instruments MSP430 for GDB, the
GNU debugger.
- Copyright (C) 2012
, 2013
Free Software Foundation, Inc.
+ Copyright (C) 2012
-2017
Free Software Foundation, Inc.
Contributed by Red Hat, Inc.
Contributed by Red Hat, Inc.
@@
-221,10
+221,9
@@
msp430_pseudo_register_read (struct gdbarch *gdbarch,
struct regcache *regcache,
int regnum, gdb_byte *buffer)
{
struct regcache *regcache,
int regnum, gdb_byte *buffer)
{
- enum register_status status = REG_UNKNOWN;
-
if (MSP430_NUM_REGS <= regnum && regnum < MSP430_NUM_TOTAL_REGS)
{
if (MSP430_NUM_REGS <= regnum && regnum < MSP430_NUM_TOTAL_REGS)
{
+ enum register_status status;
ULONGEST val;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int regsize = register_size (gdbarch, regnum);
ULONGEST val;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int regsize = register_size (gdbarch, regnum);
@@
-234,11
+233,10
@@
msp430_pseudo_register_read (struct gdbarch *gdbarch,
if (status == REG_VALID)
store_unsigned_integer (buffer, regsize, byte_order, val);
if (status == REG_VALID)
store_unsigned_integer (buffer, regsize, byte_order, val);
+ return status;
}
else
gdb_assert_not_reached ("invalid pseudo register number");
}
else
gdb_assert_not_reached ("invalid pseudo register number");
-
- return status;
}
/* Implement the "pseudo_register_write" gdbarch method. */
}
/* Implement the "pseudo_register_write" gdbarch method. */
@@
-248,7
+246,6
@@
msp430_pseudo_register_write (struct gdbarch *gdbarch,
struct regcache *regcache,
int regnum, const gdb_byte *buffer)
{
struct regcache *regcache,
int regnum, const gdb_byte *buffer)
{
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
if (MSP430_NUM_REGS <= regnum && regnum < MSP430_NUM_TOTAL_REGS)
{
if (MSP430_NUM_REGS <= regnum && regnum < MSP430_NUM_TOTAL_REGS)
{
@@
-278,17
+275,9
@@
msp430_register_sim_regno (struct gdbarch *gdbarch, int regnum)
return regnum;
}
return regnum;
}
-/* Implement the "breakpoint_from_pc" gdbarch method. */
+constexpr gdb_byte msp430_break_insn[] = { 0x43, 0x43 };
-static const gdb_byte *
-msp430_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
- int *lenptr)
-{
- static gdb_byte breakpoint[] = { 0x43, 0x43 };
-
- *lenptr = sizeof breakpoint;
- return breakpoint;
-}
+typedef BP_MANIPULATION (msp430_break_insn) msp430_breakpoint;
/* Define a "handle" struct for fetching the next opcode. */
/* Define a "handle" struct for fetching the next opcode. */
@@
-306,7
+295,8
@@
struct msp430_get_opcode_byte_handle
static int
msp430_get_opcode_byte (void *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;
int status;
gdb_byte byte;
@@
-321,7
+311,7
@@
msp430_get_opcode_byte (void *handle)
}
/* Function for finding saved registers in a 'struct pv_area'; this
}
/* Function for finding saved registers in a 'struct pv_area'; this
- function is passed to pv_area
_
scan.
+ function is passed to pv_area
::
scan.
If VALUE is a saved register, ADDR says it was saved at a constant
offset from the frame base, and SIZE indicates that the whole
If VALUE is a saved register, ADDR says it was saved at a constant
offset from the frame base, and SIZE indicates that the whole
@@
-349,8
+339,6
@@
msp430_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc,
CORE_ADDR pc, next_pc;
int rn;
pv_t reg[MSP430_NUM_TOTAL_REGS];
CORE_ADDR pc, next_pc;
int rn;
pv_t reg[MSP430_NUM_TOTAL_REGS];
- struct pv_area *stack;
- struct cleanup *back_to;
CORE_ADDR after_last_frame_setup_insn = start_pc;
int code_model = gdbarch_tdep (gdbarch)->code_model;
int sz;
CORE_ADDR after_last_frame_setup_insn = start_pc;
int code_model = gdbarch_tdep (gdbarch)->code_model;
int sz;
@@
-363,13
+351,12
@@
msp430_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc,
result->reg_offset[rn] = 1;
}
result->reg_offset[rn] = 1;
}
- stack = make_pv_area (MSP430_SP_REGNUM, gdbarch_addr_bit (gdbarch));
- back_to = make_cleanup_free_pv_area (stack);
+ pv_area stack (MSP430_SP_REGNUM, gdbarch_addr_bit (gdbarch));
/* The call instruction has saved the return address on the stack. */
sz = code_model == MSP_LARGE_CODE_MODEL ? 4 : 2;
reg[MSP430_SP_REGNUM] = pv_add_constant (reg[MSP430_SP_REGNUM], -sz);
/* The call instruction has saved the return address on the stack. */
sz = code_model == MSP_LARGE_CODE_MODEL ? 4 : 2;
reg[MSP430_SP_REGNUM] = pv_add_constant (reg[MSP430_SP_REGNUM], -sz);
-
pv_area_store (stack,
reg[MSP430_SP_REGNUM], sz, reg[MSP430_PC_REGNUM]);
+
stack.store (
reg[MSP430_SP_REGNUM], sz, reg[MSP430_PC_REGNUM]);
pc = start_pc;
while (pc < limit_pc)
pc = start_pc;
while (pc < limit_pc)
@@
-388,7
+375,7
@@
msp430_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc,
int rsrc = opc.op[0].reg;
reg[MSP430_SP_REGNUM] = pv_add_constant (reg[MSP430_SP_REGNUM], -2);
int rsrc = opc.op[0].reg;
reg[MSP430_SP_REGNUM] = pv_add_constant (reg[MSP430_SP_REGNUM], -2);
-
pv_area_store (stack,
reg[MSP430_SP_REGNUM], 2, reg[rsrc]);
+
stack.store (
reg[MSP430_SP_REGNUM], 2, reg[rsrc]);
after_last_frame_setup_insn = next_pc;
}
else if (opc.id == MSO_push /* PUSHM */
after_last_frame_setup_insn = next_pc;
}
else if (opc.id == MSO_push /* PUSHM */
@@
-403,7
+390,7
@@
msp430_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc,
{
reg[MSP430_SP_REGNUM]
= pv_add_constant (reg[MSP430_SP_REGNUM], -size);
{
reg[MSP430_SP_REGNUM]
= pv_add_constant (reg[MSP430_SP_REGNUM], -size);
-
pv_area_store (stack,
reg[MSP430_SP_REGNUM], size, reg[rsrc]);
+
stack.store (
reg[MSP430_SP_REGNUM], size, reg[rsrc]);
rsrc--;
count--;
}
rsrc--;
count--;
}
@@
-438,11
+425,9
@@
msp430_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc,
result->frame_size = reg[MSP430_SP_REGNUM].k;
/* Record where all the registers were saved. */
result->frame_size = reg[MSP430_SP_REGNUM].k;
/* Record where all the registers were saved. */
-
pv_area_scan (stack,
check_for_saved, result);
+
stack.scan (
check_for_saved, result);
result->prologue_end = after_last_frame_setup_insn;
result->prologue_end = after_last_frame_setup_insn;
-
- do_cleanups (back_to);
}
/* Implement the "skip_prologue" gdbarch method. */
}
/* Implement the "skip_prologue" gdbarch method. */
@@
-502,10
+487,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 = 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. */
}
/* Given a frame and a prologue cache, return this frame's base. */
@@
-581,13
+567,9
@@
static const struct frame_unwind msp430_unwind = {
static int
msp430_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
{
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;
return reg + MSP430_NUM_REGS;
- else
- {
- warning (_("Unmapped DWARF Register #%d encountered."), reg);
- return -1;
- }
+ return -1;
}
/* Implement the "return_value" gdbarch method. */
}
/* Implement the "return_value" gdbarch method. */
@@
-770,10
+752,16
@@
msp430_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int size = 2;
if (code_model == MSP_LARGE_CODE_MODEL
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_IS_REFERENCE (arg_type)
+ || 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;
if (offset != 0)
continue;
size = 4;
@@
-834,8
+822,7
@@
msp430_in_return_stub (struct gdbarch *gdbarch, CORE_ADDR pc,
const char *name)
{
return (name != NULL
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. */
}
/* Implement the "skip_trampoline_code" gdbarch method. */
@@
-850,7
+837,7
@@
msp430_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
if (!bms.minsym)
return pc;
if (!bms.minsym)
return pc;
- stub_name = SYMBOL_LINKAGE_NAME (bms.minsym);
+ stub_name =
M
SYMBOL_LINKAGE_NAME (bms.minsym);
if (gdbarch_tdep (gdbarch)->code_model == MSP_SMALL_CODE_MODEL
&& msp430_in_return_stub (gdbarch, pc, stub_name))
if (gdbarch_tdep (gdbarch)->code_model == MSP_SMALL_CODE_MODEL
&& msp430_in_return_stub (gdbarch, pc, stub_name))
@@
-952,7
+939,7
@@
msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* None found, create a new architecture from the information
provided. */
/* None found, create a new architecture from the information
provided. */
- tdep =
(struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep)
);
+ tdep =
XCNEW (struct gdbarch_tdep
);
gdbarch = gdbarch_alloc (&info, tdep);
tdep->elf_flags = elf_flags;
tdep->isa = isa;
gdbarch = gdbarch_alloc (&info, tdep);
tdep->elf_flags = elf_flags;
tdep->isa = isa;
@@
-999,12
+986,12
@@
msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
/* Breakpoints. */
set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
/* Breakpoints. */
- set_gdbarch_breakpoint_from_pc (gdbarch, msp430_breakpoint_from_pc);
+ set_gdbarch_breakpoint_kind_from_pc (gdbarch,
+ msp430_breakpoint::kind_from_pc);
+ set_gdbarch_sw_breakpoint_from_kind (gdbarch,
+ msp430_breakpoint::bp_from_kind);
set_gdbarch_decr_pc_after_break (gdbarch, 1);
set_gdbarch_decr_pc_after_break (gdbarch, 1);
- /* Disassembly. */
- set_gdbarch_print_insn (gdbarch, print_insn_msp430);
-
/* Frames, prologues, etc. */
set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
set_gdbarch_skip_prologue (gdbarch, msp430_skip_prologue);
/* Frames, prologues, etc. */
set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
set_gdbarch_skip_prologue (gdbarch, msp430_skip_prologue);
@@
-1029,9
+1016,6
@@
msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return gdbarch;
}
return gdbarch;
}
-/* -Wmissing-prototypes */
-extern initialize_file_ftype _initialize_msp430_tdep;
-
/* Register the initialization routine. */
void
/* Register the initialization routine. */
void
This page took
0.044012 seconds
and
4
git commands to generate.