elf: Enable TLS descriptor tests on aarch64

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.
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
This commit is contained in:
Adhemerval Zanella 2024-03-12 13:21:20 -03:00
parent 64c7e34428
commit 3d53d18fc7
5 changed files with 40 additions and 33 deletions

23
configure vendored
View File

@ -653,7 +653,7 @@ LIBGD
libc_cv_cc_loop_to_function libc_cv_cc_loop_to_function
libc_cv_cc_submachine libc_cv_cc_submachine
libc_cv_cc_nofma libc_cv_cc_nofma
libc_cv_mtls_dialect_gnu2 libc_cv_mtls_descriptor
libc_cv_has_glob_dat libc_cv_has_glob_dat
libc_cv_fpie libc_cv_fpie
libc_cv_z_execstack libc_cv_z_execstack
@ -4760,6 +4760,9 @@ libc_config_ok=no
# whether to use such directories. # whether to use such directories.
with_fp_cond=1 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` if frags=`ls -d $srcdir/sysdeps/*/preconfigure 2> /dev/null`
then then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysdeps preconfigure fragments" >&5 { 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" "$libc_cv_has_glob_dat" >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -mtls-dialect=gnu2" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tls descriptor support" >&5
printf %s "checking for -mtls-dialect=gnu2... " >&6; } printf %s "checking for tls descriptor support... " >&6; }
if test ${libc_cv_mtls_dialect_gnu2+y} if test ${libc_cv_mtls_descriptor+y}
then : then :
printf %s "(cached) " >&6 printf %s "(cached) " >&6
else $as_nop else $as_nop
@ -7019,7 +7022,7 @@ void foo (void)
i = 10; i = 10;
} }
EOF 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' -shared conftest.c -o conftest 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; } test $ac_status = 0; }; }
then then
libc_cv_mtls_dialect_gnu2=yes libc_cv_mtls_descriptor=$mtls_descriptor
else else
libc_cv_mtls_dialect_gnu2=no libc_cv_mtls_descriptor=no
fi fi
rm -f conftest* rm -f conftest*
fi fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mtls_dialect_gnu2" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mtls_descriptor" >&5
printf "%s\n" "$libc_cv_mtls_dialect_gnu2" >&6; } printf "%s\n" "$libc_cv_mtls_descriptor" >&6; }
config_vars="$config_vars 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\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; } printf %s "checking if -Wno-ignored-attributes is required for aliases... " >&6; }

View File

@ -442,6 +442,9 @@ libc_config_ok=no
# whether to use such directories. # whether to use such directories.
with_fp_cond=1 with_fp_cond=1
# A preconfigure script may define another name to TLS descriptor variant
mtls_descriptor=gnu2
dnl Let sysdeps/*/preconfigure act here. dnl Let sysdeps/*/preconfigure act here.
LIBC_PRECONFIGURE([$srcdir], [for sysdeps]) LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
@ -1287,7 +1290,7 @@ fi
rm -f conftest*]) rm -f conftest*])
AC_SUBST(libc_cv_has_glob_dat) 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 [dnl
cat > conftest.c <<EOF cat > conftest.c <<EOF
__thread int i; __thread int i;
@ -1296,16 +1299,16 @@ void foo (void)
i = 10; i = 10;
} }
EOF 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]) -shared conftest.c -o conftest 1>&AS_MESSAGE_LOG_FD])
then then
libc_cv_mtls_dialect_gnu2=yes libc_cv_mtls_descriptor=$mtls_descriptor
else else
libc_cv_mtls_dialect_gnu2=no libc_cv_mtls_descriptor=no
fi fi
rm -f conftest*]) rm -f conftest*])
AC_SUBST(libc_cv_mtls_dialect_gnu2) AC_SUBST(libc_cv_mtls_descriptor)
LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2]) LIBC_CONFIG_VAR([have-mtls-descriptor], [$libc_cv_mtls_descriptor])
dnl clang emits an warning for a double alias redirection, to warn the dnl clang emits an warning for a double alias redirection, to warn the
dnl original symbol is sed even when weak definition overrides it. dnl original symbol is sed even when weak definition overrides it.

View File

@ -1001,13 +1001,13 @@ modules-names-tests = $(filter-out ifuncmod% tst-tlsmod%,\
# For +depfiles in Makerules. # For +depfiles in Makerules.
extra-test-objs += tst-auditmod17.os extra-test-objs += tst-auditmod17.os
ifeq (yes,$(have-mtls-dialect-gnu2)) ifneq (no,$(have-mtls-descriptor))
tests += tst-gnu2-tls1 tests += tst-gnu2-tls1
modules-names += tst-gnu2-tls1mod modules-names += tst-gnu2-tls1mod
$(objpfx)tst-gnu2-tls1: $(objpfx)tst-gnu2-tls1mod.so $(objpfx)tst-gnu2-tls1: $(objpfx)tst-gnu2-tls1mod.so
tst-gnu2-tls1mod.so-no-z-defs = yes tst-gnu2-tls1mod.so-no-z-defs = yes
CFLAGS-tst-gnu2-tls1mod.c += -mtls-dialect=gnu2 CFLAGS-tst-gnu2-tls1mod.c += -mtls-dialect=$(have-mtls-descriptor)
endif # $(have-mtls-dialect-gnu2) endif # $(have-mtls-descriptor)
ifeq (yes,$(have-protected-data)) ifeq (yes,$(have-protected-data))
modules-names += tst-protected1moda tst-protected1modb 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: $(objpfx)tst-audit-tlsdesc-mod1.so \
$(objpfx)tst-audit-tlsdesc-mod2.so \ $(objpfx)tst-audit-tlsdesc-mod2.so \
$(shared-thread-library) $(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 # The test is valid for all TLS types, but we want to exercise GNU2
# TLS if possible. # TLS if possible.
CFLAGS-tst-audit-tlsdesc-mod1.c += -mtls-dialect=gnu2 CFLAGS-tst-audit-tlsdesc-mod1.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-audit-tlsdesc-mod2.c += -mtls-dialect=gnu2 CFLAGS-tst-audit-tlsdesc-mod2.c += -mtls-dialect=$(have-mtls-descriptor)
endif endif
$(objpfx)tst-audit-tlsdesc-dlopen: $(shared-thread-library) $(objpfx)tst-audit-tlsdesc-dlopen: $(shared-thread-library)
$(objpfx)tst-audit-tlsdesc-dlopen.out: $(objpfx)tst-audit-tlsdesc-mod1.so \ $(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-tls2mod1.so \
$(objpfx)tst-gnu2-tls2mod2.so $(objpfx)tst-gnu2-tls2mod2.so
ifeq (yes,$(have-mtls-dialect-gnu2)) ifneq (no,$(have-mtls-descriptor))
CFLAGS-tst-tlsgap-mod0.c += -mtls-dialect=gnu2 CFLAGS-tst-tlsgap-mod0.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-tlsgap-mod1.c += -mtls-dialect=gnu2 CFLAGS-tst-tlsgap-mod1.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-tlsgap-mod2.c += -mtls-dialect=gnu2 CFLAGS-tst-tlsgap-mod2.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-gnu2-tls2mod0.c += -mtls-dialect=gnu2 CFLAGS-tst-gnu2-tls2mod0.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-gnu2-tls2mod1.c += -mtls-dialect=gnu2 CFLAGS-tst-gnu2-tls2mod1.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-gnu2-tls2mod2.c += -mtls-dialect=gnu2 CFLAGS-tst-gnu2-tls2mod2.c += -mtls-dialect=$(have-mtls-descriptor)
endif endif

View File

@ -2,5 +2,6 @@ case "$machine" in
aarch64*) aarch64*)
base_machine=aarch64 base_machine=aarch64
machine=aarch64 machine=aarch64
mtls_descriptor=desc
;; ;;
esac esac

View File

@ -13,15 +13,15 @@ $(objpfx)libgcc-stubs.a: $(objpfx)aeabi_unwind_cpp_pr1.os
lib-noranlib: $(objpfx)libgcc-stubs.a lib-noranlib: $(objpfx)libgcc-stubs.a
ifeq ($(build-shared),yes) ifeq ($(build-shared),yes)
ifeq (yes,$(have-mtls-dialect-gnu2)) ifneq (no,$(have-mtls-descriptor))
tests += tst-armtlsdescloc tst-armtlsdescextnow tst-armtlsdescextlazy tests += tst-armtlsdescloc tst-armtlsdescextnow tst-armtlsdescextlazy
modules-names += tst-armtlsdesclocmod modules-names += tst-armtlsdesclocmod
modules-names += tst-armtlsdescextlazymod tst-armtlsdescextnowmod modules-names += tst-armtlsdescextlazymod tst-armtlsdescextnowmod
CPPFLAGS-tst-armtlsdescextnowmod.c += -Dstatic= CPPFLAGS-tst-armtlsdescextnowmod.c += -Dstatic=
CPPFLAGS-tst-armtlsdescextlazymod.c += -Dstatic= CPPFLAGS-tst-armtlsdescextlazymod.c += -Dstatic=
CFLAGS-tst-armtlsdesclocmod.c += -mtls-dialect=gnu2 CFLAGS-tst-armtlsdesclocmod.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-armtlsdescextnowmod.c += -mtls-dialect=gnu2 CFLAGS-tst-armtlsdescextnowmod.c += -mtls-dialect=$(have-mtls-descriptor)
CFLAGS-tst-armtlsdescextlazymod.c += -mtls-dialect=gnu2 CFLAGS-tst-armtlsdescextlazymod.c += -mtls-dialect=$(have-mtls-descriptor)
LDFLAGS-tst-armtlsdescextnowmod.so += -Wl,-z,now LDFLAGS-tst-armtlsdescextnowmod.so += -Wl,-z,now
tst-armtlsdescloc-ENV = LD_BIND_NOW=1 tst-armtlsdescloc-ENV = LD_BIND_NOW=1
tst-armtlsdescextnow-ENV = LD_BIND_NOW=1 tst-armtlsdescextnow-ENV = LD_BIND_NOW=1