Blame sysdeps/arm/configure.ac

Packit Service 82fcde
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
Packit Service 82fcde
# Local configure fragment for sysdeps/arm.
Packit Service 82fcde
Packit Service 82fcde
dnl It is always possible to access static and hidden symbols in an
Packit Service 82fcde
dnl position independent way.  This has been true since GCC 4.1,
Packit Service 82fcde
dnl which is older than the minimum version required to build libc.
Packit Service 82fcde
AC_DEFINE(PI_STATIC_AND_HIDDEN)
Packit Service 82fcde
Packit Service 82fcde
# We check to see if the compiler and flags are
Packit Service 82fcde
# selecting the hard-float ABI and if they are then
Packit Service 82fcde
# we set libc_cv_arm_pcs_vfp to yes which causes
Packit Service 82fcde
# HAVE_ARM_PCS_VFP to be defined in config.h and
Packit Service 82fcde
# in include/libc-symbols.h and thus available to
Packit Service 82fcde
# shlib-versions to select the appropriate name for
Packit Service 82fcde
# the dynamic linker via %ifdef.
Packit Service 82fcde
AC_CACHE_CHECK([whether the compiler is using the ARM hard-float ABI],
Packit Service 82fcde
  [libc_cv_arm_pcs_vfp],
Packit Service 82fcde
  [AC_EGREP_CPP(yes,[#ifdef __ARM_PCS_VFP
Packit Service 82fcde
		      yes
Packit Service 82fcde
		     #endif
Packit Service 82fcde
  ], libc_cv_arm_pcs_vfp=yes, libc_cv_arm_pcs_vfp=no)])
Packit Service 82fcde
if test $libc_cv_arm_pcs_vfp = yes; then
Packit Service 82fcde
  AC_DEFINE(HAVE_ARM_PCS_VFP)
Packit Service 82fcde
  LIBC_CONFIG_VAR([default-abi], [hard])
Packit Service 82fcde
else
Packit Service 82fcde
  LIBC_CONFIG_VAR([default-abi], [soft])
Packit Service 82fcde
fi
Packit Service 82fcde
Packit Service 82fcde
AC_CACHE_CHECK([whether PC-relative relocs in movw/movt work properly],
Packit Service 82fcde
	       libc_cv_arm_pcrel_movw, [
Packit Service 82fcde
cat > conftest.s <<\EOF
Packit Service 82fcde
	.syntax unified
Packit Service 82fcde
	.arm
Packit Service 82fcde
	.arch armv7-a
Packit Service 82fcde
Packit Service 82fcde
	.text
Packit Service 82fcde
	.globl foo
Packit Service 82fcde
	.type foo,%function
Packit Service 82fcde
foo:	movw r0, #:lower16:symbol - 1f - 8
Packit Service 82fcde
	movt r0, #:upper16:symbol - 1f - 8
Packit Service 82fcde
1:	add r0, pc
Packit Service 82fcde
	@ And now a case with a local symbol.
Packit Service 82fcde
	movw r0, #:lower16:3f - 2f - 8
Packit Service 82fcde
	movt r0, #:upper16:3f - 2f - 8
Packit Service 82fcde
2:	add r0, pc
Packit Service 82fcde
	bx lr
Packit Service 82fcde
Packit Service 82fcde
.data
Packit Service 82fcde
	.globl symbol
Packit Service 82fcde
	.hidden symbol
Packit Service 82fcde
symbol:	.long 23
Packit Service 82fcde
3:	.long 17
Packit Service 82fcde
EOF
Packit Service 82fcde
libc_cv_arm_pcrel_movw=no
Packit Service 82fcde
${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
Packit Service 82fcde
	 -nostartfiles -nostdlib -shared \
Packit Service 82fcde
	 -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD &&
Packit Service 82fcde
LC_ALL=C $READELF -dr conftest.so > conftest.dr 2>&AS_MESSAGE_LOG_FD &&
Packit Service 82fcde
{
Packit Service 82fcde
  cat conftest.dr 1>&AS_MESSAGE_LOG_FD
Packit Service 82fcde
  fgrep 'TEXTREL
Packit Service 82fcde
R_ARM_NONE' conftest.dr > /dev/null || libc_cv_arm_pcrel_movw=yes
Packit Service 82fcde
}
Packit Service 82fcde
rm -f conftest*])
Packit Service 82fcde
if test $libc_cv_arm_pcrel_movw = yes; then
Packit Service 82fcde
  AC_DEFINE([ARM_PCREL_MOVW_OK])
Packit Service 82fcde
fi
Packit Service 82fcde
Packit Service 82fcde
# This was buggy in assemblers from GNU binutils versions before 2.25.1
Packit Service 82fcde
# (it's known to be broken in 2.24 and 2.25; see
Packit Service 82fcde
# https://sourceware.org/bugzilla/show_bug.cgi?id=18383).
Packit Service 82fcde
AC_CACHE_CHECK([whether TPOFF relocs with addends are assembled correctly],
Packit Service 82fcde
	       libc_cv_arm_tpoff_addend, [
Packit Service 82fcde
cat > conftest.s <<\EOF
Packit Service 82fcde
	.syntax unified
Packit Service 82fcde
	.arm
Packit Service 82fcde
	.arch armv7-a
Packit Service 82fcde
Packit Service 82fcde
	.text
Packit Service 82fcde
foo:
Packit Service 82fcde
	.word tbase(tpoff)+4
Packit Service 82fcde
Packit Service 82fcde
	.section .tdata,"awT",%progbits
Packit Service 82fcde
	.word -4
Packit Service 82fcde
tbase:	.word 0
Packit Service 82fcde
	.word 4
Packit Service 82fcde
EOF
Packit Service 82fcde
libc_cv_arm_tpoff_addend=no
Packit Service 82fcde
${CC-cc} -c $CFLAGS $CPPFLAGS \
Packit Service 82fcde
	 -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD &&
Packit Service 82fcde
LC_ALL=C $READELF -x.text conftest.o > conftest.x 2>&AS_MESSAGE_LOG_FD &&
Packit Service 82fcde
{
Packit Service 82fcde
  cat conftest.x 1>&AS_MESSAGE_LOG_FD
Packit Service 82fcde
  $AWK 'BEGIN { result = 2 }
Packit Service 82fcde
$1 ~ /0x0+/ && $2 ~ /[[0-9a-f]]+/ {
Packit Service 82fcde
# Check for little-endian or big-endian encoding of 4 in the in-place addend.
Packit Service 82fcde
  result = ($2 == "04000000" || $2 == "00000004") ? 0 : 1
Packit Service 82fcde
}
Packit Service 82fcde
END { exit(result) }
Packit Service 82fcde
' conftest.x 2>&AS_MESSAGE_LOG_FD && libc_cv_arm_tpoff_addend=yes
Packit Service 82fcde
}
Packit Service 82fcde
rm -f conftest*])
Packit Service 82fcde
if test $libc_cv_arm_tpoff_addend = no; then
Packit Service 82fcde
  LIBC_CONFIG_VAR([test-xfail-tst-tlsalign], [yes])
Packit Service 82fcde
  LIBC_CONFIG_VAR([test-xfail-tst-tlsalign-static], [yes])
Packit Service 82fcde
fi
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
libc_cv_gcc_unwind_find_fde=no
Packit Service 82fcde
Packit Service 82fcde
# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.
Packit Service 82fcde
CFLAGS=${CFLAGS% -fno-unwind-tables}