mbox

[0/5] Linux: Fall back to mmap if early sbrk fails

Message ID cover.1651518694.git.fweimer@redhat.com
Headers

Message

Florian Weimer May 2, 2022, 7:15 p.m. UTC
  This series implements a _dl_early_allocate function that does not need
a TCB.  It prefers sbrk over mmap to avoid creating too many PTE, but it
can use mmap as well.

Tested on aarch64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu,
s390x-linux-gnu, x86_64-linux-gnu.  Built with build-many-glibcs.py.

I manually used strace to inject an brk failure, and it mmap fallback
kicks in.

Thanks,
Florian

Florian Weimer (5):
  Linux: Implement a useful version of _startup_fatal
  Linux: Define MMAP_CALL_INTERNAL
  i386: Remove OPTIMIZE_FOR_GCC_5 from Linux libc-do-syscall.S
  i386: Honor I386_USE_SYSENTER for 6-argument Linux system calls
  csu: Implement and use _dl_early_allocate during static startup

 csu/libc-tls.c                                | 12 ++-
 elf/Makefile                                  | 19 +++++
 elf/dl-early_allocate.c                       | 30 +++++++
 elf/tst-tls-allocation-failure-static.c       | 31 +++++++
 scripts/tst-elf-edit.py                       | 34 ++++++--
 sysdeps/generic/ldsodefs.h                    |  5 ++
 sysdeps/unix/sysv/linux/dl-early_allocate.c   | 81 +++++++++++++++++++
 sysdeps/unix/sysv/linux/i386/Makefile         |  2 +-
 .../sysv/linux/i386/libc-do-syscall-int80.S   | 25 ++++++
 .../unix/sysv/linux/i386/libc-do-syscall.S    |  3 -
 sysdeps/unix/sysv/linux/i386/startup.h        | 17 +---
 sysdeps/unix/sysv/linux/i386/sysdep.h         | 13 ++-
 sysdeps/unix/sysv/linux/mmap_call.h           | 22 +++++
 sysdeps/unix/sysv/linux/mmap_internal.h       |  6 +-
 .../s390/{mmap_internal.h => mmap_call.h}     | 14 ++--
 sysdeps/unix/sysv/linux/startup.h             | 38 +++++++++
 16 files changed, 309 insertions(+), 43 deletions(-)
 create mode 100644 elf/dl-early_allocate.c
 create mode 100644 elf/tst-tls-allocation-failure-static.c
 create mode 100644 sysdeps/unix/sysv/linux/dl-early_allocate.c
 create mode 100644 sysdeps/unix/sysv/linux/i386/libc-do-syscall-int80.S
 create mode 100644 sysdeps/unix/sysv/linux/mmap_call.h
 rename sysdeps/unix/sysv/linux/s390/{mmap_internal.h => mmap_call.h} (78%)
 create mode 100644 sysdeps/unix/sysv/linux/startup.h


base-commit: d056c212130280c0a54d9a4f72170ec621b70ce5