2011-09-02 Pedro Alves <pedro@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / alpha-nat.c
index 3ec16f21eb8eb221bd346d49b418a59f00c63020..f548359c693b300b555bf2965348c3244c1d33a4 100644 (file)
@@ -1,6 +1,6 @@
 /* Low level Alpha interface, for GDB when running native.
-   Copyright (C) 1993, 1995, 1996, 1998, 1999, 2000, 2001, 2003, 2007
-   Free Software Foundation, Inc.
+   Copyright (C) 1993, 1995, 1996, 1998, 1999, 2000, 2001, 2003, 2007, 2008,
+   2009, 2010, 2011 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,6 +22,7 @@
 #include "inferior.h"
 #include "gdbcore.h"
 #include "target.h"
+#include "procfs.h"
 #include "regcache.h"
 
 #include "alpha-tdep.h"
    REG_ADDR is the offset from u.u_ar0 to the register values relative to
    core_reg_sect.  This is used with old-fashioned core files to
    locate the registers in a large upage-plus-stack ".reg" section.
-   Original upage address X is at location core_reg_sect+x+reg_addr.
- */
+   Original upage address X is at location core_reg_sect+x+reg_addr.  */
 
 static void
 fetch_osf_core_registers (struct regcache *regcache,
                          char *core_reg_sect, unsigned core_reg_size,
                          int which, CORE_ADDR reg_addr)
 {
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   int regno;
   int addr;
   int bad_reg = -1;
@@ -66,10 +67,14 @@ fetch_osf_core_registers (struct regcache *regcache,
     CF_T7, CF_S0, CF_S1, CF_S2, CF_S3, CF_S4, CF_S5, CF_S6,
     CF_A0, CF_A1, CF_A2, CF_A3, CF_A4, CF_A5, CF_T8, CF_T9,
     CF_T10, CF_T11, CF_RA, CF_T12, CF_AT, CF_GP, CF_SP, -1,
-    EFL + 0, EFL + 1, EFL + 2, EFL + 3, EFL + 4, EFL + 5, EFL + 6, EFL + 7,
-    EFL + 8, EFL + 9, EFL + 10, EFL + 11, EFL + 12, EFL + 13, EFL + 14, EFL + 15,
-    EFL + 16, EFL + 17, EFL + 18, EFL + 19, EFL + 20, EFL + 21, EFL + 22, EFL + 23,
-    EFL + 24, EFL + 25, EFL + 26, EFL + 27, EFL + 28, EFL + 29, EFL + 30, EFL + 31,
+    EFL + 0, EFL + 1, EFL + 2, EFL + 3,
+    EFL + 4, EFL + 5, EFL + 6, EFL + 7,
+    EFL + 8, EFL + 9, EFL + 10, EFL + 11,
+    EFL + 12, EFL + 13, EFL + 14, EFL + 15,
+    EFL + 16, EFL + 17, EFL + 18, EFL + 19,
+    EFL + 20, EFL + 21, EFL + 22, EFL + 23,
+    EFL + 24, EFL + 25, EFL + 26, EFL + 27,
+    EFL + 28, EFL + 29, EFL + 30, EFL + 31,
     CF_PC, -1, -1
 #else
 #define EFL (EF_SIZE / 8)
@@ -77,21 +82,34 @@ fetch_osf_core_registers (struct regcache *regcache,
     EF_T7, EF_S0, EF_S1, EF_S2, EF_S3, EF_S4, EF_S5, EF_S6,
     EF_A0, EF_A1, EF_A2, EF_A3, EF_A4, EF_A5, EF_T8, EF_T9,
     EF_T10, EF_T11, EF_RA, EF_T12, EF_AT, EF_GP, EF_SP, -1,
-    EFL + 0, EFL + 1, EFL + 2, EFL + 3, EFL + 4, EFL + 5, EFL + 6, EFL + 7,
-    EFL + 8, EFL + 9, EFL + 10, EFL + 11, EFL + 12, EFL + 13, EFL + 14, EFL + 15,
-    EFL + 16, EFL + 17, EFL + 18, EFL + 19, EFL + 20, EFL + 21, EFL + 22, EFL + 23,
-    EFL + 24, EFL + 25, EFL + 26, EFL + 27, EFL + 28, EFL + 29, EFL + 30, EFL + 31,
+    EFL + 0, EFL + 1, EFL + 2, EFL + 3,
+    EFL + 4, EFL + 5, EFL + 6, EFL + 7,
+    EFL + 8, EFL + 9, EFL + 10, EFL + 11,
+    EFL + 12, EFL + 13, EFL + 14, EFL + 15,
+    EFL + 16, EFL + 17, EFL + 18, EFL + 19,
+    EFL + 20, EFL + 21, EFL + 22, EFL + 23,
+    EFL + 24, EFL + 25, EFL + 26, EFL + 27,
+    EFL + 28, EFL + 29, EFL + 30, EFL + 31,
     EF_PC, -1, -1
 #endif
   };
 
   for (regno = 0; regno < ALPHA_NUM_REGS; regno++)
     {
-      if (gdbarch_cannot_fetch_register (current_gdbarch, regno))
+      if (gdbarch_cannot_fetch_register (gdbarch, regno))
        {
          regcache_raw_supply (regcache, regno, NULL);
          continue;
        }
+
+      if (regno == ALPHA_ZERO_REGNUM)
+       {
+         const gdb_byte zero[8] = { 0 };
+
+         regcache_raw_supply (regcache, regno, zero);
+         continue;
+       }
+
       addr = 8 * core_reg_mapping[regno];
       if (addr < 0 || addr >= core_reg_size)
        {
@@ -112,18 +130,17 @@ fetch_osf_core_registers (struct regcache *regcache,
   if (bad_reg >= 0)
     {
       error (_("Register %s not found in core file."),
-            gdbarch_register_name (current_gdbarch, bad_reg));
+            gdbarch_register_name (gdbarch, bad_reg));
     }
 }
 
 
 #include <sys/procfs.h>
-/* Prototypes for supply_gregset etc. */
+/* Prototypes for supply_gregset etc.  */
 #include "gregset.h"
 
-/*
- * See the comment in m68k-tdep.c regarding the utility of these functions.
- */
+/* See the comment in m68k-tdep.c regarding the utility of these
+   functions.  */
 
 void
 supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp)
@@ -144,10 +161,8 @@ fill_gregset (const struct regcache *regcache,
   alpha_fill_int_regs (regcache, regno, regp, regp + 31, NULL);
 }
 
-/*
- * Now we do the same thing for floating-point registers.
- * Again, see the comments in m68k-tdep.c.
- */
+/* Now we do the same thing for floating-point registers.
+   Again, see the comments in m68k-tdep.c.  */
 
 void
 supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
@@ -169,7 +184,7 @@ fill_fpregset (const struct regcache *regcache,
 }
 \f
 
-/* Register that we are able to handle alpha core file formats. */
+/* Register that we are able to handle alpha core file formats.  */
 
 static struct core_fns alpha_osf_core_fns =
 {
@@ -182,8 +197,16 @@ static struct core_fns alpha_osf_core_fns =
   NULL                                 /* next */
 };
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_alpha_nat;
+
 void
-_initialize_core_alpha (void)
+_initialize_alpha_nat (void)
 {
+  struct target_ops *t;
+
+  t = procfs_target ();
+  add_target (t);
+
   deprecated_add_core_fns (&alpha_osf_core_fns);
 }
This page took 0.028099 seconds and 4 git commands to generate.