/* Target-dependent code for NetBSD/mips.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
Contributed by Wasabi Systems, Inc.
#include "value.h"
#include "osabi.h"
-#include "gdb_assert.h"
-#include <string.h>
-
#include "nbsd-tdep.h"
#include "mipsnbsd-tdep.h"
#include "mips-tdep.h"
int regnum, const void *fpregs, size_t len)
{
size_t regsize = mips_isa_regsize (get_regcache_arch (regcache));
- const char *regs = fpregs;
+ const char *regs = (const char *) fpregs;
int i;
gdb_assert (len >= MIPSNBSD_NUM_FPREGS * regsize);
const void *gregs, size_t len)
{
size_t regsize = mips_isa_regsize (get_regcache_arch (regcache));
- const char *regs = gregs;
+ const char *regs = (const char *) gregs;
int i;
gdb_assert (len >= MIPSNBSD_NUM_GREGS * regsize);
/* NetBSD/mips register sets. */
-static struct regset mipsnbsd_gregset =
+static const struct regset mipsnbsd_gregset =
{
NULL,
- mipsnbsd_supply_gregset
+ mipsnbsd_supply_gregset,
+ NULL,
+ REGSET_VARIABLE_SIZE
};
-static struct regset mipsnbsd_fpregset =
+static const struct regset mipsnbsd_fpregset =
{
NULL,
mipsnbsd_supply_fpregset
};
-/* 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 *
-mipsnbsd_regset_from_core_section (struct gdbarch *gdbarch,
- const char *sect_name, size_t sect_size)
+static void
+mipsnbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ iterate_over_regset_sections_cb *cb,
+ void *cb_data,
+ const struct regcache *regcache)
{
size_t regsize = mips_isa_regsize (gdbarch);
-
- if (strcmp (sect_name, ".reg") == 0
- && sect_size >= MIPSNBSD_NUM_GREGS * regsize)
- return &mipsnbsd_gregset;
- if (strcmp (sect_name, ".reg2") == 0
- && sect_size >= MIPSNBSD_NUM_FPREGS * regsize)
- return &mipsnbsd_fpregset;
-
- return NULL;
+ cb (".reg", MIPSNBSD_NUM_GREGS * regsize, &mipsnbsd_gregset,
+ NULL, cb_data);
+ cb (".reg2", MIPSNBSD_NUM_FPREGS * regsize, &mipsnbsd_fpregset,
+ NULL, cb_data);
}
\f
* mips_isa_regsize (gdbarch)));
}
+#if 0
+
/* Under NetBSD/mips, signal handler invocations can be identified by the
designated code sequence that is used to return from a signal handler.
In particular, the return address of a signal handler points to the
0x00, 0x00, 0x00, 0x0c, /* syscall */
};
+#endif
+
/* Figure out where the longjmp will land. We expect that we have
just entered longjmp and haven't yet setup the stack frame, so the
args are still in the argument regs. MIPS_A0_REGNUM points at the
CORE_ADDR jb_addr;
gdb_byte *buf;
- buf = alloca (NBSD_MIPS_JB_ELEMENT_SIZE (gdbarch));
+ buf = (gdb_byte *) alloca (NBSD_MIPS_JB_ELEMENT_SIZE (gdbarch));
jb_addr = get_frame_register_unsigned (frame, MIPS_A0_REGNUM);
mipsnbsd_init_abi (struct gdbarch_info info,
struct gdbarch *gdbarch)
{
- set_gdbarch_regset_from_core_section
- (gdbarch, mipsnbsd_regset_from_core_section);
+ set_gdbarch_iterate_over_regset_sections
+ (gdbarch, mipsnbsd_iterate_over_regset_sections);
set_gdbarch_get_longjmp_target (gdbarch, mipsnbsd_get_longjmp_target);