aboutsummaryrefslogtreecommitdiff
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
commit8f13581218ad9c20daa1d45618a04c2df4c48b03 (patch)
tree63f3e1ed0a1ccc54aa8e84696b917f7bc3a15f64 /gdb/ppc-linux-nat.c
parent1c7c5e5b0903c114e94c1c3d69d5349ba64e33b1 (diff)
downloadgdb-8f13581218ad9c20daa1d45618a04c2df4c48b03.zip
gdb-8f13581218ad9c20daa1d45618a04c2df4c48b03.tar.gz
gdb-8f13581218ad9c20daa1d45618a04c2df4c48b03.tar.bz2
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 c98bb93..9df3e3d 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;
}