From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10538 invoked by alias); 23 Nov 2012 20:22:02 -0000 Received: (qmail 10524 invoked by uid 22791); 23 Nov 2012 20:22:01 -0000 X-SWARE-Spam-Status: No, hits=-3.2 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RP_MATCHES_RCVD,TW_CN X-Spam-Check-By: sourceware.org Received: from sibelius.xs4all.nl (HELO glazunov.sibelius.xs4all.nl) (83.163.83.176) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 23 Nov 2012 20:21:57 +0000 Received: from glazunov.sibelius.xs4all.nl (kettenis@localhost [127.0.0.1]) by glazunov.sibelius.xs4all.nl (8.14.5/8.14.3) with ESMTP id qANKLnZj029920; Fri, 23 Nov 2012 21:21:49 +0100 (CET) Received: (from kettenis@localhost) by glazunov.sibelius.xs4all.nl (8.14.5/8.14.3/Submit) id qANKLiTk004675; Fri, 23 Nov 2012 21:21:44 +0100 (CET) Date: Fri, 23 Nov 2012 20:22:00 -0000 Message-Id: <201211232021.qANKLiTk004675@glazunov.sibelius.xs4all.nl> From: Mark Kettenis To: davem@davemloft.net CC: gdb-patches@sourceware.org In-reply-to: <20121119.164316.1908957824168113840.davem@davemloft.net> (message from David Miller on Mon, 19 Nov 2012 16:43:16 -0500 (EST)) Subject: Re: [PATCH] Fix Sparc %fsr regset offset for BSD and Linux. References: <20121119.164316.1908957824168113840.davem@davemloft.net> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-11/txt/msg00633.txt.bz2 > Date: Mon, 19 Nov 2012 16:43:16 -0500 (EST) > From: David Miller > > When the sparc target was converted away from using the datastructures > in machine/reg.h et al. (circa 2004) the %fsr offset used was > incorrect for half of the OSes. > > SunOS4 and Solaris2 use something approximating: > > uint32_t fpu_regs[32]; > struct fq *fpu_q; > uint32_t fpu_fsr; > ... > > for 32-bit and: > > double fpu_regs[32]; > struct fq *fpu_q; > uint64_t fpu_fsr; > ... > > for 64-bit. > > Whereas the BSDs and Linux use: > > uint32_t fpu_regs[32]; > uint32_t fpu_fsr; > ... > > for 32-bit and: > > double fpu_regs[32]; > uint64_t fpu_fsr; > > for 64-bit. > > Basically the fixed %fsr offset used by the supply/collect routines > was off by sizeof(void *) for these latter targets. > > I fixed this by making a sparc_fpregset type akin to the existing > sparc_gregset. Most of the changes in this patch are mechanical. > > Any objections? Looks good to me. > gdb/ > > * sparc-tdep.h (struct sparc_fpregset): New data structure. > (sparc32_sunos4_fpregset, sparc32_bsd_fpregset, > sparc32_sol2_fpregset): Declare new globals. > (sparc32_supply_fpregset, sparc32_collect_fpregset): Add new > 'fpregset' argument. > * sparc64-tdep.h (sparc64_supply_fpregset, > sparc64_collect_fpregset): Likewise. > (sparc64_sol2_fpregset, sparc64_bsd_fpregset): Declare new > globals. > * sparc-nat.h (struct sparc_fpregset): Add forward declaration. > (sparc_fpregset): Declare new global. > (sparc_supply_fpregset, sparc_collect_fpregset): Add new > 'fpregset' argument. > * sparc-linux-nat.c (supply_fpregset): Pass sparc_fpregset down > into handler. > (fill_fpregset): Likewise. > (_initialize_sparc_linux_nat): Set sparc_fpregset to > sparc32_bsd_fpregset. > * sparc-linux-tdep.c (sparc32_linux_supply_core_fpregset): Pass > sparc32_bsd_fpregset down into handler. > (sparc32_linux_collect_core_fpregset): Likewise. > * sparc-nat.c (sparc_fpregset): Define. > (sparc_supply_fpregset): Add 'fpregset' argument. > (sparc_collect_fpregset): Likewise. > (sparc_fetch_inferior_registers): Pass sparc_fpregset down > into fpregset handler. > (sparc_store_inferior_registers): Likewise. > (_initialize_sparc_nat): Set sparc_fpregset to > sparc32_sunos4_fpregset if NULL. > * sparc-sol2-nat.c (supply_gregset): Pass sparc_sol2_fpregset > down into handler. > (fill_fpregset): Likewise. > * sparc-sol2-tdep.c (sparc32_sol2_fpregset): Define. > * sparc-tdep.c (sparc32_supply_fpregset): Add fpregset arg and > use it to compute offsets. > (sparc32_collect_fpregset): Likewise. > (sparc32_sunos4_fpregset, sparc32_bsd_fpregset): Define. > * sparc64-linux-nat.c (supply_fpregset): Pass sparc64_bsd_fpregset > down into handler. > (fill_fpregset): Likewise. > * sparc64-linux-tdep.c (sparc64_linux_supply_core_fpregset): > Likewise. > (sparc64_linux_collect_core_fpregset): Likewise. > * sparc64-sol2-tdep.c (sparc64_sol2_fpregset): Define. > * sparc64-tdep.c (sparc64_supply_fpregset): Add fpregset arg and > use it to compute offsets. > (sparc64_collect_fpregset): Likewise. > (sparc64_bsd_fpregset): Define. > * sparc64fbsd-tdep.c (sparc64fbsd_supply_fpregset): Padd > sparc64_bsd_fpregset down into handler. > (sparc64fbsd_collect_fpregset): Likewise. > * sparc64nbsd-nat.c (sparc64nbsd_supply_fpregset): Add fpregset arg > and pass sparc{32,64}_bsd_fpregset down into handler. > (sparc64nbsd_collect_fpregset): Likewise. > * sparc64nbsd-tdep.c (sparc64nbsd_supply_fpregset): Pass > sparc64_bsd_fpregset down into handler. > * sparc64obsd-tdep.c (sparc64obsd_supply_gregset): Likewise. > * sparcnbsd-nat.c (_initialize_sparcnbsd_nat): Set sparc_fpregset > to sparc32_bsd_fpregset. > * sparcnbsd-tdep.c (sparc32nbsd_supply_gregset): Pass > sparc32_bsd_fpregset down into sparc32_supply_fpregset. > (sparc32nbsd_supply_fpregset): Likewise.