From patchwork Fri Aug 6 22:41:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fangrui Song X-Patchwork-Id: 44601 X-Patchwork-Delegate: szabolcs.nagy@arm.com Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3034F386FC26 for ; Fri, 6 Aug 2021 22:41:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3034F386FC26 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1628289719; bh=Yvr9uFwYJlGtIoEUzqgwuzufa5Y7MSmVapphaunEYfI=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=UANXBMxMkptetxTths7aCecTnWy+znQ2YGNCVP2fJ+khxE5H23t4M1cXEHhoBAsrn Xvgcjq+Dq1eFxf1hJyQjxNqn16cwgSiiRlITFXGlHqrt8paFtdi1ANhN6MuzM/Zxwi shRFJqT26AEoA1alTKgJLS41eoXv6KO1/7YvVNxo= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by sourceware.org (Postfix) with ESMTPS id 51D08386FC2B for ; Fri, 6 Aug 2021 22:41:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 51D08386FC2B Received: by mail-qk1-x74a.google.com with SMTP id p14-20020a05620a22eeb02903b94aaa0909so5152174qki.15 for ; Fri, 06 Aug 2021 15:41:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=Yvr9uFwYJlGtIoEUzqgwuzufa5Y7MSmVapphaunEYfI=; b=sj9VqSLTN2WedPNjnML8QYtEpuyXIcoXWAUy+y9Za8NDUNWxzl1uSE/LUPJI6Z4LBG 8aDGWCrQFpyHwtVrgRAv/f6aTisRtcpd8EWOjBrewAGFfQHNOSEEYwjJFeM/kPW8CMVi pasvZZ275kdEjLiovbUBOchG/fGyIabdP+c3E8QK8MLlnlKOt52eJMLzJ/FrSWcfzahe 3ZZ+ezv6emvq+BJTMwryIVjDlN0RSmYY+w6rNEnrAf9EDzDnEoR2747vUWgydqvSnmzP L+oprHTVpZK1QqoefW2o3uEh8qwrWAbYphj08DRkAPQ4XFLdQ4L4KGWCNNymhSUckY3d +cAQ== X-Gm-Message-State: AOAM533rKqzlHCCPcCd1cHbNqomdT+laP64FUvRm5yYfgXksOoDAsZdF paC/2CnF44Gi4fxZhlZcxDYFXCYXfZC4acwzjmxgdPBvX7kq0jYsGPXzVs72+ygPia3TnLubGSm SZQF+NTexo5QsNiJhOJbQffLJtPErgGM02+pVokYIsJOvag3ztQBA4VSx50DYStfndU2a X-Google-Smtp-Source: ABdhPJycPyVdCzGEeLgUp0l87K+r3h46EisGn+7pAdemSSoBKijMyGdrGhC8E3gWqO0aFR4l3xsaR7qykXDs X-Received: from maskray1.svl.corp.google.com ([2620:15c:2ce:200:6d69:ec51:238e:4db2]) (user=maskray job=sendgmr) by 2002:a05:6214:da5:: with SMTP id h5mr13326646qvh.19.1628289690543; Fri, 06 Aug 2021 15:41:30 -0700 (PDT) Date: Fri, 6 Aug 2021 15:41:26 -0700 Message-Id: <20210806224126.643993-1-maskray@google.com> Mime-Version: 1.0 Subject: [PATCH] aarch64: Skip traditional GD/LD TLS which are unsupported by Clang and LLD [BZ #28205] To: libc-alpha@sourceware.org, Adhemerval Zanella , Szabolcs Nagy X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Fangrui Song via Libc-alpha From: Fangrui Song Reply-To: Fangrui Song Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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/129904.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 +++ configure | 38 ++++++++++++++++++++++++++++++++++++++ configure.ac | 24 ++++++++++++++++++++++++ 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 +++- 10 files changed, 92 insertions(+), 13 deletions(-) diff --git a/config.h.in b/config.h.in index 8b45a3a61d..f65605d4bd 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 -mtls-dialect=trad. */ +#undef HAVE_MTLS_DIALECT_TRAD + /* Define if the linker defines __ehdr_start. */ #undef HAVE_EHDR_START diff --git a/configure b/configure index 050f1a29cf..13e2a7374d 100755 --- a/configure +++ b/configure @@ -622,6 +622,7 @@ LIBGD libc_cv_cc_loop_to_function libc_cv_cc_submachine libc_cv_cc_nofma +libc_cv_mtls_dialect_trad libc_cv_mtls_dialect_gnu2 fno_unit_at_a_time libc_cv_has_glob_dat @@ -6336,6 +6337,43 @@ $as_echo "$libc_cv_mtls_dialect_gnu2" >&6; } config_vars="$config_vars have-mtls-dialect-gnu2 = $libc_cv_mtls_dialect_gnu2" +{ $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_mtls_dialect_trad+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&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_mtls_dialect_trad=yes +else + libc_cv_mtls_dialect_trad=no +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mtls_dialect_trad" >&5 +$as_echo "$libc_cv_mtls_dialect_trad" >&6; } +if test $libc_cv_mtls_dialect_trad = yes; then + $as_echo "#define HAVE_MTLS_DIALECT_TRAD 1" >>confdefs.h + +fi + +config_vars="$config_vars +have-mtls-dialect-trad = $libc_cv_mtls_dialect_trad" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc puts quotes around section names" >&5 $as_echo_n "checking whether cc puts quotes around section names... " >&6; } if ${libc_cv_have_section_quotes+:} false; then : diff --git a/configure.ac b/configure.ac index 5632277f9c..c73e271cc8 100644 --- a/configure.ac +++ b/configure.ac @@ -1501,6 +1501,30 @@ rm -f conftest*]) AC_SUBST(libc_cv_mtls_dialect_gnu2) LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2]) +AC_CACHE_CHECK([for -mtls-dialect=trad], libc_cv_mtls_dialect_trad, +[dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then + libc_cv_mtls_dialect_trad=yes +else + libc_cv_mtls_dialect_trad=no +fi +rm -f conftest*]) +if test $libc_cv_mtls_dialect_trad = yes; then + AC_DEFINE(HAVE_MTLS_DIALECT_TRAD) +fi +AC_SUBST(libc_cv_mtls_dialect_trad) +LIBC_CONFIG_VAR([have-mtls-dialect-trad], [$libc_cv_mtls_dialect_trad]) + AC_CACHE_CHECK(whether cc puts quotes around section names, libc_cv_have_section_quotes, [cat > conftest.c <