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/loongarch/Kconfig | 1 + arch/loongarch/vdso/Makefile | 4 ++-- lib/vdso/check/vdsocheck.rs | 26 ++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig index a21f51e5815e..5dc98a4b9c7f 100644 --- a/arch/loongarch/Kconfig +++ b/arch/loongarch/Kconfig @@ -213,6 +213,7 @@ config LOONGARCH select TRACE_IRQFLAGS_SUPPORT select USE_PERCPU_NUMA_NODE_ID select USER_STACKTRACE_SUPPORT + select VDSO_CHECK select VDSO_DATASTORE select VDSO_GETRANDOM select ZONE_DMA32 if 64BIT diff --git a/arch/loongarch/vdso/Makefile b/arch/loongarch/vdso/Makefile index 9c9181bb4071..b0dc58328664 100644 --- a/arch/loongarch/vdso/Makefile +++ b/arch/loongarch/vdso/Makefile @@ -50,7 +50,7 @@ ldflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \ # 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) quiet_cmd_vdsoas_o_S = AS $@ cmd_vdsoas_o_S = $(CC) $(a_flags) -c -o $@ $< @@ -79,7 +79,7 @@ $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $(native-abi) $(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) $(native-abi) -$(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) $(obj)/vdso.so: OBJCOPYFLAGS := -S diff --git a/lib/vdso/check/vdsocheck.rs b/lib/vdso/check/vdsocheck.rs index 67562d21f877..4aeb7094e552 100644 --- a/lib/vdso/check/vdsocheck.rs +++ b/lib/vdso/check/vdsocheck.rs @@ -122,6 +122,32 @@ fn allowed_relocations_for_machine(machine: u16) -> Option AllowedRelocations { + in_object_file: &[ + bindings::R_LARCH_ADD8, + bindings::R_LARCH_ADD16, + bindings::R_LARCH_ADD24, + bindings::R_LARCH_ADD32, + bindings::R_LARCH_ADD64, + bindings::R_LARCH_SUB8, + bindings::R_LARCH_SUB16, + bindings::R_LARCH_SUB24, + bindings::R_LARCH_SUB32, + bindings::R_LARCH_SUB64, + bindings::R_LARCH_B16, + bindings::R_LARCH_B21, + bindings::R_LARCH_B26, + bindings::R_LARCH_PCALA_HI20, + bindings::R_LARCH_PCALA_LO12, + bindings::R_LARCH_PCALA64_LO20, + bindings::R_LARCH_PCALA64_HI12, + bindings::R_LARCH_32_PCREL, + bindings::R_LARCH_PCADD_HI20, + bindings::R_LARCH_PCADD_LO12, + ], + ..Default::default() + } + .into(), _ => None, } } -- 2.55.0