Commit 1cdde191 authored by Ingo Molnar's avatar Ingo Molnar

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 742fa54a
  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: default avatarJakub Jelinek <jakub@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 96b5a46e
...@@ -58,6 +58,7 @@ struct _fpstate { ...@@ -58,6 +58,7 @@ struct _fpstate {
#define X86_FXSR_MAGIC 0x0000 #define X86_FXSR_MAGIC 0x0000
#ifdef __KERNEL__
struct sigcontext { struct sigcontext {
unsigned short gs, __gsh; unsigned short gs, __gsh;
unsigned short fs, __fsh; unsigned short fs, __fsh;
...@@ -82,6 +83,35 @@ struct sigcontext { ...@@ -82,6 +83,35 @@ struct sigcontext {
unsigned long oldmask; unsigned long oldmask;
unsigned long cr2; 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__ */ #else /* __i386__ */
...@@ -102,6 +132,7 @@ struct _fpstate { ...@@ -102,6 +132,7 @@ struct _fpstate {
__u32 reserved2[24]; __u32 reserved2[24];
}; };
#ifdef __KERNEL__
struct sigcontext { struct sigcontext {
unsigned long r8; unsigned long r8;
unsigned long r9; unsigned long r9;
...@@ -132,6 +163,41 @@ struct sigcontext { ...@@ -132,6 +163,41 @@ struct sigcontext {
struct _fpstate __user *fpstate; /* zero when no FPU context */ struct _fpstate __user *fpstate; /* zero when no FPU context */
unsigned long reserved1[8]; 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__ */ #endif /* !__i386__ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment