projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb/darwin: remove not-so-harmless spurious call to `wait4`
[binutils-gdb.git]
/
gdb
/
vax-tdep.c
diff --git
a/gdb/vax-tdep.c
b/gdb/vax-tdep.c
index 550b56b37881b38d300707a441d9dd5c79a1555b..6ad0dda021eacb69a09a85e0eab2eb97b58e5ba0 100644
(file)
--- a/
gdb/vax-tdep.c
+++ b/
gdb/vax-tdep.c
@@
-1,7
+1,6
@@
/* Target-dependent code for the VAX.
/* Target-dependent code for the VAX.
- Copyright (C) 1986, 1989, 1991-1992, 1995-1996, 1998-2000, 2002-2005,
- 2007-2012 Free Software Foundation, Inc.
+ Copyright (C) 1986-2022 Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-21,7
+20,6
@@
#include "defs.h"
#include "arch-utils.h"
#include "dis-asm.h"
#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"
#include "frame.h"
#include "frame-base.h"
#include "frame-unwind.h"
@@
-33,8
+31,6
@@
#include "trad-frame.h"
#include "value.h"
#include "trad-frame.h"
#include "value.h"
-#include "gdb_string.h"
-
#include "vax-tdep.h"
/* Return the name of register REGNUM. */
#include "vax-tdep.h"
/* Return the name of register REGNUM. */
@@
-42,7
+38,7
@@
static const char *
vax_register_name (struct gdbarch *gdbarch, int regnum)
{
static const char *
vax_register_name (struct gdbarch *gdbarch, int regnum)
{
- static char *register_names[] =
+ static c
onst c
har *register_names[] =
{
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "r11", "ap", "fp", "sp", "pc",
{
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "r11", "ap", "fp", "sp", "pc",
@@
-74,35
+70,33
@@
static void
vax_supply_gregset (const struct regset *regset, struct regcache *regcache,
int regnum, const void *gregs, size_t len)
{
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)
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);
}
}
/* VAX register set. */
}
}
/* VAX register set. */
-static struct regset vax_gregset =
+static
const
struct regset vax_gregset =
{
NULL,
vax_supply_gregset
};
{
NULL,
vax_supply_gregset
};
-/* Return the appropriate register set for the core section identified
- by SECT_NAME and SECT_SIZE. */
+/* Iterate over core file register note sections. */
-static const struct regset *
-vax_regset_from_core_section (struct gdbarch *gdbarch,
- const char *sect_name, size_t sect_size)
+static void
+vax_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ iterate_over_regset_sections_cb *cb,
+ void *cb_data,
+ const struct regcache *regcache)
{
{
- if (strcmp (sect_name, ".reg") == 0 && sect_size >= VAX_NUM_REGS * 4)
- return &vax_gregset;
-
- return NULL;
+ cb (".reg", VAX_NUM_REGS * 4, VAX_NUM_REGS * 4, &vax_gregset, NULL, cb_data);
}
\f
/* The VAX UNIX calling convention uses R1 to pass a structure return
}
\f
/* The VAX UNIX calling convention uses R1 to pass a structure return
@@
-113,7
+107,7
@@
static CORE_ADDR
vax_store_arguments (struct regcache *regcache, int nargs,
struct value **args, CORE_ADDR sp)
{
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;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
gdb_byte buf[4];
int count = 0;
@@
-129,7
+123,7
@@
vax_store_arguments (struct regcache *regcache, int nargs,
sp -= (len + 3) & ~3;
count += (len + 3) / 4;
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. */
}
/* Push argument count. */
@@
-139,7
+133,7
@@
vax_store_arguments (struct regcache *regcache, int nargs,
/* Update the argument pointer. */
store_unsigned_integer (buf, 4, byte_order, sp);
/* 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;
}
return sp;
}
@@
-147,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,
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);
CORE_ADDR struct_addr)
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@
-158,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. */
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. */
regcache_cooked_write_unsigned (regcache, VAX_R1_REGNUM, struct_addr);
/* Store return address in the PC slot. */
@@
-186,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);
/* 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;
/* Return the saved (fake) frame pointer. */
return fp;
@@
-211,13
+206,13
@@
vax_return_value (struct gdbarch *gdbarch, struct value *function,
int len = TYPE_LENGTH (type);
gdb_byte buf[8];
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.
{
/* 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)
{
if (readbuf)
{
@@
-233,18
+228,18
@@
vax_return_value (struct gdbarch *gdbarch, struct value *function,
if (readbuf)
{
/* Read the contents of R0 and (if necessary) R1. */
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)
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);
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)
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;
}
return RETURN_VALUE_REGISTER_CONVENTION;
@@
-256,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. */
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;
\f
/* Advance PC across any function entry prologue instructions
to reach some "real" code. */
\f
/* Advance PC across any function entry prologue instructions
to reach some "real" code. */
@@
-311,7
+301,7
@@
struct vax_frame_cache
CORE_ADDR base;
/* Table of saved registers. */
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 *
};
static struct vax_frame_cache *
@@
-323,7
+313,7
@@
vax_frame_cache (struct frame_info *this_frame, void **this_cache)
int regnum;
if (*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);
/* Allocate a new cache. */
cache = FRAME_OBSTACK_ZALLOC (struct vax_frame_cache);
@@
-339,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. */
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. */
/* Scan the register save mask and record the location of the saved
registers. */
@@
-351,7
+341,7
@@
vax_frame_cache (struct frame_info *this_frame, void **this_cache)
{
if (mask & (1 << regnum))
{
{
if (mask & (1 << regnum))
{
- cache->saved_regs[regnum].
addr = addr
;
+ cache->saved_regs[regnum].
set_addr (addr)
;
addr += 4;
}
}
addr += 4;
}
}
@@
-363,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
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. */
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;
}
return cache;
}
@@
-400,6
+390,7
@@
vax_frame_prev_register (struct frame_info *this_frame,
static const struct frame_unwind vax_frame_unwind =
{
static const struct frame_unwind vax_frame_unwind =
{
+ "vax prologue",
NORMAL_FRAME,
default_frame_unwind_stop_reason,
vax_frame_this_id,
NORMAL_FRAME,
default_frame_unwind_stop_reason,
vax_frame_this_id,
@@
-447,11
+438,6
@@
vax_frame_num_args (struct frame_info *frame)
return get_frame_memory_unsigned (frame, args, 1);
}
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);
-}
\f
/* Initialize the current architecture based on INFO. If possible, re-use an
\f
/* Initialize the current architecture based on INFO. If possible, re-use an
@@
-486,8
+472,8
@@
vax_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_pc_regnum (gdbarch, VAX_PC_REGNUM);
set_gdbarch_ps_regnum (gdbarch, VAX_PS_REGNUM);
set_gdbarch_pc_regnum (gdbarch, VAX_PC_REGNUM);
set_gdbarch_ps_regnum (gdbarch, VAX_PS_REGNUM);
- set_gdbarch_
regset_from_core_section
- (gdbarch, vax_
regset_from_core_section
);
+ set_gdbarch_
iterate_over_regset_sections
+ (gdbarch, vax_
iterate_over_regset_sections
);
/* Frame and stack info */
set_gdbarch_skip_prologue (gdbarch, vax_skip_prologue);
/* Frame and stack info */
set_gdbarch_skip_prologue (gdbarch, vax_skip_prologue);
@@
-505,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_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);
/* 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. */
frame_base_set_default (gdbarch, &vax_frame_base);
/* Hook in ABI-specific overrides, if they have been registered. */
@@
-525,11
+508,9
@@
vax_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return (gdbarch);
}
return (gdbarch);
}
-/* Provide a prototype to silence -Wmissing-prototypes. */
-void _initialize_vax_tdep (void);
-
+void _initialize_vax_tdep ();
void
void
-_initialize_vax_tdep (
void
)
+_initialize_vax_tdep ()
{
gdbarch_register (bfd_arch_vax, vax_gdbarch_init, NULL);
}
{
gdbarch_register (bfd_arch_vax, vax_gdbarch_init, NULL);
}