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 --- arch/sparc/Kconfig | 1 + arch/sparc/vdso/Makefile | 5 +++-- lib/vdso/check/vdsocheck.rs | 7 +++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index ab77d3f2536e..628bdfc2f088 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -114,6 +114,7 @@ config SPARC64 select ARCH_SUPPORTS_SCHED_SMT if SMP select ARCH_SUPPORTS_SCHED_MC if SMP select ARCH_HAS_LAZY_MMU_MODE + select VDSO_CHECK select GENERIC_GETTIMEOFDAY config ARCH_PROC_KCORE_TEXT diff --git a/arch/sparc/vdso/Makefile b/arch/sparc/vdso/Makefile index 83fb2aca59cb..8bb235c3a618 100644 --- a/arch/sparc/vdso/Makefile +++ b/arch/sparc/vdso/Makefile @@ -28,7 +28,7 @@ CPPFLAGS_vdso.lds += -P -C VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 \ -z max-page-size=8192 -$(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE +$(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) $(vdsocheck) FORCE $(call if_changed,vdso) HOST_EXTRACFLAGS += -I$(srctree)/tools/include @@ -99,7 +99,8 @@ $(obj)/vdso32.so.dbg: CHECKFLAGS = $(CHECKFLAGS_32) $(obj)/vdso32.so.dbg: FORCE \ $(obj)/vdso32/vdso32.lds \ $(obj)/vdso32/vclock_gettime.o \ - $(obj)/vdso32/vdso-note.o + $(obj)/vdso32/vdso-note.o \ + $(vdsocheck) $(call if_changed,vdso) # diff --git a/lib/vdso/check/vdsocheck.rs b/lib/vdso/check/vdsocheck.rs index 865e8cf7d4e1..0d3b47bf57e1 100644 --- a/lib/vdso/check/vdsocheck.rs +++ b/lib/vdso/check/vdsocheck.rs @@ -172,6 +172,13 @@ fn allowed_relocations_for_machine(machine: u16) -> Option { + AllowedRelocations { + in_object_file: &[bindings::R_SPARC_DISP32], + ..Default::default() + } + .into() + } _ => None, } } -- 2.55.0