[PATCH v2 0/5] elf: Allow RPATH/RUNPATH for static-pie (BZ 33326)
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Mon Nov 17 19:18:39 GMT 2025
Ping.
On 02/09/25 16:26, Adhemerval Zanella wrote:
> Although static binaries do not support rpath (since they lack dynamic
> sections), adding static-pie support only affects the dlopen function.
> It is one less unexpected behavior (where dynamic and static binaries
> support and behave differently), and if/when static dlopen support is
> removed, this will become a no-op.
>
> The testcase from BZ 33236 triggered a deep issue with an assert in
> startup code, which required changes to multiple ABIs to properly fix
> (even though the assert itself was removed in the last patch). There
> are still other assert usage, although most, if not all, are for
> ill-formatted ELF files.
>
> Changes from v1:
> * Change the ctz/clz fallback to simpler algorithms and use a different
> header/macro with a better explanation of its intend.
> * Rename __pthread_kill_self to __raise_nostatus.
> * Fixed assert also for powerpc-power4 and riscv.
>
> Adhemerval Zanella (5):
> string: Add fallback implementation for ctz/clz
> nptl: Add __raise_nocancel
> Use _dl_writev on __libc_message_impl
> Fix assert during static startup
> elf: Allow RPATH/RUNPATH for static-pie
>
> assert/Makefile | 5 ++
> elf/Makefile | 24 +++++++++
> elf/dl-load.c | 2 +-
> elf/dl-reloc-static-pie.c | 2 +-
> elf/get-dynamic-info.h | 5 +-
> elf/rtld.c | 4 +-
> elf/setup-vdso.h | 2 +-
> elf/tst-assert-startup-static.c | 35 ++++++++++++
> elf/tst-pie-rpath-mod.c | 19 +++++++
> elf/tst-pie-rpath-static.c | 53 +++++++++++++++++++
> include/signal.h | 2 +
> libio/Makefile | 5 ++
> nptl/pthread_kill.c | 21 +++-----
> signal/Makefile | 12 ++++-
> signal/raise_nostatus.c | 27 ++++++++++
> stdlib/Makefile | 5 ++
> string/Makefile | 2 +
> .../aarch64/multiarch/dl-symbol-redir-ifunc.h | 2 +
> sysdeps/aarch64/multiarch/memcpy_generic.S | 4 ++
> sysdeps/aarch64/multiarch/strlen_generic.S | 4 ++
> sysdeps/generic/dl-mmap.h | 34 ++++++++++++
> {elf => sysdeps/generic}/dl-writev.h | 18 +++----
> sysdeps/generic/string-bitops.h | 26 +++++++++
> sysdeps/generic/string-fzi.h | 50 +++++++++++------
> .../lp64/multiarch/dl-symbol-redir-ifunc.h | 3 ++
> sysdeps/posix/libc_fatal.c | 27 ++++++----
> sysdeps/posix/raise.c | 2 +-
> .../powerpc32/power4/multiarch/Makefile | 5 ++
> .../be/multiarch/dl-symbol-redir-ifunc.h | 27 ++++++++++
> .../le/multiarch/dl-symbol-redir-ifunc.h | 1 +
> sysdeps/powerpc/powerpc64/multiarch/Makefile | 1 +
> sysdeps/s390/Makefile | 5 ++
> .../s390/multiarch/dl-symbol-redir-ifunc.h | 4 ++
> sysdeps/s390/string-bitops.h | 27 ++++++++++
> .../sparcv9/multiarch/dl-symbol-redir-ifunc.h | 3 ++
> .../sparc64/multiarch/dl-symbol-redir-ifunc.h | 3 ++
> sysdeps/unix/sysv/linux/Makefile | 5 ++
> sysdeps/unix/sysv/linux/dl-mmap.h | 34 ++++++++++++
> sysdeps/unix/sysv/linux/dl-writev.h | 13 ++---
> sysdeps/unix/sysv/linux/i386/dl-mmap.h | 38 +++++++++++++
> sysdeps/unix/sysv/linux/i386/raise_nostatus.c | 26 +++++++++
> .../linux/{libc_fatal.c => raise_nostatus.c} | 27 ++++------
> .../unix/sysv/linux/riscv/multiarch/Makefile | 5 ++
> .../riscv/multiarch/dl-symbol-redir-ifunc.h | 26 +++++++++
> .../x86_64/multiarch/dl-symbol-redir-ifunc.h | 33 ++++++++++++
> 45 files changed, 593 insertions(+), 85 deletions(-)
> create mode 100644 elf/tst-assert-startup-static.c
> create mode 100644 elf/tst-pie-rpath-mod.c
> create mode 100644 elf/tst-pie-rpath-static.c
> create mode 100644 signal/raise_nostatus.c
> create mode 100644 sysdeps/generic/dl-mmap.h
> rename {elf => sysdeps/generic}/dl-writev.h (80%)
> create mode 100644 sysdeps/generic/string-bitops.h
> create mode 100644 sysdeps/powerpc/powerpc64/be/multiarch/dl-symbol-redir-ifunc.h
> create mode 100644 sysdeps/s390/string-bitops.h
> create mode 100644 sysdeps/unix/sysv/linux/dl-mmap.h
> create mode 100644 sysdeps/unix/sysv/linux/i386/dl-mmap.h
> create mode 100644 sysdeps/unix/sysv/linux/i386/raise_nostatus.c
> rename sysdeps/unix/sysv/linux/{libc_fatal.c => raise_nostatus.c} (58%)
> create mode 100644 sysdeps/unix/sysv/linux/riscv/multiarch/dl-symbol-redir-ifunc.h
>
More information about the Libc-alpha
mailing list