glibc/sysdeps/generic
Szabolcs Nagy 7772f9358c elf: Fix slow tls access after dlopen [BZ #19924]
In short: __tls_get_addr checks the global generation counter and if
the current dtv is older then _dl_update_slotinfo updates dtv up to the
generation of the accessed module. So if the global generation is newer
than generation of the module then __tls_get_addr keeps hitting the
slow dtv update path. The dtv update path includes a number of checks
to see if any update is needed and this already causes measurable tls
access slow down after dlopen.

It may be possible to detect up-to-date dtv faster.  But if there are
many modules loaded (> TLS_SLOTINFO_SURPLUS) then this requires at
least walking the slotinfo list.

This patch tries to update the dtv to the global generation instead, so
after a dlopen the tls access slow path is only hit once.  The modules
with larger generation than the accessed one were not necessarily
synchronized before, so additional synchronization is needed.

This patch uses acquire/release synchronization when accessing the
generation counter.

Note: in the x86_64 version of dl-tls.c the generation is only loaded
once, since relaxed mo is not faster than acquire mo load.

I have not benchmarked this. Tested by Adhemerval Zanella on aarch64,
powerpc, sparc, x86 who reported that it fixes the performance issue
of bug 19924.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
(cherry picked from commit d2123d6827)
2025-01-09 07:31:25 -08:00
..
net Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
netinet Add voice-admit DSCP code point from RFC-5865 2023-05-22 22:13:41 +02:00
nfs Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
sys Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
Makefile Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
_G_config.h
_itoa.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
a.out.h
abort-instr.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
adaptive_spin_count.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
aio_misc.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
allocalim.h
arch-fd_to_filename.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
asm-syntax.h
atomic-machine.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
c++-types.data
confstr.h
crti.S
crtn.S
device-nrs.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dirstream.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-audit-check.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-auxv.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-cache.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-call_tls_init_tp.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-debug.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-dtprocnum.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-dtv.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-execve.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-fcntl.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-fileid.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-fixup-attribute.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-fptr.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-hash.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-hwcap-check.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-irel.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-isa-level.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-lookupcfg.h sparc: Fix la_symbind for bind-now (BZ 23734) 2023-07-12 15:29:08 -03:00
dl-machine-rel.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-machine.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-minimal-malloc.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-mman.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-new-hash.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-osinfo.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-procinfo.c
dl-procinfo.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-procruntime.c
dl-prop.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-protected.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-r_debug.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-relocate-ld.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-symbol-redir-ifunc.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-sysdep.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-tls.h
dl-unistd.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-vdso-setup.c
dl-vdso-setup.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-vdso.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dwarf2.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
elf-initfini.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
elf-read-prop.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
elf_machine_sym_no_match.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
elide.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
eloop-threshold.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
entry.h
errqueue.h
fast-jitter.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fd_to_filename.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
features-time64.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fenv_private.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fips-private.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fix-float-double-convert-nan.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fix-fp-int-compare-invalid.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fix-fp-int-convert-overflow.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fix-int-fp-convert-zero.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
float128-abi.h
fork.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
fpu_control.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
framestate.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
gcc-compat.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
gccframe.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
get-rounding-mode.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
gmp-mparam.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
hp-timing-common.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
hp-timing.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ifreq.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ifunc-init.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ifunc-sel.h
internal-signals.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
intr-msg.h
ld.abilist
ldbl-classify-compat.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ldconfig.h LoongArch: Add support for ldconfig. 2023-03-13 09:20:28 +08:00
ldsodefs.h elf: Fix slow tls access after dlopen [BZ #19924] 2025-01-09 07:31:25 -08:00
libBrokenLocale.abilist
libanl.abilist
libc-lock-arch.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libc-lock.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libc-mmap.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libc-mtag.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libc-start.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libc-symver.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libc-tsd.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libc.abilist
libc_malloc_debug.abilist
libc_start_call_main.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libcrypt.abilist
libdl.abilist
libm-alias-double.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libm-alias-float.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libm-alias-float128.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libm-alias-ldouble.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
libm-test-ulps
libm-test-ulps-name
libm.abilist
libnsl.abilist
libnss_compat.abilist
libnss_db.abilist
libnss_dns.abilist
libnss_files.abilist
libnss_hesiod.abilist
libnss_nis.abilist
libnss_nisplus.abilist
libpthread.abilist
libresolv.abilist
librt.abilist
libutil.abilist
link_map.h
linkmap.h
local-setxid.h
localplt.data elf: Rework exception handling in the dynamic loader [BZ #25486] 2022-11-03 09:39:31 +01:00
machine-gmon.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
machine-lock.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
machine-sp.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-alignment.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-hugepages.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-hugepages.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-machine.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-size.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-sysdep.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-barriers.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-nan-payload-double.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-nan-payload-float.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-narrow-alias-float128.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-narrow-alias.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-arch.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-exceptions.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-rounding.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-snan-cast.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-snan-payload.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-snan.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-trap-force.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests-trap.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-tests.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-type-macros-double.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-type-macros-float.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-type-macros-float128.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-type-macros-ldouble.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-type-macros.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math-use-builtins-ceil.h
math-use-builtins-copysign.h
math-use-builtins-fabs.h
math-use-builtins-floor.h
math-use-builtins-fma.h
math-use-builtins-fmax.h
math-use-builtins-fmin.h
math-use-builtins-llrint.h Use GCC builtins for llrint functions if desired. 2022-11-29 16:00:28 +08:00
math-use-builtins-logb.h Use GCC builtins for logb functions if desired. 2022-11-29 16:00:28 +08:00
math-use-builtins-lrint.h Use GCC builtins for lrint functions if desired. 2022-11-29 16:00:28 +08:00
math-use-builtins-nearbyint.h
math-use-builtins-rint.h
math-use-builtins-round.h
math-use-builtins-roundeven.h
math-use-builtins-sqrt.h
math-use-builtins-trunc.h
math-use-builtins.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
math_ldbl.h
math_ldbl_opt.h
math_private.h aarch64: Add vector implementations of cos routines 2023-06-30 09:04:10 +01:00
math_private_calls.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memcopy.h Parameterize OP_T_THRES from memcopy.h 2023-02-06 16:19:35 -03:00
mmap_info.h
mremap-failure.h Add mremap tests 2024-08-01 14:42:07 +02:00
nan-high-order-bit.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
not-cancel.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
not-errno.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
nscd-types.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
pagecopy.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
paths.h
pointer_guard.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
profil-counter.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
pty-private.h Fix typos in comments 2023-02-12 16:34:28 +01:00
rtld-lowlevel.h
rtld_static_init.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
safe-fatal.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
set-freeres-fp.h Move libc_freeres_ptrs and libc_subfreeres to hidden/weak functions 2023-03-27 13:57:55 -03:00
set-freeres-os.h Move libc_freeres_ptrs and libc_subfreeres to hidden/weak functions 2023-03-27 13:57:55 -03:00
set-freeres-system.h Move libc_freeres_ptrs and libc_subfreeres to hidden/weak functions 2023-03-27 13:57:55 -03:00
set-hooks-arch.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
setjmpP.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
sigcontextinfo.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
siglist-compat-def.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
siglist.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
sigset-cvt-mask.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
sigsetops.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
single-thread.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
spawn_int_def.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stackguard-macros.h
stackinfo.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stap-probe-machine.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
startup.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stdio-lock.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
string-fza.h Add string vectorized find and detection functions 2023-02-06 16:19:35 -03:00
string-fzb.h Add string vectorized find and detection functions 2023-02-06 16:19:35 -03:00
string-fzc.h Add string vectorized find and detection functions 2023-02-06 16:19:35 -03:00
string-fzi.h Add string vectorized find and detection functions 2023-02-06 16:19:35 -03:00
string-misc.h Add string vectorized find and detection functions 2023-02-06 16:19:35 -03:00
string-opthr.h Parameterize OP_T_THRES from memcopy.h 2023-02-06 16:19:35 -03:00
string-optype.h Parameterize op_t from memcopy.h 2023-02-06 16:19:35 -03:00
string-shift.h Add string vectorized find and detection functions 2023-02-06 16:19:35 -03:00
struct_stat_time64.h
symbol-hacks.h
sysdep-cancel.h
sysdep.h Fix misspellings in sysdeps/ -- BZ 25337 2023-05-30 23:02:29 +00:00
thread_state.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
time-clockid.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
time64-compat.h
tininess.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tls-internal-struct.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tls-internal.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tls-internal.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tls-setup.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tls.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-audit.h
tst-file-align.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-stack-align.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unsecvars.h Propagate GLIBC_TUNABLES in setxid binaries 2023-10-02 15:37:16 -04:00
unwind-arch.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind-dw2-fde-glibc.c Fix misspellings in sysdeps/ -- BZ 25337 2023-05-30 23:02:29 +00:00
unwind-dw2-fde.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind-dw2-fde.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind-dw2.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind-link.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind-pe.c
unwind-pe.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind-resume.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind-resume.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
unwind.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
utmp-equal.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
utmp-size.h login: Check default sizes of structs utmp, utmpx, lastlog 2024-04-19 18:38:23 +02:00
xstatver.h