git: rtld: increase TLS storage space (bug 2566)
marino at crater.dragonflybsd.org
Tue Jun 11 04:55:31 PDT 2013
Author: John Marino <draco at marino.st>
Date: Tue Jun 11 13:11:21 2013 +0200
rtld: increase TLS storage space (bug 2566)
It appears that the TLS storage space, which is currently defined as 256
bytes on both platforms, is insufficient to handle libc TLS data.
Due to nmalloc setting of the thr_mags structure as Thread Local Storage,
the TLS elf section of x86-64 libc is 1172 bytes, while the i386 libc TLS
section weighs in at 588 bytes. For comparison, the FreeBSD libc TLS
section is 17 bytes, and FreeBSD rtld only reserves 128 bytes for TLS.
The requirements for dmalloc are more modest, so this shortfall was likely
an unintended side-effect of switching from dmalloc back to nmalloc.
This commit sets the reserved TLS space to 1280 bytes for x86-64 and 640
bytes for i386. This should allow 3.4 packages to continue to work on
the latest 3.5 branch as long as libc.so.7 is present. For world upgrades
this is the normal case, but the libraries can be obtained by installing
misc/compat34x from dports as well.
Even if the libc TLS space requirements drop significantly, the large
RTLD_STATIC_TLS_EXTRA value needs to be maintained as long as
compatibility with old libc (3.4 and earlier) libraries is required.
Summary of changes:
sys/cpu/i386/include/tls.h | 2 +-
sys/cpu/x86_64/include/tls.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
DragonFly BSD source repository
More information about the Commits