diff options
author | Roland McGrath <roland@redhat.com> | 2008-01-30 13:30:42 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 13:30:42 +0100 |
commit | 6c3652efcafa6a6d795093362cb4290c84994b5c (patch) | |
tree | 1587379f45a7145a64c3103b40e12b01c46ea559 /arch/x86/vdso | |
parent | 0249c9c1e7505c2b020bcc6deaf1e0415de9943e (diff) | |
download | op-kernel-dev-6c3652efcafa6a6d795093362cb4290c84994b5c.zip op-kernel-dev-6c3652efcafa6a6d795093362cb4290c84994b5c.tar.gz |
x86 vDSO: i386 vdso32
This makes the i386 kernel use the new vDSO build in arch/x86/vdso/vdso32/
to replace the old one from arch/x86/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/vdso')
-rw-r--r-- | arch/x86/vdso/Makefile | 8 | ||||
-rw-r--r-- | arch/x86/vdso/vdso32.S | 15 | ||||
-rw-r--r-- | arch/x86/vdso/vdso32/note.S | 3 | ||||
-rw-r--r-- | arch/x86/vdso/vdso32/sysenter.S | 3 |
4 files changed, 23 insertions, 6 deletions
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile index a02e1ca..ca2aabf 100644 --- a/arch/x86/vdso/Makefile +++ b/arch/x86/vdso/Makefile @@ -14,7 +14,8 @@ vdso-install-$(VDSO32-y) += $(vdso32-y:=.so) vobjs-y := vdso-note.o vclock_gettime.o vgetcpu.o vvar.o # files to link into kernel -obj-y := vma.o vdso.o +obj-$(VDSO64-y) += vma.o vdso.o +obj-$(CONFIG_X86_32) += vdso32.o vobjs := $(foreach F,$(vobjs-y),$(obj)/$F) @@ -52,7 +53,7 @@ $(obj)/vclock_gettime.o: KBUILD_CFLAGS = $(CFL) $(obj)/vgetcpu.o: KBUILD_CFLAGS = $(CFL) targets += vdso-syms.lds -obj-y += vdso-syms.lds +obj-$(VDSO64-y) += vdso-syms.lds # # Match symbols in the DSO that look like VDSO*; produce a file of constants. @@ -68,6 +69,7 @@ $(obj)/%-syms.lds: $(obj)/%.so.dbg FORCE # # Build multiple 32-bit vDSO images to choose from at boot time. # +obj-$(VDSO32-y) += vdso32-syms.lds vdso32.so-$(CONFIG_X86_32) += int80 vdso32.so-$(VDSO32-y) += sysenter @@ -84,6 +86,8 @@ targets += vdso32/note.o $(vdso32.so-y:%=vdso32/%.o) extra-y += $(vdso32.so-y:%=vdso32-%.so) +$(obj)/vdso32.o: $(vdso32.so-y:%=$(obj)/vdso32-%.so) + KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS)) $(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): KBUILD_AFLAGS = $(KBUILD_AFLAGS_32) $(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): asflags-$(CONFIG_X86_64) += -m32 diff --git a/arch/x86/vdso/vdso32.S b/arch/x86/vdso/vdso32.S new file mode 100644 index 0000000..cab020c --- /dev/null +++ b/arch/x86/vdso/vdso32.S @@ -0,0 +1,15 @@ +#include <linux/init.h> + +__INITDATA + + .globl vsyscall_int80_start, vsyscall_int80_end +vsyscall_int80_start: + .incbin "arch/x86/vdso/vdso32-int80.so" +vsyscall_int80_end: + + .globl vsyscall_sysenter_start, vsyscall_sysenter_end +vsyscall_sysenter_start: + .incbin "arch/x86/vdso/vdso32-sysenter.so" +vsyscall_sysenter_end: + +__FINIT diff --git a/arch/x86/vdso/vdso32/note.S b/arch/x86/vdso/vdso32/note.S index 0cf934f..c83f257 100644 --- a/arch/x86/vdso/vdso32/note.S +++ b/arch/x86/vdso/vdso32/note.S @@ -35,10 +35,9 @@ ELFNOTE_END #include "../../xen/vdso.h" /* Defines VDSO_NOTE_NONEGSEG_BIT. */ - .globl VDSO_NOTE_MASK ELFNOTE_START(GNU, 2, "a") .long 1 /* ncaps */ -VDSO_NOTE_MASK: +VDSO32_NOTE_MASK: /* Symbol used by arch/x86/xen/setup.c */ .long 0 /* mask */ .byte VDSO_NOTE_NONEGSEG_BIT; .asciz "nosegneg" /* bit, name */ ELFNOTE_END diff --git a/arch/x86/vdso/vdso32/sysenter.S b/arch/x86/vdso/vdso32/sysenter.S index 4b98fc4..109bfa3 100644 --- a/arch/x86/vdso/vdso32/sysenter.S +++ b/arch/x86/vdso/vdso32/sysenter.S @@ -45,8 +45,7 @@ __kernel_vsyscall: /* 14: System call restart point is here! (SYSENTER_RETURN-2) */ jmp .Lenter_kernel /* 16: System call normal return point is here! */ - .globl SYSENTER_RETURN /* Symbol used by sysenter.c */ -SYSENTER_RETURN: +VDSO32_SYSENTER_RETURN: /* Symbol used by sysenter.c via vdso32-syms.h */ pop %ebp .Lpop_ebp: pop %edx |