[PATCH v5 19/24] LoongArch: vDSO: Enable the vdsocheck tool
Thomas Weißschuh
thomas.weissschuh at linutronix.de
Mon Sep 7 23:33:53 PDT 2026
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.weissschuh at linutronix.de>
---
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<'s
..Default::default()
}
.into(),
+ bindings::EM_LOONGARCH => 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
More information about the linux-riscv
mailing list