]> git.ipfire.org Git - thirdparty/glibc.git/commit - elf/libc_early_init.c
Add the __libc_single_threaded variable
authorFlorian Weimer <fweimer@redhat.com>
Wed, 20 May 2020 13:40:35 +0000 (15:40 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Mon, 6 Jul 2020 09:15:58 +0000 (11:15 +0200)
commit706ad1e7af37be1d25fc2359bda006d31fe0d11b
treed06e6a96c1d319a1d27fa6b6e87cfadf8bd6ef08
parent8f4632deb3545b2949cec5454afc3cb21a0024ea
Add the __libc_single_threaded variable

The variable is placed in libc.so, and it can be true only in
an outer libc, not libcs loaded via dlmopen or static dlopen.
Since thread creation from inner namespaces does not work,
pthread_create can update __libc_single_threaded directly.

Using __libc_early_init and its initial flag, implementation of this
variable is very straightforward.  A future version may reset the flag
during fork (but not in an inner namespace), or after joining all
threads except one.

Reviewed-by: DJ Delorie <dj@redhat.com>
51 files changed:
NEWS
elf/Makefile
elf/libc_early_init.c
elf/tst-single_threaded-mod1.c [new file with mode: 0644]
elf/tst-single_threaded-mod2.c [new file with mode: 0644]
elf/tst-single_threaded-mod3.c [new file with mode: 0644]
elf/tst-single_threaded-mod4.c [new file with mode: 0644]
elf/tst-single_threaded-pthread-static.c [new file with mode: 0644]
elf/tst-single_threaded-pthread.c [new file with mode: 0644]
elf/tst-single_threaded-static-dlopen.c [new file with mode: 0644]
elf/tst-single_threaded-static.c [new file with mode: 0644]
elf/tst-single_threaded.c [new file with mode: 0644]
htl/pt-create.c
include/sys/single_threaded.h [new file with mode: 0644]
misc/Makefile
misc/Versions
misc/single_threaded.c [new file with mode: 0644]
misc/sys/single_threaded.h [new file with mode: 0644]
nptl/pthread_create.c
sysdeps/generic/libc.abilist
sysdeps/mach/hurd/i386/libc.abilist
sysdeps/unix/sysv/linux/aarch64/libc.abilist
sysdeps/unix/sysv/linux/alpha/libc.abilist
sysdeps/unix/sysv/linux/arm/be/libc.abilist
sysdeps/unix/sysv/linux/arm/le/libc.abilist
sysdeps/unix/sysv/linux/csky/libc.abilist
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/ia64/libc.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
sysdeps/unix/sysv/linux/nios2/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/sh/be/libc.abilist
sysdeps/unix/sysv/linux/sh/le/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist