Blame sysdeps/i386/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/i386.
Packit Service 82fcde
Packit Service 82fcde
# We no longer support i386 since it lacks the atomic instructions
Packit Service 82fcde
# required to implement NPTL threading.
Packit Service 82fcde
if test "$config_machine" = i386; then
Packit Service 82fcde
  AC_MSG_ERROR([
Packit Service 82fcde
*** ERROR: Support for i386 is deprecated.
Packit Service 82fcde
*** Please use host i786, i686, i585 or i486.
Packit Service 82fcde
*** For example: /src/glibc/configure --host=i686-pc-linux-gnu ..."])
Packit Service 82fcde
fi
Packit Service 82fcde
Packit Service 82fcde
# The GNU C Library can't be built for i386.  There are several reasons for
Packit Service 82fcde
# this restriction.  The primary reason is that i386 lacks the atomic
Packit Service 82fcde
# operations required to support the current NPTL implementation.  While it is
Packit Service 82fcde
# possible that such atomic operations could be emulated in the kernel to date
Packit Service 82fcde
# no such work has been done to enable this.  Even with NPTL disabled you still
Packit Service 82fcde
# have no atomic.h implementation.  Given the declining use of i386 we disable
Packit Service 82fcde
# support for building with `-march=i386' or `-mcpu=i386.' We don't explicitly
Packit Service 82fcde
# check for i386, instead we make sure the compiler has support for inlining
Packit Service 82fcde
# the builtin __sync_val_compare_and_swap. If it does then we should have no
Packit Service 82fcde
# problem building for i386.
Packit Service 82fcde
LIBC_COMPILER_BUILTIN_INLINED(
Packit Service 82fcde
  [__sync_val_compare_and_swap],
Packit Service 82fcde
  [int a, b, c; __sync_val_compare_and_swap (&a, b, c);],
Packit Service 82fcde
  [-O0],
Packit Service 82fcde
  [libc_cv_unsupported_i386=no],
Packit Service 82fcde
  [AC_MSG_ERROR([
Packit Service 82fcde
*** Building with -march=i386/-mcpu=i386 is not supported.
Packit Service 82fcde
*** Please use host i786, i686, i586, or i486.
Packit Service 82fcde
*** For example: /source/glibc/configure CFLAGS='-O2 -march=i686' ...])])
Packit Service 82fcde
Packit Service 82fcde
dnl Check if linker can convert "movl main@GOT(%ebx), %eax" to
Packit Service 82fcde
dnl "leal main@GOTOFF(%ebx), %eax" for static PIE.
Packit Service 82fcde
if test "$static_pie" = yes; then
Packit Service 82fcde
  AC_CACHE_CHECK(for linker static PIE support, libc_cv_ld_static_pie, [dnl
Packit Service 82fcde
cat > conftest.s <<\EOF
Packit Service 82fcde
	.text
Packit Service 82fcde
	.global _start
Packit Service 82fcde
_start:
Packit Service 82fcde
	movl	_start@GOT(%ebx), %eax
Packit Service 82fcde
EOF
Packit Service 82fcde
  libc_cv_pie_option="-Wl,-pie"
Packit Service 82fcde
  libc_cv_ld_static_pie=no
Packit Service 82fcde
  if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostartfiles -nostdlib $no_ssp $libc_cv_pie_option -o conftest conftest.s 1>&AS_MESSAGE_LOG_FD); then
Packit Service 82fcde
    if $READELF -r conftest | grep 'There are no relocations in this file.' > /dev/null; then
Packit Service 82fcde
      libc_cv_ld_static_pie=yes
Packit Service 82fcde
    fi
Packit Service 82fcde
  fi
Packit Service 82fcde
rm -f conftest*])
Packit Service 82fcde
  if test "$libc_cv_ld_static_pie" != yes; then
Packit Service 82fcde
    AC_MSG_ERROR([linker support for static PIE needed])
Packit Service 82fcde
  fi
Packit Service 82fcde
fi
Packit Service 82fcde
Packit Service 82fcde
dnl Check whether asm supports Intel MPX
Packit Service 82fcde
AC_CACHE_CHECK(for Intel MPX support, libc_cv_asm_mpx, [dnl
Packit Service 82fcde
cat > conftest.s <<\EOF
Packit Service 82fcde
        bndmov %bnd0,(%esp)
Packit Service 82fcde
EOF
Packit Service 82fcde
if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
Packit Service 82fcde
  libc_cv_asm_mpx=yes
Packit Service 82fcde
else
Packit Service 82fcde
  libc_cv_asm_mpx=no
Packit Service 82fcde
fi
Packit Service 82fcde
rm -f conftest*])
Packit Service 82fcde
if test $libc_cv_asm_mpx = yes; then
Packit Service 82fcde
  AC_DEFINE(HAVE_MPX_SUPPORT)
Packit Service 82fcde
fi
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.
Packit Service 82fcde
AC_DEFINE(PI_STATIC_AND_HIDDEN)
Packit Service 82fcde
Packit Service 82fcde
dnl When multi-arch is enabled, all external functions must be called
Packit Service 82fcde
dnl via PIC PLT in PIE, which requires setting up EBX register.
Packit Service 82fcde
if test x"$multi_arch" != xno; then
Packit Service 82fcde
  AC_DEFINE(NO_HIDDEN_EXTERN_FUNC_IN_PIE)
Packit Service 82fcde
fi