[PATCH] riscv: Fix _dl_relocate_static_pie on some build configuration (BZ 33911)

Adhemerval Zanella adhemerval.zanella@linaro.org
Mon Mar 9 13:57:35 GMT 2026


The compiler might issue memcpy libcalls for ELF_DYNAMIC_RELOCATE, and since
587a1290a1af7b (2.40), RISC-V provides memcpy ifunc support. Adjust
dl-symbol-redir-ifunc.h and use on dl-reloc-static-pie.c.

It fixes riscv static-pie build.  Checked on riscv64-linux-gnu-rv64imafdc-lp64d
built with -Os and -O2 by running ldconfig.
---
 elf/dl-reloc-static-pie.c                        | 1 +
 sysdeps/riscv/multiarch/dl-symbol-redir-ifunc.h  | 1 +
 sysdeps/unix/sysv/linux/riscv/multiarch/Makefile | 1 +
 3 files changed, 3 insertions(+)

diff --git a/elf/dl-reloc-static-pie.c b/elf/dl-reloc-static-pie.c
index bdff2b5ee2..63ce609024 100644
--- a/elf/dl-reloc-static-pie.c
+++ b/elf/dl-reloc-static-pie.c
@@ -25,6 +25,7 @@
 
 #include <dl-machine.h>
 #include <dl-debug.h>
+#include <dl-symbol-redir-ifunc.h>
 
 #define RESOLVE_MAP(map, scope, sym, version, flags) map
 #include "dynamic-link.h"
diff --git a/sysdeps/riscv/multiarch/dl-symbol-redir-ifunc.h b/sysdeps/riscv/multiarch/dl-symbol-redir-ifunc.h
index 24b78711e3..69a0790838 100644
--- a/sysdeps/riscv/multiarch/dl-symbol-redir-ifunc.h
+++ b/sysdeps/riscv/multiarch/dl-symbol-redir-ifunc.h
@@ -21,6 +21,7 @@
 
 #ifndef SHARED
 asm ("memset = __memset_generic");
+asm ("memcpy = __memcpy_generic");
 #endif
 
 #endif
diff --git a/sysdeps/unix/sysv/linux/riscv/multiarch/Makefile b/sysdeps/unix/sysv/linux/riscv/multiarch/Makefile
index a865090a53..a033ea9569 100644
--- a/sysdeps/unix/sysv/linux/riscv/multiarch/Makefile
+++ b/sysdeps/unix/sysv/linux/riscv/multiarch/Makefile
@@ -11,4 +11,5 @@ sysdep_routines += \
 CFLAGS-memcpy_noalignment.c += -mno-strict-align
 # Called during static initialization
 CFLAGS-memset-generic.c += $(no-stack-protector)
+CFLAGS-memcpy-generic.c += $(no-stack-protector)
 endif
-- 
2.43.0



More information about the Libc-alpha mailing list