mirror of
https://github.com/torvalds/linux.git
synced 2024-11-07 20:51:47 +00:00
3c1c7f1014
dynamically allocate fpstate on the stack, instead of static allocation in the current sigframe layout on the user stack. This will allow the fpstate structure to grow in the future, which includes extended state information supporting xsave/xrstor. signal handlers will be able to access the fpstate pointer from the sigcontext structure asusual, with no change. For the non RT sigframe's (which are supported only for 32bit apps), current static fpstate layout in the sigframe will be unused(so that we don't change the extramask[] offset in the sigframe and thus prevent breaking app's which modify extramask[]). Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
38 lines
926 B
C
38 lines
926 B
C
#ifdef CONFIG_X86_32
|
|
struct sigframe {
|
|
char __user *pretcode;
|
|
int sig;
|
|
struct sigcontext sc;
|
|
/*
|
|
* fpstate is unused. fpstate is moved/allocated after
|
|
* retcode[] below. This movement allows to have the FP state and the
|
|
* future state extensions (xsave) stay together.
|
|
* And at the same time retaining the unused fpstate, prevents changing
|
|
* the offset of extramask[] in the sigframe and thus prevent any
|
|
* legacy application accessing/modifying it.
|
|
*/
|
|
struct _fpstate fpstate_unused;
|
|
unsigned long extramask[_NSIG_WORDS-1];
|
|
char retcode[8];
|
|
/* fp state follows here */
|
|
};
|
|
|
|
struct rt_sigframe {
|
|
char __user *pretcode;
|
|
int sig;
|
|
struct siginfo __user *pinfo;
|
|
void __user *puc;
|
|
struct siginfo info;
|
|
struct ucontext uc;
|
|
char retcode[8];
|
|
/* fp state follows here */
|
|
};
|
|
#else
|
|
struct rt_sigframe {
|
|
char __user *pretcode;
|
|
struct ucontext uc;
|
|
struct siginfo info;
|
|
/* fp state follows here */
|
|
};
|
|
#endif
|