[PATCH v4] riscv: Implement ARCH_HAS_CC_CAN_LINK

From: Thomas Weißschuh

Date: Fri Feb 27 2026 - 01:55:17 EST


The generic CC_CAN_LINK detection relies on -m32/-m64 compiler flags.
These are not supported by riscv compilers.

Use architecture-specific logic using -mabi instead.

Prefer the 'd' ABI variant when possible as todays toolchains are most
likely to provide a libc for that one.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx>
---
Changes in v4:
- Add -march= for clang compatibility.
- (Sorry for the fast resend, the fixed variant was on a wrong branch)
- Link to v3: https://lore.kernel.org/r/20260227-cc-can-link-riscv-v3-1-b0baf0fff571@xxxxxxxxxxxxx

Changes in v3:
- Rebase on v7.0-rc1
- Link to v2: https://lore.kernel.org/r/20260116-cc-can-link-riscv-v2-1-eaf362d74c90@xxxxxxxxxxxxx

Changes in v2:
- Also handle !FPU case.
- Extend commit message.
- Link to v1: https://lore.kernel.org/r/20251222-cc-can-link-riscv-v1-1-633e39e4a60d@xxxxxxxxxxxxx
---
arch/riscv/Kconfig | 15 +++++++++++++++
1 file changed, 15 insertions(+)

diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 90c531e6abf5..614106694224 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -25,6 +25,7 @@ config RISCV
select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
select ARCH_HAS_BINFMT_FLAT
+ select ARCH_HAS_CC_CAN_LINK
select ARCH_HAS_CURRENT_STACK_POINTER
select ARCH_HAS_DEBUG_VIRTUAL if MMU
select ARCH_HAS_DEBUG_VM_PGTABLE
@@ -1374,6 +1375,20 @@ config PORTABLE
config ARCH_PROC_KCORE_TEXT
def_bool y

+config ARCH_CC_CAN_LINK
+ bool
+ default $(cc_can_link_user,-march=rv64g -mabi=lp64d) if 64BIT && FPU
+ default $(cc_can_link_user,-march=rv64g -mabi=lp64) if 64BIT
+ default $(cc_can_link_user,-march=rv32g -mabi=ilp32d) if FPU
+ default $(cc_can_link_user,-march=rv32g -mabi=ilp32)
+
+config ARCH_USERFLAGS
+ string
+ default "-march=rv64g -mabi=lp64d" if 64BIT && FPU
+ default "-march=rv64g -mabi=lp64" if 64BIT
+ default "-march=rv32g -mabi=ilp32d" if FPU
+ default "-march=rv32g -mabi=ilp32"
+
menu "Power management options"

source "kernel/power/Kconfig"

---
base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
change-id: 20251222-cc-can-link-riscv-dc0304d27cf4

Best regards,
--
Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx>