public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: MAILER-DAEMON (Mail Delivery System)
To: libc-alpha@sourceware.org
Subject: Undelivered Mail Returned to Sender
Date: Tue, 10 Aug 2021 23:15:35 +0200 (CEST)	[thread overview]
Message-ID: <20210810211535.1EE721B7B181@fx408.security-mail.net> (raw)

[-- Attachment #1: Notification --]
[-- Type: text/plain, Size: 593 bytes --]

This is the mail system at host fx408.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)

[-- Attachment #2: Delivery report --]
[-- Type: message/delivery-status, Size: 465 bytes --]

[-- Attachment #3: Undelivered Message --]
[-- Type: message/rfc822, Size: 14076 bytes --]

From: Fangrui Song via Libc-alpha <libc-alpha@sourceware.org>
To: libc-alpha@sourceware.org, Adhemerval Zanella <adhemerval.zanella@linaro.org>, Szabolcs Nagy <nsz@port70.net>
Subject: Re: [PATCH v2] aarch64: Skip traditional GD/LD TLS which are unsupported by Clang and LLD [BZ #28205]
Date: Tue, 10 Aug 2021 14:14:58 -0700
Message-ID: <20210810211458.oxx3t5phzt3z3sp3@google.com>

On 2021-08-10, Fangrui Song wrote:
>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.

I messed up in the diff.
The correct diff needs `#include <config.h>` to make HAVE_TRAD_TLS
defined.

---
  config.h.in                  |  3 +++
  elf/tst-tls1.c               |  8 ++++++--
  elf/tst-tls2.c               |  7 +++++--
  elf/tst-tls3.c               |  9 +++++----
  elf/tst-tlsmod1.c            |  7 +++++--
  elf/tst-tlsmod2.c            |  5 ++++-
  elf/tst-tlsmod3.c            |  6 +++++-
  elf/tst-tlsmod4.c            |  5 ++++-
  sysdeps/aarch64/configure    | 30 ++++++++++++++++++++++++++++++
  sysdeps/aarch64/configure.ac | 18 ++++++++++++++++++
  10 files changed, 85 insertions(+), 13 deletions(-)

diff --git a/config.h.in b/config.h.in
index 0d92504f65..7dcce4d3a4 100644
--- a/config.h.in
+++ b/config.h.in
@@ -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
diff --git a/elf/tst-tls1.c b/elf/tst-tls1.c
index c31da56ce9..1f102b62b7 100644
--- a/elf/tst-tls1.c
+++ b/elf/tst-tls1.c
@@ -1,4 +1,5 @@
  /* glibc test for TLS in ld.so.  */
+#include <config.h>
  #include <stdio.h>
  
  #include "tls-macros.h"
@@ -39,7 +40,8 @@ do_test (void)
        result = 1;
      }
  
-
+  /* Clang and LLD do not support traditional GD/LD TLS on aarch64. */
+#if HAVE_TRAD_TLS
    /* Get variables using local dynamic model.  */
    fputs ("get sum of foo and bar (LD)", stdout);
    ap = TLS_LD (foo);
@@ -56,8 +58,9 @@ do_test (void)
        printf ("bar = %d\n", *bp);
        result = 1;
      }
+#endif
  
-
+#if HAVE_TRAD_TLS
    /* Get variables using generic dynamic model.  */
    fputs ("get sum of foo and bar (GD)", stdout);
    ap = TLS_GD (foo);
@@ -74,6 +77,7 @@ do_test (void)
        printf ("bar = %d\n", *bp);
        result = 1;
      }
+#endif
  
    return result;
  }
diff --git a/elf/tst-tls2.c b/elf/tst-tls2.c
index 963b8d6c88..46e69b049b 100644
--- a/elf/tst-tls2.c
+++ b/elf/tst-tls2.c
@@ -1,4 +1,5 @@
  /* glibc test for TLS in ld.so.  */
+#include <config.h>
  #include <stdio.h>
  
  #include "tls-macros.h"
@@ -39,7 +40,7 @@ do_test (void)
        result = 1;
      }
  
-
+#if 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
  
-
+#if 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;
  }
diff --git a/elf/tst-tls3.c b/elf/tst-tls3.c
index 7e0abb4c58..4abdec2857 100644
--- a/elf/tst-tls3.c
+++ b/elf/tst-tls3.c
@@ -1,4 +1,5 @@
  /* glibc test for TLS in ld.so.  */
+#include <config.h>
  #include <stdio.h>
  
  #include "tls-macros.h"
@@ -17,8 +18,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 +33,8 @@ do_test (void)
    bp = TLS_IE (bar);
    *bp = 2;
  
-
+#if 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 +57,7 @@ do_test (void)
        printf ("baz = %d\n", *cp);
        result = 1;
      }
-
+#endif
  
    result |= in_dso ();
  
diff --git a/elf/tst-tlsmod1.c b/elf/tst-tlsmod1.c
index 8d9156791b..94346415c3 100644
--- a/elf/tst-tlsmod1.c
+++ b/elf/tst-tlsmod1.c
@@ -1,3 +1,4 @@
+#include <config.h>
  #include <stdio.h>
  
  #include "tls-macros.h"
@@ -14,7 +15,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 +35,8 @@ in_dso (void)
        result = 1;
      }
  
-
+#if 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 +59,7 @@ in_dso (void)
        printf ("baz = %d\n", *cp);
        result = 1;
      }
+#endif
  
    return result;
  }
diff --git a/elf/tst-tlsmod2.c b/elf/tst-tlsmod2.c
index 40eb1407f8..8028237155 100644
--- a/elf/tst-tlsmod2.c
+++ b/elf/tst-tlsmod2.c
@@ -1,3 +1,4 @@
+#include <config.h>
  #include <stdio.h>
  
  #include "tls-macros.h"
@@ -9,9 +10,10 @@ COMMON_INT_DEF(foo);
  int
  in_dso (int n, int *caller_foop)
  {
-  int *foop;
    int result = 0;
  
+#if HAVE_TRAD_TLS
+  int *foop;
    puts ("foo");			/* Make sure PLT is used before macros.  */
    asm ("" ::: "memory");
  
@@ -29,6 +31,7 @@ in_dso (int n, int *caller_foop)
      }
  
    *foop = 16;
+#endif
  
    return result;
  }
diff --git a/elf/tst-tlsmod3.c b/elf/tst-tlsmod3.c
index 6d186c47ee..d001778247 100644
--- a/elf/tst-tlsmod3.c
+++ b/elf/tst-tlsmod3.c
@@ -1,3 +1,4 @@
+#include <config.h>
  #include <stdio.h>
  
  #include "tls-macros.h"
@@ -12,8 +13,10 @@ COMMON_INT_DEF(comm_n);
  int
  in_dso2 (void)
  {
-  int *foop;
    int result = 0;
+
+#if HAVE_TRAD_TLS
+  int *foop;
    static int n;
    int *np;
  
@@ -32,6 +35,7 @@ in_dso2 (void)
    result |= in_dso (*foop = 42 + n++, foop);
  
    *foop = 16;
+#endif
  
    return result;
  }
diff --git a/elf/tst-tlsmod4.c b/elf/tst-tlsmod4.c
index 86889aac7e..a31c163ca6 100644
--- a/elf/tst-tlsmod4.c
+++ b/elf/tst-tlsmod4.c
@@ -1,3 +1,4 @@
+#include <config.h>
  #include <stdio.h>
  
  #include "tls-macros.h"
@@ -9,9 +10,10 @@ COMMON_INT_DEF(baz);
  int
  in_dso (int n, int *caller_bazp)
  {
-  int *bazp;
    int result = 0;
  
+#if HAVE_TRAD_TLS
+  int *bazp;
    puts ("foo");			/* Make sure PLT is used before macros.  */
    asm ("" ::: "memory");
  
@@ -29,6 +31,7 @@ in_dso (int n, int *caller_bazp)
      }
  
    *bazp = 16;
+#endif
  
    return result;
  }
diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure
index 4c1fac49f3..eb62e68010 100644
--- a/sysdeps/aarch64/configure
+++ b/sysdeps/aarch64/configure
@@ -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
diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac
index 3347c13fa1..6d3b412acc 100644
--- a/sysdeps/aarch64/configure.ac
+++ b/sysdeps/aarch64/configure.ac
@@ -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
-- 
2.32.0.605.g8dce9f2422-goog



To declare a filtering error, please use the following link : https://www.security-mail.net/reporter.php?mid=cf44.6112ec73.9d192.0&r=mpoulhies%40kalray.eu&s=libc-alpha-bounces%2Bmpoulhies%3Dkalray.eu%40sourceware.org&o=Re%3A+%5BPATCH+v2%5D+aarch64%3A+Skip+traditional+GD%2FLD+TLS+which+are+unsupported+by+Clang+and+LLD+%5BBZ+%2328205%5D&verdict=C&c=8364eee59d11c472fa78f93471905545234abf19

             reply	other threads:[~2021-08-10 21:15 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-10 21:15 MAILER-DAEMON [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-08-11  0:54 MAILER-DAEMON
2021-08-10 22:34 MAILER-DAEMON
2021-08-10 22:19 MAILER-DAEMON
2021-08-10 21:09 MAILER-DAEMON
2021-08-10 21:03 MAILER-DAEMON
2021-08-10 20:11 MAILER-DAEMON
2021-08-10 19:50 MAILER-DAEMON
2021-08-10 18:12 MAILER-DAEMON
2021-08-10 18:04 MAILER-DAEMON
2021-08-10 18:03 MAILER-DAEMON
2021-08-10 17:48 MAILER-DAEMON
2021-08-10 17:41 MAILER-DAEMON
2021-08-10 17:39 MAILER-DAEMON
2021-08-10 15:42 MAILER-DAEMON
2021-08-10 14:39 MAILER-DAEMON
2021-08-10 13:49 MAILER-DAEMON
2021-08-10 13:34 MAILER-DAEMON
2021-08-10 13:21 MAILER-DAEMON
2021-08-10 13:02 MAILER-DAEMON
2021-08-10 11:20 MAILER-DAEMON
2021-08-10  9:45 MAILER-DAEMON
2021-08-10  9:44 MAILER-DAEMON
2021-08-10  9:41 MAILER-DAEMON
2021-08-10  9:39 MAILER-DAEMON
2021-08-10  9:37 MAILER-DAEMON
     [not found] <4CwXgY5nCWzFr7@mailbackend.panix.com>
     [not found] ` <9531c4c9-2354-4c87-4453-b492afec846f@redhat.com>
2020-12-16  0:42   ` Zack Weinberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210810211535.1EE721B7B181@fx408.security-mail.net \
    --to=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).