glibc/elf
Szabolcs Nagy ffb17e7ba3 rtld: Avoid using up static TLS surplus for optimizations [BZ #25051]
On some targets static TLS surplus area can be used opportunistically
for dynamically loaded modules such that the TLS access then becomes
faster (TLSDESC and powerpc TLS optimization). However we don't want
all surplus TLS to be used for this optimization because dynamically
loaded modules with initial-exec model TLS can only use surplus TLS.

The new contract for surplus static TLS use is:

- libc.so can have up to 192 bytes of IE TLS,
- other system libraries together can have up to 144 bytes of IE TLS.
- Some "optional" static TLS is available for opportunistic use.

The optional TLS is now tunable: rtld.optional_static_tls, so users
can directly affect the allocated static TLS size. (Note that module
unloading with dlclose does not reclaim static TLS. After the optional
TLS runs out, TLS access is no longer optimized to use static TLS.)

The default setting of rtld.optional_static_tls is 512 so the surplus
TLS is 3*192 + 4*144 + 512 = 1664 by default, the same as before.

Fixes BZ #25051.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-07-08 17:32:56 +01:00
..
tst-ldconfig-bad-aux-cache.root
tst-ldconfig-ld_so_conf-update.root
cache.c
chroot_canon.c
circleload1.c
circlemod1.c
circlemod1a.c
circlemod2.c
circlemod2a.c
circlemod3.c
circlemod3a.c
constload1.c
constload2.c
constload3.c
dblload.c
dblloadmod1.c
dblloadmod2.c
dblloadmod3.c
dblunload.c
dep1.c
dep2.c
dep3.c
dep4.c
dl-addr-obj.c
dl-addr.c
dl-brk.c
dl-cache.c ld.so: Check for new cache format first and enhance corruption check 2020-06-15 09:50:14 +02:00
dl-call-libc-early-init.c elf: Add initial flag argument to __libc_early_init 2020-04-29 15:44:03 +02:00
dl-close.c elf: Do not signal LA_ACT_CONSISTENT for an empty namespace [BZ #26076] 2020-07-07 09:58:45 +02:00
dl-conflict.c
dl-debug.c
dl-deps.c elf: Fix wrong indentation from commit eb447b7b4b 2020-03-10 16:11:29 -03:00
dl-dst.h
dl-environ.c
dl-error-minimal.c
dl-error-skeleton.c
dl-error.c
dl-exception.c
dl-execstack.c
dl-fini.c
dl-fptr.c
dl-hwcaps.c elf: Do not read hwcaps from the vDSO in ld.so 2020-05-28 10:20:57 +02:00
dl-hwcaps.h
dl-init.c elf: Assert that objects are relocated before their constructors run 2020-05-18 15:30:09 +02:00
dl-iteratephdr.c
dl-libc.c
dl-load.c rtld: Clean up PT_NOTE and add PT_GNU_PROPERTY handling 2020-07-08 14:28:53 +01:00
dl-load.h
dl-lookup-direct.c elf: Implement __libc_early_init 2020-04-24 22:32:09 +02:00
dl-lookup.c elf: Introduce <elf_machine_sym_no_match.h> 2020-04-24 22:13:03 +02:00
dl-machine-reject-phdr.h
dl-map-segments.h
dl-minimal.c
dl-misc.c Add "%d" support to _dl_debug_vdprintf 2020-06-09 12:15:01 -07:00
dl-object.c
dl-open.c elf: Remove redundant add_to_global_resize_failure call from dl_open_args 2020-05-12 19:06:18 +02:00
dl-origin.c
dl-profile.c
dl-profstub.c
dl-reloc-static-pie.c
dl-reloc.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
dl-runtime.c dl-runtime: reloc_{offset,index} now functions arch overide'able 2020-06-05 13:45:46 -07:00
dl-runtime.h dl-runtime: reloc_{offset,index} now functions arch overide'able 2020-06-05 13:45:46 -07:00
dl-sbrk.c
dl-scope.c
dl-sort-maps.c
dl-support.c
dl-sym-post.h
dl-sym.c
dl-symaddr.c
dl-sysdep-open.h
dl-sysdep.c
dl-tls.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
dl-trampoline.c
dl-tunable-types.h
dl-tunables.c Replace val with __val in TUNABLE_SET_VAL_IF_VALID_RANGE 2020-06-04 14:01:14 -07:00
dl-tunables.h elf: Include <stdbool.h> in <dl-tunables.h> because bool is used 2020-06-24 11:02:34 +02:00
dl-tunables.list rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
dl-unmap-segments.h
dl-version.c
dl-writev.h
do-rel.h
dynamic-link.h rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
elf.h elf.h: add aarch64 property definitions 2020-05-21 09:55:43 +01:00
enbl-secure.c
failobj.c
filter.c
filtmod1.c
filtmod2.c
firstobj.c
gen-trusted-dirs.awk
genrtldtbl.awk
get-dynamic-info.h
global.c
globalmod1.c
ifuncdep1.c
ifuncdep1pic.c
ifuncdep2.c
ifuncdep2pic.c
ifuncdep5.c
ifuncdep5pic.c
ifuncmain1.c
ifuncmain1pic.c
ifuncmain1picstatic.c
ifuncmain1pie.c
ifuncmain1static.c
ifuncmain1staticpic.c
ifuncmain1staticpie.c
ifuncmain1vis.c
ifuncmain1vispic.c
ifuncmain1vispie.c
ifuncmain2.c
ifuncmain2pic.c
ifuncmain2picstatic.c
ifuncmain2static.c
ifuncmain3.c
ifuncmain4.c
ifuncmain4picstatic.c
ifuncmain4static.c
ifuncmain5.c
ifuncmain5pic.c
ifuncmain5picstatic.c
ifuncmain5pie.c
ifuncmain5static.c
ifuncmain5staticpic.c
ifuncmain6pie.c
ifuncmain7.c
ifuncmain7pic.c
ifuncmain7picstatic.c
ifuncmain7pie.c
ifuncmain7static.c
ifuncmain9.c
ifuncmain9pic.c
ifuncmain9picstatic.c
ifuncmain9pie.c
ifuncmain9static.c
ifuncmod1.c
ifuncmod3.c
ifuncmod5.c
ifuncmod6.c
initfirst.c
interp.c
lateglobal.c
ldconfig.c elf: Remove extra hwcap mechanism from ldconfig 2020-05-28 10:21:17 +02:00
ldd.bash.in
libc_early_init.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
libc-early-init.h elf: Add initial flag argument to __libc_early_init 2020-04-29 15:44:03 +02:00
link.h
loadfail.c
loadtest.c
ltglobmod1.c
ltglobmod2.c
Makefile rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
multiload.c
neededobj1.c
neededobj2.c
neededobj3.c
neededobj4.c
neededobj5.c
neededobj6.c
neededtest2.c
neededtest3.c
neededtest4.c
neededtest.c
next.c
nextmod1.c
nextmod2.c
nodel2mod1.c
nodel2mod2.c
nodel2mod3.c
nodelete2.c
nodelete.c
nodelmod1.c
nodelmod2.c
nodelmod3.c
nodelmod4.c
nodlopen2.c
nodlopen.c
nodlopenmod2.c
nodlopenmod.c
noload.c
order2.c
order2mod1.c
order2mod2.c
order2mod3.c
order2mod4.c
order.c
origtest.c
pathoptobj.c
pldd-xx.c
pldd.c
preloadtest.c
readelflib.c
readlib.c
reldep2.c
reldep3.c
reldep4.c
reldep4mod1.c
reldep4mod2.c
reldep4mod3.c
reldep4mod4.c
reldep5.c
reldep6.c
reldep6mod0.c
reldep6mod1.c
reldep6mod2.c
reldep6mod3.c
reldep6mod4.c
reldep7.c
reldep7mod1.c
reldep7mod2.c
reldep8.c
reldep8mod1.c
reldep8mod2.c
reldep8mod3.c
reldep9.c
reldep9mod1.c
reldep9mod2.c
reldep9mod3.c
reldep.c
reldepmod1.c
reldepmod2.c
reldepmod3.c
reldepmod4.c
reldepmod5.c
reldepmod6.c
resolvfail.c
restest1.c
restest2.c
rtld-debugger-interface.txt
rtld-Rules
rtld.c rtld: Account static TLS surplus for audit modules 2020-07-08 17:32:56 +01:00
setup-vdso.h
sln.c
sofini.c Remove NO_CTORS_DTORS_SECTIONS macro 2020-05-18 15:39:34 +02:00
sotruss-lib.c
sotruss.sh
sprof.c
static-stubs.c
testobj1_1.c
testobj1.c
testobj2.c
testobj3.c
testobj4.c
testobj5.c
testobj6.c
testobj.h
tls-macros.h
tlsdeschtab.h
tst-_dl_addr_inside_object.c
tst-absolute-sym-lib.c
tst-absolute-sym-lib.lds
tst-absolute-sym.c
tst-absolute-zero-lib.c
tst-absolute-zero-lib.lds
tst-absolute-zero.c
tst-addr1.c Rename __LONG_DOUBLE_USES_FLOAT128 to __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 2020-04-30 08:52:08 -05:00
tst-align2.c
tst-align.c
tst-alignmod2.c
tst-alignmod.c
tst-array1-static.c
tst-array1.c
tst-array1.exp
tst-array2.c
tst-array2.exp
tst-array2dep.c
tst-array3.c
tst-array4.c
tst-array4.exp
tst-array5-static.c
tst-array5-static.exp
tst-array5.c
tst-array5.exp
tst-array5dep.c
tst-audit1.c
tst-audit2.c
tst-audit8.c
tst-audit9.c
tst-audit11.c
tst-audit11mod1.c
tst-audit11mod2.c
tst-audit11mod2.map
tst-audit12.c
tst-audit12mod1.c
tst-audit12mod2.c
tst-audit12mod2.map
tst-audit12mod3.c
tst-audit13.c
tst-audit13mod1.c
tst-audit14.c elf: Implement DT_AUDIT, DT_DEPAUDIT support [BZ #24943] 2020-04-03 16:26:10 +02:00
tst-audit15.c elf: Implement DT_AUDIT, DT_DEPAUDIT support [BZ #24943] 2020-04-03 16:26:10 +02:00
tst-audit16.c elf: Implement DT_AUDIT, DT_DEPAUDIT support [BZ #24943] 2020-04-03 16:26:10 +02:00
tst-auditlogmod-1.c elf: Implement DT_AUDIT, DT_DEPAUDIT support [BZ #24943] 2020-04-03 16:26:10 +02:00
tst-auditlogmod-2.c elf: Implement DT_AUDIT, DT_DEPAUDIT support [BZ #24943] 2020-04-03 16:26:10 +02:00
tst-auditlogmod-3.c elf: Implement DT_AUDIT, DT_DEPAUDIT support [BZ #24943] 2020-04-03 16:26:10 +02:00
tst-auditmany.c
tst-auditmanymod1.c
tst-auditmanymod2.c
tst-auditmanymod3.c
tst-auditmanymod4.c
tst-auditmanymod5.c
tst-auditmanymod6.c
tst-auditmanymod7.c
tst-auditmanymod8.c
tst-auditmanymod9.c
tst-auditmanymod.h
tst-auditmod1.c
tst-auditmod9a.c
tst-auditmod9b.c
tst-auditmod11.c
tst-auditmod12.c
tst-auxobj-dlopen.c
tst-auxobj.c
tst-auxv.c
tst-big-note-lib.S
tst-big-note.c
tst-create_format1.c
tst-debug1.c
tst-deep1.c
tst-deep1mod1.c
tst-deep1mod2.c
tst-deep1mod3.c
tst-dl-iter-static.c
tst-dlmodcount.c
tst-dlmopen1.c
tst-dlmopen1mod.c
tst-dlmopen2.c
tst-dlmopen3.c
tst-dlopen-nodelete-reloc-mod1.c
tst-dlopen-nodelete-reloc-mod2.c
tst-dlopen-nodelete-reloc-mod3.c
tst-dlopen-nodelete-reloc-mod4.c
tst-dlopen-nodelete-reloc-mod5.c
tst-dlopen-nodelete-reloc-mod6.cc
tst-dlopen-nodelete-reloc-mod7.cc
tst-dlopen-nodelete-reloc-mod8.c
tst-dlopen-nodelete-reloc-mod9.cc
tst-dlopen-nodelete-reloc-mod10.c
tst-dlopen-nodelete-reloc-mod11.cc
tst-dlopen-nodelete-reloc-mod12.cc
tst-dlopen-nodelete-reloc-mod13.cc
tst-dlopen-nodelete-reloc-mod13.h
tst-dlopen-nodelete-reloc-mod14.cc
tst-dlopen-nodelete-reloc-mod15.cc
tst-dlopen-nodelete-reloc-mod16.c
tst-dlopen-nodelete-reloc-mod17.c
tst-dlopen-nodelete-reloc.c
tst-dlopen-nodelete-reloc.h
tst-dlopen-pie.c
tst-dlopen-self-container.c
tst-dlopen-self-pie.c
tst-dlopen-self.c
tst-dlopen-tlsmodid-container.c
tst-dlopen-tlsmodid-pie.c
tst-dlopen-tlsmodid.c
tst-dlopen-tlsmodid.h
tst-dlopenfail-2.c
tst-dlopenfail.c
tst-dlopenfaillinkmod.c
tst-dlopenfailmod1.c
tst-dlopenfailmod2.c
tst-dlopenfailmod3.c
tst-dlopenrpath.c
tst-dlopenrpathmod.c
tst-dlsym-error.c
tst-env-setuid-tunables.c
tst-env-setuid.c
tst-execstack-mod.c
tst-execstack-needed.c
tst-execstack-prog.c
tst-execstack.c
tst-filterobj-aux.c
tst-filterobj-dlopen.c
tst-filterobj-filtee.c
tst-filterobj-filtee.h
tst-filterobj-flt.c
tst-filterobj.c
tst-finilazyfailmod.c
tst-global1.c
tst-gnu2-tls1.c
tst-gnu2-tls1mod.c
tst-ifunc-fault-bindnow.c
tst-ifunc-fault-lazy.c
tst-ifunc-textrel.c
tst-initfinilazyfail.c
tst-initlazyfailmod.c
tst-initorder2.c
tst-initorder2.exp
tst-initorder.c
tst-initorder.exp
tst-initordera1.c
tst-initordera2.c
tst-initordera3.c
tst-initordera4.c
tst-initorderb1.c
tst-initorderb2.c
tst-latepthread.c
tst-latepthreadmod.c
tst-ldconfig-bad-aux-cache.c
tst-ldconfig-ld_so_conf-update.c
tst-ldconfig-ld-mod.c
tst-ldconfig-X.sh
tst-leaks1-static.c
tst-leaks1.c
tst-libc_dlvsym-dso.c
tst-libc_dlvsym-static.c
tst-libc_dlvsym.c
tst-libc_dlvsym.h
tst-linkall-static.c
tst-main1.c
tst-main1mod.c
tst-nodelete2.c
tst-nodelete2mod.c
tst-nodelete-dlclose-dso.c
tst-nodelete-dlclose-plugin.c
tst-nodelete-dlclose.c
tst-nodelete-opened-lib.c
tst-nodelete-opened.c
tst-nodelete-rtldmod.cc
tst-nodelete-uniquemod.cc
tst-nodelete-zmod.cc
tst-nodelete.cc
tst-noload.c
tst-null-argv-lib.c
tst-null-argv.c
tst-order-a1.c
tst-order-a2.c
tst-order-a3.c
tst-order-a4.c
tst-order-b1.c
tst-order-b2.c
tst-order-main.c
tst-pathopt.c
tst-pathopt.sh
tst-pie1.c
tst-pie2.c
tst-piemod1.c
tst-pldd.c
tst-prelink.c
tst-prelink.exp
tst-protected1a.c
tst-protected1b.c
tst-protected1mod.h
tst-protected1moda.c
tst-protected1modb.c
tst-ptrguard1-static.c
tst-ptrguard1.c
tst-relsort1.c
tst-relsort1mod1.c
tst-relsort1mod2.c
tst-rtld-load-self.sh
tst-rtld-preload.sh
tst-single_threaded-mod1.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded-mod2.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded-mod3.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded-mod4.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded-pthread-static.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded-pthread.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded-static-dlopen.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded-static.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-single_threaded.c Add the __libc_single_threaded variable 2020-07-06 11:15:58 +02:00
tst-sonamemove-dlopen.c
tst-sonamemove-link.c
tst-sonamemove-linkmod1.c
tst-sonamemove-linkmod1.map
tst-sonamemove-runmod1.c
tst-sonamemove-runmod1.map
tst-sonamemove-runmod2.c
tst-sonamemove-runmod2.map
tst-stackguard1-static.c
tst-stackguard1.c
tst-thrlock.c
tst-tls1-static-non-pie.c
tst-tls1-static.c
tst-tls1.c
tst-tls2-static.c
tst-tls2.c
tst-tls3.c
tst-tls4.c
tst-tls5.c
tst-tls6.c
tst-tls7.c
tst-tls8.c
tst-tls9-static.c
tst-tls9.c
tst-tls10.c
tst-tls10.h
tst-tls11.c
tst-tls12.c
tst-tls13.c
tst-tls14.c
tst-tls15.c
tst-tls16.c
tst-tls17.c
tst-tls18.c
tst-tls19.c
tst-tls19mod1.c
tst-tls19mod2.c
tst-tls19mod3.c
tst-tls-dlinfo.c
tst-tls-ie-dlmopen.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod0.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod1.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod2.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod3.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod4.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod5.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod6.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie-mod.h rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-ie.c rtld: Avoid using up static TLS surplus for optimizations [BZ #25051] 2020-07-08 17:32:56 +01:00
tst-tls-manydynamic.c
tst-tls-manydynamic.h
tst-tls-manydynamicmod.c
tst-tlsalign-extern-static.c
tst-tlsalign-extern.c
tst-tlsalign-lib.c
tst-tlsalign-static.c
tst-tlsalign-vars.c
tst-tlsalign.c
tst-tlsmod1.c
tst-tlsmod2.c
tst-tlsmod3.c
tst-tlsmod4.c
tst-tlsmod5.c
tst-tlsmod6.c
tst-tlsmod7.c
tst-tlsmod8.c
tst-tlsmod9.c
tst-tlsmod10.c
tst-tlsmod11.c
tst-tlsmod12.c
tst-tlsmod13.c
tst-tlsmod13a.c
tst-tlsmod14a.c
tst-tlsmod14b.c
tst-tlsmod15a.c
tst-tlsmod15b.c
tst-tlsmod16a.c
tst-tlsmod16b.c
tst-tlsmod17a.c
tst-tlsmod17b.c
tst-tlsmod18a.c
tst-unique1.c
tst-unique1mod1.c
tst-unique1mod2.c
tst-unique2.c
tst-unique2mod1.c
tst-unique2mod2.c
tst-unique3.cc
tst-unique3.h
tst-unique3lib2.cc
tst-unique3lib.cc
tst-unique4.cc
tst-unique4.h
tst-unique4lib.cc
tst-unwind-ctor-lib.c
tst-unwind-ctor.c
tst-unwind-main.c
unload2.c
unload2dep.c
unload2mod.c
unload3.c
unload3mod1.c
unload3mod2.c
unload3mod3.c
unload3mod4.c
unload4.c
unload4mod1.c
unload4mod2.c
unload4mod3.c
unload4mod4.c
unload5.c
unload6.c
unload6mod1.c
unload6mod2.c
unload6mod3.c
unload7.c
unload7mod1.c
unload7mod2.c
unload8.c
unload8mod1.c
unload8mod1x.c
unload8mod2.c
unload8mod3.c
unload.c
unloadmod.c
Versions elf: Turn _dl_printf, _dl_error_printf, _dl_fatal_printf into functions 2020-05-25 18:17:27 +02:00
vismain.c
vismod1.c
vismod2.c
vismod3.c
vismod.h