[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