* osabi.c: Include "gdb_assert.h" and "gdb_string.h".
[deliverable/binutils-gdb.git] / gdb / mips-linux-tdep.c
index b8d41db2e3be79dabe855cecc394a9315e18f860..e5aecfffdace0094b15f69008c729a42cea14a83 100644 (file)
@@ -1,5 +1,6 @@
 /* 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.
 
@@ -22,6 +23,8 @@
 #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
@@ -59,7 +62,10 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
    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;
@@ -100,7 +106,6 @@ supply_gregset (elf_gregset_t *gregsetp)
   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);
@@ -132,7 +137,7 @@ fill_gregset (elf_gregset_t *gregsetp, int regno)
 
   if (regno < 32)
     {
-      src = &registers[REGISTER_BYTE (regno)];
+      src = &deprecated_registers[REGISTER_BYTE (regno)];
       dst = regp + regno + EF_REG0;
       memcpy (dst, src, sizeof (elf_greg_t));
       return;
@@ -163,7 +168,7 @@ fill_gregset (elf_gregset_t *gregsetp, int regno)
 
   if (regaddr != -1)
     {
-      src = &registers[REGISTER_BYTE (regno)];
+      src = &deprecated_registers[REGISTER_BYTE (regno)];
       dst = regp + regaddr;
       memcpy (dst, src, sizeof (elf_greg_t));
     }
@@ -199,13 +204,13 @@ fill_fpregset (elf_fpregset_t *fpregsetp, int regno)
 
   if ((regno >= FP0_REGNUM) && (regno < FP0_REGNUM + 32))
     {
-      from = (char *) &registers[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 *) &registers[REGISTER_BYTE (regno)];
+      from = (char *) &deprecated_registers[REGISTER_BYTE (regno)];
       to = (char *) (*fpregsetp + 32);
       memcpy (to, from, REGISTER_RAW_SIZE (regno));
     }
@@ -309,7 +314,7 @@ static struct core_fns regset_core_fns =
    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;
@@ -342,8 +347,18 @@ mips_linux_svr4_fetch_link_map_offsets (void)
   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 (&regset_core_fns);
 }
This page took 0.02458 seconds and 4 git commands to generate.