summaryrefslogtreecommitdiff
path: root/libsanitizer
diff options
context:
space:
mode:
authortrippels <trippels@138bc75d-0d04-0410-961f-82ee72b054a4>2016-11-16 11:21:42 +0000
committertrippels <trippels@138bc75d-0d04-0410-961f-82ee72b054a4>2016-11-16 11:21:42 +0000
commit8049d74fddd28c09e25aa7721fd7f5659d25beba (patch)
treec9e26a39979be67a36918635a65bd47730002ee0 /libsanitizer
parente800a7e0ace869295a4b0e6fda276572954b3dc1 (diff)
downloadgcc-8049d74fddd28c09e25aa7721fd7f5659d25beba.tar.gz
Fix PR78294 - thread sanitizer broken when using ld.gold
When one uses ld.gold to build gcc, the thread sanitizer doesn't work, because gold is more conservative when applying TLS relaxations than ld.bfd. In this case a missing initial-exec attribute on a declaration causes gcc to assume the general dynamic model. With ld.bfd this gets relaxed to initial exec when linking the shared library, so the missing attribute doesn't matter. But ld.gold doesn't perform this optimization and this leads to crashes on tsan instrumented binaries. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78294 and: https://sourceware.org/bugzilla/show_bug.cgi?id=20805 The fix is easy, just add the missing attribute. PR sanitizer/78294 * tsan/tsan_rtl.cc: Add missing attribute. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@242480 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libsanitizer')
-rw-r--r--libsanitizer/ChangeLog5
-rw-r--r--libsanitizer/tsan/tsan_rtl.cc1
2 files changed, 6 insertions, 0 deletions
diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog
index e56cef9c8f4..215c44465bc 100644
--- a/libsanitizer/ChangeLog
+++ b/libsanitizer/ChangeLog
@@ -1,3 +1,8 @@
+2016-11-16 Markus Trippelsdorf <markus@trippelsdorf.de>
+
+ PR sanitizer/78294
+ * tsan/tsan_rtl.cc: Add missing attribute.
+
2016-11-16 Maxim Ostapenko <m.ostapenko@samsung.com>
* LOCAL_PATCHES: New file.
diff --git a/libsanitizer/tsan/tsan_rtl.cc b/libsanitizer/tsan/tsan_rtl.cc
index 07fa165e939..5be28ce5502 100644
--- a/libsanitizer/tsan/tsan_rtl.cc
+++ b/libsanitizer/tsan/tsan_rtl.cc
@@ -43,6 +43,7 @@ extern "C" void __tsan_resume() {
namespace __tsan {
#if !SANITIZER_GO && !SANITIZER_MAC
+ __attribute__((tls_model("initial-exec")))
THREADLOCAL char cur_thread_placeholder[sizeof(ThreadState)] ALIGNED(64);
#endif
static char ctx_placeholder[sizeof(Context)] ALIGNED(64);