2003-05-19 David Carlton <carlton@bactrian.org>
[deliverable/binutils-gdb.git] / gdb / alpha-nat.c
index ef468f50693ce39fa0268b639e2b63b645809ac6..af0a336cf6ab3b580b539a2e6ef8c0efdb25eb84 100644 (file)
@@ -1,5 +1,5 @@
 /* Low level Alpha interface, for GDB when running native.
-   Copyright 1993, 1995, 1996, 1998, 1999, 2000, 2001
+   Copyright 1993, 1995, 1996, 1998, 1999, 2000, 2001, 2003
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -20,6 +20,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
+#include "gdb_string.h"
 #include "inferior.h"
 #include "gdbcore.h"
 #include "target.h"
@@ -133,38 +134,51 @@ fetch_elf_core_registers (char *core_reg_sect, unsigned core_reg_size,
   if (which == 2)
     {
       /* The FPU Registers.  */
-      memcpy (&registers[REGISTER_BYTE (FP0_REGNUM)], core_reg_sect, 31 * 8);
-      memset (&registers[REGISTER_BYTE (FP0_REGNUM + 31)], 0, 8);
+      memcpy (&deprecated_registers[REGISTER_BYTE (FP0_REGNUM)],
+             core_reg_sect, 31 * 8);
+      memset (&deprecated_registers[REGISTER_BYTE (FP0_REGNUM + 31)], 0, 8);
       memset (&deprecated_register_valid[FP0_REGNUM], 1, 32);
     }
   else
     {
       /* The General Registers.  */
-      memcpy (&registers[REGISTER_BYTE (ALPHA_V0_REGNUM)], core_reg_sect,
-              31 * 8);
-      memcpy (&registers[REGISTER_BYTE (PC_REGNUM)], core_reg_sect + 31 * 8, 8);
-      memset (&registers[REGISTER_BYTE (ALPHA_ZERO_REGNUM)], 0, 8);
+      memcpy (&deprecated_registers[REGISTER_BYTE (ALPHA_V0_REGNUM)],
+             core_reg_sect, 31 * 8);
+      memcpy (&deprecated_registers[REGISTER_BYTE (PC_REGNUM)],
+             core_reg_sect + 31 * 8, 8);
+      memset (&deprecated_registers[REGISTER_BYTE (ALPHA_ZERO_REGNUM)], 0, 8);
       memset (&deprecated_register_valid[ALPHA_V0_REGNUM], 1, 32);
       deprecated_register_valid[PC_REGNUM] = 1;
+
+      if (core_reg_size >= 33 * 8)
+       {
+         memcpy (&deprecated_registers[REGISTER_BYTE (ALPHA_UNIQUE_REGNUM)],
+                 core_reg_sect + 32 * 8, 8);
+         deprecated_register_valid[ALPHA_UNIQUE_REGNUM] = 1;
+       }
     }
 }
 
 
 /* Map gdb internal register number to a ptrace ``address''.
-   These ``addresses'' are defined in <sys/ptrace.h> */
+   These ``addresses'' are defined in <sys/ptrace.h>, with
+   the exception of ALPHA_UNIQUE_PTRACE_ADDR.  */
 
-#define REGISTER_PTRACE_ADDR(regno) \
-   (regno < FP0_REGNUM ?       GPR_BASE + (regno) \
-  : regno == PC_REGNUM ?       PC      \
-  : regno >= FP0_REGNUM ?      FPR_BASE + ((regno) - FP0_REGNUM) \
-  : 0)
-
-/* Return the ptrace ``address'' of register REGNO. */
+#ifndef ALPHA_UNIQUE_PTRACE_ADDR
+#define ALPHA_UNIQUE_PTRACE_ADDR 0
+#endif
 
 CORE_ADDR
 register_addr (int regno, CORE_ADDR blockend)
 {
-  return REGISTER_PTRACE_ADDR (regno);
+  if (regno == PC_REGNUM)
+    return PC;
+  if (regno == ALPHA_UNIQUE_REGNUM)
+    return ALPHA_UNIQUE_PTRACE_ADDR;
+  if (regno < FP0_REGNUM)
+    return GPR_BASE + regno;
+  else
+    return FPR_BASE + regno - FP0_REGNUM;
 }
 
 int
@@ -198,7 +212,7 @@ supply_gregset (gdb_gregset_t *gregsetp)
 
   /* Fill inaccessible registers with zero.  */
   supply_register (ALPHA_ZERO_REGNUM, zerobuf);
-  supply_register (FP_REGNUM, zerobuf);
+  supply_register (DEPRECATED_FP_REGNUM, zerobuf);
 }
 
 void
@@ -209,10 +223,10 @@ fill_gregset (gdb_gregset_t *gregsetp, int regno)
 
   for (regi = 0; regi < 31; regi++)
     if ((regno == -1) || (regno == regi))
-      *(regp + regi) = *(long *) &registers[REGISTER_BYTE (regi)];
+      *(regp + regi) = *(long *) &deprecated_registers[REGISTER_BYTE (regi)];
 
   if ((regno == -1) || (regno == PC_REGNUM))
-    *(regp + 31) = *(long *) &registers[REGISTER_BYTE (PC_REGNUM)];
+    *(regp + 31) = *(long *) &deprecated_registers[REGISTER_BYTE (PC_REGNUM)];
 }
 
 /*
@@ -241,7 +255,7 @@ fill_fpregset (gdb_fpregset_t *fpregsetp, int regno)
       if ((regno == -1) || (regno == regi))
        {
          *(regp + regi - FP0_REGNUM) =
-           *(long *) &registers[REGISTER_BYTE (regi)];
+           *(long *) &deprecated_registers[REGISTER_BYTE (regi)];
        }
     }
 }
This page took 0.02429 seconds and 4 git commands to generate.