[0/5] Extensible rseq support for glibc

Message ID cover.1638798186.git.fweimer@redhat.com
Headers
Series Extensible rseq support for glibc |

Message

Florian Weimer Dec. 6, 2021, 1:45 p.m. UTC
  This series again adds rseq support, this time in such a way that the
kernel can eventually request a larger rseq area size.  Registration can
be disabled using a new tunable.

The series is based mostly on Mathieu's earlier work, especially the
definition of RSEQ_SIG and the tests.

Thanks,
Florian

Florian Weimer (5):
  nptl: Add <thread_pointer.h> for defining __thread_pointer
  nptl: Add rseq registration
  Linux: Use rseq to accelerate sched_getcpu
  nptl: Add glibc.pthread.rseq tunable to control rseq registration
  nptl: Add public rseq symbols

 NEWS                                          |  11 +
 csu/libc-tls.c                                |   6 +
 manual/threads.texi                           |  81 ++++++
 manual/tunables.texi                          |  10 +
 nptl/descr.h                                  |   4 +
 nptl/pthread_create.c                         |  21 ++
 sysdeps/csky/nptl/thread_pointer.h            |  25 ++
 sysdeps/hppa/nptl/thread_pointer.h            |  25 ++
 sysdeps/ia64/nptl/thread_pointer.h            |  19 ++
 sysdeps/m68k/nptl/thread_pointer.h            |  20 ++
 sysdeps/microblaze/nptl/thread_pointer.h      |  19 ++
 sysdeps/nptl/dl-tls_init_tp.c                 |  33 ++-
 sysdeps/nptl/dl-tunables.list                 |   6 +
 sysdeps/nptl/internaltypes.h                  |   1 +
 sysdeps/nptl/thread_pointer.h                 |  19 ++
 sysdeps/powerpc/nptl/thread_pointer.h         |  23 ++
 sysdeps/sparc/nptl/thread_pointer.h           |  19 ++
 sysdeps/unix/sysv/linux/Makefile              |  17 +-
 sysdeps/unix/sysv/linux/Versions              |   5 +
 sysdeps/unix/sysv/linux/aarch64/bits/rseq.h   |  43 +++
 sysdeps/unix/sysv/linux/aarch64/ld.abilist    |   3 +
 sysdeps/unix/sysv/linux/alpha/ld.abilist      |   3 +
 sysdeps/unix/sysv/linux/arc/ld.abilist        |   3 +
 sysdeps/unix/sysv/linux/arm/be/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/arm/bits/rseq.h       |  83 ++++++
 sysdeps/unix/sysv/linux/arm/le/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/bits/rseq.h           |  29 ++
 sysdeps/unix/sysv/linux/csky/ld.abilist       |   3 +
 sysdeps/unix/sysv/linux/hppa/ld.abilist       |   3 +
 sysdeps/unix/sysv/linux/i386/ld.abilist       |   3 +
 sysdeps/unix/sysv/linux/ia64/ld.abilist       |   3 +
 .../unix/sysv/linux/m68k/coldfire/ld.abilist  |   3 +
 .../unix/sysv/linux/m68k/m680x0/ld.abilist    |   3 +
 sysdeps/unix/sysv/linux/microblaze/ld.abilist |   3 +
 sysdeps/unix/sysv/linux/mips/bits/rseq.h      |  62 +++++
 .../unix/sysv/linux/mips/mips32/ld.abilist    |   3 +
 .../sysv/linux/mips/mips64/n32/ld.abilist     |   3 +
 .../sysv/linux/mips/mips64/n64/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/nios2/ld.abilist      |   3 +
 sysdeps/unix/sysv/linux/powerpc/bits/rseq.h   |  37 +++
 .../sysv/linux/powerpc/powerpc32/ld.abilist   |   3 +
 .../linux/powerpc/powerpc64/be/ld.abilist     |   3 +
 .../linux/powerpc/powerpc64/le/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist |   3 +
 sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist |   3 +
 sysdeps/unix/sysv/linux/rseq-internal.h       |  52 ++++
 sysdeps/unix/sysv/linux/s390/bits/rseq.h      |  37 +++
 .../unix/sysv/linux/s390/s390-32/ld.abilist   |   3 +
 .../unix/sysv/linux/s390/s390-64/ld.abilist   |   3 +
 sysdeps/unix/sysv/linux/sched_getcpu.c        |  19 +-
 sysdeps/unix/sysv/linux/sh/be/ld.abilist      |   3 +
 sysdeps/unix/sysv/linux/sh/le/ld.abilist      |   3 +
 .../unix/sysv/linux/sparc/sparc32/ld.abilist  |   3 +
 .../unix/sysv/linux/sparc/sparc64/ld.abilist  |   3 +
 sysdeps/unix/sysv/linux/sys/rseq.h            | 184 +++++++++++++
 sysdeps/unix/sysv/linux/tst-rseq-disable.c    |  95 +++++++
 sysdeps/unix/sysv/linux/tst-rseq-nptl.c       | 260 ++++++++++++++++++
 sysdeps/unix/sysv/linux/tst-rseq.c            |  72 +++++
 sysdeps/unix/sysv/linux/tst-rseq.h            |  57 ++++
 sysdeps/unix/sysv/linux/x86/bits/rseq.h       |  30 ++
 sysdeps/unix/sysv/linux/x86_64/64/ld.abilist  |   3 +
 sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist |   3 +
 sysdeps/x86/nptl/thread_pointer.h             |  33 +++
 63 files changed, 1539 insertions(+), 5 deletions(-)
 create mode 100644 sysdeps/csky/nptl/thread_pointer.h
 create mode 100644 sysdeps/hppa/nptl/thread_pointer.h
 create mode 100644 sysdeps/ia64/nptl/thread_pointer.h
 create mode 100644 sysdeps/m68k/nptl/thread_pointer.h
 create mode 100644 sysdeps/microblaze/nptl/thread_pointer.h
 create mode 100644 sysdeps/nptl/thread_pointer.h
 create mode 100644 sysdeps/powerpc/nptl/thread_pointer.h
 create mode 100644 sysdeps/sparc/nptl/thread_pointer.h
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/arm/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/mips/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/rseq-internal.h
 create mode 100644 sysdeps/unix/sysv/linux/s390/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/sys/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq-disable.c
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq-nptl.c
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq.c
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/x86/bits/rseq.h
 create mode 100644 sysdeps/x86/nptl/thread_pointer.h


base-commit: 68007900beef12000ed90f38c251eaf32fbc0490
  

Comments

Mathieu Desnoyers Dec. 6, 2021, 4:13 p.m. UTC | #1
----- On Dec 6, 2021, at 8:45 AM, Florian Weimer fweimer@redhat.com wrote:

> This series again adds rseq support, this time in such a way that the
> kernel can eventually request a larger rseq area size.  Registration can
> be disabled using a new tunable.
> 
> The series is based mostly on Mathieu's earlier work, especially the
> definition of RSEQ_SIG and the tests.

Hi Florian,

Thanks for doing this work. I will review it over the next few days.

Mathieu

> 
> Thanks,
> Florian
> 
> Florian Weimer (5):
>  nptl: Add <thread_pointer.h> for defining __thread_pointer
>  nptl: Add rseq registration
>  Linux: Use rseq to accelerate sched_getcpu
>  nptl: Add glibc.pthread.rseq tunable to control rseq registration
>  nptl: Add public rseq symbols
> 
> NEWS                                          |  11 +
> csu/libc-tls.c                                |   6 +
> manual/threads.texi                           |  81 ++++++
> manual/tunables.texi                          |  10 +
> nptl/descr.h                                  |   4 +
> nptl/pthread_create.c                         |  21 ++
> sysdeps/csky/nptl/thread_pointer.h            |  25 ++
> sysdeps/hppa/nptl/thread_pointer.h            |  25 ++
> sysdeps/ia64/nptl/thread_pointer.h            |  19 ++
> sysdeps/m68k/nptl/thread_pointer.h            |  20 ++
> sysdeps/microblaze/nptl/thread_pointer.h      |  19 ++
> sysdeps/nptl/dl-tls_init_tp.c                 |  33 ++-
> sysdeps/nptl/dl-tunables.list                 |   6 +
> sysdeps/nptl/internaltypes.h                  |   1 +
> sysdeps/nptl/thread_pointer.h                 |  19 ++
> sysdeps/powerpc/nptl/thread_pointer.h         |  23 ++
> sysdeps/sparc/nptl/thread_pointer.h           |  19 ++
> sysdeps/unix/sysv/linux/Makefile              |  17 +-
> sysdeps/unix/sysv/linux/Versions              |   5 +
> sysdeps/unix/sysv/linux/aarch64/bits/rseq.h   |  43 +++
> sysdeps/unix/sysv/linux/aarch64/ld.abilist    |   3 +
> sysdeps/unix/sysv/linux/alpha/ld.abilist      |   3 +
> sysdeps/unix/sysv/linux/arc/ld.abilist        |   3 +
> sysdeps/unix/sysv/linux/arm/be/ld.abilist     |   3 +
> sysdeps/unix/sysv/linux/arm/bits/rseq.h       |  83 ++++++
> sysdeps/unix/sysv/linux/arm/le/ld.abilist     |   3 +
> sysdeps/unix/sysv/linux/bits/rseq.h           |  29 ++
> sysdeps/unix/sysv/linux/csky/ld.abilist       |   3 +
> sysdeps/unix/sysv/linux/hppa/ld.abilist       |   3 +
> sysdeps/unix/sysv/linux/i386/ld.abilist       |   3 +
> sysdeps/unix/sysv/linux/ia64/ld.abilist       |   3 +
> .../unix/sysv/linux/m68k/coldfire/ld.abilist  |   3 +
> .../unix/sysv/linux/m68k/m680x0/ld.abilist    |   3 +
> sysdeps/unix/sysv/linux/microblaze/ld.abilist |   3 +
> sysdeps/unix/sysv/linux/mips/bits/rseq.h      |  62 +++++
> .../unix/sysv/linux/mips/mips32/ld.abilist    |   3 +
> .../sysv/linux/mips/mips64/n32/ld.abilist     |   3 +
> .../sysv/linux/mips/mips64/n64/ld.abilist     |   3 +
> sysdeps/unix/sysv/linux/nios2/ld.abilist      |   3 +
> sysdeps/unix/sysv/linux/powerpc/bits/rseq.h   |  37 +++
> .../sysv/linux/powerpc/powerpc32/ld.abilist   |   3 +
> .../linux/powerpc/powerpc64/be/ld.abilist     |   3 +
> .../linux/powerpc/powerpc64/le/ld.abilist     |   3 +
> sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist |   3 +
> sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist |   3 +
> sysdeps/unix/sysv/linux/rseq-internal.h       |  52 ++++
> sysdeps/unix/sysv/linux/s390/bits/rseq.h      |  37 +++
> .../unix/sysv/linux/s390/s390-32/ld.abilist   |   3 +
> .../unix/sysv/linux/s390/s390-64/ld.abilist   |   3 +
> sysdeps/unix/sysv/linux/sched_getcpu.c        |  19 +-
> sysdeps/unix/sysv/linux/sh/be/ld.abilist      |   3 +
> sysdeps/unix/sysv/linux/sh/le/ld.abilist      |   3 +
> .../unix/sysv/linux/sparc/sparc32/ld.abilist  |   3 +
> .../unix/sysv/linux/sparc/sparc64/ld.abilist  |   3 +
> sysdeps/unix/sysv/linux/sys/rseq.h            | 184 +++++++++++++
> sysdeps/unix/sysv/linux/tst-rseq-disable.c    |  95 +++++++
> sysdeps/unix/sysv/linux/tst-rseq-nptl.c       | 260 ++++++++++++++++++
> sysdeps/unix/sysv/linux/tst-rseq.c            |  72 +++++
> sysdeps/unix/sysv/linux/tst-rseq.h            |  57 ++++
> sysdeps/unix/sysv/linux/x86/bits/rseq.h       |  30 ++
> sysdeps/unix/sysv/linux/x86_64/64/ld.abilist  |   3 +
> sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist |   3 +
> sysdeps/x86/nptl/thread_pointer.h             |  33 +++
> 63 files changed, 1539 insertions(+), 5 deletions(-)
> create mode 100644 sysdeps/csky/nptl/thread_pointer.h
> create mode 100644 sysdeps/hppa/nptl/thread_pointer.h
> create mode 100644 sysdeps/ia64/nptl/thread_pointer.h
> create mode 100644 sysdeps/m68k/nptl/thread_pointer.h
> create mode 100644 sysdeps/microblaze/nptl/thread_pointer.h
> create mode 100644 sysdeps/nptl/thread_pointer.h
> create mode 100644 sysdeps/powerpc/nptl/thread_pointer.h
> create mode 100644 sysdeps/sparc/nptl/thread_pointer.h
> create mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/arm/bits/rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/bits/rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/mips/bits/rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/rseq-internal.h
> create mode 100644 sysdeps/unix/sysv/linux/s390/bits/rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/sys/rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/tst-rseq-disable.c
> create mode 100644 sysdeps/unix/sysv/linux/tst-rseq-nptl.c
> create mode 100644 sysdeps/unix/sysv/linux/tst-rseq.c
> create mode 100644 sysdeps/unix/sysv/linux/tst-rseq.h
> create mode 100644 sysdeps/unix/sysv/linux/x86/bits/rseq.h
> create mode 100644 sysdeps/x86/nptl/thread_pointer.h
> 
> 
> base-commit: 68007900beef12000ed90f38c251eaf32fbc0490
> --
> 2.33.1