2004-08-08 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / mipsnbsd-tdep.c
index 73ba3847ba4aa625504eba536f3118cac6ac1879..a8b3be868aa7b837a171c45f78aee3a7f3e782c0 100644 (file)
@@ -1,5 +1,5 @@
 /* Target-dependent code for MIPS systems running NetBSD.
-   Copyright 2002 Free Software Foundation, Inc.
+   Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
    Contributed by Wasabi Systems, Inc.
 
    This file is part of GDB.
@@ -28,6 +28,7 @@
 
 #include "nbsd-tdep.h"
 #include "mipsnbsd-tdep.h"
+#include "mips-tdep.h"
 
 #include "solib-svr4.h"
 
@@ -44,9 +45,10 @@ mipsnbsd_supply_reg (char *regs, int regno)
       if (regno == i || regno == -1)
        {
          if (CANNOT_FETCH_REGISTER (i))
-           supply_register (i, NULL);
+           regcache_raw_supply (current_regcache, i, NULL);
          else
-            supply_register (i, regs + (i * MIPS_REGSIZE));
+            regcache_raw_supply (current_regcache, i,
+                                regs + (i * mips_isa_regsize (current_gdbarch)));
         }
     }
 }
@@ -58,7 +60,8 @@ mipsnbsd_fill_reg (char *regs, int regno)
 
   for (i = 0; i <= PC_REGNUM; i++)
     if ((regno == i || regno == -1) && ! CANNOT_STORE_REGISTER (i))
-      regcache_collect (i, regs + (i * MIPS_REGSIZE));
+      regcache_raw_collect (current_regcache, i,
+                           regs + (i * mips_isa_regsize (current_gdbarch)));
 }
 
 void
@@ -66,14 +69,17 @@ mipsnbsd_supply_fpreg (char *fpregs, int regno)
 {
   int i;
 
-  for (i = FP0_REGNUM; i <= FCRIR_REGNUM; i++)
+  for (i = FP0_REGNUM;
+       i <= mips_regnum (current_gdbarch)->fp_implementation_revision;
+       i++)
     {
       if (regno == i || regno == -1)
        {
          if (CANNOT_FETCH_REGISTER (i))
-           supply_register (i, NULL);
+           regcache_raw_supply (current_regcache, i, NULL);
          else
-            supply_register (i, fpregs + ((i - FP0_REGNUM) * MIPS_REGSIZE));
+            regcache_raw_supply (current_regcache, i,
+                                fpregs + ((i - FP0_REGNUM) * mips_isa_regsize (current_gdbarch)));
        }
     }
 }
@@ -83,9 +89,11 @@ mipsnbsd_fill_fpreg (char *fpregs, int regno)
 {
   int i;
 
-  for (i = FP0_REGNUM; i <= FCRCS_REGNUM; i++)
+  for (i = FP0_REGNUM; i <= mips_regnum (current_gdbarch)->fp_control_status;
+       i++)
     if ((regno == i || regno == -1) && ! CANNOT_STORE_REGISTER (i))
-      regcache_collect (i, fpregs + ((i - FP0_REGNUM) * MIPS_REGSIZE));
+      regcache_raw_collect (current_regcache, i,
+                           fpregs + ((i - FP0_REGNUM) * mips_isa_regsize (current_gdbarch)));
 }
 
 static void
@@ -105,7 +113,7 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
   mipsnbsd_supply_reg (regs, -1);
 
   /* Floating point registers.  */
-  mipsnbsd_supply_fpreg (regs, -1);
+  mipsnbsd_supply_fpreg (fpregs, -1);
 }
 
 static void
@@ -194,7 +202,7 @@ mipsnbsd_sigtramp_offset (CORE_ADDR pc)
   LONGEST off;
   int i;
 
-  if (read_memory_nobpt (pc, (char *) w, sizeof (w)) != 0)
+  if (deprecated_read_memory_nobpt (pc, (char *) w, sizeof (w)) != 0)
     return -1;
 
   for (i = 0; i < RETCODE_NWORDS; i++)
@@ -208,7 +216,7 @@ mipsnbsd_sigtramp_offset (CORE_ADDR pc)
   off = i * 4;
   pc -= off;
 
-  if (read_memory_nobpt (pc, (char *) ret, sizeof (ret)) != 0)
+  if (deprecated_read_memory_nobpt (pc, (char *) ret, sizeof (ret)) != 0)
     return -1;
 
   if (memcmp (ret, retcode, RETCODE_SIZE) == 0)
@@ -217,13 +225,6 @@ mipsnbsd_sigtramp_offset (CORE_ADDR pc)
   return -1;
 }
 
-static int
-mipsnbsd_pc_in_sigtramp (CORE_ADDR pc, char *func_name)
-{
-  return (nbsd_pc_in_sigtramp (pc, func_name)
-         || mipsnbsd_sigtramp_offset (pc) >= 0);
-}
-
 /* 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.  A0_REGNUM points at the
@@ -232,7 +233,7 @@ mipsnbsd_pc_in_sigtramp (CORE_ADDR pc, char *func_name)
    success.  */
 
 #define NBSD_MIPS_JB_PC                        (2 * 4)
-#define NBSD_MIPS_JB_ELEMENT_SIZE      MIPS_REGSIZE
+#define NBSD_MIPS_JB_ELEMENT_SIZE      mips_isa_regsize (current_gdbarch)
 #define NBSD_MIPS_JB_OFFSET            (NBSD_MIPS_JB_PC * \
                                         NBSD_MIPS_JB_ELEMENT_SIZE)
 
@@ -250,7 +251,7 @@ mipsnbsd_get_longjmp_target (CORE_ADDR *pc)
                          NBSD_MIPS_JB_ELEMENT_SIZE))
     return 0;
 
-  *pc = extract_address (buf, NBSD_MIPS_JB_ELEMENT_SIZE);
+  *pc = extract_unsigned_integer (buf, NBSD_MIPS_JB_ELEMENT_SIZE);
 
   return 1;
 }
@@ -259,14 +260,14 @@ static int
 mipsnbsd_cannot_fetch_register (int regno)
 {
   return (regno == ZERO_REGNUM
-         || regno == FCRIR_REGNUM);
+         || regno == mips_regnum (current_gdbarch)->fp_implementation_revision);
 }
 
 static int
 mipsnbsd_cannot_store_register (int regno)
 {
   return (regno == ZERO_REGNUM
-         || regno == FCRIR_REGNUM);
+         || regno == mips_regnum (current_gdbarch)->fp_implementation_revision);
 }
 
 /* NetBSD/mips uses a slightly different link_map structure from the
@@ -341,8 +342,6 @@ static void
 mipsnbsd_init_abi (struct gdbarch_info info,
                    struct gdbarch *gdbarch)
 {
-  set_gdbarch_pc_in_sigtramp (gdbarch, mipsnbsd_pc_in_sigtramp);
-
   set_gdbarch_get_longjmp_target (gdbarch, mipsnbsd_get_longjmp_target);
 
   set_gdbarch_cannot_fetch_register (gdbarch, mipsnbsd_cannot_fetch_register);
@@ -359,9 +358,9 @@ mipsnbsd_init_abi (struct gdbarch_info info,
 void
 _initialize_mipsnbsd_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_mips, GDB_OSABI_NETBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_NETBSD_ELF,
                          mipsnbsd_init_abi);
 
-  add_core_fns (&mipsnbsd_core_fns);
-  add_core_fns (&mipsnbsd_elfcore_fns);
+  deprecated_add_core_fns (&mipsnbsd_core_fns);
+  deprecated_add_core_fns (&mipsnbsd_elfcore_fns);
 }
This page took 0.025986 seconds and 4 git commands to generate.