diff options
Diffstat (limited to 'arch/x86/kernel/sigframe.h')
| -rw-r--r-- | arch/x86/kernel/sigframe.h | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/x86/kernel/sigframe.h b/arch/x86/kernel/sigframe.h index 8b4956e800ac..cc673aa55ce4 100644 --- a/arch/x86/kernel/sigframe.h +++ b/arch/x86/kernel/sigframe.h  | |||
| @@ -3,9 +3,18 @@ struct sigframe { | |||
| 3 | char __user *pretcode; | 3 | char __user *pretcode; | 
| 4 | int sig; | 4 | int sig; | 
| 5 | struct sigcontext sc; | 5 | struct sigcontext sc; | 
| 6 | struct _fpstate fpstate; | 6 | /* | 
| 7 | * fpstate is unused. fpstate is moved/allocated after | ||
| 8 | * retcode[] below. This movement allows to have the FP state and the | ||
| 9 | * future state extensions (xsave) stay together. | ||
| 10 | * And at the same time retaining the unused fpstate, prevents changing | ||
| 11 | * the offset of extramask[] in the sigframe and thus prevent any | ||
| 12 | * legacy application accessing/modifying it. | ||
| 13 | */ | ||
| 14 | struct _fpstate fpstate_unused; | ||
| 7 | unsigned long extramask[_NSIG_WORDS-1]; | 15 | unsigned long extramask[_NSIG_WORDS-1]; | 
| 8 | char retcode[8]; | 16 | char retcode[8]; | 
| 17 | /* fp state follows here */ | ||
| 9 | }; | 18 | }; | 
| 10 | 19 | ||
| 11 | struct rt_sigframe { | 20 | struct rt_sigframe { | 
| @@ -15,14 +24,15 @@ struct rt_sigframe { | |||
| 15 | void __user *puc; | 24 | void __user *puc; | 
| 16 | struct siginfo info; | 25 | struct siginfo info; | 
| 17 | struct ucontext uc; | 26 | struct ucontext uc; | 
| 18 | struct _fpstate fpstate; | ||
| 19 | char retcode[8]; | 27 | char retcode[8]; | 
| 28 | /* fp state follows here */ | ||
| 20 | }; | 29 | }; | 
| 21 | #else | 30 | #else | 
| 22 | struct rt_sigframe { | 31 | struct rt_sigframe { | 
| 23 | char __user *pretcode; | 32 | char __user *pretcode; | 
| 24 | struct ucontext uc; | 33 | struct ucontext uc; | 
| 25 | struct siginfo info; | 34 | struct siginfo info; | 
| 35 | /* fp state follows here */ | ||
| 26 | }; | 36 | }; | 
| 27 | 37 | ||
| 28 | int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | 38 | int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | 
