* ppc-linux-nat.c (ppc_linux_read_description): New.
authorDaniel Jacobowitz <drow@false.org>
Mon, 15 Oct 2007 19:49:53 +0000 (19:49 +0000)
committerDaniel Jacobowitz <drow@false.org>
Mon, 15 Oct 2007 19:49:53 +0000 (19:49 +0000)
(_initialize_ppc_linux_nat): Set to_read_description.
* ppc-tdep.h (tdesc_powerpc_e500): Declare.

gdb/ChangeLog
gdb/ppc-linux-nat.c
gdb/ppc-tdep.h

index 38a3993..c8f1e9e 100644 (file)
@@ -1,5 +1,11 @@
 2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>
 
+       * ppc-linux-nat.c (ppc_linux_read_description): New.
+       (_initialize_ppc_linux_nat): Set to_read_description.
+       * ppc-tdep.h (tdesc_powerpc_e500): Declare.
+
+2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>
+
        * NEWS: Document target described register support for PowerPC.
        * ppc-tdep.h: Remove ppc_spr constants.
        (struct gdbarch_tdep): Remove regs, ppc_sr0_regnum, and
index d86c9f8..1e43640 100644 (file)
@@ -940,6 +940,33 @@ fill_fpregset (const struct regcache *regcache,
                        fpregsetp, sizeof (*fpregsetp));
 }
 
+static const struct target_desc *
+ppc_linux_read_description (struct target_ops *ops)
+{
+  if (have_ptrace_getsetevrregs)
+    {
+      struct gdb_evrregset_t evrregset;
+      int tid = TIDGET (inferior_ptid);
+
+      if (tid == 0)
+       tid = PIDGET (inferior_ptid);
+
+      if (ptrace (PTRACE_GETEVRREGS, tid, 0, &evrregset) >= 0)
+        return tdesc_powerpc_e500;
+      else
+        {
+          /* EIO means that the PTRACE_GETEVRREGS request isn't supported.  */
+          if (errno == EIO)
+           return NULL;
+         else
+            /* Anything else needs to be reported.  */
+            perror_with_name (_("Unable to fetch SPE registers"));
+       }
+    }
+
+  return NULL;
+}
+
 void _initialize_ppc_linux_nat (void);
 
 void
@@ -962,6 +989,8 @@ _initialize_ppc_linux_nat (void)
   t->to_stopped_by_watchpoint = ppc_linux_stopped_by_watchpoint;
   t->to_stopped_data_address = ppc_linux_stopped_data_address;
 
+  t->to_read_description = ppc_linux_read_description;
+
   /* Register the target.  */
   linux_nat_add_target (t);
   linux_nat_set_new_thread (t, ppc_linux_new_thread);
index 76fcf9e..2b566df 100644 (file)
@@ -227,4 +227,6 @@ enum {
 /* Estimate for the maximum number of instrctions in a function epilogue.  */
 #define PPC_MAX_EPILOGUE_INSTRUCTIONS  52
 
+extern struct target_desc *tdesc_powerpc_e500;
+
 #endif /* ppc-tdep.h */