[PATCH 01/18] x86 vDSO: generate vdso-syms.lds

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Andrew Morton <akpm@...>, Linus Torvalds <torvalds@...>, Thomas Gleixner <tglx@...>, Ingo Molnar <mingo@...>, H. Peter Anvin <hpa@...>
Cc: <linux-kernel@...>
Date: Monday, November 19, 2007 - 6:01 pm

This patch adds a new way of extracting symbols from the built vDSO image.
This is much simpler and less fragile than using ld -R; it removes the
need to control the DSO layout quite so exactly.  I was clearly unduly
distracted by clever ld uses when I did the original vDSO implementation.

Signed-off-by: Roland McGrath <roland@redhat.com>
---
 arch/x86/vdso/Makefile   |   14 ++++++++++++++
 arch/x86/vdso/vdso.lds.S |   10 ++++++++++
 2 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
index e7bff0f..d8200ad 100644
--- a/arch/x86/vdso/Makefile
+++ b/arch/x86/vdso/Makefile
@@ -55,6 +55,20 @@ SYSCFLAGS_vdso-syms.o = -r -d
 $(obj)/vdso-syms.o: $(src)/vdso.lds $(vobjs) FORCE
 	$(call if_changed,syscall)
 
+targets += vdso-syms.lds
+obj-y += vdso-syms.lds
+
+#
+# Match symbols in the DSO that look like VDSO*; produce a file of constants.
+#
+sed-vdsosym := -e 's/^00*/0/' \
+	-e 's/^\([0-9a-fA-F]*\) . \(VDSO[a-zA-Z0-9_]*\)$$/\2 = 0x\1;/p'
+quiet_cmd_vdsosym = VDSOSYM $@
+      cmd_vdsosym = $(NM) $< | sed -n $(sed-vdsosym) | LC_ALL=C sort > $@
+
+$(obj)/%-syms.lds: $(obj)/%.so.dbg FORCE
+	$(call if_changed,vdsosym)
+
 quiet_cmd_vdso_install = INSTALL $@
       cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@
 vdso.so:
diff --git a/arch/x86/vdso/vdso.lds.S b/arch/x86/vdso/vdso.lds.S
index 667d324..d40d0e9 100644
--- a/arch/x86/vdso/vdso.lds.S
+++ b/arch/x86/vdso/vdso.lds.S
@@ -8,6 +8,16 @@
 
 #define VDSO_PRELINK 0xffffffffff700000
 
+/*
+ * Symbols we define here called VDSO* get their values into vdso-syms.lds
+ * and become visible to the kernel itself.
+ */
+VDSO64_PRELINK = VDSO_PRELINK;
+
+#define VEXTERN(x)	VDSO64_ ## x = vdso_ ## x;
+#include "vextern.h"
+#undef	VEXTERN
+
 SECTIONS
 {
   . = VDSO_PRELINK + SIZEOF_HEADERS;
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/18] x86 vDSO revamp, Roland McGrath, (Mon Nov 19, 5:59 pm)
[PATCH 16/18] x86 vDSO: ia32 vsyscall removal, Roland McGrath, (Mon Nov 19, 6:06 pm)
[PATCH 17/18] x86 vDSO: reorder vdso32 code, Roland McGrath, (Mon Nov 19, 6:07 pm)
[PATCH 15/18] x86 vDSO: consolidate vdso32, Roland McGrath, (Mon Nov 19, 6:06 pm)
Re: [PATCH 15/18] x86 vDSO: consolidate vdso32, Zachary Amsden, (Tue Nov 20, 8:13 pm)
Re: [PATCH 15/18] x86 vDSO: consolidate vdso32, Roland McGrath, (Tue Nov 20, 8:32 pm)
Re: [PATCH 15/18] x86 vDSO: consolidate vdso32, Andi Kleen, (Tue Nov 20, 8:15 pm)
Re: [PATCH 15/18] x86 vDSO: consolidate vdso32, Ingo Molnar, (Tue Nov 20, 8:13 pm)
[PATCH 14/18] x86 vDSO: ia32 vdso32-syscall build, Roland McGrath, (Mon Nov 19, 6:06 pm)
[PATCH 18/18] x86 vDSO: makefile cleanup, Roland McGrath, (Mon Nov 19, 6:07 pm)
[PATCH 13/18] x86 vDSO: ia32 sysenter_return, Roland McGrath, (Mon Nov 19, 6:06 pm)
Re: [PATCH 13/18] x86 vDSO: ia32 sysenter_return, Zachary Amsden, (Tue Nov 20, 8:05 pm)
Re: [PATCH 13/18] x86 vDSO: ia32 sysenter_return, Roland McGrath, (Tue Nov 20, 8:34 pm)
[PATCH 12/18] x86 vDSO: ia32_sysenter_target, Roland McGrath, (Mon Nov 19, 6:06 pm)
[PATCH 08/18] x86 vDSO: i386 vdso32, Roland McGrath, (Mon Nov 19, 6:05 pm)
[PATCH 11/18] x86 vDSO: vdso32 setup, Roland McGrath, (Mon Nov 19, 6:06 pm)
[PATCH 10/18] x86 vDSO: i386 vdso32 install, Roland McGrath, (Mon Nov 19, 6:05 pm)
[PATCH 09/18] x86 vDSO: absolute relocs, Roland McGrath, (Mon Nov 19, 6:05 pm)
[PATCH 07/18] x86 vDSO: vdso32 build, Roland McGrath, (Mon Nov 19, 6:05 pm)
Re: [PATCH 07/18] x86 vDSO: vdso32 build, Sam Ravnborg, (Wed Nov 21, 2:02 am)
Re: [PATCH 07/18] x86 vDSO: vdso32 build, Roland McGrath, (Wed Nov 21, 3:10 am)
Re: [PATCH 07/18] x86 vDSO: vdso32 build, Sam Ravnborg, (Wed Nov 21, 3:32 am)
Re: [PATCH 07/18] x86 vDSO: vdso32 build, Roland McGrath, (Wed Nov 21, 3:55 am)
[PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Roland McGrath, (Mon Nov 19, 6:04 pm)
Re: [PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Thomas Gleixner, (Tue Nov 20, 9:05 am)
Re: [PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Roland McGrath, (Tue Nov 20, 4:57 pm)
Re: [PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Thomas Gleixner, (Tue Nov 20, 7:07 pm)
Re: [PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Roland McGrath, (Tue Nov 20, 7:27 pm)
Re: [PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Linus Torvalds, (Mon Nov 26, 9:53 pm)
Re: [PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Roland McGrath, (Mon Nov 26, 10:01 pm)
Re: [PATCH 06/18] x86 vDSO: arch/x86/vdso/vdso32, Thomas Gleixner, (Tue Nov 20, 7:50 pm)
[PATCH 04/18] x86 vDSO: new layout, Roland McGrath, (Mon Nov 19, 6:03 pm)
[PATCH 05/18] x86 vDSO: harmonize asm-offsets, Roland McGrath, (Mon Nov 19, 6:03 pm)
[PATCH 03/18] x86 vDSO: remove vdso-syms.o, Roland McGrath, (Mon Nov 19, 6:02 pm)
[PATCH 02/18] x86 vDSO: use vdso-syms.lds, Roland McGrath, (Mon Nov 19, 6:02 pm)
[PATCH 01/18] x86 vDSO: generate vdso-syms.lds, Roland McGrath, (Mon Nov 19, 6:01 pm)