From: Mark Goncharov Date: Tue, 1 Jul 2025 05:57:51 +0000 (+0300) Subject: RISC-V: Fix libpath_suffix selection for ldscript X-Git-Tag: binutils-2_45~139 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6589a725f0e4109e033976e15d1c3d61d96438df;p=thirdparty%2Fbinutils-gdb.git RISC-V: Fix libpath_suffix selection for ldscript When building a cross-compiler ld for RISC-V Linux systems, you can specify target=riscv64*-linux* to create a linker that supports both 32-bit (-march=rv32*) and 64-bit (-march=rv64*) architectures. The specified -march value populates the EMULATION_NAME variable, which determines the default linker script selection. For proper riscv64 target support, the build process must prepare both elf32lriscv* and elf64lriscv* linker scripts. These should align with the standard RISC-V Linux sysroot directory structure. Signed-off-by: Mark Goncharov --- diff --git a/ld/emulparams/elf32lriscv.sh b/ld/emulparams/elf32lriscv.sh index da0d7cf54f4..42460131e6e 100644 --- a/ld/emulparams/elf32lriscv.sh +++ b/ld/emulparams/elf32lriscv.sh @@ -6,7 +6,7 @@ OUTPUT_FORMAT="elf32-littleriscv" # On Linux, first look for 32 bit ILP32D target libraries in /lib/ilp32d as per # the glibc ABI. case "$target" in - riscv32*-linux*) + riscv*-linux*) case "$EMULATION_NAME" in *32*) LIBPATH_SUFFIX="32/ilp32d 32" ;; diff --git a/ld/emulparams/elf32lriscv_ilp32.sh b/ld/emulparams/elf32lriscv_ilp32.sh index 4935937ef6a..c773985f093 100644 --- a/ld/emulparams/elf32lriscv_ilp32.sh +++ b/ld/emulparams/elf32lriscv_ilp32.sh @@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf32-littleriscv" # On Linux, first look for 32 bit ILP32 target libraries in /lib/ilp32 as per # the glibc ABI. case "$target" in - riscv32*-linux*) + riscv*-linux*) case "$EMULATION_NAME" in *32*) LIBPATH_SUFFIX="32/ilp32 32" ;; diff --git a/ld/emulparams/elf32lriscv_ilp32f.sh b/ld/emulparams/elf32lriscv_ilp32f.sh index c684bf85ee5..a2f0c2a6c38 100644 --- a/ld/emulparams/elf32lriscv_ilp32f.sh +++ b/ld/emulparams/elf32lriscv_ilp32f.sh @@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf32-littleriscv" # On Linux, first look for 32 bit ILP32F target libraries in /lib/ilp32f as per # the glibc ABI. case "$target" in - riscv32*-linux*) + riscv*-linux*) case "$EMULATION_NAME" in *32*) LIBPATH_SUFFIX="32/ilp32f 32" ;; diff --git a/ld/emulparams/elf64lriscv.sh b/ld/emulparams/elf64lriscv.sh index e07a0648735..7958052d3b7 100644 --- a/ld/emulparams/elf64lriscv.sh +++ b/ld/emulparams/elf64lriscv.sh @@ -6,7 +6,7 @@ OUTPUT_FORMAT="elf64-littleriscv" # On Linux, first look for 64 bit LP64D target libraries in /lib64/lp64d as per # the glibc ABI, and then /lib64 for backward compatility. case "$target" in - riscv64*-linux*) + riscv*-linux*) case "$EMULATION_NAME" in *64*) LIBPATH_SUFFIX="64/lp64d 64";; diff --git a/ld/emulparams/elf64lriscv_lp64.sh b/ld/emulparams/elf64lriscv_lp64.sh index b1bb252c1ee..7c7feca2e3e 100644 --- a/ld/emulparams/elf64lriscv_lp64.sh +++ b/ld/emulparams/elf64lriscv_lp64.sh @@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf64-littleriscv" # On Linux, first look for 64 bit LP64 target libraries in /lib64/lp64 as per # the glibc ABI, and then /lib64 for backward compatility. case "$target" in - riscv64*-linux*) + riscv*-linux*) case "$EMULATION_NAME" in *64*) LIBPATH_SUFFIX="64/lp64 64";; diff --git a/ld/emulparams/elf64lriscv_lp64f.sh b/ld/emulparams/elf64lriscv_lp64f.sh index 005f191c5bf..e036c2f0f2c 100644 --- a/ld/emulparams/elf64lriscv_lp64f.sh +++ b/ld/emulparams/elf64lriscv_lp64f.sh @@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf64-littleriscv" # On Linux, first look for 64 bit LP64F target libraries in /lib64/lp64f as per # the glibc ABI, and then /lib64 for backward compatility. case "$target" in - riscv64*-linux*) + riscv*-linux*) case "$EMULATION_NAME" in *64*) LIBPATH_SUFFIX="64/lp64f 64";;