aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/ia32/ia32_binfmt.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2008-01-30 13:30:43 +0100
committerIngo Molnar <mingo@elte.hu>2008-01-30 13:30:43 +0100
commitaf65d64845a90c8f2fc90b97e2148ff74672e979 (patch)
treee70a57a9635acaf8154c150f95e11dcb51937fd8 /arch/x86/ia32/ia32_binfmt.c
parent00f8b1bc0e44ba94fb33e1fbd8ac82841d7cc570 (diff)
x86 vDSO: consolidate vdso32
This makes x86_64's ia32 emulation support share the sources used in the 32-bit kernel for the 32-bit vDSO and much of its setup code. The 32-bit vDSO mapping now behaves the same on x86_64 as on native 32-bit. The abi.syscall32 sysctl on x86_64 now takes the same values that vm.vdso_enabled takes on the 32-bit kernel. That is, 1 means a randomized vDSO location, 2 means the fixed old address. The CONFIG_COMPAT_VDSO option is now available to make this the default setting, the same meaning it has for the 32-bit kernel. (This does not affect the 64-bit vDSO.) The argument vdso32=[012] can be used on both 32-bit and 64-bit kernels to set this paramter at boot time. The vdso=[012] argument still does this same thing on the 32-bit kernel. Signed-off-by: Roland McGrath <roland@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/ia32/ia32_binfmt.c')
-rw-r--r--arch/x86/ia32/ia32_binfmt.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/x86/ia32/ia32_binfmt.c b/arch/x86/ia32/ia32_binfmt.c
index 55822d2cf05..e32974c3dd3 100644
--- a/arch/x86/ia32/ia32_binfmt.c
+++ b/arch/x86/ia32/ia32_binfmt.c
@@ -26,7 +26,7 @@
#include <asm/i387.h>
#include <asm/uaccess.h>
#include <asm/ia32.h>
-#include <asm/vsyscall32.h>
+#include <asm/vdso.h>
#undef ELF_ARCH
#undef ELF_CLASS
@@ -47,14 +47,13 @@
#define AT_SYSINFO 32
#define AT_SYSINFO_EHDR 33
-int sysctl_vsyscall32 = 1;
+extern int sysctl_vsyscall32;
#undef ARCH_DLINFO
#define ARCH_DLINFO do { \
if (sysctl_vsyscall32) { \
- current->mm->context.vdso = (void *)VSYSCALL32_BASE; \
- NEW_AUX_ENT(AT_SYSINFO, (u32)(u64)VSYSCALL32_VSYSCALL); \
- NEW_AUX_ENT(AT_SYSINFO_EHDR, VSYSCALL32_BASE); \
+ NEW_AUX_ENT(AT_SYSINFO, (u32)VDSO_ENTRY); \
+ NEW_AUX_ENT(AT_SYSINFO_EHDR, (u32)VDSO_CURRENT_BASE); \
} \
} while(0)