X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fm68hc11-tdep.c;h=58ef4a329271f5ae3f048bced3e26f52b2833249;hb=849d0ba802323fe05e3039ed5b22957db2c85a67;hp=6f0092bb46e7b09703e3a0c40f8e228ae5bcedba;hpb=3b7344d5ab495cd82b6c72ec5e00d018549837fb;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c index 6f0092bb46..58ef4a3292 100644 --- a/gdb/m68hc11-tdep.c +++ b/gdb/m68hc11-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for Motorola 68HC11 & 68HC12 - Copyright (C) 1999-2014 Free Software Foundation, Inc. + Copyright (C) 1999-2018 Free Software Foundation, Inc. Contributed by Stephane Carrez, stcarrez@nerim.fr @@ -30,7 +30,6 @@ #include "gdbtypes.h" #include "gdbcmd.h" #include "gdbcore.h" -#include #include "value.h" #include "inferior.h" #include "dis-asm.h" @@ -113,7 +112,7 @@ enum insn_return_kind { #define SOFT_D32_REGNUM (SOFT_D1_REGNUM+31) #define M68HC11_MAX_SOFT_REGS 32 -#define M68HC11_NUM_REGS (8) +#define M68HC11_NUM_REGS (M68HC11_LAST_HARD_REG + 1) #define M68HC11_NUM_PSEUDO_REGS (M68HC11_MAX_SOFT_REGS+5) #define M68HC11_ALL_REGS (M68HC11_NUM_REGS+M68HC11_NUM_PSEUDO_REGS) @@ -167,7 +166,7 @@ struct m68hc11_unwind_cache /* Table of registers for 68HC11. This includes the hard registers and the soft registers used by GCC. */ -static char * +static const char * m68hc11_register_names[] = { "x", "d", "y", "sp", "pc", "a", "b", @@ -204,7 +203,7 @@ m68hc11_get_register_info (struct m68hc11_soft_reg *reg, const char *name) msymbol = lookup_minimal_symbol (name, NULL, NULL); if (msymbol.minsym) { - reg->addr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym); + reg->addr = BMSYMBOL_VALUE_ADDRESS (msymbol); reg->name = xstrdup (name); /* Keep track of the address range for soft registers. */ @@ -280,7 +279,7 @@ m68hc11_which_soft_register (CORE_ADDR addr) fetch into a memory read. */ static enum register_status m68hc11_pseudo_register_read (struct gdbarch *gdbarch, - struct regcache *regcache, + readable_regcache *regcache, int regno, gdb_byte *buf) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); @@ -293,14 +292,14 @@ m68hc11_pseudo_register_read (struct gdbarch *gdbarch, const int regsize = 4; enum register_status status; - status = regcache_cooked_read_unsigned (regcache, HARD_PC_REGNUM, &pc); + status = regcache->cooked_read (HARD_PC_REGNUM, &pc); if (status != REG_VALID) return status; if (pc >= 0x8000 && pc < 0xc000) { ULONGEST page; - regcache_cooked_read_unsigned (regcache, HARD_PAGE_REGNUM, &page); + regcache->cooked_read (HARD_PAGE_REGNUM, &page); pc -= 0x8000; pc += (page << 14); pc += 0x1000000; @@ -338,7 +337,7 @@ m68hc11_pseudo_register_write (struct gdbarch *gdbarch, if (regno == M68HC12_HARD_PC_REGNUM) { const int regsize = 4; - gdb_byte *tmp = alloca (regsize); + gdb_byte *tmp = (gdb_byte *) alloca (regsize); CORE_ADDR pc; memcpy (tmp, buf, regsize); @@ -363,7 +362,7 @@ m68hc11_pseudo_register_write (struct gdbarch *gdbarch, if (soft_regs[regno].name) { const int regsize = 2; - gdb_byte *tmp = alloca (regsize); + gdb_byte *tmp = (gdb_byte *) alloca (regsize); memcpy (tmp, buf, regsize); target_write_memory (soft_regs[regno].addr, tmp, regsize); } @@ -391,16 +390,9 @@ m68hc11_register_name (struct gdbarch *gdbarch, int reg_nr) return m68hc11_register_names[reg_nr]; } -static const unsigned char * -m68hc11_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, - int *lenptr) -{ - static unsigned char breakpoint[] = {0x0}; - - *lenptr = sizeof (breakpoint); - return breakpoint; -} +constexpr gdb_byte m68hc11_break_insn[] = {0x0}; +typedef BP_MANIPULATION (m68hc11_break_insn) m68hc11_breakpoint; /* 68HC11 & 68HC12 prologue analysis. */ @@ -793,7 +785,7 @@ m68hc11_frame_unwind_cache (struct frame_info *this_frame, int i; if ((*this_prologue_cache)) - return (*this_prologue_cache); + return (struct m68hc11_unwind_cache *) (*this_prologue_cache); info = FRAME_OBSTACK_ZALLOC (struct m68hc11_unwind_cache); (*this_prologue_cache) = info; @@ -1352,16 +1344,6 @@ m68hc11_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym) if (flags & STO_M68HC12_INTERRUPT) MSYMBOL_SET_RTI (msym); } - -static int -gdb_print_insn_m68hc11 (bfd_vma memaddr, disassemble_info *info) -{ - if (info->arch == bfd_arch_m68hc11) - return print_insn_m68hc11 (memaddr, info); - else - return print_insn_m68hc12 (memaddr, info); -} - /* 68HC11/68HC12 register groups. @@ -1452,7 +1434,7 @@ m68hc11_gdbarch_init (struct gdbarch_info info, } /* Need a new architecture. Fill in a target specific vector. */ - tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep)); + tdep = XCNEW (struct gdbarch_tdep); gdbarch = gdbarch_alloc (&info, tdep); tdep->elf_flags = elf_flags; @@ -1529,8 +1511,10 @@ m68hc11_gdbarch_init (struct gdbarch_info info, set_gdbarch_return_value (gdbarch, m68hc11_return_value); set_gdbarch_skip_prologue (gdbarch, m68hc11_skip_prologue); set_gdbarch_inner_than (gdbarch, core_addr_lessthan); - set_gdbarch_breakpoint_from_pc (gdbarch, m68hc11_breakpoint_from_pc); - set_gdbarch_print_insn (gdbarch, gdb_print_insn_m68hc11); + set_gdbarch_breakpoint_kind_from_pc (gdbarch, + m68hc11_breakpoint::kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, + m68hc11_breakpoint::bp_from_kind); m68hc11_add_reggroups (gdbarch); set_gdbarch_register_reggroup_p (gdbarch, m68hc11_register_reggroup_p); @@ -1559,9 +1543,6 @@ m68hc11_gdbarch_init (struct gdbarch_info info, return gdbarch; } -/* -Wmissing-prototypes */ -extern initialize_file_ftype _initialize_m68hc11_tdep; - void _initialize_m68hc11_tdep (void) {