x86 vDSO: generate vdso-syms.lds
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> 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>
This commit is contained in:
Родитель
c1d171a002
Коммит
5b93049337
|
@ -55,6 +55,20 @@ SYSCFLAGS_vdso-syms.o = -r -d
|
||||||
$(obj)/vdso-syms.o: $(src)/vdso.lds $(vobjs) FORCE
|
$(obj)/vdso-syms.o: $(src)/vdso.lds $(vobjs) FORCE
|
||||||
$(call if_changed,syscall)
|
$(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 $@
|
quiet_cmd_vdso_install = INSTALL $@
|
||||||
cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@
|
cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@
|
||||||
vdso.so:
|
vdso.so:
|
||||||
|
|
|
@ -8,6 +8,16 @@
|
||||||
|
|
||||||
#define VDSO_PRELINK 0xffffffffff700000
|
#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
|
SECTIONS
|
||||||
{
|
{
|
||||||
. = VDSO_PRELINK + SIZEOF_HEADERS;
|
. = VDSO_PRELINK + SIZEOF_HEADERS;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче