From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19425 invoked by alias); 2 Apr 2006 07:12:08 -0000 Received: (qmail 19417 invoked by uid 22791); 2 Apr 2006 07:12:07 -0000 X-Spam-Check-By: sourceware.org Received: from dsl027-180-168.sfo1.dsl.speakeasy.net (HELO sunset.davemloft.net) (216.27.180.168) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 02 Apr 2006 07:12:04 +0000 Received: from localhost ([127.0.0.1] ident=davem) by sunset.davemloft.net with esmtp (Exim 4.60) (envelope-from ) id 1FPwkl-0004yk-Je for gdb-patches@sources.redhat.com; Sat, 01 Apr 2006 23:12:03 -0800 Date: Sun, 02 Apr 2006 07:12:00 -0000 Message-Id: <20060401.231203.48434968.davem@davemloft.net> To: gdb-patches@sources.redhat.com Subject: [PATCH]: Fix thread debugging on Sparc/Linux From: "David S. Miller" Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-04/txt/msg00006.txt.bz2 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 * 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 +#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 +#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);