···1-#ifdef __KERNEL__2-# ifdef CONFIG_X86_323-# include "sigcontext_32.h"4-# else5-# include "sigcontext_64.h"6-# endif7-#else8-# ifdef __i386__9-# include "sigcontext_32.h"10-# else11-# include "sigcontext_64.h"12-# endif0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013#endif
···1+#ifndef _ASM_X86_SIGCONTEXT_H2+#define _ASM_X86_SIGCONTEXT_H3+4+#include <linux/compiler.h>5+#include <asm/types.h>6+7+#ifdef __i386__8+/*9+ * As documented in the iBCS2 standard..10+ *11+ * The first part of "struct _fpstate" is just the normal i38712+ * hardware setup, the extra "status" word is used to save the13+ * coprocessor status word before entering the handler.14+ *15+ * Pentium III FXSR, SSE support16+ * Gareth Hughes <gareth@valinux.com>, May 200017+ *18+ * The FPU state data structure has had to grow to accommodate the19+ * extended FPU state required by the Streaming SIMD Extensions.20+ * There is no documented standard to accomplish this at the moment.21+ */22+struct _fpreg {23+ unsigned short significand[4];24+ unsigned short exponent;25+};26+27+struct _fpxreg {28+ unsigned short significand[4];29+ unsigned short exponent;30+ unsigned short padding[3];31+};32+33+struct _xmmreg {34+ unsigned long element[4];35+};36+37+struct _fpstate {38+ /* Regular FPU environment */39+ unsigned long cw;40+ unsigned long sw;41+ unsigned long tag;42+ unsigned long ipoff;43+ unsigned long cssel;44+ unsigned long dataoff;45+ unsigned long datasel;46+ struct _fpreg _st[8];47+ unsigned short status;48+ unsigned short magic; /* 0xffff = regular FPU data only */49+50+ /* FXSR FPU environment */51+ unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */52+ unsigned long mxcsr;53+ unsigned long reserved;54+ struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */55+ struct _xmmreg _xmm[8];56+ unsigned long padding[56];57+};58+59+#define X86_FXSR_MAGIC 0x000060+61+struct sigcontext {62+ unsigned short gs, __gsh;63+ unsigned short fs, __fsh;64+ unsigned short es, __esh;65+ unsigned short ds, __dsh;66+ unsigned long edi;67+ unsigned long esi;68+ unsigned long ebp;69+ unsigned long esp;70+ unsigned long ebx;71+ unsigned long edx;72+ unsigned long ecx;73+ unsigned long eax;74+ unsigned long trapno;75+ unsigned long err;76+ unsigned long eip;77+ unsigned short cs, __csh;78+ unsigned long eflags;79+ unsigned long esp_at_signal;80+ unsigned short ss, __ssh;81+ struct _fpstate __user * fpstate;82+ unsigned long oldmask;83+ unsigned long cr2;84+};85+86+#else /* __i386__ */87+88+/* FXSAVE frame */89+/* Note: reserved1/2 may someday contain valuable data. Always save/restore90+ them when you change signal frames. */91+struct _fpstate {92+ __u16 cwd;93+ __u16 swd;94+ __u16 twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */95+ __u16 fop;96+ __u64 rip;97+ __u64 rdp;98+ __u32 mxcsr;99+ __u32 mxcsr_mask;100+ __u32 st_space[32]; /* 8*16 bytes for each FP-reg */101+ __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */102+ __u32 reserved2[24];103+};104+105+struct sigcontext {106+ unsigned long r8;107+ unsigned long r9;108+ unsigned long r10;109+ unsigned long r11;110+ unsigned long r12;111+ unsigned long r13;112+ unsigned long r14;113+ unsigned long r15;114+ unsigned long rdi;115+ unsigned long rsi;116+ unsigned long rbp;117+ unsigned long rbx;118+ unsigned long rdx;119+ unsigned long rax;120+ unsigned long rcx;121+ unsigned long rsp;122+ unsigned long rip;123+ unsigned long eflags; /* RFLAGS */124+ unsigned short cs;125+ unsigned short gs;126+ unsigned short fs;127+ unsigned short __pad0;128+ unsigned long err;129+ unsigned long trapno;130+ unsigned long oldmask;131+ unsigned long cr2;132+ struct _fpstate __user *fpstate; /* zero when no FPU context */133+ unsigned long reserved1[8];134+};135+136+#endif /* !__i386__ */137+138#endif
-85
include/asm-x86/sigcontext_32.h
···1-#ifndef _ASMi386_SIGCONTEXT_H2-#define _ASMi386_SIGCONTEXT_H3-4-#include <linux/compiler.h>5-6-/*7- * As documented in the iBCS2 standard..8- *9- * The first part of "struct _fpstate" is just the normal i38710- * hardware setup, the extra "status" word is used to save the11- * coprocessor status word before entering the handler.12- *13- * Pentium III FXSR, SSE support14- * Gareth Hughes <gareth@valinux.com>, May 200015- *16- * The FPU state data structure has had to grow to accommodate the17- * extended FPU state required by the Streaming SIMD Extensions.18- * There is no documented standard to accomplish this at the moment.19- */20-struct _fpreg {21- unsigned short significand[4];22- unsigned short exponent;23-};24-25-struct _fpxreg {26- unsigned short significand[4];27- unsigned short exponent;28- unsigned short padding[3];29-};30-31-struct _xmmreg {32- unsigned long element[4];33-};34-35-struct _fpstate {36- /* Regular FPU environment */37- unsigned long cw;38- unsigned long sw;39- unsigned long tag;40- unsigned long ipoff;41- unsigned long cssel;42- unsigned long dataoff;43- unsigned long datasel;44- struct _fpreg _st[8];45- unsigned short status;46- unsigned short magic; /* 0xffff = regular FPU data only */47-48- /* FXSR FPU environment */49- unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */50- unsigned long mxcsr;51- unsigned long reserved;52- struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */53- struct _xmmreg _xmm[8];54- unsigned long padding[56];55-};56-57-#define X86_FXSR_MAGIC 0x000058-59-struct sigcontext {60- unsigned short gs, __gsh;61- unsigned short fs, __fsh;62- unsigned short es, __esh;63- unsigned short ds, __dsh;64- unsigned long edi;65- unsigned long esi;66- unsigned long ebp;67- unsigned long esp;68- unsigned long ebx;69- unsigned long edx;70- unsigned long ecx;71- unsigned long eax;72- unsigned long trapno;73- unsigned long err;74- unsigned long eip;75- unsigned short cs, __csh;76- unsigned long eflags;77- unsigned long esp_at_signal;78- unsigned short ss, __ssh;79- struct _fpstate __user * fpstate;80- unsigned long oldmask;81- unsigned long cr2;82-};83-84-85-#endif
···1-#ifndef _ASM_X86_64_SIGCONTEXT_H2-#define _ASM_X86_64_SIGCONTEXT_H3-4-#include <asm/types.h>5-#include <linux/compiler.h>6-7-/* FXSAVE frame */8-/* Note: reserved1/2 may someday contain valuable data. Always save/restore9- them when you change signal frames. */10-struct _fpstate {11- __u16 cwd;12- __u16 swd;13- __u16 twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */14- __u16 fop;15- __u64 rip;16- __u64 rdp; 17- __u32 mxcsr;18- __u32 mxcsr_mask;19- __u32 st_space[32]; /* 8*16 bytes for each FP-reg */20- __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */21- __u32 reserved2[24];22-};23-24-struct sigcontext { 25- unsigned long r8;26- unsigned long r9;27- unsigned long r10;28- unsigned long r11;29- unsigned long r12;30- unsigned long r13;31- unsigned long r14;32- unsigned long r15;33- unsigned long rdi;34- unsigned long rsi;35- unsigned long rbp;36- unsigned long rbx;37- unsigned long rdx;38- unsigned long rax;39- unsigned long rcx;40- unsigned long rsp;41- unsigned long rip;42- unsigned long eflags; /* RFLAGS */43- unsigned short cs;44- unsigned short gs;45- unsigned short fs;46- unsigned short __pad0; 47- unsigned long err;48- unsigned long trapno;49- unsigned long oldmask;50- unsigned long cr2;51- struct _fpstate __user *fpstate; /* zero when no FPU context */52- unsigned long reserved1[8];53-};54-55-#endif