On Fri, Nov 21, 2014 at 04:20:44PM +0400, Dmitry Vyukov wrote: > Yes, I think it's the way to go. > I've just committed the following revision to clang that removes -pie > when compiling with tsan: > http://llvm.org/viewvc/llvm-project?view=revision&revision=222526 > The tests in llvm tree pass with this change.
Ok, here it is. I think -static still doesn't work, for static linking symbols might not be interposed as libtsan wants, so I've changed it to match what we do for -fsanitize=address. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2014-11-26 Jakub Jelinek <ja...@redhat.com> * gcc.c (SANITIZER_SPEC): Don't error on -fsanitize=thread without -pie or -shared, error on -fsanitize=thread -static instead. * lib/tsan-dg.exp (check_effective_target_fsanitize_thread, tsan_init): Don't use -fPIE or -pie. --- gcc/gcc.c.jj 2014-11-26 11:08:51.000000000 +0100 +++ gcc/gcc.c 2014-11-26 15:59:12.034729813 +0100 @@ -794,7 +794,7 @@ proper position among the other output f %{!nostdlib:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_SPEC "\ %{static:%ecannot specify -static with -fsanitize=address}}\ %{%:sanitize(thread):" LIBTSAN_SPEC "\ - %{!pie:%{!shared:%e-fsanitize=thread linking must be done with -pie or -shared}}}\ + %{static:%ecannot specify -static with -fsanitize=thread}}\ %{%:sanitize(undefined):" LIBUBSAN_SPEC "}\ %{%:sanitize(leak):" LIBLSAN_SPEC "}}}" #endif --- gcc/testsuite/lib/tsan-dg.exp.jj 2014-10-10 19:42:16.000000000 +0200 +++ gcc/testsuite/lib/tsan-dg.exp 2014-11-26 16:02:21.663347886 +0100 @@ -18,9 +18,9 @@ # code, 0 otherwise. proc check_effective_target_fsanitize_thread {} { - return [check_no_compiler_messages fanitize_thread executable { + return [check_no_compiler_messages fsanitize_thread executable { int main (void) { return 0; } - } "-fPIE -pie -fsanitize=thread"] + } "-fsanitize=thread"] } # @@ -93,12 +93,12 @@ proc tsan_init { args } { if [info exists ALWAYS_CXXFLAGS] { set tsan_saved_ALWAYS_CXXFLAGS $ALWAYS_CXXFLAGS set ALWAYS_CXXFLAGS [concat "{ldflags=$link_flags}" $ALWAYS_CXXFLAGS] - set ALWAYS_CXXFLAGS [concat "{additional_flags=-fPIE -pie -fsanitize=thread -g}" $ALWAYS_CXXFLAGS] + set ALWAYS_CXXFLAGS [concat "{additional_flags=-fsanitize=thread -g}" $ALWAYS_CXXFLAGS] } else { if [info exists TEST_ALWAYS_FLAGS] { - set TEST_ALWAYS_FLAGS "$link_flags -fPIE -pie -fsanitize=thread -g $TEST_ALWAYS_FLAGS" + set TEST_ALWAYS_FLAGS "$link_flags -fsanitize=thread -g $TEST_ALWAYS_FLAGS" } else { - set TEST_ALWAYS_FLAGS "$link_flags -fPIE -pie -fsanitize=thread -g" + set TEST_ALWAYS_FLAGS "$link_flags -fsanitize=thread -g" } } @@ -110,7 +110,7 @@ proc tsan_init { args } { set individual_timeout 20 if [check_runtime_nocache tsan_works { int main () { return 0; } - } "-fPIE -pie -fsanitize=thread -g"] { + } "-fsanitize=thread -g"] { set dg-do-what-default run } else { set dg-do-what-default compile Jakub