diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/ppc-linux-nat.c | 29 | ||||
-rw-r--r-- | gdb/ppc-tdep.h | 2 |
3 files changed, 37 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 38a3993053e..c8f1e9ea309 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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 diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c index d86c9f85573..1e43640b516 100644 --- a/gdb/ppc-linux-nat.c +++ b/gdb/ppc-linux-nat.c @@ -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); diff --git a/gdb/ppc-tdep.h b/gdb/ppc-tdep.h index 76fcf9e76ab..2b566dfb254 100644 --- a/gdb/ppc-tdep.h +++ b/gdb/ppc-tdep.h @@ -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 */ |