Looks good to me. Thanks!
On Wed, Nov 26, 2014 at 10:43 PM, Jakub Jelinek <ja...@redhat.com> wrote: > 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