This is the mail system at host fx306.security-mail.net.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The mail system
<mpoulhies@kalray.eu>: host zimbra2.kalray.eu[195.135.97.26] said: 550 5.1.1
<mpoulhies@kalray.eu>: Recipient address rejected: User unknown in virtual
mailbox table (in reply to RCPT TO command)
TLSDESC is the default on aarch64. Clang doesn't support
-mtls-dialect=trad. Its integrated assembler doesn't support the
marker. LLD's doesn't support R_AARCH64_TLSGD_*/R_AARCH64_TLSLD_*
relocations. Just skip the tests.
With https://sourceware.org/pipermail/libc-alpha/2021-August/129966.html
("aarch64: Make elf_machine_{load_address, dynamic} robust [BZ #28203]"),
if we allow LLD in configure.ac,
`make check` test results of LLD are on par with GNU ld.
---
config.h.in | 3 +++
elf/tst-tls1.c | 7 +++++--
elf/tst-tls2.c | 6 ++++--
elf/tst-tls3.c | 8 ++++----
elf/tst-tlsmod1.c | 6 ++++--
elf/tst-tlsmod2.c | 4 +++-
elf/tst-tlsmod3.c | 5 ++++-
elf/tst-tlsmod4.c | 4 +++-
sysdeps/aarch64/configure | 30 ++++++++++++++++++++++++++++++
sysdeps/aarch64/configure.ac | 18 ++++++++++++++++++
10 files changed, 78 insertions(+), 13 deletions(-)
@@ -198,6 +198,9 @@
/* Define if CC supports attribute retain. */
#undef HAVE_GNU_RETAIN
+/* Define if CC and LD support traditional TLS GD/LD models. */
+#define HAVE_TRAD_TLS 1
+
/* Define to 1 if the assembler needs intermediate aliases to define
multiple symbol versions for one symbol. */
#define SYMVER_NEEDS_ALIAS 0
@@ -39,7 +39,8 @@ do_test (void)
result = 1;
}
-
+ /* Clang and LLD do not support traditional GD/LD TLS on aarch64. */
+#ifdef HAVE_TRAD_TLS
/* Get variables using local dynamic model. */
fputs ("get sum of foo and bar (LD)", stdout);
ap = TLS_LD (foo);
@@ -56,8 +57,9 @@ do_test (void)
printf ("bar = %d\n", *bp);
result = 1;
}
+#endif
-
+#ifdef HAVE_TRAD_TLS
/* Get variables using generic dynamic model. */
fputs ("get sum of foo and bar (GD)", stdout);
ap = TLS_GD (foo);
@@ -74,6 +76,7 @@ do_test (void)
printf ("bar = %d\n", *bp);
result = 1;
}
+#endif
return result;
}
@@ -39,7 +39,7 @@ do_test (void)
result = 1;
}
-
+#ifdef HAVE_TRAD_TLS
/* Get variables using local dynamic model. */
fputs ("get sum of foo and bar (LD)", stdout);
ap = TLS_LD (foo);
@@ -56,8 +56,9 @@ do_test (void)
printf ("bar = %d\n", *bp);
result = 1;
}
+#endif
-
+#ifdef HAVE_TRAD_TLS
/* Get variables using generic dynamic model. */
fputs ("get sum of foo and bar (GD)", stdout);
ap = TLS_GD (foo);
@@ -74,6 +75,7 @@ do_test (void)
printf ("bar = %d\n", *bp);
result = 1;
}
+#endif
return result;
}
@@ -17,8 +17,7 @@ static int
do_test (void)
{
int result = 0;
- int *ap, *bp, *cp;
-
+ int *ap, *bp;
/* Set the variable using the local exec model. */
puts ("set baz to 3 (LE)");
@@ -33,7 +32,8 @@ do_test (void)
bp = TLS_IE (bar);
*bp = 2;
-
+#ifdef HAVE_TRAD_TLS
+ int *cp;
/* Get variables using local dynamic model. */
fputs ("get sum of foo, bar (GD) and baz (LD)", stdout);
ap = TLS_GD (foo);
@@ -56,7 +56,7 @@ do_test (void)
printf ("baz = %d\n", *cp);
result = 1;
}
-
+#endif
result |= in_dso ();
@@ -14,7 +14,7 @@ int
in_dso (void)
{
int result = 0;
- int *ap, *bp, *cp;
+ int *ap, *bp;
/* Get variables using initial exec model. */
fputs ("get sum of foo and bar (IE)", stdout);
@@ -34,7 +34,8 @@ in_dso (void)
result = 1;
}
-
+#ifdef HAVE_TRAD_TLS
+ int *cp;
/* Get variables using generic dynamic model. */
fputs ("get sum of foo and bar and baz (GD)", stdout);
ap = TLS_GD (foo);
@@ -57,6 +58,7 @@ in_dso (void)
printf ("baz = %d\n", *cp);
result = 1;
}
+#endif
return result;
}
@@ -9,9 +9,10 @@ COMMON_INT_DEF(foo);
int
in_dso (int n, int *caller_foop)
{
- int *foop;
int result = 0;
+#ifdef HAVE_TRAD_TLS
+ int *foop;
puts ("foo"); /* Make sure PLT is used before macros. */
asm ("" ::: "memory");
@@ -29,6 +30,7 @@ in_dso (int n, int *caller_foop)
}
*foop = 16;
+#endif
return result;
}
@@ -12,8 +12,10 @@ COMMON_INT_DEF(comm_n);
int
in_dso2 (void)
{
- int *foop;
int result = 0;
+
+#ifdef HAVE_TRAD_TLS
+ int *foop;
static int n;
int *np;
@@ -32,6 +34,7 @@ in_dso2 (void)
result |= in_dso (*foop = 42 + n++, foop);
*foop = 16;
+#endif
return result;
}
@@ -9,9 +9,10 @@ COMMON_INT_DEF(baz);
int
in_dso (int n, int *caller_bazp)
{
- int *bazp;
int result = 0;
+#ifdef HAVE_TRAD_TLS
+ int *bazp;
puts ("foo"); /* Make sure PLT is used before macros. */
asm ("" ::: "memory");
@@ -29,6 +30,7 @@ in_dso (int n, int *caller_bazp)
}
*bazp = 16;
+#endif
return result;
}
@@ -332,3 +332,33 @@ if test $libc_cv_aarch64_sve_asm = yes; then
$as_echo "#define HAVE_AARCH64_SVE_ASM 1" >>confdefs.h
fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mtls-dialect=trad" >&5
+$as_echo_n "checking for -mtls-dialect=trad... " >&6; }
+if ${libc_cv_aarch64_trad_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.c <<EOF
+extern __thread int i;
+void foo (void) { i = 10; }
+EOF
+ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIC
+ -mtls-dialect=trad -shared -o conftest.so conftest.c'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+ libc_cv_aarch64_trad_tls=yes
+ else
+ libc_cv_aarch64_trad_tls=no
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_trad_tls" >&5
+$as_echo "$libc_cv_aarch64_trad_tls" >&6; }
+if test $libc_cv_aarch64_trad_tls = no; then
+ $as_echo "#define HAVE_TRAD_TLS 0" >>confdefs.h
+
+fi
@@ -105,3 +105,21 @@ rm -f conftest*])
if test $libc_cv_aarch64_sve_asm = yes; then
AC_DEFINE(HAVE_AARCH64_SVE_ASM)
fi
+
+# Check if both CC and LD support traditional TLS GD/LD models.
+AC_CACHE_CHECK([for -mtls-dialect=trad], libc_cv_aarch64_trad_tls, [dnl
+cat > conftest.c <<EOF
+extern __thread int i;
+void foo (void) { i = 10; }
+EOF
+ if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIC
+ -mtls-dialect=trad -shared -o conftest.so conftest.c])
+ then
+ libc_cv_aarch64_trad_tls=yes
+ else
+ libc_cv_aarch64_trad_tls=no
+ fi
+ rm -f conftest*])
+if test $libc_cv_aarch64_trad_tls = no; then
+ AC_DEFINE(HAVE_TRAD_TLS, 0)
+fi