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

Reply via email to