From 6c3652efcafa6a6d795093362cb4290c84994b5c Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 30 Jan 2008 13:30:42 +0100 Subject: 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 Cc: Andrew Morton Cc: Linus Torvalds Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/vdso/Makefile | 8 ++++++-- arch/x86/vdso/vdso32.S | 15 +++++++++++++++ arch/x86/vdso/vdso32/note.S | 3 +-- arch/x86/vdso/vdso32/sysenter.S | 3 +-- 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 arch/x86/vdso/vdso32.S (limited to 'arch/x86/vdso') diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile index a02e1ca2a1b..ca2aabf8ed3 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 00000000000..cab020c99c3 --- /dev/null +++ b/arch/x86/vdso/vdso32.S @@ -0,0 +1,15 @@ +#include + +__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 0cf934f2633..c83f2573469 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 4b98fc41d3e..109bfa394ea 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 -- cgit v1.2.3-70-g09d2