[PATCH 1/3] riscv: vdso: Add symbols for the alternative section boundaries
From: Thomas Weißschuh
Date: Tue Jun 30 2026 - 03:46:03 EST
Currently the alternative sections are extracted from the vDSO
binaries at runtime. This has runtime overhead and also doesn't
work for the compat vDSO.
Extract the offsets of the alternative section during the build with the
existing symbol extraction machinery.
Also add dummy symbols as fallback.
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx>
---
arch/riscv/include/asm/vdso.h | 6 ++++++
arch/riscv/kernel/vdso/vdso.lds.S | 2 ++
2 files changed, 8 insertions(+)
diff --git a/arch/riscv/include/asm/vdso.h b/arch/riscv/include/asm/vdso.h
index f7998d9ad9b2..0259bbc98e93 100644
--- a/arch/riscv/include/asm/vdso.h
+++ b/arch/riscv/include/asm/vdso.h
@@ -19,10 +19,14 @@
#ifdef CONFIG_MMU
#include <generated/vdso-offsets.h>
+#else
+extern size_t __vdso_alternatives_start_offset, __vdso_alternatives_end_offset;
#endif
#ifdef CONFIG_RISCV_USER_CFI
#include <generated/vdso-cfi-offsets.h>
+#else
+extern size_t __vdso_alternatives_start_cfi_offset, __vdso_alternatives_end_cfi_offset;
#endif
#ifdef CONFIG_RISCV_USER_CFI
@@ -41,6 +45,8 @@
#define COMPAT_VDSO_SYMBOL(base, name) \
(void __user *)((unsigned long)(base) + compat__vdso_##name##_offset)
+#else
+extern size_t compat__vdso_alternatives_start_offset, compat__vdso_alternatives_end_offset;
#endif /* CONFIG_COMPAT */
extern char vdso_start[], vdso_end[];
diff --git a/arch/riscv/kernel/vdso/vdso.lds.S b/arch/riscv/kernel/vdso/vdso.lds.S
index 9acfa9ef5bab..0cc4b64df994 100644
--- a/arch/riscv/kernel/vdso/vdso.lds.S
+++ b/arch/riscv/kernel/vdso/vdso.lds.S
@@ -45,9 +45,11 @@ SECTIONS
.text : { *(.text .text.*) } :text
. = ALIGN(4);
+ __vdso_alternatives_start = .;
.alternative : {
*(.alternative)
}
+ __vdso_alternatives_end = .;
}
/*
--
2.55.0