[PATCH v11 0/5] elf: Allow RPATH/RUNPATH for static-pie

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Thu Aug 20 17:26:15 GMT 2026


Ping.

On 28/07/26 18:13, 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 33326 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 v10:
> * s390: only redirect __strchrnul when the ifunc is built (fixes
>   --disable-multi-arch build).
> * _dl_mmap now issues the syscall directly, since setting errno on
>   failure also requires the thread pointer.
> * Turn stack protection off for mempcpy as well, which is called by
>   __libc_message_impl on targets without an assembly implementation.
> * Dropped the duplicated memcpy (aarch64) and strlen (x86_64)
>   redirections.
> * elf/tst-pie-rpath-static is now a container test. 
> * Fixed the __tunables_init prototype in the new startup test, plus
>   assorted Makefile and comment cleanups.
> 
> Changes from v9:
> * Rebased against master.
> * Added review from previous version.
> 
> Changes from v8:
> * Rebased against master.
> * Added review from previous version.
> 
> Changes from v7:
> * Also raise SIGABRT on assert for ld.so.  The hurd __raise_direct
>   is no-op that requires a proper implementation (so current semantic
>   is kept).
> 
> Changes from v6:
> * Improve comments.
> * Remove unused files.
> 
> Changes from v5:
> * Move _dl_writev and _dl_mmap to their own TU for i386 to avoid
>   I386_USE_SYSENTER redefinition.
> * Fixed generic __raise_direct and add a TODO for Hurd.
> 
> Changes from 4:
> * Rename __raise_nocancel to __raise_direct and remove default
>   implementation.
> * Simplify _dl_writev.
> 
> Changes from v3:
> * Added Wilco's suggestion on fallback implementation for ctz/clz.
> * Rebased against master.
> * Fixed another riscv issues.
> 
> Changes from v2:
> * Fixed a build for x86_64-linux-gnu-v3.
> * Adjust the elf/tst-pie-rpath-static to run correctly when
>   --enable-hardcoded-path-in-tests is not used
> 
> 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):
>   nptl: Add __raise_direct
>   Use _dl_writev on __libc_message_impl
>   Fix assert during static startup (BZ 33326)
>   elf: Allow RPATH/RUNPATH for static-pie (BZ 33326)
>   elf: Remove __chk_fail from dl-minimal.c
> 
>  assert/Makefile                               |  5 +++
>  elf/Makefile                                  | 27 ++++++++++++
>  elf/dl-load.c                                 |  2 +-
>  elf/dl-minimal.c                              |  8 ----
>  elf/dl-reloc-static-pie.c                     |  2 +-
>  elf/get-dynamic-info.h                        |  7 +--
>  elf/rtld.c                                    |  4 +-
>  elf/setup-vdso.h                              |  2 +-
>  elf/tst-assert-startup-static.c               | 43 +++++++++++++++++++
>  elf/tst-pie-rpath-mod.c                       | 19 ++++++++
>  elf/tst-pie-rpath-static.c                    | 38 ++++++++++++++++
>  .../tst-pie-rpath-static.script               |  2 +
>  include/signal.h                              |  3 ++
>  include/sys/cdefs.h                           |  1 -
>  libio/Makefile                                |  5 +++
>  nptl/pthread_kill.c                           | 21 +++------
>  stdlib/Makefile                               |  5 +++
>  stdlib/abort.c                                |  2 +-
>  string/Makefile                               | 22 +++++++---
>  .../aarch64/multiarch/dl-symbol-redir-ifunc.h |  2 +-
>  sysdeps/aarch64/multiarch/memcpy_generic.S    |  4 ++
>  sysdeps/generic/dl-mmap.h                     | 37 ++++++++++++++++
>  {elf => sysdeps/generic}/dl-writev.h          | 18 ++++----
>  sysdeps/htl/raise.c                           |  2 +
>  .../lp64/multiarch/dl-symbol-redir-ifunc.h    |  1 +
>  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  |  5 ++-
>  sysdeps/s390/Makefile                         |  5 +++
>  .../s390/multiarch/dl-symbol-redir-ifunc.h    |  5 +++
>  sysdeps/s390/string-bitops.h                  | 28 ++++++++++++
>  sysdeps/unix/sysv/linux/Makefile              | 16 +++++++
>  sysdeps/unix/sysv/linux/dl-mmap.h             | 40 +++++++++++++++++
>  sysdeps/unix/sysv/linux/dl-writev.h           | 12 ++----
>  sysdeps/unix/sysv/linux/i386/Makefile         | 14 ++++++
>  sysdeps/unix/sysv/linux/i386/dl-mmap.c        | 38 ++++++++++++++++
>  sysdeps/unix/sysv/linux/i386/dl-mmap.h        | 27 ++++++++++++
>  .../linux/{libc_fatal.c => i386/dl-writev.c}  | 28 ++++++------
>  sysdeps/unix/sysv/linux/i386/dl-writev.h      | 15 ++++---
>  sysdeps/unix/sysv/linux/i386/raise_direct.c   | 26 +++++++++++
>  sysdeps/unix/sysv/linux/raise_direct.c        | 31 +++++++++++++
>  .../unix/sysv/linux/riscv/multiarch/Makefile  | 12 ++++--
>  .../x86_64/multiarch/dl-symbol-redir-ifunc.h  | 18 ++++++--
>  46 files changed, 564 insertions(+), 100 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 elf/tst-pie-rpath-static.root/tst-pie-rpath-static.script
>  create mode 100644 sysdeps/generic/dl-mmap.h
>  rename {elf => sysdeps/generic}/dl-writev.h (80%)
>  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.c
>  create mode 100644 sysdeps/unix/sysv/linux/i386/dl-mmap.h
>  rename sysdeps/unix/sysv/linux/{libc_fatal.c => i386/dl-writev.c} (58%)
>  create mode 100644 sysdeps/unix/sysv/linux/i386/raise_direct.c
>  create mode 100644 sysdeps/unix/sysv/linux/raise_direct.c
> 



More information about the Libc-alpha mailing list