This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH]: Fix thread debugging on Sparc/Linux
- From: "David S. Miller" <davem at davemloft dot net>
- To: gdb-patches at sources dot redhat dot com
- Date: Sat, 01 Apr 2006 23:12:03 -0800 (PST)
- Subject: [PATCH]: Fix thread debugging on Sparc/Linux
Normally the {supply,fill}_{gregset,fpregset}() functions don't
get used on Sparc/Linux because all of the register stuff does
ptrace() inside of sparc-nat.c
However, for proc-service.c thread debugging (and I think also
for core files) these routines do get used.
Currently, we're linking in sparc-sol2-nat.o but that doesn't
work so well because it hardcodes using the sparc_sol2_gregset
which causes no end of troubles if used on another native Sparc
platform.
Any objections to the following fix?
Thanks.
2006-04-01 David S. Miller <davem@davemloft.net>
* config/linux.mh (NATDEPFILES): Remove sparc-sol2-nat.o
* config/linux64.h (NATDEPFILES): Likewise
* sparc-linux-nat.c (supply_gregset, supply_fpregset, fill_gregset,
fill_fpregset): New.
* sparc64-linux-nat.c (supply_gregset, supply_fpregset, fill_gregset,
fill_fpregset): New.
--- ./config/sparc/linux.mh.~1~ 2006-02-25 15:05:04.000000000 -0800
+++ ./config/sparc/linux.mh 2006-04-01 22:51:27.000000000 -0800
@@ -1,6 +1,6 @@
# Host: GNU/Linux SPARC
NAT_FILE= nm-linux.h
-NATDEPFILES= sparc-nat.o sparc-sol2-nat.o sparc-linux-nat.o \
+NATDEPFILES= sparc-nat.o sparc-linux-nat.o \
corelow.o core-regset.o fork-child.o inf-ptrace.o \
proc-service.o linux-thread-db.o \
gcore.o linux-nat.o linux-fork.o
--- ./config/sparc/linux64.mh.~1~ 2006-02-25 15:05:04.000000000 -0800
+++ ./config/sparc/linux64.mh 2006-04-01 22:51:35.000000000 -0800
@@ -1,6 +1,6 @@
# Host: GNU/Linux UltraSPARC
NAT_FILE= nm-linux.h
-NATDEPFILES= sparc-nat.o sparc64-nat.o sparc-sol2-nat.o sparc64-linux-nat.o \
+NATDEPFILES= sparc-nat.o sparc64-nat.o sparc64-linux-nat.o \
corelow.o core-regset.o \
fork-child.o inf-ptrace.o \
proc-service.o linux-thread-db.o \
--- ./sparc-linux-nat.c.~1~ 2006-04-01 16:55:17.000000000 -0800
+++ ./sparc-linux-nat.c 2006-04-01 22:55:15.000000000 -0800
@@ -20,10 +20,41 @@
Boston, MA 02110-1301, USA. */
#include "defs.h"
+#include "regcache.h"
+
+#include <sys/procfs.h>
+#include "gregset.h"
+
+#include "sparc-tdep.h"
+#include "sparc-nat.h"
#include "inferior.h"
#include "target.h"
#include "linux-nat.h"
+void
+supply_gregset (prgregset_t *gregs)
+{
+ sparc32_supply_gregset (sparc_gregset, current_regcache, -1, gregs);
+}
+
+void
+supply_fpregset (prfpregset_t *fpregs)
+{
+ sparc32_supply_fpregset (current_regcache, -1, fpregs);
+}
+
+void
+fill_gregset (prgregset_t *gregs, int regnum)
+{
+ sparc32_collect_gregset (sparc_gregset, current_regcache, regnum, gregs);
+}
+
+void
+fill_fpregset (prfpregset_t *fpregs, int regnum)
+{
+ sparc32_collect_fpregset (current_regcache, regnum, fpregs);
+}
+
void _initialialize_sparc_linux_nat (void);
void
--- ./sparc64-linux-nat.c.~1~ 2006-04-01 16:55:17.000000000 -0800
+++ ./sparc64-linux-nat.c 2006-04-01 22:55:30.000000000 -0800
@@ -20,8 +20,13 @@
Boston, MA 02110-1301, USA. */
#include "defs.h"
+#include "regcache.h"
+
+#include <sys/procfs.h>
+#include "gregset.h"
#include "sparc64-tdep.h"
+#include "sparc-tdep.h"
#include "sparc-nat.h"
#include "inferior.h"
#include "target.h"
@@ -41,6 +46,30 @@ static const struct sparc_gregset sparc6
};
+void
+supply_gregset (prgregset_t *gregs)
+{
+ sparc64_supply_gregset (sparc_gregset, current_regcache, -1, gregs);
+}
+
+void
+supply_fpregset (prfpregset_t *fpregs)
+{
+ sparc64_supply_fpregset (current_regcache, -1, fpregs);
+}
+
+void
+fill_gregset (prgregset_t *gregs, int regnum)
+{
+ sparc64_collect_gregset (sparc_gregset, current_regcache, regnum, gregs);
+}
+
+void
+fill_fpregset (prfpregset_t *fpregs, int regnum)
+{
+ sparc64_collect_fpregset (current_regcache, regnum, fpregs);
+}
+
/* Provide a prototype to silence -Wmissing-prototypes. */
void _initialize_sparc64_linux_nat (void);