The vdsocheck tool validates the object files and final .so library. It can detect if the compiler created relocations which are incompatible with the vDSO which need to be worked around.
Wire it up for the architecture. Signed-off-by: Thomas Weißschuh <thomas.weisssc...@linutronix.de> --- arch/s390/kernel/vdso32/Makefile | 4 ++-- arch/s390/kernel/vdso64/Makefile | 4 ++-- lib/vdso/Kconfig | 1 + lib/vdso/check/vdsocheck.rs | 8 ++++++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile index 1e4ddd1a683ff84492f0f4b48d0efa00688129c2..6e8fba248d1aa8787f44aca2d82d77c245871b65 100644 --- a/arch/s390/kernel/vdso32/Makefile +++ b/arch/s390/kernel/vdso32/Makefile @@ -36,9 +36,9 @@ CPPFLAGS_vdso32.lds += -P -C -U$(ARCH) $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so quiet_cmd_vdso_and_check = VDSO $@ - cmd_vdso_and_check = $(cmd_ld); $(cmd_vdso_check) + cmd_vdso_and_check = $(cmd_ld_vdso); $(cmd_vdso_check) -$(obj)/vdso32.so.dbg: $(obj)/vdso32.lds $(obj-vdso32) FORCE +$(obj)/vdso32.so.dbg: $(obj)/vdso32.lds $(obj-vdso32) $(vdsocheck) FORCE $(call if_changed,vdso_and_check) # strip rule for the .so file diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile index d8f0df74280960cb351154a8a73b4f7fe83a9125..1334b6a188cedc883fe98dc271a995ee690c7fad 100644 --- a/arch/s390/kernel/vdso64/Makefile +++ b/arch/s390/kernel/vdso64/Makefile @@ -46,10 +46,10 @@ CPPFLAGS_vdso64.lds += -P -C -U$(ARCH) $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so quiet_cmd_vdso_and_check = VDSO $@ - cmd_vdso_and_check = $(cmd_ld); $(cmd_vdso_check) + cmd_vdso_and_check = $(cmd_ld_vdso); $(cmd_vdso_check) # link rule for the .so file, .lds has to be first -$(obj)/vdso64.so.dbg: $(obj)/vdso64.lds $(obj-vdso64) $(obj-cvdso64) FORCE +$(obj)/vdso64.so.dbg: $(obj)/vdso64.lds $(obj-vdso64) $(obj-cvdso64) $(vdsocheck) FORCE $(call if_changed,vdso_and_check) # strip rule for the .so file diff --git a/lib/vdso/Kconfig b/lib/vdso/Kconfig index 0fe70b3604f9925ef8c5608bb4cac24d3a28faab..b5b6673897e24a1f36147c21d00dff057f293980 100644 --- a/lib/vdso/Kconfig +++ b/lib/vdso/Kconfig @@ -57,6 +57,7 @@ config HAVE_VDSOCHECK default y if PPC default y if RISCV default y if LOONGARCH + default y if S390 help Selected for architectures that are supported by the 'vdsocheck' progam. Only transitional. diff --git a/lib/vdso/check/vdsocheck.rs b/lib/vdso/check/vdsocheck.rs index 93819f668d8a4f623f41403bb09b42c4aec2c8de..01073062f2b2d276291ccfbc6aa516f14a13fdd5 100644 --- a/lib/vdso/check/vdsocheck.rs +++ b/lib/vdso/check/vdsocheck.rs @@ -138,6 +138,14 @@ fn allowed_relocations_for_machine(machine: u16) -> Option<AllowedRelocations<'s bindings::R_LARCH_32_PCREL, ], }), + bindings::EM_S390 => Some(AllowedRelocations { + ignored_object_file_sections: None, + in_object_file: &[ + bindings::R_390_PC32, + bindings::R_390_PC32DBL, + bindings::R_390_PLT32DBL, + ], + }), _ => None, } } -- 2.50.1