summaryrefslogtreecommitdiff
path: root/gdb/ppc-linux-nat.c
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2005-02-08 21:00:16 +0000
committerAndrew Cagney <cagney@redhat.com>2005-02-08 21:00:16 +0000
commit5cb54e03fe30df7054e546d8533d144daf3756c8 (patch)
tree1701baf61ed366de61faf028bcb6fbfe689f2dbe /gdb/ppc-linux-nat.c
parent91d672cb311ef127e47f9ae36e12619ec1fdbfdb (diff)
downloadgdb-5cb54e03fe30df7054e546d8533d144daf3756c8.tar.gz
2005-02-08 Andrew Cagney <cagney@gnu.org>
* ppc-linux-nat.c (ppc_register_u_addr): Hack around 64-bit PT_FPSCR breakage.
Diffstat (limited to 'gdb/ppc-linux-nat.c')
-rw-r--r--gdb/ppc-linux-nat.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
index c98bb93f879..9df3e3d126f 100644
--- a/gdb/ppc-linux-nat.c
+++ b/gdb/ppc-linux-nat.c
@@ -212,8 +212,19 @@ ppc_register_u_addr (int regno)
u_addr = PT_MSR * wordsize;
if (tdep->ppc_fpscr_regnum >= 0
&& regno == tdep->ppc_fpscr_regnum)
- u_addr = PT_FPSCR * wordsize;
-
+ {
+ /* NOTE: cagney/2005-02-08: On some 64-bit GNU/Linux systems the
+ kernel headers incorrectly contained the 32-bit definition of
+ PT_FPSCR. For the 32-bit definition, floating-point
+ registers occupy two 32-bit "slots", and the FPSCR lives in
+ the secondhalf of such a slot-pair (hence +1). For 64-bit,
+ the FPSCR instead occupies the full 64-bit 2-word-slot and
+ hence no adjustment is necessary. Hack around this. */
+ if (wordsize == 8 && PT_FPSCR == (48 + 32 + 1))
+ u_addr = (48 + 32) * wordsize;
+ else
+ u_addr = PT_FPSCR * wordsize;
+ }
return u_addr;
}