diff options
-rw-r--r-- | arch/x86_64/ia32/Makefile | 4 | ||||
-rw-r--r-- | arch/x86_64/ia32/syscall32.c | 10 | ||||
-rw-r--r-- | arch/x86_64/ia32/syscall32_syscall.S | 17 |
3 files changed, 19 insertions, 12 deletions
diff --git a/arch/x86_64/ia32/Makefile b/arch/x86_64/ia32/Makefile index a12b19da4b59..f76217d8f579 100644 --- a/arch/x86_64/ia32/Makefile +++ b/arch/x86_64/ia32/Makefile | |||
@@ -4,14 +4,14 @@ | |||
4 | 4 | ||
5 | obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_ioctl.o \ | 5 | obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_ioctl.o \ |
6 | ia32_signal.o tls32.o \ | 6 | ia32_signal.o tls32.o \ |
7 | ia32_binfmt.o fpu32.o ptrace32.o syscall32.o | 7 | ia32_binfmt.o fpu32.o ptrace32.o syscall32.o syscall32_syscall.o |
8 | 8 | ||
9 | sysv-$(CONFIG_SYSVIPC) := ipc32.o | 9 | sysv-$(CONFIG_SYSVIPC) := ipc32.o |
10 | obj-$(CONFIG_IA32_EMULATION) += $(sysv-y) | 10 | obj-$(CONFIG_IA32_EMULATION) += $(sysv-y) |
11 | 11 | ||
12 | obj-$(CONFIG_IA32_AOUT) += ia32_aout.o | 12 | obj-$(CONFIG_IA32_AOUT) += ia32_aout.o |
13 | 13 | ||
14 | $(obj)/syscall32.o: $(src)/syscall32.c \ | 14 | $(obj)/syscall32_syscall.o: \ |
15 | $(foreach F,sysenter syscall,$(obj)/vsyscall-$F.so) | 15 | $(foreach F,sysenter syscall,$(obj)/vsyscall-$F.so) |
16 | 16 | ||
17 | # Teach kbuild about targets | 17 | # Teach kbuild about targets |
diff --git a/arch/x86_64/ia32/syscall32.c b/arch/x86_64/ia32/syscall32.c index 816a3b89f13d..adbc5f8089e9 100644 --- a/arch/x86_64/ia32/syscall32.c +++ b/arch/x86_64/ia32/syscall32.c | |||
@@ -14,16 +14,6 @@ | |||
14 | #include <asm/tlbflush.h> | 14 | #include <asm/tlbflush.h> |
15 | #include <asm/ia32_unistd.h> | 15 | #include <asm/ia32_unistd.h> |
16 | 16 | ||
17 | /* 32bit VDSOs mapped into user space. */ | ||
18 | asm(".section \".init.data\",\"aw\"\n" | ||
19 | "syscall32_syscall:\n" | ||
20 | ".incbin \"arch/x86_64/ia32/vsyscall-syscall.so\"\n" | ||
21 | "syscall32_syscall_end:\n" | ||
22 | "syscall32_sysenter:\n" | ||
23 | ".incbin \"arch/x86_64/ia32/vsyscall-sysenter.so\"\n" | ||
24 | "syscall32_sysenter_end:\n" | ||
25 | ".previous"); | ||
26 | |||
27 | extern unsigned char syscall32_syscall[], syscall32_syscall_end[]; | 17 | extern unsigned char syscall32_syscall[], syscall32_syscall_end[]; |
28 | extern unsigned char syscall32_sysenter[], syscall32_sysenter_end[]; | 18 | extern unsigned char syscall32_sysenter[], syscall32_sysenter_end[]; |
29 | extern int sysctl_vsyscall32; | 19 | extern int sysctl_vsyscall32; |
diff --git a/arch/x86_64/ia32/syscall32_syscall.S b/arch/x86_64/ia32/syscall32_syscall.S new file mode 100644 index 000000000000..8f8271bdf135 --- /dev/null +++ b/arch/x86_64/ia32/syscall32_syscall.S | |||
@@ -0,0 +1,17 @@ | |||
1 | /* 32bit VDSOs mapped into user space. */ | ||
2 | |||
3 | .section ".init.data","aw" | ||
4 | |||
5 | .globl syscall32_syscall | ||
6 | .globl syscall32_syscall_end | ||
7 | |||
8 | syscall32_syscall: | ||
9 | .incbin "arch/x86_64/ia32/vsyscall-syscall.so" | ||
10 | syscall32_syscall_end: | ||
11 | |||
12 | .globl syscall32_sysenter | ||
13 | .globl syscall32_sysenter_end | ||
14 | |||
15 | syscall32_sysenter: | ||
16 | .incbin "arch/x86_64/ia32/vsyscall-sysenter.so" | ||
17 | syscall32_sysenter_end: | ||