x86: fix sigcontext.h user export
Jakub Jelinek reported that some user-space code that relies on
kernel headers has built dependency on the sigcontext->eip/rip
register names - which have been unified in commit:
commit 742fa54a62
Author: H. Peter Anvin <hpa@zytor.com>
Date: Wed Jan 30 13:30:56 2008 +0100
x86: use generic register names in struct sigcontext
so give the old layout to user-space. This is not particularly
pretty, but it's an ABI so there's no danger of the two definitions
getting out of sync.
Reported-by: Jakub Jelinek <jakub@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
96b5a46e2a
commit
1cdde19109
1 changed files with 66 additions and 0 deletions
|
@ -58,6 +58,7 @@ struct _fpstate {
|
|||
|
||||
#define X86_FXSR_MAGIC 0x0000
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct sigcontext {
|
||||
unsigned short gs, __gsh;
|
||||
unsigned short fs, __fsh;
|
||||
|
@ -82,6 +83,35 @@ struct sigcontext {
|
|||
unsigned long oldmask;
|
||||
unsigned long cr2;
|
||||
};
|
||||
#else /* __KERNEL__ */
|
||||
/*
|
||||
* User-space might still rely on the old definition:
|
||||
*/
|
||||
struct sigcontext {
|
||||
unsigned short gs, __gsh;
|
||||
unsigned short fs, __fsh;
|
||||
unsigned short es, __esh;
|
||||
unsigned short ds, __dsh;
|
||||
unsigned long edi;
|
||||
unsigned long esi;
|
||||
unsigned long ebp;
|
||||
unsigned long esp;
|
||||
unsigned long ebx;
|
||||
unsigned long edx;
|
||||
unsigned long ecx;
|
||||
unsigned long eax;
|
||||
unsigned long trapno;
|
||||
unsigned long err;
|
||||
unsigned long eip;
|
||||
unsigned short cs, __csh;
|
||||
unsigned long eflags;
|
||||
unsigned long esp_at_signal;
|
||||
unsigned short ss, __ssh;
|
||||
struct _fpstate __user * fpstate;
|
||||
unsigned long oldmask;
|
||||
unsigned long cr2;
|
||||
};
|
||||
#endif /* !__KERNEL__ */
|
||||
|
||||
#else /* __i386__ */
|
||||
|
||||
|
@ -102,6 +132,7 @@ struct _fpstate {
|
|||
__u32 reserved2[24];
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct sigcontext {
|
||||
unsigned long r8;
|
||||
unsigned long r9;
|
||||
|
@ -132,6 +163,41 @@ struct sigcontext {
|
|||
struct _fpstate __user *fpstate; /* zero when no FPU context */
|
||||
unsigned long reserved1[8];
|
||||
};
|
||||
#else /* __KERNEL__ */
|
||||
/*
|
||||
* User-space might still rely on the old definition:
|
||||
*/
|
||||
struct sigcontext {
|
||||
unsigned long r8;
|
||||
unsigned long r9;
|
||||
unsigned long r10;
|
||||
unsigned long r11;
|
||||
unsigned long r12;
|
||||
unsigned long r13;
|
||||
unsigned long r14;
|
||||
unsigned long r15;
|
||||
unsigned long rdi;
|
||||
unsigned long rsi;
|
||||
unsigned long rbp;
|
||||
unsigned long rbx;
|
||||
unsigned long rdx;
|
||||
unsigned long rax;
|
||||
unsigned long rcx;
|
||||
unsigned long rsp;
|
||||
unsigned long rip;
|
||||
unsigned long eflags; /* RFLAGS */
|
||||
unsigned short cs;
|
||||
unsigned short gs;
|
||||
unsigned short fs;
|
||||
unsigned short __pad0;
|
||||
unsigned long err;
|
||||
unsigned long trapno;
|
||||
unsigned long oldmask;
|
||||
unsigned long cr2;
|
||||
struct _fpstate __user *fpstate; /* zero when no FPU context */
|
||||
unsigned long reserved1[8];
|
||||
};
|
||||
#endif /* !__KERNEL__ */
|
||||
|
||||
#endif /* !__i386__ */
|
||||
|
||||
|
|
Loading…
Reference in a new issue