aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2002-03-21 16:03:56 +0000
committerAndreas Jaeger <aj@suse.de>2002-03-21 16:03:56 +0000
commit943b72618ef3e2040d339a38abdc86f23b89f702 (patch)
treea79daa66dbfbfd5d1171e7474f06979b34548054
parent973f52a0105f37faf986c17b90c16b1fcf7ce310 (diff)
downloadglibc-943b72618ef3e2040d339a38abdc86f23b89f702.tar
glibc-943b72618ef3e2040d339a38abdc86f23b89f702.tar.gz
glibc-943b72618ef3e2040d339a38abdc86f23b89f702.tar.bz2
glibc-943b72618ef3e2040d339a38abdc86f23b89f702.zip
(struct _fpstate): Add separate struct for x86-64.
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/bits/sigcontext.h28
1 files changed, 21 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/sigcontext.h b/sysdeps/unix/sysv/linux/x86_64/bits/sigcontext.h
index 3426d8c47e..3ebb271973 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/sigcontext.h
+++ b/sysdeps/unix/sysv/linux/x86_64/bits/sigcontext.h
@@ -43,9 +43,10 @@ struct _xmmreg
__uint32_t element[4];
};
-/* This is FXSAVE layout without 64bit prefix thus 32bit
- compatible. This means that the IP and DPs are only 32bit and are
- not useful in 64bit space. */
+
+
+#if __WORDSIZE == 32
+
struct _fpstate
{
/* Regular FPU environment. */
@@ -65,13 +66,10 @@ struct _fpstate
__uint32_t mxcsr;
__uint32_t reserved;
struct _fpxreg _fxsr_st[8];
- struct _xmmreg _xmm[8]; /* It's actually 16 for x86-64. */
+ struct _xmmreg _xmm[8];
__uint32_t padding[56];
};
-
-#if __WORDSIZE == 32
-
struct sigcontext
{
unsigned short gs, __gsh;
@@ -100,6 +98,22 @@ struct sigcontext
#else
+struct _fpstate
+{
+ /* Regular FPU environment. */
+ __uint16_t cwd;
+ __uint16_t swd;
+ __uint16_t twd;
+ __uint16_t fop;
+ __uint64_t rip;
+ __uint64_t rdp;
+ __uint32_t mxcsr;
+ __uint32_t mxcr_mask;
+ __uint32_t st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
+ __uint32_t xmm_space[64]; /* 16*16 bytes for each XMM-reg = 128 bytes */
+ __uint32_t padding[24];
+};
+
struct sigcontext
{
unsigned short gs, __gsh;