diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2019-04-25 15:31:35 +0000 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gcc.gnu.org> | 2019-04-25 15:31:35 +0000 |
commit | 9125dc3292822c748b1d866ea2d78e00708d5df6 (patch) | |
tree | 3168084ac2a7b9b2987f6195e7252b929f3123c6 /libphobos/libdruntime | |
parent | aeec4861c41eb5afa5b0700103e6cc404047cc6d (diff) | |
download | gcc-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.d | 8 |
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 |