/* Target-dependent code for NetBSD/mips.
- Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011
- 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 "gdb_string.h"
-
#include "nbsd-tdep.h"
#include "mipsnbsd-tdep.h"
#include "mips-tdep.h"
/* 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
}
void
-mipsnbsd_supply_fpreg (struct regcache *regcache, const char *fpregs, int regno)
+mipsnbsd_supply_fpreg (struct regcache *regcache,
+ const char *fpregs, int regno)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
int i;
* 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
struct gdbarch *gdbarch = get_frame_arch (frame);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR jb_addr;
- char *buf;
+ gdb_byte *buf;
buf = alloca (NBSD_MIPS_JB_ELEMENT_SIZE (gdbarch));
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);