blob: 7c7c27c97daa1077cb4b5a1cca2c229debd1707c [file] [log] [blame]
Hiroshi Shimamoto5c2628e2008-12-18 09:18:35 -08001#ifndef _ASM_X86_SIGFRAME_H
2#define _ASM_X86_SIGFRAME_H
3
Hiroshi Shimamotob2fa7392008-12-18 14:43:34 -08004#include <asm/sigcontext.h>
5#include <asm/siginfo.h>
6#include <asm/ucontext.h>
7
Harvey Harrison123a6342008-02-08 12:10:00 -08008#ifdef CONFIG_X86_32
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -08009#define sigframe_ia32 sigframe
10#define rt_sigframe_ia32 rt_sigframe
11#define sigcontext_ia32 sigcontext
12#define _fpstate_ia32 _fpstate
13#define ucontext_ia32 ucontext
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080014#else /* !CONFIG_X86_32 */
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -080015
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080016#ifdef CONFIG_IA32_EMULATION
17#include <asm/ia32.h>
18#endif /* CONFIG_IA32_EMULATION */
19
20#endif /* CONFIG_X86_32 */
21
22#if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -080023struct sigframe_ia32 {
24 u32 pretcode;
Linus Torvalds1da177e2005-04-16 15:20:36 -070025 int sig;
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -080026 struct sigcontext_ia32 sc;
Suresh Siddha3c1c7f12008-07-29 10:29:21 -070027 /*
28 * fpstate is unused. fpstate is moved/allocated after
29 * retcode[] below. This movement allows to have the FP state and the
30 * future state extensions (xsave) stay together.
31 * And at the same time retaining the unused fpstate, prevents changing
32 * the offset of extramask[] in the sigframe and thus prevent any
33 * legacy application accessing/modifying it.
34 */
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -080035 struct _fpstate_ia32 fpstate_unused;
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080036#ifdef CONFIG_IA32_EMULATION
37 unsigned int extramask[_COMPAT_NSIG_WORDS-1];
38#else /* !CONFIG_IA32_EMULATION */
Linus Torvalds1da177e2005-04-16 15:20:36 -070039 unsigned long extramask[_NSIG_WORDS-1];
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080040#endif /* CONFIG_IA32_EMULATION */
Linus Torvalds1da177e2005-04-16 15:20:36 -070041 char retcode[8];
Suresh Siddha3c1c7f12008-07-29 10:29:21 -070042 /* fp state follows here */
Linus Torvalds1da177e2005-04-16 15:20:36 -070043};
44
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -080045struct rt_sigframe_ia32 {
46 u32 pretcode;
Linus Torvalds1da177e2005-04-16 15:20:36 -070047 int sig;
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -080048 u32 pinfo;
49 u32 puc;
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080050#ifdef CONFIG_IA32_EMULATION
51 compat_siginfo_t info;
52#else /* !CONFIG_IA32_EMULATION */
Linus Torvalds1da177e2005-04-16 15:20:36 -070053 struct siginfo info;
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080054#endif /* CONFIG_IA32_EMULATION */
Hiroshi Shimamotoa5c56eb2008-12-17 18:49:55 -080055 struct ucontext_ia32 uc;
Linus Torvalds1da177e2005-04-16 15:20:36 -070056 char retcode[8];
Suresh Siddha3c1c7f12008-07-29 10:29:21 -070057 /* fp state follows here */
Linus Torvalds1da177e2005-04-16 15:20:36 -070058};
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080059#endif /* defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION) */
60
61#ifdef CONFIG_X86_64
H. Peter Anvin9d389762012-02-19 07:50:12 -080062
Harvey Harrison123a6342008-02-08 12:10:00 -080063struct rt_sigframe {
64 char __user *pretcode;
65 struct ucontext uc;
66 struct siginfo info;
Suresh Siddha3c1c7f12008-07-29 10:29:21 -070067 /* fp state follows here */
Harvey Harrison123a6342008-02-08 12:10:00 -080068};
H. Peter Anvin9d389762012-02-19 07:50:12 -080069
70#ifdef CONFIG_X86_X32_ABI
71
72struct rt_sigframe_x32 {
73 u64 pretcode;
74 struct ucontext_x32 uc;
75 compat_siginfo_t info;
76 /* fp state follows here */
77};
78
79#endif /* CONFIG_X86_X32_ABI */
80
Hiroshi Shimamotoc85c2ff2008-12-17 18:51:08 -080081#endif /* CONFIG_X86_64 */
Hiroshi Shimamoto5c2628e2008-12-18 09:18:35 -080082
83#endif /* _ASM_X86_SIGFRAME_H */