mirror of
https://github.com/bminor/binutils-gdb.git
synced 2026-02-04 18:51:30 +00:00
Add a new command line option --discard-sframe to the linker. This option allows users to prevent the linker from generating an output .sframe section. The rationale for this option is: Consider the case when say, the distro is shipped with SFrame sections in the installed binaries/libraries. A user application using these installed libraries, but not enabling .sframe for itself just yet, will see an output .sframe corresponding to the pulled in libraries. This is "partial" .sframe information for the application. Adding such an option to the linker, gives user a way to turn off the .sframe section completely without relying on a linker script. Previously, the existing --no-ld-generated-unwind-info option controlled whether (not just .eh_frame for PLT entries, but also) SFrame for PLT entries. The new command line option, --discard-sframe now decouples SFrame from other unwind formats (like .eh_frame), allowing for more control over the output binary's SFrame data. The option is added for architectures that currently support SFrame: AArch64, s390x, and x86_64. bfd/ * elf-sframe.c (_bfd_elf_parse_sframe): Mark with SEC_EXCLUDE if --discard-sframe is in effect. * elf64-s390.c (elf_s390_create_dynamic_sections): Use discard_sframe to guard .sframe section creation. * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Likewise. include/ * bfdlink.h (struct bfd_link_info): Add discard_sframe bitfield. ld/ * ldlex.h (enum option_values): Add OPTION_NO_LD_SFRAME_INFO. * lexsup.c (elf_sframe_list_options): New function. (ld_list_options): Add sframe_info argument. Update callers. * ld.texi: Update documentation. * emulparams/sframe-info.sh: New file. * emultempl/aarch64elf.em: Add --discard-sframe option listing and handling. * emulparams/elf64_s390.sh: Likewise. * emulparams/elf_x86_64.sh: Likewise. * Makefile.am: Update to handle sframe-info.sh and new list options. * configure.ac: Handle SFRAME_INFO target variable. * Makefile.in: Regenerate. * configure: Regenerate. ld/testsuite/ * ld-x86-64/x86-64.exp: New test. * ld-x86-64/sframe-command-line-1.d: New test. * ld-aarch64/aarch64-elf.exp: New test. * ld-s390/s390.exp: New test. * ld-x86-64/x86-64.exp: New test. * ld-aarch64/sframe-command-line-1.d: New test. * ld-s390/sframe-command-line-1.d: New test. * ld-x86-64/sframe-command-line-1.d: New test.
824 lines
25 KiB
Plaintext
824 lines
25 KiB
Plaintext
dnl Process this file with autoconf to produce a configure script
|
|
dnl
|
|
dnl Copyright (C) 2012-2026 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
|
|
|
|
m4_include([../bfd/version.m4])
|
|
AC_INIT([ld], [BFD_VERSION])
|
|
AC_CONFIG_SRCDIR(ldmain.c)
|
|
|
|
AC_CANONICAL_TARGET
|
|
AC_CANONICAL_BUILD
|
|
|
|
AM_INIT_AUTOMAKE
|
|
AM_SILENT_RULES([yes])
|
|
AM_MAINTAINER_MODE
|
|
|
|
case $target in
|
|
*-*-solaris2*)
|
|
case "$SHELL" in
|
|
*bash*)
|
|
;;
|
|
*)
|
|
# PR 32580: Force use of bash to avoid corrupt linker scripts.
|
|
SHELL=/bin/bash
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_CXX
|
|
AC_PROG_GREP
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
AC_PROG_INSTALL
|
|
PKG_PROG_PKG_CONFIG
|
|
|
|
LT_INIT
|
|
ACX_LARGEFILE
|
|
|
|
ac_checking=
|
|
. ${srcdir}/../bfd/development.sh
|
|
test "$development" = true && ac_checking=yes
|
|
AC_ARG_ENABLE(checking,
|
|
[ --enable-checking enable run-time checks],
|
|
[case "${enableval}" in
|
|
no|none) ac_checking= ;;
|
|
*) ac_checking=yes ;;
|
|
esac])dnl
|
|
if test x$ac_checking != x ; then
|
|
AC_DEFINE(ENABLE_CHECKING, 1, [Define if you want run-time sanity checks.])
|
|
fi
|
|
|
|
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
|
|
|
|
BFD_64_BIT
|
|
|
|
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
|
|
|
|
# Select default compression algorithm.
|
|
ac_default_compressed_debug_sections_algorithm=COMPRESS_DEBUG_GABI_ZLIB
|
|
AC_ARG_ENABLE(default_compressed_debug_sections_algorithm,
|
|
AS_HELP_STRING([--enable-default-compressed-debug-sections-algorithm={zlib,zstd}],
|
|
[Default compression algorithm for --enable-compressed-debug-sections.]),
|
|
[case "${enableval}" in
|
|
zstd) ac_default_compressed_debug_sections_algorithm=COMPRESS_DEBUG_ZSTD ;;
|
|
esac])dnl
|
|
|
|
# Decide setting DT_RUNPATH instead of DT_RPATH by default
|
|
ac_default_new_dtags=unset
|
|
# Provide a configure time option to override our default.
|
|
AC_ARG_ENABLE(new_dtags,
|
|
AS_HELP_STRING([--enable-new-dtags],
|
|
[set DT_RUNPATH instead of DT_RPATH by default])],
|
|
[case "${enableval}" in
|
|
yes) ac_default_new_dtags=1 ;;
|
|
no) ac_default_new_dtags=0 ;;
|
|
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
|
|
|
|
# Decide if DT_TEXTREL check should be enabled in ELF linker.
|
|
ac_default_ld_textrel_check=unset
|
|
AC_ARG_ENABLE([textrel-check],
|
|
AS_HELP_STRING([--enable-textrel-check=@<:@yes|no|warning|error@:>@],
|
|
[enable DT_TEXTREL check in ELF linker]),
|
|
[case "${enableval}" in
|
|
yes|no|warning|error) ac_default_ld_textrel_check=${enableval} ;;
|
|
esac])
|
|
|
|
# Decide if -z separate-code should be enabled in ELF linker by default.
|
|
ac_default_ld_z_separate_code=unset
|
|
AC_ARG_ENABLE(separate-code,
|
|
AS_HELP_STRING([--enable-separate-code],
|
|
[enable -z separate-code in ELF linker by default]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_z_separate_code=1 ;;
|
|
no) ac_default_ld_z_separate_code=0 ;;
|
|
esac])
|
|
|
|
# Decide if --rosegment should be enabled in the ELF linker by default.
|
|
ac_default_ld_rosegment=unset
|
|
AC_ARG_ENABLE(rosegment,
|
|
AS_HELP_STRING([--enable-rosegment],
|
|
[enable --rosegment in the ELF linker by default]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_rosegment=1 ;;
|
|
no) ac_default_ld_rosegment=0 ;;
|
|
esac])
|
|
|
|
# Decide if -z mark-plt should be enabled in ELF x86-64 linker by default.
|
|
ac_default_ld_z_mark_plt=unset
|
|
AC_ARG_ENABLE(mark-plt,
|
|
AS_HELP_STRING([--enable-mark-plt],
|
|
[enable -z mark-plt in ELF x86-64 linker by default]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_z_mark_plt=1 ;;
|
|
no) ac_default_ld_z_mark_plt=0 ;;
|
|
esac])
|
|
|
|
# Decide if --gnu2-tls-tag should be enabled in ELF i386 and x86-64
|
|
# linkers by default.
|
|
ac_default_ld_enable_gnu2_tls_tag=unset
|
|
AC_ARG_ENABLE(gnu2-tls-tag,
|
|
AS_HELP_STRING([--enable-gnu2-tls-tag],
|
|
[enable --gnu2-tls-tag in ELF i386/x86-64 linker by default]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_enable_gnu2_tls_tag=1 ;;
|
|
no) ac_default_ld_enable_gnu2_tls_tag=0 ;;
|
|
esac])
|
|
|
|
# Decide if --gnu-tls-tag should be enabled in ELF i386 linker by default.
|
|
ac_default_ld_enable_gnu_tls_tag=unset
|
|
AC_ARG_ENABLE(gnu-tls-tag,
|
|
AS_HELP_STRING([--enable-gnu-tls-tag],
|
|
[enable --gnu-tls-tag in ELF i386 linker by default]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_enable_gnu_tls_tag=1 ;;
|
|
no) ac_default_ld_enable_gnu_tls_tag=0 ;;
|
|
esac])
|
|
|
|
# Decide if -z memory-seal should be enabled in ELF linker by default.
|
|
ac_default_ld_z_memory_seal=unset
|
|
AC_ARG_ENABLE(memory-seal,
|
|
AS_HELP_STRING([--enable-memory-seal],
|
|
[enable -z memory-seal in ELF linker by default]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_z_memory_seal=1 ;;
|
|
no) ac_default_ld_z_memory_seal=0 ;;
|
|
esac])
|
|
|
|
|
|
# By default warn when an executable stack is created due to object files
|
|
# requesting such, not when the user specifies -z execstack.
|
|
ac_default_ld_warn_execstack=2
|
|
AC_ARG_ENABLE(warn-execstack,
|
|
AS_HELP_STRING([--enable-warn-execstack],
|
|
[enable warnings when creating an executable stack]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_warn_execstack=1 ;;
|
|
no) ac_default_ld_warn_execstack=0 ;;
|
|
esac])
|
|
|
|
ac_default_ld_error_execstack=0
|
|
AC_ARG_ENABLE(error-execstack,
|
|
AS_HELP_STRING([--enable-error-execstack],
|
|
[turn executable stack warnings into errors]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_error_execstack=1 ;;
|
|
no) ac_default_ld_error_execstack=0 ;;
|
|
esac])
|
|
|
|
ac_default_ld_warn_rwx_segments=unset
|
|
AC_ARG_ENABLE(warn-rwx-segments,
|
|
AS_HELP_STRING([--enable-warn-rwx-segments],
|
|
[enable warnings when creating segments with RWX permissions]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_warn_rwx_segments=1 ;;
|
|
no) ac_default_ld_warn_rwx_segments=0 ;;
|
|
esac])
|
|
|
|
ac_default_ld_error_rwx_segments=0
|
|
AC_ARG_ENABLE(error-rwx-segments,
|
|
AS_HELP_STRING([--enable-error-rwx-segments],
|
|
[turn executable segment warnings into errors]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_error_rwx_segments=1 ;;
|
|
no) ac_default_ld_error_rwx_segments=0 ;;
|
|
esac])
|
|
|
|
ac_default_ld_default_execstack=unset
|
|
AC_ARG_ENABLE(default-execstack,
|
|
AS_HELP_STRING([--enable-default-execstack],
|
|
[create an executable stack if an input file is missing a .note.GNU-stack section]),
|
|
[case "${enableval}" in
|
|
yes) ac_default_ld_default_execstack=1 ;;
|
|
no) ac_default_ld_default_execstack=0 ;;
|
|
esac])
|
|
|
|
|
|
# Decide if --error-handling-script should be supported.
|
|
ac_support_error_handling_script=unset
|
|
AC_ARG_ENABLE(error-handling-script,
|
|
AS_HELP_STRING([--enable-error-handling-script],
|
|
[enable/disable support for the --error-handling-script option]),
|
|
[case "${enableval}" in
|
|
yes) ac_support_error_handling_script=1 ;;
|
|
no) ac_support_error_handling_script=0 ;;
|
|
esac])
|
|
|
|
# Decide which "--hash-style" to use by default
|
|
# Provide a configure time option to override our default.
|
|
AC_ARG_ENABLE([default-hash-style],
|
|
AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}],
|
|
[use this default hash style]),
|
|
[case "${enable_default_hash_style}" in
|
|
sysv | gnu | both) ;;
|
|
*) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;;
|
|
esac],
|
|
[case "${target}" in
|
|
# Enable gnu hash only on GNU targets, but not mips
|
|
mips*-*-*) enable_default_hash_style=sysv ;;
|
|
*-*-gnu* | *-*-linux*) enable_default_hash_style=both ;;
|
|
*) enable_default_hash_style=sysv ;;
|
|
esac])
|
|
|
|
case "${enable_default_hash_style}" in
|
|
sysv | both) ac_default_emit_sysv_hash=1 ;;
|
|
*) ac_default_emit_sysv_hash=0 ;;
|
|
esac
|
|
|
|
case "${enable_default_hash_style}" in
|
|
gnu | both) ac_default_emit_gnu_hash=1 ;;
|
|
*) ac_default_emit_gnu_hash=0 ;;
|
|
esac
|
|
|
|
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
|
|
|
|
GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
|
|
if test "${enable_libctf}" = yes; then
|
|
AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections])
|
|
fi
|
|
AM_CONDITIONAL(ENABLE_LIBCTF, test "${enable_libctf}" = yes)
|
|
AC_SUBST(enable_libctf)
|
|
|
|
# Used to validate --package-metadata= input. Disabled by default.
|
|
AC_ARG_ENABLE([jansson],
|
|
[AS_HELP_STRING([--enable-jansson],
|
|
[enable jansson [default=no]])],
|
|
[enable_jansson=$enableval],
|
|
[enable_jansson="no"])
|
|
|
|
AS_IF([test "x$enable_jansson" != "xno"],
|
|
[PKG_CHECK_MODULES(JANSSON, [jansson],
|
|
[
|
|
AC_DEFINE(HAVE_JANSSON, 1, [The jansson library is to be used])
|
|
AC_SUBST([JANSSON_CFLAGS])
|
|
AC_SUBST([JANSSON_LIBS])
|
|
],
|
|
[AC_MSG_ERROR([Cannot find jansson library])])
|
|
])
|
|
|
|
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="bg da de es fi fr ga id it ja pt_BR ru sr sv tr uk vi zh_CN zh_TW"
|
|
ZW_GNU_GETTEXT_SISTER_DIR
|
|
|
|
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(NATIVE_LIB_DIRS)
|
|
|
|
# We use headers from include/ that check various HAVE_*_H macros, thus
|
|
# should ensure they are set by configure. This is true even when C99
|
|
# guarantees they are available.
|
|
# sha1.h and md4.h test HAVE_LIMITS_H, HAVE_SYS_TYPES_H and HAVE_STDINT_H
|
|
# plugin-api.h tests HAVE_STDINT_H and HAVE_INTTYPES_H
|
|
# Besides those, we need to check anything used in ld/ not in C99.
|
|
AC_CHECK_HEADERS(fcntl.h elf-hints.h limits.h inttypes.h stdint.h \
|
|
sys/file.h sys/mman.h sys/param.h sys/stat.h sys/time.h \
|
|
sys/types.h unistd.h)
|
|
AC_CHECK_FUNCS(close getrusage glob lseek mkstemp open realpath waitpid mallinfo mallinfo2)
|
|
|
|
BFD_BINARY_FOPEN
|
|
|
|
AC_CHECK_DECLS([environ, stpcpy, strtoull])
|
|
|
|
GCC_AC_FUNC_MMAP
|
|
|
|
AC_SEARCH_LIBS([dlopen], [dl])
|
|
|
|
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
|
|
|
|
dnl xxhash support from gdbsupport/common.m4
|
|
AC_MSG_CHECKING([whether to use xxhash])
|
|
AC_ARG_WITH(xxhash,
|
|
AS_HELP_STRING([--with-xxhash], [use inlined libxxhash for hashing (faster) (auto/yes/no)]),
|
|
[], [with_xxhash=auto])
|
|
if test "x$with_xxhash" != "xno"; then
|
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
|
#define XXH_INLINE_ALL
|
|
#include <xxhash.h>
|
|
XXH128_hash_t r;
|
|
void foo (void) { r = XXH128("foo", 3, 0); }
|
|
])],[
|
|
with_xxhash=yes
|
|
AC_DEFINE([WITH_XXHASH], 1, [whether to use inline xxhash])
|
|
],[
|
|
if test "$with_xxhash" = yes; then
|
|
AC_MSG_ERROR([xxhash is missing or unusable])
|
|
fi
|
|
with_xxhash=no])
|
|
fi
|
|
AC_MSG_RESULT([$with_xxhash])
|
|
|
|
# Link in zlib/zstd if we can. This allows us to read and write
|
|
# compressed debug sections.
|
|
AM_ZLIB
|
|
AC_ZSTD
|
|
|
|
# target-specific stuff:
|
|
|
|
all_targets=
|
|
EMUL=
|
|
all_emuls=
|
|
all_emul_extras=
|
|
all_libpath=
|
|
TDIRS=
|
|
|
|
elf_list_options=false
|
|
elf_shlib_list_options=false
|
|
elf_plt_unwind_list_options=false
|
|
elf_sframe_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
|
|
elf_sframe_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${have_64_bit_bfd} = xno; then
|
|
. ${srcdir}/../bfd/config.bfd
|
|
fi
|
|
|
|
if test x${have_64_bit_bfd} = xyes; 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_libpath $targ_extra_emuls; 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
|
|
TDIRS="$TDIRS
|
|
tdir_$i=$result"
|
|
case "${i}" in
|
|
*elf*)
|
|
elf_list_options=true
|
|
;;
|
|
*)
|
|
if $GREP "TEMPLATE_NAME=elf" ${srcdir}/emulparams/${i}.sh >/dev/null 2>/dev/null; then
|
|
elf_list_options=true
|
|
fi
|
|
;;
|
|
esac
|
|
if test "$elf_list_options" = "true"; then
|
|
source_sh()
|
|
{
|
|
. $1
|
|
}
|
|
source_sh ${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
|
|
if test x${SFRAME_INFO} = xyes; then
|
|
elf_sframe_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
|
|
|
|
AC_DEFINE_UNQUOTED(DEFAULT_COMPRESSED_DEBUG_ALGORITHM, $ac_default_compressed_debug_sections_algorithm,
|
|
[Default compression algorithm for --enable-compressed-debug-sections.])
|
|
|
|
if test "${ac_default_new_dtags}" = unset; then
|
|
ac_default_new_dtags=0
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_NEW_DTAGS,
|
|
$ac_default_new_dtags,
|
|
[Define to 1 if you want to set DT_RUNPATH instead of DT_RPATH by default.])
|
|
|
|
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_default_ld_textrel_check_warning=0
|
|
case "${ac_default_ld_textrel_check}" in
|
|
unset|no)
|
|
ac_default_ld_textrel_check=textrel_check_none
|
|
;;
|
|
yes|warning)
|
|
ac_default_ld_textrel_check=textrel_check_warning
|
|
ac_default_ld_textrel_check_warning=1
|
|
;;
|
|
error)
|
|
ac_default_ld_textrel_check=textrel_check_error
|
|
;;
|
|
esac
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_TEXTREL_CHECK,
|
|
$ac_default_ld_textrel_check,
|
|
[The default method for DT_TEXTREL check in ELF linker.])
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_TEXTREL_CHECK_WARNING,
|
|
$ac_default_ld_textrel_check_warning,
|
|
[Define to 1 if DT_TEXTREL check is warning in ELF linker by default.])
|
|
|
|
if test "${ac_default_ld_z_separate_code}" = unset; then
|
|
ac_default_ld_z_separate_code=0
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_SEPARATE_CODE,
|
|
$ac_default_ld_z_separate_code,
|
|
[Define to 1 if you want to enable -z separate-code in ELF linker by default.])
|
|
|
|
if test "${ac_default_ld_rosegment}" = unset; then
|
|
ac_default_ld_rosegment=0
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_ROSEGMENT,
|
|
$ac_default_ld_rosegment,
|
|
[Define to 1 if you want to enable --rosegment in the ELF linker by default.])
|
|
|
|
if test "${ac_default_ld_z_mark_plt}" = unset; then
|
|
ac_default_ld_z_mark_plt=0
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_MARK_PLT,
|
|
$ac_default_ld_z_mark_plt,
|
|
[Define to 1 if you want to enable -z mark-plt in ELF x86-64 linker by default.])
|
|
|
|
if test "${ac_default_ld_z_memory_seal}" = unset; then
|
|
ac_default_ld_z_memory_seal=0
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_MEMORY_SEAL,
|
|
$ac_default_ld_z_memory_seal,
|
|
[Define to 1 if you want to enable -z memory_seal in ELF linker by default.])
|
|
|
|
if test "${ac_default_ld_enable_gnu2_tls_tag}" = unset; then
|
|
# Default to enable --gnu2-tls-tag if libc.so has the GLIBC_ABI_GNU2_TLS
|
|
# version.
|
|
ac_default_ld_enable_gnu2_tls_tag=2
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_GNU2_TLS_TAG,
|
|
$ac_default_ld_enable_gnu2_tls_tag,
|
|
[Define to 1 if you want to enable --gnu2-tls-tag in ELF i386/x86-64 linker by default.])
|
|
|
|
if test "${ac_default_ld_enable_gnu_tls_tag}" = unset; then
|
|
# Default to enable --gnu-tls-tag if libc.so has the GLIBC_ABI_GNU_TLS
|
|
# version.
|
|
ac_default_ld_enable_gnu_tls_tag=2
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_GNU_TLS_TAG,
|
|
$ac_default_ld_enable_gnu_tls_tag,
|
|
[Define to 1 if you want to enable --gnu-tls-tag in ELF i386 linker by default.])
|
|
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_EXECSTACK,
|
|
$ac_default_ld_warn_execstack,
|
|
[Define to 1 if you want to enable --warn-execstack in ELF linker by default.])
|
|
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_ERROR_EXECSTACK,
|
|
$ac_default_ld_error_execstack,
|
|
[Define to 1 if you want to turn executable stack warnings into errors by default.])
|
|
|
|
if test "${ac_default_ld_warn_rwx_segments}" = unset; then
|
|
ac_default_ld_warn_rwx_segments=1
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_RWX_SEGMENTS,
|
|
$ac_default_ld_warn_rwx_segments,
|
|
[Define to 0 if you want to disable --warn-rwx-segments in ELF linker by default.])
|
|
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_ERROR_RWX_SEGMENTS,
|
|
$ac_default_ld_error_rwx_segments,
|
|
[Define to 1 if you want to turn executable segment warnings into errors by default.])
|
|
|
|
if test "${ac_default_ld_default_execstack}" = unset; then
|
|
ac_default_ld_default_execstack=1
|
|
fi
|
|
AC_DEFINE_UNQUOTED(DEFAULT_LD_EXECSTACK,
|
|
$ac_default_ld_default_execstack,
|
|
[Define to 0 if you want to disable the generation of an executable stack when a .note-GNU-stack section is missing.])
|
|
|
|
|
|
if test "${ac_support_error_handling_script}" = unset; then
|
|
ac_support_error_handling_script=1
|
|
fi
|
|
AC_DEFINE_UNQUOTED(SUPPORT_ERROR_HANDLING_SCRIPT,
|
|
$ac_support_error_handling_script,
|
|
[Define to 1 if you want to support the --error-handling-script command line option.])
|
|
|
|
AC_DEFINE_UNQUOTED([DEFAULT_EMIT_SYSV_HASH],
|
|
[$ac_default_emit_sysv_hash],
|
|
[Define to 1 if you want to emit sysv hash in the ELF linker by default.])
|
|
|
|
AC_DEFINE_UNQUOTED([DEFAULT_EMIT_GNU_HASH],
|
|
[$ac_default_emit_gnu_hash],
|
|
[Define to 1 if you want to emit gnu hash in the ELF linker by default.])
|
|
|
|
AC_SUBST(elf_list_options)
|
|
AC_SUBST(elf_shlib_list_options)
|
|
AC_SUBST(elf_plt_unwind_list_options)
|
|
AC_SUBST(elf_sframe_list_options)
|
|
AC_SUBST(EMUL)
|
|
|
|
AC_SUBST(TDIRS)
|
|
AM_SUBST_NOTMAKE(TDIRS)
|
|
|
|
if test x${all_targets} = xtrue; then
|
|
if test x${have_64_bit_bfd} = xyes; 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="-Wl,--rpath,../bfd/.libs ../bfd/.libs/libbfd.so"
|
|
TESTCTFLIB="-Wl,--rpath,../libctf/.libs ../libctf/.libs/libctf.so"
|
|
TESTSFRAMELIB="-Wl,--rpath,../libsframe/.libs ../libsframe/.libs/libsframe.so"
|
|
else
|
|
TESTBFDLIB="../bfd/.libs/libbfd.a"
|
|
TESTCTFLIB="../libctf/.libs/libctf.a"
|
|
TESTSFRAMELIB="../libsframe/.libs/libsframe.a"
|
|
fi
|
|
if test "${enable_libctf}" = no; then
|
|
TESTCTFLIB=
|
|
fi
|
|
AC_SUBST(TESTBFDLIB)
|
|
AC_SUBST(TESTCTFLIB)
|
|
AC_SUBST(TESTSFRAMELIB)
|
|
|
|
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
|
|
|
|
AC_CONFIG_COMMANDS([default],
|
|
[[
|
|
case "$srcdir" in
|
|
.) srcdirpre= ;;
|
|
*) srcdirpre='$(srcdir)/' ;;
|
|
esac
|
|
POFILES=
|
|
GMOFILES=
|
|
for lang in dummy $OBSOLETE_ALL_LINGUAS; do
|
|
if test $lang != dummy; then
|
|
POFILES="$POFILES $srcdirpre$lang.po"
|
|
GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
|
|
fi
|
|
done
|
|
sed -e '/^SRC-POTFILES =/r po/SRC-POTFILES' \
|
|
-e '/^BLD-POTFILES =/r po/BLD-POTFILES' \
|
|
-e "s,@POFILES@,$POFILES," \
|
|
-e "s,@GMOFILES@,$GMOFILES," \
|
|
po/Makefile.in > po/Makefile]],[[]])
|
|
|
|
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
|
|
|
|
GNU_MAKE_JOBSERVER
|