[0/8] Move libpthread unwind-related functionality into libc

Message ID cover.1614859636.git.fweimer@redhat.com
Headers
Series Move libpthread unwind-related functionality into libc |

Message

Florian Weimer March 4, 2021, 12:10 p.m. UTC
  This series continues my efforts to remove libpthread.  Its focus is
unwinding in various forms: DWARF unwinding for new-style cancellation,
longjmp-based unwinding, and callback-based unwinding (legacy
cancellation unwinder).

I have tested intermediate steps with build-many-glibcs.py, and the
final patch also passed testing on i386-linux-gnu,
powerpc64le-linux-gnu, s390x-linux-gnu, x86_64-linux-gnu.

This series depends on this additional patch:

  <shlib-compat.h>: Support compat_symbol_reference for _ISOMAC 

Florian Weimer (8):
  nptl: Move pthread_mutex_consistent into libc
  nptl: Move __pthread_cleanup_routine into libc
  nptl: Move legacy unwinding implementation into libc
  nptl: Move legacy cancelation handling into libc as compat symbols
  nptl: Remove longjmp, siglongjmp from libpthread
  Legacy unwinder: Remove definition of _Unwind_GetCFA
  nptl: Move __pthread_cleanup_upto into libc
  nptl: Move __pthread_unwind_next into libc

 NEWS                                          |  4 +-
 elf/Makefile                                  |  2 +
 include/setjmp.h                              |  4 +-
 nptl/Makefile                                 | 26 ++++---
 nptl/Versions                                 | 33 ++++++---
 nptl/cleanup_compat.c                         | 16 +++--
 nptl/cleanup_defer_compat.c                   | 72 ++++---------------
 nptl/cleanup_routine.c                        | 12 +++-
 nptl/forward.c                                |  6 --
 nptl/libc-cleanup.c                           | 64 ++++++++++++++++-
 nptl/nptl-init.c                              |  4 --
 nptl/pt-longjmp.c                             | 49 -------------
 nptl/pthreadP.h                               | 21 +++---
 nptl/pthread_cancel.c                         | 10 ++-
 nptl/{pt-cleanup.c => pthread_cleanup_upto.c} |  2 +-
 nptl/pthread_exit.c                           | 11 ++-
 nptl/pthread_mutex_consistent.c               | 22 +++++-
 nptl/tst-cleanup4.c                           |  5 ++
 nptl/tst-cleanup4aux.c                        |  5 ++
 nptl/unwind.c                                 | 14 ++--
 setjmp/Versions                               |  4 --
 sysdeps/arm/Makefile                          |  5 --
 sysdeps/arm/nptl/unwind-forcedunwind.c        | 25 -------
 sysdeps/arm/pt-arm-unwind-resume.S            | 20 ------
 sysdeps/generic/unwind-dw2.c                  |  8 ---
 sysdeps/generic/unwind-resume.c               | 14 ++++
 .../unwind-resume.c}                          |  5 +-
 sysdeps/nptl/jmp-unwind.c                     |  8 +--
 sysdeps/nptl/libc-lock.h                      | 59 +++++++--------
 sysdeps/nptl/libc-lockP.h                     | 22 +-----
 sysdeps/nptl/pthread-functions.h              |  6 --
 sysdeps/nptl/pthread.h                        |  5 +-
 sysdeps/nptl/unwind-forcedunwind.c            | 64 -----------------
 sysdeps/pthread/tst-robust1.c                 |  4 +-
 sysdeps/pthread/tst-robust8.c                 |  2 +-
 sysdeps/pthread/tst-robust9.c                 |  4 +-
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  | 11 +++
 .../sysv/linux/aarch64/libpthread.abilist     | 10 ---
 sysdeps/unix/sysv/linux/alpha/libc.abilist    | 11 +++
 .../unix/sysv/linux/alpha/libpthread.abilist  | 10 ---
 sysdeps/unix/sysv/linux/arc/libc.abilist      | 11 +++
 .../unix/sysv/linux/arc/libpthread.abilist    |  8 ---
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   | 11 +++
 .../unix/sysv/linux/arm/be/libpthread.abilist | 10 ---
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   | 11 +++
 .../unix/sysv/linux/arm/le/libpthread.abilist | 10 ---
 sysdeps/unix/sysv/linux/csky/libc.abilist     | 11 +++
 .../unix/sysv/linux/csky/libpthread.abilist   |  8 ---
 sysdeps/unix/sysv/linux/hppa/libc.abilist     | 11 +++
 .../unix/sysv/linux/hppa/libpthread.abilist   | 10 ---
 sysdeps/unix/sysv/linux/i386/libc.abilist     | 11 +++
 .../unix/sysv/linux/i386/libpthread.abilist   | 10 ---
 sysdeps/unix/sysv/linux/ia64/Makefile         |  2 +-
 sysdeps/unix/sysv/linux/ia64/libc.abilist     | 11 +++
 .../unix/sysv/linux/ia64/libpthread.abilist   | 10 ---
 .../sysv/linux/m68k/coldfire/libc.abilist     | 11 +++
 .../linux/m68k/coldfire/libpthread.abilist    | 10 ---
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  | 11 +++
 .../sysv/linux/m68k/m680x0/libpthread.abilist | 10 ---
 .../sysv/linux/microblaze/be/libc.abilist     | 11 +++
 .../linux/microblaze/be/libpthread.abilist    | 10 ---
 .../sysv/linux/microblaze/le/libc.abilist     | 11 +++
 .../linux/microblaze/le/libpthread.abilist    | 10 ---
 .../sysv/linux/mips/mips32/fpu/libc.abilist   | 11 +++
 .../sysv/linux/mips/mips32/libpthread.abilist | 10 ---
 .../sysv/linux/mips/mips32/nofpu/libc.abilist | 11 +++
 .../sysv/linux/mips/mips64/libpthread.abilist | 10 ---
 .../sysv/linux/mips/mips64/n32/libc.abilist   | 11 +++
 .../sysv/linux/mips/mips64/n64/libc.abilist   | 11 +++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    | 11 +++
 .../unix/sysv/linux/nios2/libpthread.abilist  | 10 ---
 .../linux/powerpc/powerpc32/fpu/libc.abilist  | 11 +++
 .../powerpc/powerpc32/libpthread.abilist      | 12 ----
 .../powerpc/powerpc32/nofpu/libc.abilist      | 11 +++
 .../linux/powerpc/powerpc64/be/libc.abilist   | 11 +++
 .../powerpc/powerpc64/be/libpthread.abilist   | 12 ----
 .../linux/powerpc/powerpc64/le/libc.abilist   | 11 +++
 .../powerpc/powerpc64/le/libpthread.abilist   | 10 ---
 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c  | 61 ----------------
 .../unix/sysv/linux/riscv/rv32/libc.abilist   | 11 +++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  8 ---
 .../unix/sysv/linux/riscv/rv64/libc.abilist   | 11 +++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  8 ---
 sysdeps/unix/sysv/linux/s390/Versions         |  2 +-
 sysdeps/unix/sysv/linux/s390/jmp-unwind.c     |  7 +-
 .../unix/sysv/linux/s390/libpthread-compat.c  | 25 +++++++
 sysdeps/unix/sysv/linux/s390/pt-longjmp.c     | 33 ---------
 .../unix/sysv/linux/s390/s390-32/libc.abilist | 11 +++
 .../linux/s390/s390-32/libpthread.abilist     | 13 +---
 .../unix/sysv/linux/s390/s390-64/libc.abilist | 11 +++
 .../linux/s390/s390-64/libpthread.abilist     | 13 +---
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    | 11 +++
 .../unix/sysv/linux/sh/be/libpthread.abilist  | 10 ---
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    | 11 +++
 .../unix/sysv/linux/sh/le/libpthread.abilist  | 10 ---
 .../sysv/linux/sparc/sparc32/libc.abilist     | 11 +++
 .../linux/sparc/sparc32/libpthread.abilist    | 10 ---
 .../sysv/linux/sparc/sparc64/libc.abilist     | 11 +++
 .../linux/sparc/sparc64/libpthread.abilist    | 10 ---
 .../unix/sysv/linux/x86_64/64/libc.abilist    | 11 +++
 .../sysv/linux/x86_64/64/libpthread.abilist   | 10 ---
 .../unix/sysv/linux/x86_64/x32/libc.abilist   | 11 +++
 .../sysv/linux/x86_64/x32/libpthread.abilist  | 10 ---
 sysdeps/x86/nptl/pt-longjmp.c                 | 71 ------------------
 104 files changed, 648 insertions(+), 834 deletions(-)
 delete mode 100644 nptl/pt-longjmp.c
 rename nptl/{pt-cleanup.c => pthread_cleanup_upto.c} (98%)
 delete mode 100644 sysdeps/arm/nptl/unwind-forcedunwind.c
 delete mode 100644 sysdeps/arm/pt-arm-unwind-resume.S
 rename sysdeps/{unix/sysv/linux/ia64/unwind-forcedunwind.c => ia64/unwind-resume.c} (87%)
 delete mode 100644 sysdeps/nptl/unwind-forcedunwind.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
 create mode 100644 sysdeps/unix/sysv/linux/s390/libpthread-compat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/pt-longjmp.c
 delete mode 100644 sysdeps/x86/nptl/pt-longjmp.c