Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Mark Kettenis <mark.kettenis@xs4all.nl>
To: davem@davemloft.net
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] Fix Sparc %fsr regset offset for BSD and Linux.
Date: Fri, 23 Nov 2012 20:22:00 -0000	[thread overview]
Message-ID: <201211232021.qANKLiTk004675@glazunov.sibelius.xs4all.nl> (raw)
In-Reply-To: <20121119.164316.1908957824168113840.davem@davemloft.net>	(message from David Miller on Mon, 19 Nov 2012 16:43:16 -0500 (EST))

> Date: Mon, 19 Nov 2012 16:43:16 -0500 (EST)
> From: David Miller <davem@davemloft.net>
> 
> 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.


  reply	other threads:[~2012-11-23 20:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-19 21:43 David Miller
2012-11-23 20:22 ` Mark Kettenis [this message]
2012-11-23 20:31   ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201211232021.qANKLiTk004675@glazunov.sibelius.xs4all.nl \
    --to=mark.kettenis@xs4all.nl \
    --cc=davem@davemloft.net \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox