Browse Source

[LibOS/vDSO] Add new rule to Makefile to verify vDSO has no relocations

Isaku Yamahata 4 years ago
parent
commit
1ce3d545aa
3 changed files with 21 additions and 2 deletions
  1. 15 2
      LibOS/shim/src/Makefile
  2. 1 0
      LibOS/shim/src/vdso/.gitignore
  3. 5 0
      Makefile.rules

+ 15 - 2
LibOS/shim/src/Makefile

@@ -128,7 +128,20 @@ LDFLAGS-vdso/vdso.so.dbg = -nostdlib -shared \
 	-z max-page-size=4096 -z common-page-size=4096 \
 	-T vdso/vdso.lds -soname linux-vdso.so.1
 vdso/vdso.so.dbg: LDFLAGS =
-vdso/vdso.so.dbg: vdso/vdso.lds vdso/vdso.o vdso/vdso-note.o
+vdso/vdso.so.dbg: vdso/vdso.lds vdso/vdso.o vdso/vdso-note.o | vdso-check-no-reloc
+	$(call cmd,ld)
+
+#
+# vdso.so is required to have no relocations.
+# this rule checks it.
+#
+vdso-check-no-reloc: vdso/.vdso.so
+	$(call cmd,check_no_reloc)
+
+# use default linker script to retain relocations if exist.
+LDFLAGS-vdso/.vdso.so = -nostdlib -shared -Bsymbolic
+vdso/.vdso.so: LDFLAGS =
+vdso/.vdso.so: vdso/vdso.o
 	$(call cmd,ld)
 
 OBJCOPYFLAGS-vdso/vdso.so = -S
@@ -136,7 +149,7 @@ vdso/vdso.so: vdso/vdso.so.dbg
 	$(call cmd,objcopy)
 
 vdso/vdso-data.o: vdso/vdso.so
-CLEAN_FILES += vdso/vdso.so.dbg vdso/vdso.so
+CLEAN_FILES += vdso/vdso.so.dbg vdso/vdso.so vdso/.vdso.so
 
 clean:
 	rm -rf $(addsuffix .o,$(objs)) $(shim_target) $(files_to_build) .lib $(CLEAN_FILES)

+ 1 - 0
LibOS/shim/src/vdso/.gitignore

@@ -1,2 +1,3 @@
+/.vdso.so
 /vdso-data.c
 /vdso.so.dbg

+ 5 - 0
Makefile.rules

@@ -109,3 +109,8 @@ quiet_cmd_ld = [ $@ ]
 # OBJCOPY
 quiet_cmd_objcopy = [ $@ ]
       cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS-$@) $< $@
+
+# check_no_reloc
+# This depends on the output of readelf command.
+quiet_cmd_check_no_reloc = [ $@ ]
+      cmd_check_no_reloc = readelf -r $^ | grep -q 'There are no relocations in this file.'