mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
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:
parent
64c7e34428
commit
3d53d18fc7
23
configure
vendored
23
configure
vendored
@ -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; }
|
||||||
|
15
configure.ac
15
configure.ac
@ -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.
|
||||||
|
26
elf/Makefile
26
elf/Makefile
@ -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
|
||||||
|
@ -2,5 +2,6 @@ case "$machine" in
|
|||||||
aarch64*)
|
aarch64*)
|
||||||
base_machine=aarch64
|
base_machine=aarch64
|
||||||
machine=aarch64
|
machine=aarch64
|
||||||
|
mtls_descriptor=desc
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user