aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/config/i386/tm-linux.h1
-rw-r--r--gdb/gregset.h13
-rw-r--r--gdb/linux-proc.c11
4 files changed, 33 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b46f11f..534418e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2002-04-24 Daniel Jacobowitz <drow@mvista.com>
+
+ * config/i386/tm-linux.h: Define FILL_FPXREGSET.
+ * gregset.h: If FILL_FPXREGSET is defined, provide
+ gdb_fpxregset_t, supply_fpxregset, and fill_fpxregset.
+ * linux-proc.c (linux_do_thread_registers): If FILL_FPXREGSET
+ is defined, call fill_fpxregset.
+
2002-04-24 Roland McGrath <roland@frob.com>
* config/i386/i386gnu.mh (NATDEPFILES): Add core-regset.o here.
diff --git a/gdb/config/i386/tm-linux.h b/gdb/config/i386/tm-linux.h
index 5c549b9..60c4b1e 100644
--- a/gdb/config/i386/tm-linux.h
+++ b/gdb/config/i386/tm-linux.h
@@ -26,6 +26,7 @@
#define I386_GNULINUX_TARGET
#define HAVE_I387_REGS
#ifdef HAVE_PTRACE_GETFPXREGS
+#define FILL_FPXREGSET
#define HAVE_SSE_REGS
#endif
diff --git a/gdb/gregset.h b/gdb/gregset.h
index a3a1325..cb27517 100644
--- a/gdb/gregset.h
+++ b/gdb/gregset.h
@@ -52,5 +52,18 @@ extern void supply_fpregset (gdb_fpregset_t *fpregs);
extern void fill_gregset (gdb_gregset_t *gregs, int regno);
extern void fill_fpregset (gdb_fpregset_t *fpregs, int regno);
+#ifdef FILL_FPXREGSET
+/* Linux/i386: Copy register values between GDB's internal register cache
+ and the i386 extended floating point registers. */
+
+#ifndef GDB_FPXREGSET_T
+#define GDB_FPXREGSET_T elf_fpxregset_t
+#endif
+
+typedef GDB_FPXREGSET_T gdb_fpxregset_t;
+
+extern void supply_fpxregset (gdb_fpxregset_t *fpxregs);
+extern void fill_fpxregset (gdb_fpxregset_t *fpxregs, int regno);
+#endif
#endif
diff --git a/gdb/linux-proc.c b/gdb/linux-proc.c
index 832f14e..aa3b571 100644
--- a/gdb/linux-proc.c
+++ b/gdb/linux-proc.c
@@ -167,6 +167,9 @@ linux_do_thread_registers (bfd *obfd, ptid_t ptid,
{
gdb_gregset_t gregs;
gdb_fpregset_t fpregs;
+#ifdef FILL_FPXREGSET
+ gdb_fpxregset_t fpxregs;
+#endif
unsigned long merged_pid = ptid_get_tid (ptid) << 16 | ptid_get_pid (ptid);
fill_gregset (&gregs, -1);
@@ -183,6 +186,14 @@ linux_do_thread_registers (bfd *obfd, ptid_t ptid,
note_size,
&fpregs,
sizeof (fpregs));
+#ifdef FILL_FPXREGSET
+ fill_fpxregset (&fpxregs, -1);
+ note_data = (char *) elfcore_write_prxfpreg (obfd,
+ note_data,
+ note_size,
+ &fpxregs,
+ sizeof (fpxregs));
+#endif
return note_data;
}