diff options
author | Roland McGrath <roland@redhat.com> | 2008-01-30 15:31:55 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 15:31:55 +0300 |
commit | a97f52e67890fda6b373c1c1895ff1c1c69b36c8 (patch) | |
tree | 3cf522fd85e30519eb8b202c6d4243395ccb8653 /arch/x86 | |
parent | 60b3b9af35aad66345e395be911e46fb8443f0c5 (diff) | |
download | linux-a97f52e67890fda6b373c1c1895ff1c1c69b36c8.tar.xz |
x86: compat_binfmt_elf
This switches x86-64's 32-bit ELF support to use the shared
fs/compat_binfmt_elf.c code instead of our own ia32_binfmt.c.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/Kconfig | 1 | ||||
-rw-r--r-- | arch/x86/ia32/Makefile | 3 | ||||
-rw-r--r-- | arch/x86/vdso/vdso32-setup.c | 33 |
3 files changed, 35 insertions, 2 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 1992b8fe6a2f..d89b94528153 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1532,6 +1532,7 @@ source "fs/Kconfig.binfmt" config IA32_EMULATION bool "IA32 Emulation" depends on X86_64 + select COMPAT_BINFMT_ELF help Include code to run 32-bit programs under a 64-bit kernel. You should likely turn this on, unless you're 100% sure that you don't have any diff --git a/arch/x86/ia32/Makefile b/arch/x86/ia32/Makefile index 93a6fda65f49..52d0ccfcf6ea 100644 --- a/arch/x86/ia32/Makefile +++ b/arch/x86/ia32/Makefile @@ -2,8 +2,7 @@ # Makefile for the ia32 kernel emulation subsystem. # -obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_signal.o \ - ia32_binfmt.o +obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_signal.o sysv-$(CONFIG_SYSVIPC) := ipc32.o obj-$(CONFIG_IA32_EMULATION) += $(sysv-y) diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c index e0feb66a2408..348f1341e1c8 100644 --- a/arch/x86/vdso/vdso32-setup.c +++ b/arch/x86/vdso/vdso32-setup.c @@ -377,6 +377,39 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack) __initcall(sysenter_setup); +#ifdef CONFIG_SYSCTL +/* Register vsyscall32 into the ABI table */ +#include <linux/sysctl.h> + +static ctl_table abi_table2[] = { + { + .procname = "vsyscall32", + .data = &sysctl_vsyscall32, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec + }, + {} +}; + +static ctl_table abi_root_table2[] = { + { + .ctl_name = CTL_ABI, + .procname = "abi", + .mode = 0555, + .child = abi_table2 + }, + {} +}; + +static __init int ia32_binfmt_init(void) +{ + register_sysctl_table(abi_root_table2); + return 0; +} +__initcall(ia32_binfmt_init); +#endif + #else /* CONFIG_X86_32 */ const char *arch_vma_name(struct vm_area_struct *vma) |