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/arm64/kernel/vdso/Makefile | 4 ++-- lib/vdso/Kconfig | 1 + lib/vdso/check/vdsocheck.rs | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile index 7dec05dd33b70ea8fc734e0c13af9ec4568d80a8..9fac0e54097dc552dbfe81074da71492c79c9230 100644 --- a/arch/arm64/kernel/vdso/Makefile +++ b/arch/arm64/kernel/vdso/Makefile @@ -61,7 +61,7 @@ targets += vdso.lds CPPFLAGS_vdso.lds += -P -C -U$(ARCH) # Link rule for the .so file, .lds has to be first -$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE +$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) $(vdsocheck) FORCE $(call if_changed,vdsold_and_vdso_check) # Strip rule for the .so file @@ -79,4 +79,4 @@ include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE # Actual build commands quiet_cmd_vdsold_and_vdso_check = LD $@ - cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) + cmd_vdsold_and_vdso_check = $(cmd_ld_vdso); $(cmd_vdso_check) diff --git a/lib/vdso/Kconfig b/lib/vdso/Kconfig index 84bff59ccef4acd95159d03e96991161a029fb2d..3037b15476bb60ee47c1e083eae3968ab9604f59 100644 --- a/lib/vdso/Kconfig +++ b/lib/vdso/Kconfig @@ -53,6 +53,7 @@ config HAVE_VDSOCHECK bool default y if X86 default y if ARM + default y if ARM64 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 23970b9d05dc320eb4966967904deae661171b15..a695aed95ad391a0c55e5388bc6d1f1141fd784e 100644 --- a/lib/vdso/check/vdsocheck.rs +++ b/lib/vdso/check/vdsocheck.rs @@ -54,6 +54,17 @@ fn allowed_relocations_for_machine(machine: u16) -> Option<AllowedRelocations<'s bindings::R_ARM_PREL31, ], }), + bindings::EM_AARCH64 => Some(AllowedRelocations { + ignored_object_file_sections: None, + in_object_file: &[ + bindings::R_AARCH64_PREL64, + bindings::R_AARCH64_PREL32, + bindings::R_AARCH64_PREL16, + bindings::R_AARCH64_LD_PREL_LO19, + bindings::R_AARCH64_ADR_PREL_LO21, + bindings::R_AARCH64_CALL26, + ], + }), _ => None, } } -- 2.50.1