BZ#18383: Conditionalize test-xfail-tst-tlsalign{,-static} on ARM assembler bug.

This commit is contained in:
Roland McGrath 2015-07-08 15:00:43 -07:00
parent 85ee9a0d19
commit 95af4cffdb
5 changed files with 103 additions and 11 deletions

View file

@ -1,5 +1,12 @@
2015-07-08 Roland McGrath <roland@hack.frob.com>
[BZ #18383]
* sysdeps/arm/configure.ac (libc_cv_arm_tpoff_addend): New check.
Emit test-xfail-tst-tlsalign{,-static}=yes if it fails.
* sysdeps/arm/configure: Regenerated.
* elf/Makefile (test-xfail-tst-tlsalign): Variable removed.
(test-xfail-tst-tlsalign-static): Variable removed.
* Makerules (do-install-so): Use $(LN_S) rather than explicit 'ln -s'.
* elf/Makefile ($(objpfx)$(rtld-installed-name)): Use $(make-link)
rather than explicit 'ln -s'.

14
NEWS
View file

@ -21,13 +21,13 @@ Version 2.22
18049, 18068, 18080, 18093, 18100, 18104, 18110, 18111, 18116, 18125,
18128, 18138, 18185, 18196, 18197, 18206, 18210, 18211, 18217, 18219,
18220, 18221, 18234, 18244, 18245, 18247, 18287, 18319, 18324, 18333,
18346, 18371, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18435,
18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498,
18502, 18507, 18508, 18512, 18513, 18519, 18520, 18522, 18527, 18528,
18529, 18530, 18532, 18533, 18534, 18536, 18539, 18540, 18542, 18544,
18545, 18546, 18547, 18549, 18553, 18557, 18558, 18569, 18583, 18585,
18586, 18592, 18593, 18594, 18602, 18612, 18613, 18619, 18633, 18641.
18643.
18346, 18371, 18383, 18397, 18409, 18410, 18412, 18418, 18422, 18434,
18435, 18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497,
18498, 18502, 18507, 18508, 18512, 18513, 18519, 18520, 18522, 18527,
18528, 18529, 18530, 18532, 18533, 18534, 18536, 18539, 18540, 18542,
18544, 18545, 18546, 18547, 18549, 18553, 18557, 18558, 18569, 18583,
18585, 18586, 18592, 18593, 18594, 18602, 18612, 18613, 18619, 18633,
18641, 18643.
* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.

View file

@ -525,10 +525,6 @@ $(objpfx)tst-initorder: $(objpfx)tst-initordera4.so $(objpfx)tst-initordera1.so
$(objpfx)tst-null-argv: $(objpfx)tst-null-argv-lib.so
$(objpfx)tst-tlsalign: $(objpfx)tst-tlsalign-lib.so
# BZ#18383: broken on at least ARM (both).
test-xfail-tst-tlsalign = yes
test-xfail-tst-tlsalign-static = yes
$(objpfx)tst-tlsalign-extern: $(objpfx)tst-tlsalign-vars.o
$(objpfx)tst-tlsalign-extern-static: $(objpfx)tst-tlsalign-vars.o

49
sysdeps/arm/configure vendored
View file

@ -260,6 +260,55 @@ if test $libc_cv_arm_pcrel_movw = yes; then
fi
# This was buggy in assemblers from GNU binutils versions before 2.25.1
# (it's known to be broken in 2.24 and 2.25; see
# https://sourceware.org/bugzilla/show_bug.cgi?id=18383).
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether TPOFF relocs with addends are assembled correctly" >&5
$as_echo_n "checking whether TPOFF relocs with addends are assembled correctly... " >&6; }
if ${libc_cv_arm_tpoff_addend+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
.syntax unified
.arm
.arch armv7-a
.text
foo:
.word tbase(tpoff)+4
.section .tdata,"awT",%progbits
.word -4
tbase: .word 0
.word 4
EOF
libc_cv_arm_tpoff_addend=no
${CC-cc} -c $CFLAGS $CPPFLAGS \
-o conftest.o conftest.s 1>&5 2>&5 &&
LC_ALL=C $READELF -x.text conftest.o > conftest.x 2>&5 &&
{
cat conftest.x 1>&5
$AWK 'BEGIN { result = 2 }
$1 ~ /0x0+/ && $2 ~ /[0-9a-f]+/ {
# Check for little-endian or big-endian encoding of 4 in the in-place addend.
result = ($2 == "04000000" || $2 == "00000004") ? 0 : 1
}
END { exit(result) }
' conftest.x 2>&5 && libc_cv_arm_tpoff_addend=yes
}
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_tpoff_addend" >&5
$as_echo "$libc_cv_arm_tpoff_addend" >&6; }
if test $libc_cv_arm_tpoff_addend = no; then
config_vars="$config_vars
test-xfail-tst-tlsalign = yes"
config_vars="$config_vars
test-xfail-tst-tlsalign-static = yes"
fi
libc_cv_gcc_unwind_find_fde=no
# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.

View file

@ -79,6 +79,46 @@ if test $libc_cv_arm_pcrel_movw = yes; then
AC_DEFINE([ARM_PCREL_MOVW_OK])
fi
# This was buggy in assemblers from GNU binutils versions before 2.25.1
# (it's known to be broken in 2.24 and 2.25; see
# https://sourceware.org/bugzilla/show_bug.cgi?id=18383).
AC_CACHE_CHECK([whether TPOFF relocs with addends are assembled correctly],
libc_cv_arm_tpoff_addend, [
cat > conftest.s <<\EOF
.syntax unified
.arm
.arch armv7-a
.text
foo:
.word tbase(tpoff)+4
.section .tdata,"awT",%progbits
.word -4
tbase: .word 0
.word 4
EOF
libc_cv_arm_tpoff_addend=no
${CC-cc} -c $CFLAGS $CPPFLAGS \
-o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD &&
LC_ALL=C $READELF -x.text conftest.o > conftest.x 2>&AS_MESSAGE_LOG_FD &&
{
cat conftest.x 1>&AS_MESSAGE_LOG_FD
$AWK 'BEGIN { result = 2 }
$1 ~ /0x0+/ && $2 ~ /[[0-9a-f]]+/ {
# Check for little-endian or big-endian encoding of 4 in the in-place addend.
result = ($2 == "04000000" || $2 == "00000004") ? 0 : 1
}
END { exit(result) }
' conftest.x 2>&AS_MESSAGE_LOG_FD && libc_cv_arm_tpoff_addend=yes
}
rm -f conftest*])
if test $libc_cv_arm_tpoff_addend = no; then
LIBC_CONFIG_VAR([test-xfail-tst-tlsalign], [yes])
LIBC_CONFIG_VAR([test-xfail-tst-tlsalign-static], [yes])
fi
libc_cv_gcc_unwind_find_fde=no
# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.