647e4d4649
Add a configure option --enable-relro to decide whether -z relro should be enabled in ELF linker by default. Default to yes for all Linux targets, except FRV, HPPA, IA64 and MIPS, since many relro tests fail on these targets. PR ld/20283 * NEWS: Mention --enable-relro. * configure.ac: Add --enable-relro. (DEFAULT_LD_Z_RELRO): New. Set by --enable-relro. * configure.tgt (ac_default_ld_z_relro): Default it to 1 for some Linux targets. * config.in: Regenerated. * configure: Likewise. * emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Set link_info.relro to DEFAULT_LD_Z_RELRO. * testsuite/config/default.exp (ld_elf_shared_opt): New. * testsuite/lib/ld-lib.exp (run_dump_test): Pass $ld_elf_shared_opt to ld for ELF targets with shared object support. (run_ld_link_tests): Likewise.
453 lines
13 KiB
Text
453 lines
13 KiB
Text
dnl Process this file with autoconf to produce a configure script
|
|
dnl
|
|
dnl Copyright (C) 2012-2016 Free Software Foundation, Inc.
|
|
dnl
|
|
dnl This file is free software; you can redistribute it and/or modify
|
|
dnl it under the terms of the GNU General Public License as published by
|
|
dnl the Free Software Foundation; either version 3 of the License, or
|
|
dnl (at your option) any later version.
|
|
dnl
|
|
dnl This program is distributed in the hope that it will be useful,
|
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
dnl GNU General Public License for more details.
|
|
dnl
|
|
dnl You should have received a copy of the GNU General Public License
|
|
dnl along with this program; see the file COPYING3. If not see
|
|
dnl <http://www.gnu.org/licenses/>.
|
|
dnl
|
|
|
|
AC_PREREQ(2.59)
|
|
m4_include([../bfd/version.m4])
|
|
AC_INIT([ld], BFD_VERSION)
|
|
AC_CONFIG_SRCDIR(ldmain.c)
|
|
|
|
AC_CANONICAL_TARGET
|
|
AC_CANONICAL_BUILD
|
|
AC_ISC_POSIX
|
|
|
|
AM_INIT_AUTOMAKE
|
|
AM_MAINTAINER_MODE
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_CXX
|
|
AC_PROG_GREP
|
|
AC_GNU_SOURCE
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
AC_PROG_INSTALL
|
|
|
|
LT_INIT
|
|
ACX_LARGEFILE
|
|
|
|
AC_ARG_WITH(lib-path, [ --with-lib-path=dir1:dir2... set default LIB_PATH],LIB_PATH=$withval)
|
|
AC_ARG_ENABLE(targets,
|
|
[ --enable-targets alternative target configurations],
|
|
[case "${enableval}" in
|
|
yes | "") AC_MSG_ERROR(enable-targets option must specify target names or 'all')
|
|
;;
|
|
no) enable_targets= ;;
|
|
*) enable_targets=$enableval ;;
|
|
esac])dnl
|
|
AC_ARG_ENABLE(64-bit-bfd,
|
|
[ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)],
|
|
[case "${enableval}" in
|
|
yes) want64=true ;;
|
|
no) want64=false ;;
|
|
*) AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option) ;;
|
|
esac],[want64=false])dnl
|
|
|
|
AC_ARG_WITH(sysroot,
|
|
[ --with-sysroot[=DIR] Search for usr/lib et al within DIR.],
|
|
[
|
|
case ${with_sysroot} in
|
|
yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;;
|
|
*) TARGET_SYSTEM_ROOT=$with_sysroot ;;
|
|
esac
|
|
|
|
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
|
|
use_sysroot=yes
|
|
|
|
if test "x$prefix" = xNONE; then
|
|
test_prefix=/usr/local
|
|
else
|
|
test_prefix=$prefix
|
|
fi
|
|
if test "x$exec_prefix" = xNONE; then
|
|
test_exec_prefix=$test_prefix
|
|
else
|
|
test_exec_prefix=$exec_prefix
|
|
fi
|
|
case ${TARGET_SYSTEM_ROOT} in
|
|
"${test_prefix}"|"${test_prefix}/"*|\
|
|
"${test_exec_prefix}"|"${test_exec_prefix}/"*|\
|
|
'${prefix}'|'${prefix}/'*|\
|
|
'${exec_prefix}'|'${exec_prefix}/'*)
|
|
t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
|
|
TARGET_SYSTEM_ROOT_DEFINE="$t"
|
|
;;
|
|
esac
|
|
], [
|
|
use_sysroot=no
|
|
TARGET_SYSTEM_ROOT=
|
|
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"\"'
|
|
])
|
|
AC_SUBST(use_sysroot)
|
|
AC_SUBST(TARGET_SYSTEM_ROOT)
|
|
AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
|
|
|
|
dnl Use --enable-gold to decide if this linker should be the default.
|
|
dnl "install_as_default" is set to false if gold is the default linker.
|
|
dnl "installed_linker" is the installed BFD linker name.
|
|
AC_ARG_ENABLE(gold,
|
|
[[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
|
|
[case "${enableval}" in
|
|
default)
|
|
install_as_default=no
|
|
installed_linker=ld.bfd
|
|
;;
|
|
yes|no)
|
|
install_as_default=yes
|
|
installed_linker=ld.bfd
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([invalid --enable-gold argument])
|
|
;;
|
|
esac],
|
|
[install_as_default=yes
|
|
installed_linker=ld.bfd])
|
|
AC_SUBST(install_as_default)
|
|
AC_SUBST(installed_linker)
|
|
|
|
AC_ARG_ENABLE([got],
|
|
AS_HELP_STRING([--enable-got=<type>],
|
|
[GOT handling scheme (target, single, negative, multigot)]),
|
|
[case "${enableval}" in
|
|
target | single | negative | multigot) got_handling=$enableval ;;
|
|
*) AC_MSG_ERROR(bad value ${enableval} for --enable-got option) ;;
|
|
esac],
|
|
[got_handling=target])
|
|
|
|
case "${got_handling}" in
|
|
target)
|
|
AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_TARGET_DEFAULT],
|
|
[Define to choose default GOT handling scheme]) ;;
|
|
single)
|
|
AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_SINGLE],
|
|
[Define to choose default GOT handling scheme]) ;;
|
|
negative)
|
|
AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_NEGATIVE],
|
|
[Define to choose default GOT handling scheme]) ;;
|
|
multigot)
|
|
AC_DEFINE([GOT_HANDLING_DEFAULT], [GOT_HANDLING_MULTIGOT],
|
|
[Define to choose default GOT handling scheme]) ;;
|
|
*) AC_MSG_ERROR(bad value ${got_handling} for --enable-got option) ;;
|
|
esac
|
|
|
|
# PR gas/19109
|
|
# Decide the default method for compressing debug sections.
|
|
ac_default_compressed_debug_sections=unset
|
|
# Provide a configure time option to override our default.
|
|
AC_ARG_ENABLE(compressed_debug_sections,
|
|
AS_HELP_STRING([--enable-compressed-debug-sections={all,ld,none}],
|
|
[compress debug sections by default])],
|
|
[case ,"${enableval}", in
|
|
,yes, | ,all, | *,ld,*) ac_default_compressed_debug_sections=yes ;;
|
|
,no, | ,none,) ac_default_compressed_debug_sections=no ;;
|
|
esac])dnl
|
|
|
|
# Decide if -z relro should be enabled in ELF linker by default.
|
|
ac_default_ld_z_relro=unset
|
|
# Provide a configure time option to override our default.
|
|
AC_ARG_ENABLE(relro,
|
|
AS_HELP_STRING([--enable-relro],
|
|
[enable -z relro in ELF linker by default]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_z_relro=1 ;;
|
|
no) ac_default_ld_z_relro=0 ;;
|
|
esac])dnl
|
|
|
|
AM_BINUTILS_WARNINGS
|
|
|
|
AM_LC_MESSAGES
|
|
|
|
AC_CONFIG_HEADERS([config.h:config.in])
|
|
|
|
# PR 14072
|
|
AH_VERBATIM([00_CONFIG_H_CHECK],
|
|
[/* Check that config.h is #included before system headers
|
|
(this works only for glibc, but that should be enough). */
|
|
#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
|
|
# error config.h must be #included before system headers
|
|
#endif
|
|
#define __CONFIG_H__ 1])
|
|
|
|
if test -z "$target" ; then
|
|
AC_MSG_ERROR(Unrecognized target system type; please check config.sub.)
|
|
fi
|
|
if test -z "$host" ; then
|
|
AC_MSG_ERROR(Unrecognized host system type; please check config.sub.)
|
|
fi
|
|
|
|
# host-specific stuff:
|
|
|
|
ALL_LINGUAS="fr sv tr es da vi zh_CN zh_TW ga fi id bg it uk"
|
|
ZW_GNU_GETTEXT_SISTER_DIR
|
|
AM_PO_SUBDIRS
|
|
|
|
AC_EXEEXT
|
|
|
|
AC_PROG_YACC
|
|
AM_PROG_LEX
|
|
|
|
AM_MAINTAINER_MODE
|
|
AM_CONDITIONAL(GENINSRC_NEVER, false)
|
|
ACX_PROG_CMP_IGNORE_INITIAL
|
|
|
|
. ${srcdir}/configure.host
|
|
|
|
AC_SUBST(HDEFINES)
|
|
AC_SUBST(HOSTING_CRT0)
|
|
AC_SUBST(HOSTING_SCRT0)
|
|
AC_SUBST(HOSTING_LIBS)
|
|
AC_SUBST(HOSTING_SLIBS)
|
|
AC_SUBST(NATIVE_LIB_DIRS)
|
|
|
|
AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h elf-hints.h limits.h locale.h sys/param.h)
|
|
AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h sys/stat.h)
|
|
ACX_HEADER_STRING
|
|
AC_CHECK_FUNCS(glob mkstemp realpath sbrk setlocale waitpid)
|
|
AC_CHECK_FUNCS(open lseek close)
|
|
AC_HEADER_DIRENT
|
|
|
|
dnl AC_CHECK_HEADERS(sys/mman.h)
|
|
AC_FUNC_MMAP
|
|
|
|
AC_SEARCH_LIBS([dlopen], [dl])
|
|
AM_CONDITIONAL([ENABLE_PLUGINS], [test x$plugins = xyes])
|
|
|
|
AC_ARG_ENABLE(initfini-array,
|
|
[ --disable-initfini-array do not use .init_array/.fini_array sections],
|
|
[case "${enableval}" in
|
|
yes|no) ;;
|
|
*) AC_MSG_ERROR([invalid --enable-initfini-array argument]) ;;
|
|
esac], [enable_initfini_array=yes])
|
|
AC_SUBST(enable_initfini_array)
|
|
if test $enable_initfini_array = yes; then
|
|
AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
|
|
[Define .init_array/.fini_array sections are available and working.])
|
|
fi
|
|
|
|
AC_MSG_CHECKING(for a known getopt prototype in unistd.h)
|
|
AC_CACHE_VAL(ld_cv_decl_getopt_unistd_h,
|
|
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>], [extern int getopt (int, char *const*, const char *);])],
|
|
ld_cv_decl_getopt_unistd_h=yes, ld_cv_decl_getopt_unistd_h=no)])
|
|
AC_MSG_RESULT($ld_cv_decl_getopt_unistd_h)
|
|
if test $ld_cv_decl_getopt_unistd_h = yes; then
|
|
AC_DEFINE([HAVE_DECL_GETOPT], 1,
|
|
[Is the prototype for getopt in <unistd.h> in the expected format?])
|
|
fi
|
|
|
|
BFD_BINARY_FOPEN
|
|
|
|
AC_CHECK_DECLS([strstr, free, sbrk, getenv, environ])
|
|
|
|
# When converting linker scripts into strings for use in emulation
|
|
# files, use astring.sed if the compiler supports ANSI string
|
|
# concatenation, or ostring.sed otherwise. This is to support the
|
|
# broken Microsoft MSVC compiler, which limits the length of string
|
|
# constants, while still supporting pre-ANSI compilers which do not
|
|
# support string concatenation.
|
|
AC_MSG_CHECKING([whether ANSI C string concatenation works])
|
|
AC_CACHE_VAL(ld_cv_string_concatenation,
|
|
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [char *a = "a" "a";])],
|
|
ld_cv_string_concatenation=yes,
|
|
ld_cv_string_concatenation=no)])
|
|
AC_MSG_RESULT($ld_cv_string_concatenation)
|
|
if test "$ld_cv_string_concatenation" = "yes"; then
|
|
STRINGIFY=astring.sed
|
|
else
|
|
STRINGIFY=ostring.sed
|
|
fi
|
|
AC_SUBST(STRINGIFY)
|
|
|
|
# target-specific stuff:
|
|
|
|
all_targets=
|
|
EMUL=
|
|
all_emuls=
|
|
all_emul_extras=
|
|
all_libpath=
|
|
|
|
dnl We need to get an arbitrary number of tdir definitions into
|
|
dnl Makefile. We can't do it using AC_SUBST, because autoconf does
|
|
dnl not permit literal newlines in an AC_SUBST variables. So we use a
|
|
dnl file.
|
|
rm -f tdirs
|
|
|
|
# If the host is 64-bit, then we enable 64-bit targets by default.
|
|
# This is consistent with what ../bfd/configure.ac does.
|
|
if test x${want64} = xfalse; then
|
|
AC_CHECK_SIZEOF(void *)
|
|
if test "x${ac_cv_sizeof_void_p}" = "x8"; then
|
|
want64=true
|
|
fi
|
|
fi
|
|
|
|
elf_list_options=FALSE
|
|
elf_shlib_list_options=FALSE
|
|
elf_plt_unwind_list_options=FALSE
|
|
for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
|
|
do
|
|
if test "$targ_alias" = "all"; then
|
|
all_targets=true
|
|
elf_list_options=TRUE
|
|
elf_shlib_list_options=TRUE
|
|
elf_plt_unwind_list_options=TRUE
|
|
else
|
|
# Canonicalize the secondary target names.
|
|
result=`$ac_config_sub $targ_alias 2>/dev/null`
|
|
if test -n "$result"; then
|
|
targ=$result
|
|
else
|
|
targ=$targ_alias
|
|
fi
|
|
|
|
. ${srcdir}/configure.tgt
|
|
|
|
if test "$targ" = "$target"; then
|
|
EMUL=$targ_emul
|
|
fi
|
|
|
|
if test x${want64} = xfalse; then
|
|
. ${srcdir}/../bfd/config.bfd
|
|
fi
|
|
|
|
if test x${want64} = xtrue; then
|
|
targ_extra_emuls="$targ_extra_emuls $targ64_extra_emuls"
|
|
targ_extra_libpath="$targ_extra_libpath $targ64_extra_libpath"
|
|
fi
|
|
|
|
for i in $targ_emul $targ_extra_emuls $targ_extra_libpath; do
|
|
case " $all_emuls " in
|
|
*" e${i}.o "*) ;;
|
|
*)
|
|
all_emuls="$all_emuls e${i}.o"
|
|
eval result=\$tdir_$i
|
|
test -z "$result" && result=$targ_alias
|
|
echo tdir_$i=$result >> tdirs
|
|
case "${i}" in
|
|
*elf*)
|
|
elf_list_options=TRUE
|
|
;;
|
|
*)
|
|
if $GREP "TEMPLATE_NAME=elf32" ${srcdir}/emulparams/${i}.sh >/dev/null 2>/dev/null; then
|
|
elf_list_options=TRUE
|
|
fi
|
|
;;
|
|
esac
|
|
if test "$elf_list_options" = "TRUE"; then
|
|
. ${srcdir}/emulparams/${i}.sh
|
|
if test x${GENERATE_SHLIB_SCRIPT} = xyes; then
|
|
elf_shlib_list_options=TRUE
|
|
fi
|
|
if test x${PLT_UNWIND} = xyes; then
|
|
elf_plt_unwind_list_options=TRUE
|
|
fi
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
for i in $targ_emul $targ_extra_libpath; do
|
|
case " $all_libpath " in
|
|
*" ${i} "*) ;;
|
|
*)
|
|
if test -z "$all_libpath"; then
|
|
all_libpath=${i}
|
|
else
|
|
all_libpath="$all_libpath ${i}"
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
for i in $targ_extra_ofiles; do
|
|
case " $all_emul_extras " in
|
|
*" ${i} "*) ;;
|
|
*)
|
|
all_emul_extras="$all_emul_extras ${i}"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
fi
|
|
done
|
|
|
|
if test x$ac_default_compressed_debug_sections = xyes ; then
|
|
AC_DEFINE(DEFAULT_FLAG_COMPRESS_DEBUG, 1, [Define if you want compressed debug sections by default.])
|
|
fi
|
|
|
|
if test "${ac_default_ld_z_relro}" = unset; then
|
|
ac_default_ld_z_relro=0
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO,
|
|
$ac_default_ld_z_relro,
|
|
[Define to 1 if you want to enable -z relro in ELF linker by default.])
|
|
|
|
AC_SUBST(elf_list_options)
|
|
AC_SUBST(elf_shlib_list_options)
|
|
AC_SUBST(elf_plt_unwind_list_options)
|
|
AC_SUBST(EMUL)
|
|
|
|
TDIRS=tdirs
|
|
AC_SUBST_FILE(TDIRS)
|
|
|
|
if test x${all_targets} = xtrue; then
|
|
if test x${want64} = xtrue; then
|
|
EMULATION_OFILES='$(ALL_EMULATIONS) $(ALL_64_EMULATIONS)'
|
|
EMUL_EXTRA_OFILES='$(ALL_EMUL_EXTRA_OFILES) $(ALL_64_EMUL_EXTRA_OFILES)'
|
|
else
|
|
EMULATION_OFILES='$(ALL_EMULATIONS)'
|
|
EMUL_EXTRA_OFILES='$(ALL_EMUL_EXTRA_OFILES)'
|
|
fi
|
|
else
|
|
EMULATION_OFILES=$all_emuls
|
|
EMUL_EXTRA_OFILES=$all_emul_extras
|
|
fi
|
|
AC_SUBST(EMULATION_OFILES)
|
|
AC_SUBST(EMUL_EXTRA_OFILES)
|
|
AC_SUBST(LIB_PATH)
|
|
|
|
EMULATION_LIBPATH=$all_libpath
|
|
AC_SUBST(EMULATION_LIBPATH)
|
|
|
|
if test x${enable_static} = xno; then
|
|
TESTBFDLIB="--rpath ../bfd/.libs ../bfd/.libs/libbfd.so"
|
|
else
|
|
TESTBFDLIB="../bfd/.libs/libbfd.a"
|
|
fi
|
|
AC_SUBST(TESTBFDLIB)
|
|
|
|
target_vendor=${target_vendor=$host_vendor}
|
|
case "$target_vendor" in
|
|
hp) EXTRA_SHLIB_EXTENSION=".sl" ;;
|
|
*) EXTRA_SHLIB_EXTENSION= ;;
|
|
esac
|
|
|
|
case "$target_os" in
|
|
lynxos) EXTRA_SHLIB_EXTENSION=".a" ;;
|
|
esac
|
|
|
|
if test x${EXTRA_SHLIB_EXTENSION} != x ; then
|
|
AC_DEFINE_UNQUOTED(EXTRA_SHLIB_EXTENSION, "$EXTRA_SHLIB_EXTENSION",
|
|
[Additional extension a shared object might have.])
|
|
fi
|
|
|
|
dnl Required by html, pdf, install-pdf and install-html
|
|
AC_SUBST(datarootdir)
|
|
AC_SUBST(docdir)
|
|
AC_SUBST(htmldir)
|
|
AC_SUBST(pdfdir)
|
|
|
|
AC_CONFIG_FILES(Makefile po/Makefile.in:po/Make-in)
|
|
AC_OUTPUT
|