Fix PR78294 - thread sanitizer broken when using ld.gold
authorMarkus Trippelsdorf <markus@trippelsdorf.de>
Wed, 16 Nov 2016 11:21:42 +0000 (11:21 +0000)
committerMarkus Trippelsdorf <trippels@gcc.gnu.org>
Wed, 16 Nov 2016 11:21:42 +0000 (11:21 +0000)
commit8c32ae0e6df1c4dbd2eea98bc56b401d492e8f54
treec9e26a39979be67a36918635a65bd47730002ee0
parent949cc52d0c99dd5fde0c48d9853e25ca55a73193
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.

From-SVN: r242480
libsanitizer/ChangeLog
libsanitizer/tsan/tsan_rtl.cc