Some tests have 'dg-do link' but currently require 'tls' which is a
compile-only check.

In some configurations of arm-none-eabi, the 'tls' effective-target
can be successful although these tests fail to link with
undefined reference to `__aeabi_read_tp'

This patch as a new tls_link effective target which makes sure we can
build an executable.

gcc/testsuite/ChangeLog:

        * lib/target-supports.exp (check_effective_target_tls_link): New.
        * g++.dg/tls/pr102496-1.C: Require tls_link.
        * g++.dg/tls/pr77285-1.C: Likewise.

gcc/ChangeLog:

        * doc/sourcebuild.texi (tls_link): Add documentation.
---
 gcc/doc/sourcebuild.texi              |  3 +++
 gcc/testsuite/g++.dg/tls/pr102496-1.C |  2 +-
 gcc/testsuite/g++.dg/tls/pr77285-1.C  |  2 +-
 gcc/testsuite/lib/target-supports.exp | 10 ++++++++++
 4 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 91fadc6ed01..8038e1b6af2 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1975,6 +1975,9 @@ at plain @option{-O2}.
 @item tls
 Target supports thread-local storage.
 
+@item tls_link
+Target supports linking TLS executables.
+
 @item tls_native
 Target supports native (rather than emulated) thread-local storage.
 
diff --git a/gcc/testsuite/g++.dg/tls/pr102496-1.C 
b/gcc/testsuite/g++.dg/tls/pr102496-1.C
index 8220e1e663a..e015ae95eab 100644
--- a/gcc/testsuite/g++.dg/tls/pr102496-1.C
+++ b/gcc/testsuite/g++.dg/tls/pr102496-1.C
@@ -1,6 +1,6 @@
 // PR c++/102496
 // { dg-do link { target c++11 } }
-// { dg-require-effective-target tls }
+// { dg-require-effective-target tls_link }
 // { dg-add-options tls }
 // { dg-additional-sources pr102496-2.C }
 
diff --git a/gcc/testsuite/g++.dg/tls/pr77285-1.C 
b/gcc/testsuite/g++.dg/tls/pr77285-1.C
index 7a9341429d7..340c88be77b 100644
--- a/gcc/testsuite/g++.dg/tls/pr77285-1.C
+++ b/gcc/testsuite/g++.dg/tls/pr77285-1.C
@@ -1,5 +1,5 @@
 // { dg-do link { target c++11 } }
-// { dg-require-effective-target tls }
+// { dg-require-effective-target tls_link }
 // { dg-add-options tls }
 // { dg-additional-sources pr77285-2.C }
 
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index 6286e361fed..245943b7c3f 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1092,6 +1092,16 @@ proc check_effective_target_tls {} {
     }]
 }
 
+# Return 1 if we can link using TLS, 0 otherwise.
+
+proc check_effective_target_tls_link {} {
+    return [check_no_compiler_messages tls_link executable {
+       __thread int i;
+       int main (void) { return i; }
+       void g (int j) { i = j; }
+    }]
+}
+
 # Return 1 if *native* thread local storage (TLS) is supported, 0 otherwise.
 
 proc check_effective_target_tls_native {} {
-- 
2.34.1

Reply via email to