/* Target-dependent code for GNU/Linux on MIPS processors.
- Copyright 2001 Free Software Foundation, Inc.
+
+ Copyright 2001, 2002 Free Software Foundation, Inc.
This file is part of GDB.
#include "gdbcore.h"
#include "target.h"
#include "solib-svr4.h"
+#include "osabi.h"
+#include "gdb_string.h"
/* Copied from <asm/elf.h>. */
#define ELF_NGREG 45
which we extract the pc (MIPS_LINUX_JB_PC) that we will land at. The pc
is copied into PC. This routine returns 1 on success. */
-int
+#define MIPS_LINUX_JB_ELEMENT_SIZE 4
+#define MIPS_LINUX_JB_PC 0
+
+static int
mips_linux_get_longjmp_target (CORE_ADDR *pc)
{
CORE_ADDR jb_addr;
supply_register (CAUSE_REGNUM, (char *)(regp + EF_CP0_CAUSE));
/* Fill inaccessible registers with zero. */
- supply_register (FP_REGNUM, zerobuf);
supply_register (UNUSED_REGNUM, zerobuf);
for (regi = FIRST_EMBED_REGNUM; regi < LAST_EMBED_REGNUM; regi++)
supply_register (regi, zerobuf);
if (regno < 32)
{
- src = ®isters[REGISTER_BYTE (regno)];
+ src = &deprecated_registers[REGISTER_BYTE (regno)];
dst = regp + regno + EF_REG0;
memcpy (dst, src, sizeof (elf_greg_t));
return;
if (regaddr != -1)
{
- src = ®isters[REGISTER_BYTE (regno)];
+ src = &deprecated_registers[REGISTER_BYTE (regno)];
dst = regp + regaddr;
memcpy (dst, src, sizeof (elf_greg_t));
}
if ((regno >= FP0_REGNUM) && (regno < FP0_REGNUM + 32))
{
- from = (char *) ®isters[REGISTER_BYTE (regno)];
+ from = (char *) &deprecated_registers[REGISTER_BYTE (regno)];
to = (char *) (*fpregsetp + regno - FP0_REGNUM);
memcpy (to, from, REGISTER_RAW_SIZE (regno - FP0_REGNUM));
}
else if (regno == FCRCS_REGNUM)
{
- from = (char *) ®isters[REGISTER_BYTE (regno)];
+ from = (char *) &deprecated_registers[REGISTER_BYTE (regno)];
to = (char *) (*fpregsetp + 32);
memcpy (to, from, REGISTER_RAW_SIZE (regno));
}
This makes it possible to access GNU/Linux MIPS shared libraries from a
GDB that was built on a different host platform (for cross debugging). */
-struct link_map_offsets *
+static struct link_map_offsets *
mips_linux_svr4_fetch_link_map_offsets (void)
{
static struct link_map_offsets lmo;
return lmp;
}
+static void
+mips_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+ set_gdbarch_get_longjmp_target (gdbarch, mips_linux_get_longjmp_target);
+ set_solib_svr4_fetch_link_map_offsets
+ (gdbarch, mips_linux_svr4_fetch_link_map_offsets);
+}
+
void
_initialize_mips_linux_tdep (void)
{
+ gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_LINUX,
+ mips_linux_init_abi);
add_core_fns (®set_core_fns);
}