unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Cc: libc-alpha@sourceware.org, Szabolcs Nagy <szabolcs.nagy@arm.com>,
	 Arjun Shankar <arjun@redhat.com>
Subject: Re: [PATCH v2 3/3] elf: Enable TLS descriptor tests on aarch64
Date: Tue, 12 Mar 2024 09:38:19 -0700	[thread overview]
Message-ID: <CAMe9rOoUkOfPb4hP-3Wm3+egwe4X-c37up_Wu+YGb97_hCPErg@mail.gmail.com> (raw)
In-Reply-To: <20240312162120.1360522-4-adhemerval.zanella@linaro.org>

On Tue, Mar 12, 2024 at 9:21 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> The aarch64 uses 'trad' for traditional tls and 'desc' for tls
> descriptors, but unlike other targets it defaults to 'desc'.  The
> gnutls2 configure check does not set aarch64 as an ABI that uses
> TLS descriptors, which then disable somes stests.
>
> Also rename the internal machinery fron gnu2 to tls descriptors.
>
> Checked on aarch64-linux-gnu.
> ---
>  configure                    | 23 +++++++++++++----------
>  configure.ac                 | 15 +++++++++------
>  elf/Makefile                 | 26 +++++++++++++-------------
>  sysdeps/aarch64/preconfigure |  1 +
>  sysdeps/arm/Makefile         |  8 ++++----
>  5 files changed, 40 insertions(+), 33 deletions(-)
>
> diff --git a/configure b/configure
> index 117b48a421..432e40a592 100755
> --- a/configure
> +++ b/configure
> @@ -653,7 +653,7 @@ LIBGD
>  libc_cv_cc_loop_to_function
>  libc_cv_cc_submachine
>  libc_cv_cc_nofma
> -libc_cv_mtls_dialect_gnu2
> +libc_cv_mtls_descriptor
>  libc_cv_has_glob_dat
>  libc_cv_fpie
>  libc_cv_z_execstack
> @@ -4760,6 +4760,9 @@ libc_config_ok=no
>  # whether to use such directories.
>  with_fp_cond=1
>
> +# A preconfigure script may define another name to TLS descriptor variant
> +mtls_descriptor=gnu2
> +
>  if frags=`ls -d $srcdir/sysdeps/*/preconfigure 2> /dev/null`
>  then
>    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysdeps preconfigure fragments" >&5
> @@ -7006,9 +7009,9 @@ fi
>  printf "%s\n" "$libc_cv_has_glob_dat" >&6; }
>
>
> -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -mtls-dialect=gnu2" >&5
> -printf %s "checking for -mtls-dialect=gnu2... " >&6; }
> -if test ${libc_cv_mtls_dialect_gnu2+y}
> +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tls descriptor support" >&5
> +printf %s "checking for tls descriptor support... " >&6; }
> +if test ${libc_cv_mtls_descriptor+y}
>  then :
>    printf %s "(cached) " >&6
>  else $as_nop
> @@ -7019,7 +7022,7 @@ void foo (void)
>    i = 10;
>  }
>  EOF
> -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fPIC -mtls-dialect=gnu2 -nostdlib -nostartfiles
> +if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fPIC -mtls-dialect=$mtls_descriptor -nostdlib -nostartfiles
>                    -shared conftest.c -o conftest 1>&5'
>    { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
>    (eval $ac_try) 2>&5
> @@ -7027,17 +7030,17 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fPIC -mtls-dialect=gnu2 -nostdlib -nost
>    printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
>    test $ac_status = 0; }; }
>  then
> -  libc_cv_mtls_dialect_gnu2=yes
> +  libc_cv_mtls_descriptor=$mtls_descriptor
>  else
> -  libc_cv_mtls_dialect_gnu2=no
> +  libc_cv_mtls_descriptor=no
>  fi
>  rm -f conftest*
>  fi
> -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mtls_dialect_gnu2" >&5
> -printf "%s\n" "$libc_cv_mtls_dialect_gnu2" >&6; }
> +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mtls_descriptor" >&5
> +printf "%s\n" "$libc_cv_mtls_descriptor" >&6; }
>
>  config_vars="$config_vars
> -have-mtls-dialect-gnu2 = $libc_cv_mtls_dialect_gnu2"
> +have-mtls-descriptor = $libc_cv_mtls_descriptor"
>
>  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if -Wno-ignored-attributes is required for aliases" >&5
>  printf %s "checking if -Wno-ignored-attributes is required for aliases... " >&6; }
> diff --git a/configure.ac b/configure.ac
> index 19b88a47a5..bdc385d03c 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -442,6 +442,9 @@ libc_config_ok=no
>  # whether to use such directories.
>  with_fp_cond=1
>
> +# A preconfigure script may define another name to TLS descriptor variant
> +mtls_descriptor=gnu2
> +
>  dnl Let sysdeps/*/preconfigure act here.
>  LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
>
> @@ -1287,7 +1290,7 @@ fi
>  rm -f conftest*])
>  AC_SUBST(libc_cv_has_glob_dat)
>
> -AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
> +AC_CACHE_CHECK([for tls descriptor support], libc_cv_mtls_descriptor,
>  [dnl
>  cat > conftest.c <<EOF
>  __thread int i;
> @@ -1296,16 +1299,16 @@ void foo (void)
>    i = 10;
>  }
>  EOF
> -if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -fPIC -mtls-dialect=gnu2 -nostdlib -nostartfiles
> +if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -fPIC -mtls-dialect=$mtls_descriptor -nostdlib -nostartfiles
>                    -shared conftest.c -o conftest 1>&AS_MESSAGE_LOG_FD])
>  then
> -  libc_cv_mtls_dialect_gnu2=yes
> +  libc_cv_mtls_descriptor=$mtls_descriptor
>  else
> -  libc_cv_mtls_dialect_gnu2=no
> +  libc_cv_mtls_descriptor=no
>  fi
>  rm -f conftest*])
> -AC_SUBST(libc_cv_mtls_dialect_gnu2)
> -LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
> +AC_SUBST(libc_cv_mtls_descriptor)
> +LIBC_CONFIG_VAR([have-mtls-descriptor], [$libc_cv_mtls_descriptor])
>
>  dnl clang emits an warning for a double alias redirection, to warn the
>  dnl original symbol is sed even when weak definition overrides it.
> diff --git a/elf/Makefile b/elf/Makefile
> index 393a27ef2a..4f1903391a 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -1001,13 +1001,13 @@ modules-names-tests = $(filter-out ifuncmod% tst-tlsmod%,\
>  # For +depfiles in Makerules.
>  extra-test-objs += tst-auditmod17.os
>
> -ifeq (yes,$(have-mtls-dialect-gnu2))
> +ifneq (no,$(have-mtls-descriptor))
>  tests += tst-gnu2-tls1
>  modules-names += tst-gnu2-tls1mod
>  $(objpfx)tst-gnu2-tls1: $(objpfx)tst-gnu2-tls1mod.so
>  tst-gnu2-tls1mod.so-no-z-defs = yes
> -CFLAGS-tst-gnu2-tls1mod.c += -mtls-dialect=gnu2
> -endif # $(have-mtls-dialect-gnu2)
> +CFLAGS-tst-gnu2-tls1mod.c += -mtls-dialect=$(have-mtls-descriptor)
> +endif # $(have-mtls-descriptor)
>
>  ifeq (yes,$(have-protected-data))
>  modules-names += tst-protected1moda tst-protected1modb
> @@ -2975,11 +2975,11 @@ $(objpfx)tst-tls-allocation-failure-static-patched.out: \
>  $(objpfx)tst-audit-tlsdesc: $(objpfx)tst-audit-tlsdesc-mod1.so \
>                             $(objpfx)tst-audit-tlsdesc-mod2.so \
>                             $(shared-thread-library)
> -ifeq (yes,$(have-mtls-dialect-gnu2))
> +ifneq (no,$(have-mtls-descriptor))
>  # The test is valid for all TLS types, but we want to exercise GNU2
>  # TLS if possible.
> -CFLAGS-tst-audit-tlsdesc-mod1.c += -mtls-dialect=gnu2
> -CFLAGS-tst-audit-tlsdesc-mod2.c += -mtls-dialect=gnu2
> +CFLAGS-tst-audit-tlsdesc-mod1.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-audit-tlsdesc-mod2.c += -mtls-dialect=$(have-mtls-descriptor)
>  endif
>  $(objpfx)tst-audit-tlsdesc-dlopen: $(shared-thread-library)
>  $(objpfx)tst-audit-tlsdesc-dlopen.out: $(objpfx)tst-audit-tlsdesc-mod1.so \
> @@ -3058,11 +3058,11 @@ $(objpfx)tst-gnu2-tls2.out: \
>    $(objpfx)tst-gnu2-tls2mod1.so \
>    $(objpfx)tst-gnu2-tls2mod2.so
>
> -ifeq (yes,$(have-mtls-dialect-gnu2))
> -CFLAGS-tst-tlsgap-mod0.c += -mtls-dialect=gnu2
> -CFLAGS-tst-tlsgap-mod1.c += -mtls-dialect=gnu2
> -CFLAGS-tst-tlsgap-mod2.c += -mtls-dialect=gnu2
> -CFLAGS-tst-gnu2-tls2mod0.c += -mtls-dialect=gnu2
> -CFLAGS-tst-gnu2-tls2mod1.c += -mtls-dialect=gnu2
> -CFLAGS-tst-gnu2-tls2mod2.c += -mtls-dialect=gnu2
> +ifneq (no,$(have-mtls-descriptor))
> +CFLAGS-tst-tlsgap-mod0.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-tlsgap-mod1.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-tlsgap-mod2.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-gnu2-tls2mod0.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-gnu2-tls2mod1.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-gnu2-tls2mod2.c += -mtls-dialect=$(have-mtls-descriptor)
>  endif
> diff --git a/sysdeps/aarch64/preconfigure b/sysdeps/aarch64/preconfigure
> index d9bd1f8558..19657b627b 100644
> --- a/sysdeps/aarch64/preconfigure
> +++ b/sysdeps/aarch64/preconfigure
> @@ -2,5 +2,6 @@ case "$machine" in
>  aarch64*)
>         base_machine=aarch64
>         machine=aarch64
> +       mtls_descriptor=desc
>         ;;
>  esac
> diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile
> index d5cea717a9..619474eca9 100644
> --- a/sysdeps/arm/Makefile
> +++ b/sysdeps/arm/Makefile
> @@ -13,15 +13,15 @@ $(objpfx)libgcc-stubs.a: $(objpfx)aeabi_unwind_cpp_pr1.os
>  lib-noranlib: $(objpfx)libgcc-stubs.a
>
>  ifeq ($(build-shared),yes)
> -ifeq (yes,$(have-mtls-dialect-gnu2))
> +ifneq (no,$(have-mtls-descriptor))
>  tests += tst-armtlsdescloc tst-armtlsdescextnow tst-armtlsdescextlazy
>  modules-names += tst-armtlsdesclocmod
>  modules-names += tst-armtlsdescextlazymod tst-armtlsdescextnowmod
>  CPPFLAGS-tst-armtlsdescextnowmod.c += -Dstatic=
>  CPPFLAGS-tst-armtlsdescextlazymod.c += -Dstatic=
> -CFLAGS-tst-armtlsdesclocmod.c += -mtls-dialect=gnu2
> -CFLAGS-tst-armtlsdescextnowmod.c += -mtls-dialect=gnu2
> -CFLAGS-tst-armtlsdescextlazymod.c += -mtls-dialect=gnu2
> +CFLAGS-tst-armtlsdesclocmod.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-armtlsdescextnowmod.c += -mtls-dialect=$(have-mtls-descriptor)
> +CFLAGS-tst-armtlsdescextlazymod.c += -mtls-dialect=$(have-mtls-descriptor)
>  LDFLAGS-tst-armtlsdescextnowmod.so += -Wl,-z,now
>  tst-armtlsdescloc-ENV = LD_BIND_NOW=1
>  tst-armtlsdescextnow-ENV = LD_BIND_NOW=1
> --
> 2.34.1
>


LGTM.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>

Thanks.
-- 
H.J.

      reply	other threads:[~2024-03-12 16:39 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-12 16:21 [PATCH v2 0/3] Extending TLS testing and fixing TLS gnu2 for ARM Adhemerval Zanella
2024-03-12 16:21 ` [PATCH v2 1/3] Ignore undefined symbols for -mtls-dialect=gnu2 Adhemerval Zanella
2024-03-12 16:34   ` H.J. Lu
2024-03-12 16:21 ` [PATCH v2 2/3] arm: Update _dl_tlsdesc_dynamic to preserve caller-saved registers (BZ 31372) Adhemerval Zanella
2024-03-12 16:35   ` H.J. Lu
2024-03-12 16:21 ` [PATCH v2 3/3] elf: Enable TLS descriptor tests on aarch64 Adhemerval Zanella
2024-03-12 16:38   ` H.J. Lu [this message]

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

  List information: https://www.gnu.org/software/libc/involved.html

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

  git send-email \
    --in-reply-to=CAMe9rOoUkOfPb4hP-3Wm3+egwe4X-c37up_Wu+YGb97_hCPErg@mail.gmail.com \
    --to=hjl.tools@gmail.com \
    --cc=adhemerval.zanella@linaro.org \
    --cc=arjun@redhat.com \
    --cc=libc-alpha@sourceware.org \
    --cc=szabolcs.nagy@arm.com \
    /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).