From 9cfd01aa63c09a5c1a2ebef0d790fa82db7c403a Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Thu, 21 Mar 2002 16:05:47 +0000 Subject: [PATCH] Merge with mainline. --- .../unix/sysv/linux/x86_64/bits/sigcontext.h | 28 ++++++++++++++----- sysdeps/unix/sysv/linux/x86_64/sys/user.h | 24 ++++++++-------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/sigcontext.h b/sysdeps/unix/sysv/linux/x86_64/bits/sigcontext.h index 3426d8c47ee..3ebb2719738 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; diff --git a/sysdeps/unix/sysv/linux/x86_64/sys/user.h b/sysdeps/unix/sysv/linux/x86_64/sys/user.h index 98820a8d667..bca10c7b3cd 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sys/user.h +++ b/sysdeps/unix/sysv/linux/x86_64/sys/user.h @@ -29,17 +29,17 @@ struct user_fpregs_struct { - unsigned short int cwd; - unsigned short int swd; - unsigned short int twd; - unsigned short int fop; - unsigned long int frip; - unsigned long int frdp; - unsigned int mxcsr; - unsigned int reserved; - unsigned int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ - unsigned int xmm_space[64]; /* 16*16 bytes for each XMM-reg = 128 bytes */ - unsigned int padding[24]; + __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 user_regs_struct @@ -70,7 +70,7 @@ struct user_regs_struct unsigned long ds; unsigned long es; unsigned long fs; - unsigned long gs; + unsigned long gs; }; struct user -- 2.47.2