/* Renesas M32C target-dependent code for GDB, the GNU debugger.
- Copyright (C) 2004-2016 Free Software Foundation, Inc.
+ Copyright (C) 2004-2017 Free Software Foundation, Inc.
This file is part of GDB.
\f
/* Breakpoints. */
+constexpr gdb_byte m32c_break_insn[] = { 0x00 }; /* brk */
-static const unsigned char *
-m32c_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len)
-{
- static unsigned char break_insn[] = { 0x00 }; /* brk */
-
- *len = sizeof (break_insn);
- return break_insn;
-}
-
+typedef BP_MANIPULATION (m32c_break_insn) m32c_breakpoint;
\f
/* Prologue analysis. */
return (code == TYPE_CODE_INT
|| code == TYPE_CODE_ENUM
|| code == TYPE_CODE_PTR
- || code == TYPE_CODE_REF
+ || TYPE_IS_REFERENCE (type)
|| code == TYPE_CODE_BOOL
|| code == TYPE_CODE_CHAR);
}
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
enum type_code target_code;
- gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR ||
- TYPE_CODE (type) == TYPE_CODE_REF);
+ gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type));
target_code = TYPE_CODE (TYPE_TARGET_TYPE (type));
CORE_ADDR ptr;
enum type_code target_code;
- gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR ||
- TYPE_CODE (type) == TYPE_CODE_REF);
+ gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type));
ptr = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order);
static struct gdbarch *
m32c_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *arch;
+ struct gdbarch *gdbarch;
struct gdbarch_tdep *tdep;
unsigned long mach = info.bfd_arch_info->mach;
return arches->gdbarch;
tdep = XCNEW (struct gdbarch_tdep);
- arch = gdbarch_alloc (&info, tdep);
+ gdbarch = gdbarch_alloc (&info, tdep);
/* Essential types. */
- make_types (arch);
+ make_types (gdbarch);
/* Address/pointer conversions. */
if (mach == bfd_mach_m16c)
{
- set_gdbarch_address_to_pointer (arch, m32c_m16c_address_to_pointer);
- set_gdbarch_pointer_to_address (arch, m32c_m16c_pointer_to_address);
+ set_gdbarch_address_to_pointer (gdbarch, m32c_m16c_address_to_pointer);
+ set_gdbarch_pointer_to_address (gdbarch, m32c_m16c_pointer_to_address);
}
/* Register set. */
- make_regs (arch);
+ make_regs (gdbarch);
/* Disassembly. */
- set_gdbarch_print_insn (arch, print_insn_m32c);
+ set_gdbarch_print_insn (gdbarch, print_insn_m32c);
/* Breakpoints. */
- set_gdbarch_breakpoint_from_pc (arch, m32c_breakpoint_from_pc);
+ set_gdbarch_breakpoint_kind_from_pc (gdbarch, m32c_breakpoint::kind_from_pc);
+ set_gdbarch_sw_breakpoint_from_kind (gdbarch, m32c_breakpoint::bp_from_kind);
/* Prologue analysis and unwinding. */
- set_gdbarch_inner_than (arch, core_addr_lessthan);
- set_gdbarch_skip_prologue (arch, m32c_skip_prologue);
- set_gdbarch_unwind_pc (arch, m32c_unwind_pc);
- set_gdbarch_unwind_sp (arch, m32c_unwind_sp);
+ set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
+ set_gdbarch_skip_prologue (gdbarch, m32c_skip_prologue);
+ set_gdbarch_unwind_pc (gdbarch, m32c_unwind_pc);
+ set_gdbarch_unwind_sp (gdbarch, m32c_unwind_sp);
#if 0
/* I'm dropping the dwarf2 sniffer because it has a few problems.
They may be in the dwarf2 cfi code in GDB, or they may be in
the debug info emitted by the upstream toolchain. I don't
know which, but I do know that the prologue analyzer works better.
MVS 04/13/06 */
- dwarf2_append_sniffers (arch);
+ dwarf2_append_sniffers (gdbarch);
#endif
- frame_unwind_append_unwinder (arch, &m32c_unwind);
+ frame_unwind_append_unwinder (gdbarch, &m32c_unwind);
/* Inferior calls. */
- set_gdbarch_push_dummy_call (arch, m32c_push_dummy_call);
- set_gdbarch_return_value (arch, m32c_return_value);
- set_gdbarch_dummy_id (arch, m32c_dummy_id);
+ set_gdbarch_push_dummy_call (gdbarch, m32c_push_dummy_call);
+ set_gdbarch_return_value (gdbarch, m32c_return_value);
+ set_gdbarch_dummy_id (gdbarch, m32c_dummy_id);
/* Trampolines. */
- set_gdbarch_skip_trampoline_code (arch, m32c_skip_trampoline_code);
+ set_gdbarch_skip_trampoline_code (gdbarch, m32c_skip_trampoline_code);
- set_gdbarch_virtual_frame_pointer (arch, m32c_virtual_frame_pointer);
+ set_gdbarch_virtual_frame_pointer (gdbarch, m32c_virtual_frame_pointer);
/* m32c function boundary addresses are not necessarily even.
Therefore, the `vbit', which indicates a pointer to a virtual
In order to verify this, see the definition of
TARGET_PTRMEMFUNC_VBIT_LOCATION in gcc/defaults.h along with the
definition of FUNCTION_BOUNDARY in gcc/config/m32c/m32c.h. */
- set_gdbarch_vbit_in_delta (arch, 1);
+ set_gdbarch_vbit_in_delta (gdbarch, 1);
- return arch;
+ return gdbarch;
}
/* Provide a prototype to silence -Wmissing-prototypes. */