aboutsummaryrefslogtreecommitdiff
path: root/libphobos/libdruntime
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2019-04-25 15:31:35 +0000
committerIain Buclaw <ibuclaw@gcc.gnu.org>2019-04-25 15:31:35 +0000
commit9125dc3292822c748b1d866ea2d78e00708d5df6 (patch)
tree3168084ac2a7b9b2987f6195e7252b929f3123c6 /libphobos/libdruntime
parentaeec4861c41eb5afa5b0700103e6cc404047cc6d (diff)
downloadgcc-9125dc3292822c748b1d866ea2d78e00708d5df6.zip
gcc-9125dc3292822c748b1d866ea2d78e00708d5df6.tar.gz
gcc-9125dc3292822c748b1d866ea2d78e00708d5df6.tar.bz2
libphobos: Fix segfault in runtime caused by unexpected GC of TLS data.
libphobos/ChangeLog: 2019-04-25 Iain Buclaw <ibuclaw@gdcproject.org> PR d/90250 * libdruntime/gcc/sections/elf_shared.d (initTLSRanges): Populate _tlsRanges in every startup thread. * testsuite/libphobos.thread/thread.exp: Load libphobos-dg.exp. * testsuite/libphobos.thread/tlsgc_sections.d: New test. From-SVN: r270576
Diffstat (limited to 'libphobos/libdruntime')
-rw-r--r--libphobos/libdruntime/gcc/sections/elf_shared.d8
1 files changed, 7 insertions, 1 deletions
diff --git a/libphobos/libdruntime/gcc/sections/elf_shared.d b/libphobos/libdruntime/gcc/sections/elf_shared.d
index 3a2c85c..1eafecd 100644
--- a/libphobos/libdruntime/gcc/sections/elf_shared.d
+++ b/libphobos/libdruntime/gcc/sections/elf_shared.d
@@ -308,7 +308,13 @@ else
*/
Array!(void[])* initTLSRanges() nothrow @nogc
{
- return &_tlsRanges();
+ auto rngs = &_tlsRanges();
+ if (rngs.empty)
+ {
+ foreach (ref pdso; _loadedDSOs)
+ rngs.insertBack(pdso.tlsRange());
+ }
+ return rngs;
}
void finiTLSRanges(Array!(void[])* rngs) nothrow @nogc