@@ -572,7 +572,10 @@ ifeq ($(ARCH),RISCV)
572572 RISCV32_ZIFENCEI := $(shell echo "void _start(void) {}" | \
573573 $(CROSS_COMPILE ) gcc -march=rv32imac_zifencei -mabi=ilp32 -c -x c - -o /dev/null 2>/dev/null && echo _zifencei)
574574 ifneq ($(RISCV32_ZICSR)$(RISCV32_ZIFENCEI),)
575- RISCV32_EXT_LINK_OK := $(shell echo "void _start(void) {}" | \
575+ # Link test using 64-bit integer division to force libgcc resolution.
576+ # A trivial void _start(){} never references libgcc, hiding ABI
577+ # mismatches (e.g., GCC 15 falling back to double-float libgcc).
578+ RISCV32_EXT_LINK_OK := $(shell echo 'long long _d(long long a,long long b) {return a/b;}void _start(void){_d(0,1);}' | \
576579 $(CROSS_COMPILE ) gcc -march=rv32imac$(RISCV32_ZICSR )$(RISCV32_ZIFENCEI ) \
577580 -mabi=ilp32 -nostartfiles -x c - -o /dev/null 2>/dev/null && echo ok)
578581 ifneq ($(RISCV32_EXT_LINK_OK),ok)
@@ -635,7 +638,10 @@ ifeq ($(ARCH),RISCV64)
635638 RISCV64_ZIFENCEI := $(shell echo "void _start(void) {}" | \
636639 $(CROSS_COMPILE ) gcc -march=rv64imafd_zifencei -mabi=lp64d -c -x c - -o /dev/null 2>/dev/null && echo _zifencei)
637640 ifneq ($(RISCV64_ZICSR)$(RISCV64_ZIFENCEI),)
638- RISCV64_EXT_LINK_OK := $(shell echo "void _start(void) {}" | \
641+ # Link test using 128-bit integer division to force libgcc resolution.
642+ # A trivial void _start(){} never references libgcc, hiding multilib
643+ # mismatches (e.g., GCC 15 arch decomposition breaking multilib lookup).
644+ RISCV64_EXT_LINK_OK := $(shell echo '__int128 _d(__int128 a,__int128 b) {return a/b;}void _start(void){_d(0,1);}' | \
639645 $(CROSS_COMPILE ) gcc -march=rv64imafd$(RISCV64_ZICSR )$(RISCV64_ZIFENCEI ) \
640646 -mabi=lp64d -nostartfiles -x c - -o /dev/null 2>/dev/null && echo ok)
641647 ifneq ($(RISCV64_EXT_LINK_OK),ok)
0 commit comments