X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fvax-tdep.c;h=6ad0dda021eacb69a09a85e0eab2eb97b58e5ba0;hb=9cca177baec32a1ed1422a87a1f57cda2d2eb21a;hp=2793261b659d05b67e3c05f40bc0fd0e15e61c2d;hpb=f73d3ce7f83e5dc0ff749685376b144ba2dae471;p=binutils-gdb.git diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c index 2793261b659..6ad0dda021e 100644 --- a/gdb/vax-tdep.c +++ b/gdb/vax-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for the VAX. - Copyright (C) 1986-2014 Free Software Foundation, Inc. + Copyright (C) 1986-2022 Free Software Foundation, Inc. This file is part of GDB. @@ -20,7 +20,6 @@ #include "defs.h" #include "arch-utils.h" #include "dis-asm.h" -#include "floatformat.h" #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" @@ -39,7 +38,7 @@ static const char * vax_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", "ap", "fp", "sp", "pc", @@ -71,13 +70,13 @@ static void vax_supply_gregset (const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len) { - const gdb_byte *regs = gregs; + const gdb_byte *regs = (const gdb_byte *) gregs; int i; for (i = 0; i < VAX_NUM_REGS; i++) { if (regnum == i || regnum == -1) - regcache_raw_supply (regcache, i, regs + i * 4); + regcache->raw_supply (i, regs + i * 4); } } @@ -97,7 +96,7 @@ vax_iterate_over_regset_sections (struct gdbarch *gdbarch, void *cb_data, const struct regcache *regcache) { - cb (".reg", VAX_NUM_REGS * 4, &vax_gregset, NULL, cb_data); + cb (".reg", VAX_NUM_REGS * 4, VAX_NUM_REGS * 4, &vax_gregset, NULL, cb_data); } /* The VAX UNIX calling convention uses R1 to pass a structure return @@ -108,7 +107,7 @@ static CORE_ADDR vax_store_arguments (struct regcache *regcache, int nargs, struct value **args, CORE_ADDR sp) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); gdb_byte buf[4]; int count = 0; @@ -124,7 +123,7 @@ vax_store_arguments (struct regcache *regcache, int nargs, sp -= (len + 3) & ~3; count += (len + 3) / 4; - write_memory (sp, value_contents_all (args[i]), len); + write_memory (sp, value_contents_all (args[i]).data (), len); } /* Push argument count. */ @@ -134,7 +133,7 @@ vax_store_arguments (struct regcache *regcache, int nargs, /* Update the argument pointer. */ store_unsigned_integer (buf, 4, byte_order, sp); - regcache_cooked_write (regcache, VAX_AP_REGNUM, buf); + regcache->cooked_write (VAX_AP_REGNUM, buf); return sp; } @@ -142,7 +141,8 @@ vax_store_arguments (struct regcache *regcache, int nargs, static CORE_ADDR vax_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, - struct value **args, CORE_ADDR sp, int struct_return, + struct value **args, CORE_ADDR sp, + function_call_return_method return_method, CORE_ADDR struct_addr) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); @@ -153,7 +153,7 @@ vax_push_dummy_call (struct gdbarch *gdbarch, struct value *function, sp = vax_store_arguments (regcache, nargs, args, sp); /* Store return value address. */ - if (struct_return) + if (return_method == return_method_struct) regcache_cooked_write_unsigned (regcache, VAX_R1_REGNUM, struct_addr); /* Store return address in the PC slot. */ @@ -181,8 +181,8 @@ vax_push_dummy_call (struct gdbarch *gdbarch, struct value *function, /* Update the stack pointer and frame pointer. */ store_unsigned_integer (buf, 4, byte_order, sp); - regcache_cooked_write (regcache, VAX_SP_REGNUM, buf); - regcache_cooked_write (regcache, VAX_FP_REGNUM, buf); + regcache->cooked_write (VAX_SP_REGNUM, buf); + regcache->cooked_write (VAX_FP_REGNUM, buf); /* Return the saved (fake) frame pointer. */ return fp; @@ -206,13 +206,13 @@ vax_return_value (struct gdbarch *gdbarch, struct value *function, int len = TYPE_LENGTH (type); gdb_byte buf[8]; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY) { /* The default on VAX is to return structures in static memory. - Consequently a function must return the address where we can - find the return value. */ + Consequently a function must return the address where we can + find the return value. */ if (readbuf) { @@ -228,18 +228,18 @@ vax_return_value (struct gdbarch *gdbarch, struct value *function, if (readbuf) { /* Read the contents of R0 and (if necessary) R1. */ - regcache_cooked_read (regcache, VAX_R0_REGNUM, buf); + regcache->cooked_read (VAX_R0_REGNUM, buf); if (len > 4) - regcache_cooked_read (regcache, VAX_R1_REGNUM, buf + 4); + regcache->cooked_read (VAX_R1_REGNUM, buf + 4); memcpy (readbuf, buf, len); } if (writebuf) { /* Read the contents to R0 and (if necessary) R1. */ memcpy (buf, writebuf, len); - regcache_cooked_write (regcache, VAX_R0_REGNUM, buf); + regcache->cooked_write (VAX_R0_REGNUM, buf); if (len > 4) - regcache_cooked_write (regcache, VAX_R1_REGNUM, buf + 4); + regcache->cooked_write (VAX_R1_REGNUM, buf + 4); } return RETURN_VALUE_REGISTER_CONVENTION; @@ -251,15 +251,10 @@ vax_return_value (struct gdbarch *gdbarch, struct value *function, encode a breakpoint instruction, store the length of the string in *LEN and optionally adjust *PC to point to the correct memory location for inserting the breakpoint. */ - -static const gdb_byte * -vax_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len) -{ - static gdb_byte break_insn[] = { 3 }; - *len = sizeof (break_insn); - return break_insn; -} +constexpr gdb_byte vax_break_insn[] = { 3 }; + +typedef BP_MANIPULATION (vax_break_insn) vax_breakpoint; /* Advance PC across any function entry prologue instructions to reach some "real" code. */ @@ -306,7 +301,7 @@ struct vax_frame_cache CORE_ADDR base; /* Table of saved registers. */ - struct trad_frame_saved_reg *saved_regs; + trad_frame_saved_reg *saved_regs; }; static struct vax_frame_cache * @@ -318,7 +313,7 @@ vax_frame_cache (struct frame_info *this_frame, void **this_cache) int regnum; if (*this_cache) - return *this_cache; + return (struct vax_frame_cache *) *this_cache; /* Allocate a new cache. */ cache = FRAME_OBSTACK_ZALLOC (struct vax_frame_cache); @@ -334,10 +329,10 @@ vax_frame_cache (struct frame_info *this_frame, void **this_cache) mask = get_frame_memory_unsigned (this_frame, cache->base + 4, 4) >> 16; /* These are always saved. */ - cache->saved_regs[VAX_PC_REGNUM].addr = cache->base + 16; - cache->saved_regs[VAX_FP_REGNUM].addr = cache->base + 12; - cache->saved_regs[VAX_AP_REGNUM].addr = cache->base + 8; - cache->saved_regs[VAX_PS_REGNUM].addr = cache->base + 4; + cache->saved_regs[VAX_PC_REGNUM].set_addr (cache->base + 16); + cache->saved_regs[VAX_FP_REGNUM].set_addr (cache->base + 12); + cache->saved_regs[VAX_AP_REGNUM].set_addr (cache->base + 8); + cache->saved_regs[VAX_PS_REGNUM].set_addr (cache->base + 4); /* Scan the register save mask and record the location of the saved registers. */ @@ -346,7 +341,7 @@ vax_frame_cache (struct frame_info *this_frame, void **this_cache) { if (mask & (1 << regnum)) { - cache->saved_regs[regnum].addr = addr; + cache->saved_regs[regnum].set_addr (addr); addr += 4; } } @@ -358,15 +353,15 @@ vax_frame_cache (struct frame_info *this_frame, void **this_cache) ULONGEST numarg; /* This is a procedure with Stack Argument List. Adjust the - stack address for the arguments that were pushed onto the - stack. The return instruction will automatically pop the - arguments from the stack. */ + stack address for the arguments that were pushed onto the + stack. The return instruction will automatically pop the + arguments from the stack. */ numarg = get_frame_memory_unsigned (this_frame, addr, 1); addr += 4 + numarg * 4; } /* Bits 1:0 of the stack pointer were saved in the control bits. */ - trad_frame_set_value (cache->saved_regs, VAX_SP_REGNUM, addr + (mask >> 14)); + cache->saved_regs[VAX_SP_REGNUM].set_value (addr + (mask >> 14)); return cache; } @@ -395,6 +390,7 @@ vax_frame_prev_register (struct frame_info *this_frame, static const struct frame_unwind vax_frame_unwind = { + "vax prologue", NORMAL_FRAME, default_frame_unwind_stop_reason, vax_frame_this_id, @@ -442,11 +438,6 @@ vax_frame_num_args (struct frame_info *frame) return get_frame_memory_unsigned (frame, args, 1); } -static CORE_ADDR -vax_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) -{ - return frame_unwind_register_unsigned (next_frame, VAX_PC_REGNUM); -} /* Initialize the current architecture based on INFO. If possible, re-use an @@ -500,16 +491,13 @@ vax_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_dummy_id (gdbarch, vax_dummy_id); /* Breakpoint info */ - set_gdbarch_breakpoint_from_pc (gdbarch, vax_breakpoint_from_pc); + set_gdbarch_breakpoint_kind_from_pc (gdbarch, vax_breakpoint::kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, vax_breakpoint::bp_from_kind); /* Misc info */ set_gdbarch_deprecated_function_start_offset (gdbarch, 2); set_gdbarch_believe_pcc_promotion (gdbarch, 1); - set_gdbarch_print_insn (gdbarch, print_insn_vax); - - set_gdbarch_unwind_pc (gdbarch, vax_unwind_pc); - frame_base_set_default (gdbarch, &vax_frame_base); /* Hook in ABI-specific overrides, if they have been registered. */ @@ -520,11 +508,9 @@ vax_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) return (gdbarch); } -/* Provide a prototype to silence -Wmissing-prototypes. */ -void _initialize_vax_tdep (void); - +void _initialize_vax_tdep (); void -_initialize_vax_tdep (void) +_initialize_vax_tdep () { gdbarch_register (bfd_arch_vax, vax_gdbarch_init, NULL); }