Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b930493 authored by Roland McGrath's avatar Roland McGrath Committed by Ingo Molnar
Browse files

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: default avatarRoland McGrath <roland@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent c1d171a0
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -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:
+10 −0
Original line number Original line Diff line number Diff line
@@ -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;