2 # Process this file with autoconf to generate a configuration script.
4 # Copyright (C) 1997-2025 Free Software Foundation, Inc.
6 #This file is part of GCC.
8 #GCC is free software; you can redistribute it and/or modify it under
9 #the terms of the GNU General Public License as published by the Free
10 #Software Foundation; either version 3, or (at your option) any later
13 #GCC is distributed in the hope that it will be useful, but WITHOUT
14 #ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 #FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 #You should have received a copy of the GNU General Public License
19 #along with GCC; see the file COPYING3. If not see
20 #<http://www.gnu.org/licenses/>.
22 # --------------------------------
23 # Initialization and sanity checks
24 # --------------------------------
27 AC_CONFIG_SRCDIR(tree.cc)
28 AC_CONFIG_MACRO_DIRS([../config] [..])
29 AC_CONFIG_HEADER(auto-host.h:config.in)
31 gcc_version=`cat $srcdir/BASE-VER`
33 # Determine the host, build, and target systems
38 # Determine the noncanonical host name, for Ada.
41 # Determine the noncanonical target name, for directory use.
42 ACX_NONCANONICAL_TARGET
44 # Used for constructing correct paths for offload compilers.
45 real_target_noncanonical=${target_noncanonical}
48 # Determine the target- and build-specific subdirectories
51 # Set program_transform_name
54 # Check for bogus environment variables.
55 # Test if LIBRARY_PATH contains the notation for the current directory
56 # since this would lead to problems installing/building glibc.
57 # LIBRARY_PATH contains the current directory if one of the following
59 # - one of the terminals (":" and ";") is the first or last sign
60 # - two terminals occur directly after each other
61 # - the path contains an element with a dot in it
62 AC_MSG_CHECKING(LIBRARY_PATH variable)
64 case ${LIBRARY_PATH} in
65 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
66 library_path_setting="contains current directory"
69 library_path_setting="ok"
73 AC_MSG_RESULT($library_path_setting)
74 if test "$library_path_setting" != "ok"; then
76 *** LIBRARY_PATH shouldn't contain the current directory when
77 *** building gcc. Please change the environment variable
78 *** and run configure again.])
81 # Test if GCC_EXEC_PREFIX contains the notation for the current directory
82 # since this would lead to problems installing/building glibc.
83 # GCC_EXEC_PREFIX contains the current directory if one of the following
85 # - one of the terminals (":" and ";") is the first or last sign
86 # - two terminals occur directly after each other
87 # - the path contains an element with a dot in it
88 AC_MSG_CHECKING(GCC_EXEC_PREFIX variable)
90 case ${GCC_EXEC_PREFIX} in
91 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
92 gcc_exec_prefix_setting="contains current directory"
95 gcc_exec_prefix_setting="ok"
99 AC_MSG_RESULT($gcc_exec_prefix_setting)
100 if test "$gcc_exec_prefix_setting" != "ok"; then
102 *** GCC_EXEC_PREFIX shouldn't contain the current directory when
103 *** building gcc. Please change the environment variable
104 *** and run configure again.])
111 # Specify the local prefix
113 AC_ARG_WITH(local-prefix,
114 [AS_HELP_STRING([--with-local-prefix=DIR],
115 [specifies directory to put local include])],
116 [case "${withval}" in
117 yes) AC_MSG_ERROR(bad value ${withval} given for local include directory prefix) ;;
119 *) local_prefix=$with_local_prefix ;;
122 # Default local prefix if it is empty
123 if test x$local_prefix = x; then
124 local_prefix=/usr/local
127 AC_ARG_WITH([native-system-header-dir],
128 [ --with-native-system-header-dir=dir
129 use dir as the directory to look for standard
130 system header files in. Defaults to /usr/include.],
132 case ${with_native_system_header_dir} in
133 yes|no) AC_MSG_ERROR([bad value ${withval} given for --with-native-system-header-dir]) ;;
134 /* | [[A-Za-z]]:[[\\/]]*) ;;
135 *) AC_MSG_ERROR([--with-native-system-header-dir argument ${withval} must be an absolute directory]) ;;
137 configured_native_system_header_dir="${withval}"
138 ], [configured_native_system_header_dir=])
140 AC_ARG_WITH(build-sysroot,
141 [AS_HELP_STRING([--with-build-sysroot=sysroot],
142 [use sysroot as the system root during the build])],
143 [if test x"$withval" != x ; then
144 SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
146 [SYSROOT_CFLAGS_FOR_TARGET=])
147 AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
149 if test "x$prefix" = xNONE; then
150 test_prefix=/usr/local
154 if test "x$exec_prefix" = xNONE; then
155 test_exec_prefix=$test_prefix
157 test_exec_prefix=$exec_prefix
161 [AS_HELP_STRING([[--with-sysroot[=DIR]]],
162 [search for usr/lib, usr/include, et al, within DIR])],
164 case ${with_sysroot} in
166 */) with_sysroot=`echo $with_sysroot | sed 's,/$,,'` ;;
168 case ${with_sysroot} in
169 yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
170 *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
173 TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
174 CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
176 case ${TARGET_SYSTEM_ROOT} in
177 "${test_prefix}"|"${test_prefix}/"*|\
178 "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
179 '${prefix}'|'${prefix}/'*|\
180 '${exec_prefix}'|'${exec_prefix}/'*)
181 t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
182 TARGET_SYSTEM_ROOT_DEFINE="$t"
187 TARGET_SYSTEM_ROOT_DEFINE=
188 CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
190 AC_SUBST(TARGET_SYSTEM_ROOT)
191 AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
192 AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
194 # Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
195 # passed in by the toplevel make and thus we'd get different behavior
196 # depending on where we built the sources.
198 # Specify the g++ header file directory
199 AC_ARG_WITH(gxx-include-dir,
200 [AS_HELP_STRING([--with-gxx-include-dir=DIR],
201 [specifies directory to put g++ header files])],
202 [case "${withval}" in
203 yes) AC_MSG_ERROR(bad value ${withval} given for g++ include directory) ;;
205 *) gcc_gxx_include_dir=$with_gxx_include_dir ;;
208 # If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
209 # the former in the latter and, upon success, compute gcc_gxx_include_dir as
210 # relative to the sysroot.
211 gcc_gxx_include_dir_add_sysroot=0
213 # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
214 if test x${gcc_gxx_include_dir} = x; then
215 if test x${enable_version_specific_runtime_libs} = xyes; then
216 gcc_gxx_include_dir='${libsubdir}/include/c++'
218 libstdcxx_incdir='include/c++/$(version)'
219 if test x$host != x$target; then
220 libstdcxx_incdir="$target_alias/$libstdcxx_incdir"
222 gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
224 elif test "${with_sysroot+set}" = set; then
225 gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
226 if test "${gcc_gxx_without_sysroot}"; then
227 gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
228 gcc_gxx_include_dir_add_sysroot=1
232 # Configuration for an alternate set of C++ headers.
233 gcc_gxx_libcxx_include_dir=
234 # Specify the alternate g++ header file directory
235 AC_ARG_WITH(gxx-libcxx-include-dir,
236 [AS_HELP_STRING([--with-gxx-libcxx-include-dir=DIR],
237 [specifies directory to find libc++ header files])],
238 [case "${withval}" in
239 yes) AC_MSG_ERROR(bad value ${withval} given for libc++ include directory) ;;
240 *) gcc_gxx_libcxx_include_dir=$with_gxx_libcxx_include_dir ;;
243 # --with-gxx-libcxx-include-dir controls the enabling of the -stdlib option.
244 # if --with-gxx-libcxx-include-dir is 'no' we disable the stdlib option.
245 # if --with-gxx-libcxx-include-dir is unset we enable the stdlib option
246 # based on the platform (to be available on platform versions where it is the
247 # default for the system tools). We also use a default path within the compiler
249 # Otherwise, we use the path provided and enable the stdlib option.
250 # If both --with-sysroot and --with-gxx-libcxx-include-dir are passed, we
251 # check to see if the latter starts with the former and, upon success, compute
252 # gcc_gxx_libcxx_include_dir as relative to the sysroot.
253 gcc_gxx_libcxx_include_dir_add_sysroot=0
254 gcc_enable_stdlib_opt=0
255 if test x${gcc_gxx_libcxx_include_dir} != x; then
256 if test x${gcc_gxx_libcxx_include_dir} = xno; then
257 # set defaults for the dir, but the option is disabled anyway.
258 gcc_gxx_libcxx_include_dir=
260 gcc_enable_stdlib_opt=1
264 *-darwin1[[1-9]]* | *-darwin2*)
265 # Default this on for Darwin versions which default to libcxx,
266 # and embed the path in the compiler install so that we get a
267 # self-contained toolchain.
268 gcc_enable_stdlib_opt=1
273 AC_DEFINE_UNQUOTED(ENABLE_STDLIB_OPTION, $gcc_enable_stdlib_opt,
274 [Define if the -stdlib= option should be enabled.])
276 # Sysroot behaviour as for gxx-include-dir
277 if test x${gcc_gxx_libcxx_include_dir} = x; then
278 # default path,embedded in the compiler tree.
279 libcxx_incdir='include/c++/v1'
280 if test x${enable_version_specific_runtime_libs} = xyes; then
281 gcc_gxx_libcxx_include_dir='${libsubdir}/$libcxx_incdir'
283 if test x$host != x$target; then
284 libcxx_incdir="$target_alias/$libcxx_incdir"
286 gcc_gxx_libcxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libcxx_incdir"
288 elif test "${with_sysroot+set}" = set; then
289 gcc_gxx_libcxx_without_sysroot=`expr "${gcc_gxx_libcxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
290 if test "${gcc_gxx_libcxx_without_sysroot}"; then
291 gcc_gxx_libcxx_include_dir="${gcc_gxx_libcxx_without_sysroot}"
292 gcc_gxx_libcxx_include_dir_add_sysroot=1
296 AC_ARG_WITH(cpp_install_dir,
297 [AC_HELP_STRING([--with-cpp-install-dir=DIR],
298 [install the user visible C preprocessor in DIR
299 (relative to PREFIX) as well as PREFIX/bin])],
300 [if test x$withval = xyes; then
301 AC_MSG_ERROR([option --with-cpp-install-dir requires an argument])
302 elif test x$withval != xno; then
303 cpp_install_dir=$withval
306 # We would like to our source tree to be readonly. However when releases or
307 # pre-releases are generated, the flex/bison generated files as well as the
308 # various formats of manuals need to be included along with the rest of the
309 # sources. Therefore we have --enable-generated-files-in-srcdir to do
312 AC_MSG_CHECKING([whether to place generated files in the source directory])
313 dnl generated-files-in-srcdir is disabled by default
314 AC_ARG_ENABLE(generated-files-in-srcdir,
315 [AS_HELP_STRING([--enable-generated-files-in-srcdir],
316 [put copies of generated files in source dir
317 intended for creating source tarballs for users
318 without texinfo bison or flex])],
319 generated_files_in_srcdir=$enableval,
320 generated_files_in_srcdir=no)
322 AC_MSG_RESULT($generated_files_in_srcdir)
324 if test "$generated_files_in_srcdir" = "yes"; then
331 # -------------------
332 # Find default linker
333 # -------------------
337 [AS_HELP_STRING([--with-gnu-ld], [arrange to work with GNU ld])],
338 gnu_ld_flag="$with_gnu_ld",
343 ld64_flag=yes # Darwin can only use a ld64-compatible linker.
344 dsymutil_flag=yes # Darwin uses dsymutil to link debug.
352 # With pre-defined ld
354 [AS_HELP_STRING([--with-ld], [arrange to use the specified ld (full pathname)])],
355 DEFAULT_LINKER="$with_ld")
356 if test x"${DEFAULT_LINKER+set}" = x"set"; then
357 if test ! -x "$DEFAULT_LINKER"; then
358 AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
359 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
361 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then
364 AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
365 [Define to enable the use of a default linker.])
368 AC_MSG_CHECKING([whether a default linker was specified])
369 if test x"${DEFAULT_LINKER+set}" = x"set"; then
370 if test x"$gnu_ld_flag" = x"no"; then
371 AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
373 AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
379 # With demangler in GNU ld
380 AC_ARG_WITH(demangler-in-ld,
381 [AS_HELP_STRING([--with-demangler-in-ld], [try to use demangler in GNU ld])],
382 demangler_in_ld="$with_demangler_in_ld",
385 # Allow the user to specify a dsymutil executable (used on Darwin only, so far)
386 AC_ARG_WITH(dsymutil,
387 [AS_HELP_STRING([--with-dsymutil], [arrange to use the specified dsymutil (full pathname)])],
388 DEFAULT_DSYMUTIL="$with_dsymutil")
391 if test x"${DEFAULT_DSYMUTIL+set}" = x"set"; then
392 if test ! -x "$DEFAULT_DSYMUTIL"; then
393 AC_MSG_ERROR([cannot execute: $DEFAULT_DSYMUTIL: check --with-dsymutil or env. var. DEFAULT_DSYMUTIL])
395 if dsymutil_vers=`$DEFAULT_DSYMUTIL -v /dev/null 2>&1`; then
399 AC_DEFINE_UNQUOTED(DEFAULT_DSYMUTIL,"$DEFAULT_DSYMUTIL",
400 [Define to enable the use of a default debug linker.])
403 AC_MSG_CHECKING([whether a default dsymutil was specified])
404 if test x"${DEFAULT_DSYMUTIL+set}" = x"set"; then
405 AC_MSG_RESULT([yes ($DEFAULT_DSYMUTIL)])
410 # ----------------------
411 # Find default assembler
412 # ----------------------
416 [AS_HELP_STRING([--with-gnu-as], [arrange to work with GNU as])],
417 gas_flag="$with_gnu_as",
421 [AS_HELP_STRING([--with-as], [arrange to use the specified as (full pathname)])],
422 DEFAULT_ASSEMBLER="$with_as")
423 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
424 if test ! -x "$DEFAULT_ASSEMBLER"; then
425 AC_MSG_ERROR([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
426 elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
429 AC_DEFINE_UNQUOTED(DEFAULT_ASSEMBLER,"$DEFAULT_ASSEMBLER",
430 [Define to enable the use of a default assembler.])
433 AC_MSG_CHECKING([whether a default assembler was specified])
434 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
435 if test x"$gas_flag" = x"no"; then
436 AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
438 AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
448 # If a non-executable a.out is present (e.g. created by GNU as above even if
449 # invoked with -v only), the IRIX 6 native ld just overwrites the existing
450 # file, even when creating an executable, so an execution test fails.
451 # Remove possible default executable files to avoid this.
453 # FIXME: This really belongs into AC_PROG_CC and can be removed once
454 # Autoconf includes it.
455 rm -f a.out a.exe b.out
457 # Find the native compiler
460 ACX_PROG_GNAT([-I"$srcdir"/ada/libgnat])
461 ACX_PROG_GDC([-I"$srcdir"/d])
463 # Do configure tests with the C++ compiler, since that's what we build with.
466 # Remove all -O flags: for historical reasons, unless bootstrapping we prefer
467 # optimizations to be activated explicitly by the toplevel.
472 for flag in $CFLAGS; do
475 *) new_CFLAGS="$new_CFLAGS $flag" ;;
480 for flag in $CXXFLAGS; do
483 *) new_CXXFLAGS="$new_CXXFLAGS $flag" ;;
486 CXXFLAGS=$new_CXXFLAGS
493 # Determine PICFLAG for target gnatlib.
494 GCC_PICFLAG_FOR_TARGET
495 AC_SUBST(PICFLAG_FOR_TARGET)
497 # -------------------------
498 # Check C compiler features
499 # -------------------------
501 AC_USE_SYSTEM_EXTENSIONS
507 AC_CHECK_SIZEOF(ino_t)
508 AC_CHECK_SIZEOF(dev_t)
510 # Select the right stat being able to handle 64bit inodes, if needed.
511 if test "$enable_largefile" != no; then
512 case "$host, $build" in
513 *-*-aix*,*|*,*-*-aix*)
514 if test "$ac_cv_sizeof_ino_t" = "4" -a "$ac_cv_sizeof_dev_t" = 4; then
515 AC_DEFINE(HOST_STAT_FOR_64BIT_INODES, stat64x,
516 [Define which stat syscall is able to handle 64bit indodes.])
522 # sizeof(char) is 1 by definition.
523 AC_CHECK_SIZEOF(void *)
524 AC_CHECK_SIZEOF(short)
526 AC_CHECK_SIZEOF(long)
527 AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
529 if test x"$ac_cv_c_uint64_t" = x"no" -o x"$ac_cv_c_int64_t" = x"no"; then
530 AC_MSG_ERROR([uint64_t or int64_t not found])
533 # check what underlying integer type int64_t uses
534 AC_CACHE_CHECK(for int64_t underlying type, ac_cv_int64_t_type, [
535 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
539 template <typename T> struct X { };
541 struct X<long> { typedef long t; };
542 ]], [[X<int64_t>::t x;]])],[ac_cv_int64_t_type=long],[ac_cv_int64_t_type="long long"])])
543 if test "$ac_cv_int64_t_type" = "long"; then
544 AC_DEFINE(INT64_T_IS_LONG, 1,
545 [Define if int64_t uses long as underlying type.])
547 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
551 template <typename T> struct X { };
553 struct X<long long> { typedef long long t; };
554 ]], [[X<int64_t>::t x;]])],[],[AC_MSG_ERROR([error verifying int64_t uses long long])])
557 AC_CACHE_CHECK(for std::swap in <utility>, ac_cv_std_swap_in_utility, [
558 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
560 ]], [[int a, b; std::swap(a,b);]])],[ac_cv_std_swap_in_utility=yes],[ac_cv_std_swap_in_utility=no])])
561 if test $ac_cv_std_swap_in_utility = yes; then
562 AC_DEFINE(HAVE_SWAP_IN_UTILITY, 1,
563 [Define if <utility> defines std::swap.])
566 # Check whether compiler is affected by placement new aliasing bug (PR 29286).
567 # If the host compiler is affected by the bug, and we build with optimization
568 # enabled (which happens e.g. when cross-compiling), the pool allocator may
569 # get miscompiled. Use -fno-strict-aliasing to work around this problem.
570 # Since there is no reliable feature check for the presence of this bug,
571 # we simply use a GCC version number check. (This should never trigger for
572 # stages 2 or 3 of a native bootstrap.)
574 if test "$GCC" = yes; then
575 saved_CXXFLAGS="$CXXFLAGS"
577 # The following test compilation will succeed if and only if $CXX accepts
578 # -fno-strict-aliasing *and* is older than GCC 4.3.
579 CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
580 AC_MSG_CHECKING([whether $CXX is affected by placement new aliasing bug])
581 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
582 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
583 #error compiler not affected by placement new aliasing bug
586 [AC_MSG_RESULT([yes]); aliasing_flags='-fno-strict-aliasing'],
587 [AC_MSG_RESULT([no])])
589 CXXFLAGS="$saved_CXXFLAGS"
591 AC_SUBST(aliasing_flags)
595 # ---------------------
596 # Warnings and checking
597 # ---------------------
599 # Check $CC warning features (if it's GCC).
600 # We want to use -pedantic, but we don't want warnings about
604 # So, we only use -pedantic if we can disable those warnings.
606 # In stage 1, disable -Wformat warnings from old GCCs about new % codes
607 AC_ARG_ENABLE(build-format-warnings,
608 AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
609 [],[enable_build_format_warnings=yes])
610 AS_IF([test $enable_build_format_warnings = no],
611 [wf_opt=-Wno-format],[wf_opt=])
612 ACX_PROG_CXX_WARNING_OPTS(
613 m4_quote(m4_do([-W -Wall -Wno-error=narrowing -Wwrite-strings ],
614 [-Wcast-qual $wf_opt])),
616 ACX_PROG_CC_WARNING_OPTS(
617 m4_quote(m4_do([-Wstrict-prototypes -Wmissing-prototypes ],
618 [])), [c_loose_warn])
619 ACX_PROG_CXX_WARNING_OPTS(
620 m4_quote(m4_do([-Wmissing-format-attribute ], [-Wconditionally-supported ],
621 [-Woverloaded-virtual])), [strict_warn])
622 ACX_PROG_CC_WARNING_OPTS(
623 m4_quote(m4_do([-Wold-style-definition -Wc++-compat])), [c_strict_warn])
624 ACX_PROG_CXX_WARNING_ALMOST_PEDANTIC(
625 m4_quote(m4_do([-Wno-long-long -Wno-variadic-macros ],
626 [-Wno-overlength-strings])), [strict_warn])
627 ACX_PROG_CXX_WARNINGS_ARE_ERRORS([manual], [strict_warn])
629 # The above macros do nothing if the compiler is not GCC. However, the
630 # Makefile has more goo to add other flags, so these variables are used
631 # to enable warnings only for GCC.
634 if test "x$GCC" = "xyes"; then
635 warn_cflags='$(GCC_WARN_CFLAGS)'
636 warn_cxxflags='$(GCC_WARN_CXXFLAGS)'
638 AC_SUBST(warn_cflags)
639 AC_SUBST(warn_cxxflags)
641 # Disable exceptions and RTTI if building with g++
642 ACX_PROG_CC_WARNING_OPTS(
643 m4_quote(m4_do([-fno-exceptions -fno-rtti -fasynchronous-unwind-tables])),
646 # Enable expensive internal checks
648 if test x"`cat $srcdir/DEV-PHASE`" != xexperimental; then
652 AC_ARG_ENABLE(checking,
653 [AS_HELP_STRING([[--enable-checking[=LIST]]],
654 [enable expensive run-time checks. With LIST,
655 enable only specific categories of checks.
656 Categories are: yes,no,all,none,release.
657 Flags are: assert,df,extra,fold,gc,gcac,gimple,misc,
658 rtlflag,rtl,runtime,tree,valgrind,types])],
659 [ac_checking_flags="${enableval}"],[
660 # Determine the default checks.
661 if test x$is_release = x ; then
662 ac_checking_flags=yes,extra
664 ac_checking_flags=release
666 IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS,"
667 for check in release $ac_checking_flags
670 # these set all the flags to specific states
671 yes) ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking= ;
672 ac_fold_checking= ; ac_gc_checking=1 ; ac_extra_checking= ;
673 ac_gc_always_collect= ; ac_gimple_checking=1 ; ac_rtl_checking= ;
674 ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
675 ac_tree_checking=1 ; ac_valgrind_checking= ;
676 ac_types_checking=1 ;;
677 no|none) ac_assert_checking= ; ac_checking= ; ac_df_checking= ;
678 ac_fold_checking= ; ac_gc_checking= ; ac_extra_checking= ;
679 ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
680 ac_rtlflag_checking= ; ac_runtime_checking= ;
681 ac_tree_checking= ; ac_valgrind_checking= ;
682 ac_types_checking= ;;
683 all) ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking=1 ;
684 ac_fold_checking=1 ; ac_gc_checking=1 ; ac_extra_checking=1 ;
685 ac_gc_always_collect=1 ; ac_gimple_checking=1 ; ac_rtl_checking=1 ;
686 ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
687 ac_tree_checking=1 ; ac_valgrind_checking= ;
688 ac_types_checking=1 ;;
689 release) ac_assert_checking=1 ; ac_checking= ; ac_df_checking= ;
690 ac_fold_checking= ; ac_gc_checking= ; ac_extra_checking= ;
691 ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
692 ac_rtlflag_checking= ; ac_runtime_checking=1 ;
693 ac_tree_checking= ; ac_valgrind_checking= ;
694 ac_types_checking= ;;
695 # these enable particular checks
696 assert) ac_assert_checking=1 ;;
697 df) ac_df_checking=1 ;;
698 extra) ac_extra_checking=1 ;;
699 fold) ac_fold_checking=1 ;;
700 gc) ac_gc_checking=1 ;;
701 gcac) ac_gc_always_collect=1 ;;
702 gimple) ac_gimple_checking=1 ;;
703 misc) ac_checking=1 ;;
704 rtl) ac_rtl_checking=1 ;;
705 rtlflag) ac_rtlflag_checking=1 ;;
706 runtime) ac_runtime_checking=1 ;;
707 tree) ac_tree_checking=1 ;;
708 types) ac_types_checking=1 ;;
709 valgrind) ac_valgrind_checking=1 ;;
710 *) AC_MSG_ERROR(unknown check category $check) ;;
715 if test x$ac_checking != x ; then
716 AC_DEFINE(CHECKING_P, 1,
717 [Define to 0/1 if you want more run-time sanity checks. This one gets a grab
718 bag of miscellaneous but relatively cheap checks.])
720 AC_DEFINE(CHECKING_P, 0)
722 if test x$ac_extra_checking != x ; then
723 AC_DEFINE(ENABLE_EXTRA_CHECKING, 1,
724 [Define to 0/1 if you want extra run-time checking that might affect code
727 AC_DEFINE(ENABLE_EXTRA_CHECKING, 0)
729 if test x$ac_df_checking != x ; then
730 AC_DEFINE(ENABLE_DF_CHECKING, 1,
731 [Define if you want more run-time sanity checks for dataflow.])
733 if test x$ac_assert_checking != x ; then
734 AC_DEFINE(ENABLE_ASSERT_CHECKING, 1,
735 [Define if you want assertions enabled. This is a cheap check.])
737 if test x$ac_gimple_checking != x ; then
738 AC_DEFINE(ENABLE_GIMPLE_CHECKING, 1,
739 [Define if you want operations on GIMPLE (the basic data structure of
740 the high-level optimizers) to be checked for dynamic type safety at
741 runtime. This is moderately expensive.])
743 GCC_TARGET_TEMPLATE(ENABLE_RUNTIME_CHECKING)
744 if test x$ac_runtime_checking != x ; then
745 AC_DEFINE(ENABLE_RUNTIME_CHECKING, 1,
746 [Define if you want runtime assertions enabled. This is a cheap check.])
748 if test x$ac_tree_checking != x ; then
749 AC_DEFINE(ENABLE_TREE_CHECKING, 1,
750 [Define if you want all operations on trees (the basic data
751 structure of the front ends) to be checked for dynamic type safety
752 at runtime. This is moderately expensive.
756 if test x$ac_types_checking != x ; then
757 AC_DEFINE(ENABLE_TYPES_CHECKING, 1,
758 [Define if you want all gimple types to be verified after gimplifiation.
762 AC_SUBST(TREECHECKING)
763 if test x$ac_rtl_checking != x ; then
764 AC_DEFINE(ENABLE_RTL_CHECKING, 1,
765 [Define if you want all operations on RTL (the basic data structure
766 of the optimizer and back end) to be checked for dynamic type safety
767 at runtime. This is quite expensive.])
769 if test x$ac_rtlflag_checking != x ; then
770 AC_DEFINE(ENABLE_RTL_FLAG_CHECKING, 1,
771 [Define if you want RTL flag accesses to be checked against the RTL
772 codes that are supported for each access macro. This is relatively
775 if test x$ac_gc_checking != x ; then
776 AC_DEFINE(ENABLE_GC_CHECKING, 1,
777 [Define if you want the garbage collector to do object poisoning and
778 other memory allocation checks. This is quite expensive.])
780 if test x$ac_gc_always_collect != x ; then
781 AC_DEFINE(ENABLE_GC_ALWAYS_COLLECT, 1,
782 [Define if you want the garbage collector to operate in maximally
783 paranoid mode, validating the entire heap and collecting garbage at
784 every opportunity. This is extremely expensive.])
786 if test x$ac_fold_checking != x ; then
787 AC_DEFINE(ENABLE_FOLD_CHECKING, 1,
788 [Define if you want fold checked that it never destructs its argument.
789 This is quite expensive.])
791 valgrind_path_defines=
793 if test x$ac_valgrind_checking != x ; then
794 AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
795 [$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
796 if test "x$valgrind_path" = "x"; then
797 AC_MSG_ERROR([*** Cannot find valgrind])
799 valgrind_path_defines=-DVALGRIND_PATH='\"'$valgrind_path'\"'
800 valgrind_command="$valgrind_path -q"
801 AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
802 [Define if you want to run subprograms and generated programs
803 through valgrind (a memory checker). This is extremely expensive.])
805 AC_SUBST(valgrind_path_defines)
806 AC_SUBST(valgrind_command)
808 # Enable code coverage collection
809 AC_ARG_ENABLE(coverage,
810 [AS_HELP_STRING([[--enable-coverage[=LEVEL]]],
811 [enable compiler's code coverage collection.
812 Use to measure compiler performance and locate
813 unused parts of the compiler. With LEVEL, specify
814 optimization. Values are opt, noopt,
816 [case "${enableval}" in
818 coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O0 -fkeep-static-functions"
821 coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O2 -fkeep-static-functions"
824 # a.k.a. --disable-coverage
828 AC_MSG_ERROR(unknown coverage setting $enableval)
832 AC_SUBST(coverage_flags)
834 AC_ARG_ENABLE(gather-detailed-mem-stats,
835 [AS_HELP_STRING([--enable-gather-detailed-mem-stats],
836 [enable detailed memory allocation stats gathering])], [],
837 [enable_gather_detailed_mem_stats=no])
838 gather_stats=`if test $enable_gather_detailed_mem_stats != no; then echo 1; else echo 0; fi`
839 AC_DEFINE_UNQUOTED(GATHER_STATISTICS, $gather_stats,
840 [Define to enable detailed memory allocation stats gathering.])
842 AC_ARG_ENABLE(valgrind-annotations,
843 [AS_HELP_STRING([--enable-valgrind-annotations],
844 [enable valgrind runtime interaction])], [],
845 [enable_valgrind_annotations=no])
846 AC_CHECK_HEADER(valgrind/memcheck.h)
847 if test x$enable_valgrind_annotations != xno \
848 || test x$ac_valgrind_checking != x; then
849 if test $ac_cv_header_valgrind_memcheck_h = no; then
850 AC_MSG_ERROR([*** Cannot find valgrind/memcheck.h])
852 AC_DEFINE(ENABLE_VALGRIND_ANNOTATIONS, 1,
853 [Define to get calls to the valgrind runtime enabled.])
856 # -------------------------------
857 # Miscenalleous configure options
858 # -------------------------------
860 # Determine whether or not multilibs are enabled.
861 AC_ARG_ENABLE(multilib,
862 [AS_HELP_STRING([--enable-multilib],
863 [enable library support for multiple ABIs])],
864 [], [enable_multilib=yes])
865 AC_SUBST(enable_multilib)
867 # Determine whether or not multiarch is enabled.
868 AC_ARG_ENABLE(multiarch,
869 [AS_HELP_STRING([--enable-multiarch],
870 [enable support for multiarch paths])],
871 [case "${enableval}" in
872 yes|no|auto) enable_multiarch=$enableval;;
873 *) AC_MSG_ERROR(bad value ${enableval} given for --enable-multiarch option) ;;
874 esac], [enable_multiarch=auto])
875 if test x${enable_multiarch} = xauto; then
876 if test x${with_native_system_header_dir} != x; then
877 ma_msg_suffix=", disabled auto check (configured with --native-system-header-dir)"
880 if test x$host != x$target && test "x$with_sysroot" = x; then
881 ma_msg_suffix=", disabled auto check (cross build configured without --with-sysroot)"
885 if test x${enable_multiarch} = xyes; then
886 AC_DEFINE(ENABLE_MULTIARCH, 1, [If --with-multiarch option is used])
888 AC_MSG_CHECKING(for multiarch configuration)
889 AC_SUBST(enable_multiarch)
890 AC_MSG_RESULT($enable_multiarch$ma_msg_suffix)
892 # needed for setting the multiarch name for soft-float/hard-float ABIs
896 # default stack clash protection guard size as power of twos in bytes.
897 # Please keep these in sync with params.def.
901 # Keep the default value when the option is not used to 0, this allows us to
902 # distinguish between the cases where the user specifially set a value via
903 # configure and when the normal default value is used.
904 AC_ARG_WITH(stack-clash-protection-guard-size,
905 [AS_HELP_STRING([--with-stack-clash-protection-guard-size=size],
906 [Set the default stack clash protection guard size for specific targets as a power of two in bytes.])],
907 [DEFAULT_STK_CLASH_GUARD_SIZE="$with_stack_clash_protection_guard_size"], [DEFAULT_STK_CLASH_GUARD_SIZE=0])
908 if test $DEFAULT_STK_CLASH_GUARD_SIZE -ne 0 \
909 && (test $DEFAULT_STK_CLASH_GUARD_SIZE -lt $stk_clash_min \
910 || test $DEFAULT_STK_CLASH_GUARD_SIZE -gt $stk_clash_max); then
911 AC_MSG_ERROR(m4_normalize([
912 Invalid value $DEFAULT_STK_CLASH_GUARD_SIZE for --with-stack-clash-protection-guard-size. \
913 Must be between $stk_clash_min and $stk_clash_max.]))
916 AC_DEFINE_UNQUOTED(DEFAULT_STK_CLASH_GUARD_SIZE, $DEFAULT_STK_CLASH_GUARD_SIZE,
917 [Define to larger than zero set the default stack clash protector size.])
919 # Specify the number of splits of match.pd to generate.
920 AC_ARG_WITH(matchpd-partitions,
921 [AS_HELP_STRING([--with-matchpd-partitions=num],
922 [Set the number of partitions to make for gimple and generic when splitting match.pd. [default=10]])],
923 [DEFAULT_MATCHPD_PARTITIONS="$with_matchpd_partitions"], [DEFAULT_MATCHPD_PARTITIONS=10])
924 if (test $DEFAULT_MATCHPD_PARTITIONS -lt 1); then
925 AC_MSG_ERROR(m4_normalize([
926 Invalid value $DEFAULT_MATCHPD_PARTITIONS for --with-matchpd-partitions. \
927 Cannot be negative.]))
930 AC_SUBST(DEFAULT_MATCHPD_PARTITIONS)
932 # Specify the number of splits of insn-emit.cc and insn-recog.cc to generate.
933 AC_ARG_WITH(insnemit-partitions,
934 [AS_HELP_STRING([--with-insnemit-partitions=num],
935 [Set the number of partitions of insn-emit.cc for genemit and genrecog to create. [default=10]])],
936 [DEFAULT_INSNEMIT_PARTITIONS="$with_insnemit_partitions"], [DEFAULT_INSNEMIT_PARTITIONS=10])
937 if (test $DEFAULT_INSNEMIT_PARTITIONS -lt 1); then
938 AC_MSG_ERROR(m4_normalize([
939 Invalid value $DEFAULT_INSNEMIT_PARTITIONS for --with-insnemit-partitions. \
940 Cannot be negative.]))
943 AC_SUBST(DEFAULT_INSNEMIT_PARTITIONS)
945 # Enable __cxa_atexit for C++.
946 AC_ARG_ENABLE(__cxa_atexit,
947 [AS_HELP_STRING([--enable-__cxa_atexit], [enable __cxa_atexit for C++])],
950 # Enable C extension for decimal float if target supports it.
951 GCC_AC_ENABLE_DECIMAL_FLOAT([$target])
953 dfp=`if test $enable_decimal_float != no; then echo 1; else echo 0; fi`
954 AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_FLOAT, $dfp,
955 [Define to 1 to enable decimal float extension to C.])
957 # Use default_decimal_float for dependency.
958 enable_decimal_float=$default_decimal_float
960 bid=`if test $enable_decimal_float = bid; then echo 1; else echo 0; fi`
961 AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_BID_FORMAT, $bid,
962 [Define to 1 to specify that we are using the BID decimal floating
963 point format instead of DPD])
965 # Enable C extension for fixed-point arithmetic.
966 AC_ARG_ENABLE(fixed-point,
967 [AS_HELP_STRING([--enable-fixed-point],
968 [enable fixed-point arithmetic extension to C])],
973 enable_fixed_point=yes
977 enable_fixed_point=yes
980 enable_fixed_point=yes
983 AC_MSG_WARN([fixed-point is not supported for this target, ignored])
984 enable_fixed_point=no
988 AC_SUBST(enable_fixed_point)
990 fixedpoint=`if test $enable_fixed_point = yes; then echo 1; else echo 0; fi`
991 AC_DEFINE_UNQUOTED(ENABLE_FIXED_POINT, $fixedpoint,
992 [Define to 1 to enable fixed-point arithmetic extension to C.])
995 # Pass with no value to take the default
996 # Pass with a value to specify a thread package
997 AC_ARG_ENABLE(threads,
998 [AS_HELP_STRING([[--enable-threads[=LIB]]],
999 [enable thread usage for target GCC,
1000 using LIB thread package])],,
1001 [enable_threads=''])
1004 [AS_HELP_STRING([--enable-tls],
1005 [enable or disable generation of tls code
1006 overriding the assembler check for tls support])],
1010 *) AC_MSG_ERROR(['$enable_tls' is an invalid value for --enable-tls.
1011 Valid choices are 'yes' and 'no'.]) ;;
1015 AC_ARG_ENABLE(vtable-verify,
1016 [AS_HELP_STRING([--enable-vtable-verify],
1017 [enable vtable verification feature])],,
1018 [enable_vtable_verify=no])
1019 vtable_verify=`if test x$enable_vtable_verify = xyes; then echo 1; else echo 0; fi`
1020 AC_DEFINE_UNQUOTED(ENABLE_VTABLE_VERIFY, $vtable_verify,
1021 [Define 0/1 if vtable verification feature is enabled.])
1023 AC_ARG_ENABLE(analyzer,
1024 [AS_HELP_STRING([--disable-analyzer],
1025 [disable -fanalyzer static analyzer])],
1026 if test x$enable_analyzer = xno; then
1032 AC_DEFINE_UNQUOTED(ENABLE_ANALYZER, $analyzer,
1033 [Define 0/1 if static analyzer feature is enabled.])
1035 AC_ARG_ENABLE(objc-gc,
1036 [AS_HELP_STRING([--enable-objc-gc],
1037 [enable the use of Boehm's garbage collector with
1038 the GNU Objective-C runtime])],
1039 if test x$enable_objc_gc = xno; then
1047 [AS_HELP_STRING([--with-dwarf2], [force the default debug format to be DWARF 2 (or later)])],
1048 dwarf2="$with_dwarf2",
1051 AC_ARG_ENABLE(shared,
1052 [AS_HELP_STRING([--disable-shared], [don't provide a shared libgcc])],
1054 case $enable_shared in
1058 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
1059 for pkg in $enableval; do
1060 if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
1067 ], [enable_shared=yes])
1068 AC_SUBST(enable_shared)
1071 [ --disable-gcov don't provide libgcov and related host tools],
1072 [], [case $target in
1081 AC_SUBST(enable_gcov)
1084 [AS_HELP_STRING([--with-specs=SPECS],
1085 [add SPECS to driver command-line processing])],
1086 [CONFIGURE_SPECS=$withval],
1089 AC_SUBST(CONFIGURE_SPECS)
1091 ACX_PKGVERSION([GCC])
1092 ACX_BUGURL([https://gcc.gnu.org/bugs/])
1094 # Allow overriding the default URL for documentation
1095 AC_ARG_WITH(documentation-root-url,
1096 AS_HELP_STRING([--with-documentation-root-url=URL],
1097 [Root for documentation URLs]),
1099 yes) AC_MSG_ERROR([documentation root URL not specified]) ;;
1100 no) AC_MSG_ERROR([documentation root URL not specified]) ;;
1101 */) DOCUMENTATION_ROOT_URL="$withval" ;;
1102 *) AC_MSG_ERROR([documentation root URL does not end with /]) ;;
1106 case "$gcc_version" in
1107 *.[123456].0) docroot_url_suffix="gcc-$gcc_version/";;
1108 *.[123456].1) docroot_url_suffix="gcc-`echo $gcc_version | sed 's/1$/0/'`/";;
1111 DOCUMENTATION_ROOT_URL="https://gcc.gnu.org/onlinedocs/$docroot_url_suffix"
1113 AC_DEFINE_UNQUOTED(DOCUMENTATION_ROOT_URL,"$DOCUMENTATION_ROOT_URL",
1114 [Define to the root for documentation URLs.])
1116 # Allow overriding the default URL for GCC changes
1117 AC_ARG_WITH(changes-root-url,
1118 AS_HELP_STRING([--with-changes-root-url=URL],
1119 [Root for GCC changes URLs]),
1121 yes) AC_MSG_ERROR([changes root URL not specified]) ;;
1122 no) AC_MSG_ERROR([changes root URL not specified]) ;;
1123 */) CHANGES_ROOT_URL="$withval" ;;
1124 *) AC_MSG_ERROR([changes root URL does not end with /]) ;;
1126 CHANGES_ROOT_URL="https://gcc.gnu.org/"
1128 AC_DEFINE_UNQUOTED(CHANGES_ROOT_URL,"$CHANGES_ROOT_URL",
1129 [Define to the root for URLs about GCC changes.])
1131 # Sanity check enable_languages in case someone does not run the toplevel
1132 # configure # script.
1133 AC_ARG_ENABLE(languages,
1134 [AS_HELP_STRING([--enable-languages=LIST], [specify which front-ends to build])],
1135 [case ,${enable_languages}, in
1137 # go safe -- we cannot be much sure without the toplevel
1139 # analysis of which target libs are present and usable
1143 AC_MSG_ERROR([only the toplevel supports --enable-languages=all])
1148 enable_languages=c,${enable_languages}
1151 [enable_languages=c])
1153 # If top-level libada has been disabled, then wire in install-gnatlib
1154 # invocation with `make install', so that one can build and install
1155 # the library manually with `make -C gcc all gnatlib gnattools install'.
1156 if test x"$enable_libada" = xno; then
1157 gnat_install_lib=gnat-install-lib
1161 AC_SUBST(gnat_install_lib)
1163 if test x"$enable_as_accelerator_for" != x; then
1164 AC_DEFINE(ACCEL_COMPILER, 1,
1165 [Define if this compiler should be built as the offload target compiler.])
1166 enable_as_accelerator=yes
1167 sedscript="s#${target_noncanonical}#${enable_as_accelerator_for}-accel-${target_noncanonical}#"
1168 program_transform_name=`echo $program_transform_name | sed $sedscript`
1169 accel_dir_suffix=/accel/${target_noncanonical}
1170 real_target_noncanonical=${enable_as_accelerator_for}
1172 AC_SUBST(enable_as_accelerator)
1173 AC_SUBST(real_target_noncanonical)
1174 AC_SUBST(accel_dir_suffix)
1176 for tgt in `echo $enable_offload_targets | sed 's/,/ /g'`; do
1177 tgt=`echo $tgt | sed 's/=.*//'`
1182 omp_device_property=omp-device-properties-gcn
1183 omp_device_property_tmake_file="${omp_device_property_tmake_file} \$(srcdir)/config/gcn/t-omp-device"
1186 omp_device_property=omp-device-properties-nvptx
1187 omp_device_property_tmake_file="${omp_device_property_tmake_file} \$(srcdir)/config/nvptx/t-omp-device"
1190 AC_MSG_ERROR([unknown offload target specified])
1193 omp_device_properties="${omp_device_properties} ${tgt}=${omp_device_property}"
1194 omp_device_property_deps="${omp_device_property_deps} ${omp_device_property}"
1196 if test x"$offload_targets" = x; then
1197 offload_targets=$tgt
1199 offload_targets="$offload_targets,$tgt"
1202 AC_SUBST(omp_device_properties)
1203 AC_SUBST(omp_device_property_deps)
1205 AC_DEFINE_UNQUOTED(OFFLOAD_TARGETS, "$offload_targets",
1206 [Define to offload targets, separated by commas.])
1207 if test x"$enable_offloading" != x; then
1208 AC_DEFINE(ENABLE_OFFLOADING, 1,
1209 [Define this to enable support for offloading.])
1211 AC_DEFINE(ENABLE_OFFLOADING, 0,
1212 [Define this to enable support for offloading.])
1215 if test "x$enable_offload_defaulted" = xyes; then
1216 AC_DEFINE(OFFLOAD_DEFAULTED, 1,
1217 [Define to 1 to if -foffload is defaulted])
1220 AC_ARG_WITH(multilib-list,
1221 [AS_HELP_STRING([--with-multilib-list], [select multilibs (AArch64, ARM, AVR, nvptx, OR1K, RISC-V, SH and x86-64 only)])],
1223 with_multilib_list=default)
1225 AC_ARG_WITH(multilib-generator,
1226 [AS_HELP_STRING([--with-multilib-generator], [Multi-libs configuration string (RISC-V only)])],
1228 with_multilib_generator=default)
1230 # -------------------------
1231 # Checks for other programs
1232 # -------------------------
1236 # Find some useful tools
1238 # We need awk to create options.cc and options.h.
1239 # Bail out if it's missing.
1241 "") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
1248 AC_SUBST(ranlib_flags)
1252 # See if cmp has --ignore-initial.
1253 gcc_AC_PROG_CMP_IGNORE_INITIAL
1255 # See if we have the mktemp command.
1256 AC_CHECK_PROG(have_mktemp_command, mktemp, yes, no)
1258 # See if makeinfo has been installed and is modern enough
1259 # that we can use it.
1260 ACX_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
1261 [GNU texinfo.* \([0-9][0-9.]*\)],
1262 [4.[7-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
1263 if test $gcc_cv_prog_makeinfo_modern = no; then
1265 *** Makeinfo is missing or too old.
1266 *** Info documentation will not be built.])
1271 AC_SUBST(BUILD_INFO)
1273 # Determine whether makeinfo supports the CONTENTS_OUTPUT_LOCATION variable.
1274 # If it does, we want to pass it to makeinfo in order to restore the old
1275 # behavior of @{summary,}contents placement.
1276 MAKEINFO_TOC_INLINE_FLAG=
1277 AS_IF([test x"$MAKEINFO" != x], [
1278 AC_CACHE_CHECK([for CONTENTS_OUTPUT_LOCATION support in $MAKEINFO],
1279 [gcc_cv_texi_add_toc_inline_flags], [
1280 # Detect the unknown variable CONTENTS_OUTPUT_LOCATION warning
1281 if "$MAKEINFO" -c CONTENTS_OUTPUT_LOCATION=inline </dev/null 2>&1 \
1282 | grep CONTENTS_OUTPUT_LOCATION >/dev/null; then
1283 gcc_cv_texi_add_toc_inline_flags=no
1285 gcc_cv_texi_add_toc_inline_flags=yes
1288 if test x"$gcc_cv_texi_add_toc_inline_flags" = xyes; then
1289 MAKEINFO_TOC_INLINE_FLAG='-c CONTENTS_OUTPUT_LOCATION=inline'
1292 AC_SUBST([MAKEINFO_TOC_INLINE_FLAG])
1294 # Is pod2man recent enough to regenerate manpages?
1295 AC_MSG_CHECKING([for recent Pod::Man])
1296 if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
1298 GENERATED_MANPAGES=generated-manpages
1303 AC_SUBST(GENERATED_MANPAGES)
1305 MISSING="${CONFIG_SHELL-/bin/sh} $ac_aux_dir/missing"
1308 dnl Don't use AC_PROG_LEX; we insist on flex.
1309 dnl LEXLIB is not useful in gcc.
1310 AC_CHECK_PROGS([FLEX], flex, [$MISSING flex])
1313 AC_CHECK_PROGS([BISON], bison, [$MISSING bison])
1316 ACX_CHECK_PROG_VER(PYTHON, python3, --version,
1317 [Python.* \([0-9][0-9.]*\)],
1318 [3.[4-9]*|3.[1-9][0-9]*|[4-9].*|[1-9][0-9]*])
1319 if test $gcc_cv_prog_python3_modern = no; then
1321 *** Python3 is missing.
1322 *** Documentation for modula-2 will not include the target SYSTEM module.])
1327 AC_SUBST(HAVE_PYTHON)
1329 # Binutils are not build modules, unlike bison/flex/makeinfo. So we
1330 # check for build == host before using them.
1333 if test x${build} = x${host} && test -f $srcdir/../binutils/nm.c \
1334 && test -d ../binutils ; then
1335 NM='../binutils/nm-new'
1337 AC_CHECK_PROG(NM, nm, nm, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing nm)
1341 if test x${build} = x${host} && test -f $srcdir/../binutils/ar.c \
1342 && test -d ../binutils ; then
1345 AC_CHECK_PROG(AR, ar, ar, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing ar)
1348 # The jit documentation looks better if built with sphinx, but can be
1349 # built with texinfo if sphinx is not available.
1350 # Set "doc_build_sys" to "sphinx" or "texinfo" accordingly.
1351 AC_CHECK_PROG(doc_build_sys, sphinx-build, sphinx, texinfo)
1353 # --------------------
1354 # Checks for C headers
1355 # --------------------
1357 # Need to reject headers which give warnings, so that the -Werror bootstrap
1358 # works later. *sigh* This needs to come before all header checks.
1365 AC_HEADER_TIOCGWINSZ
1366 AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \
1367 fcntl.h ftw.h unistd.h sys/auxv.h sys/file.h sys/time.h sys/mman.h \
1368 sys/resource.h sys/param.h sys/times.h sys/stat.h sys/locking.h \
1369 direct.h malloc.h langinfo.h ldfcn.h locale.h wchar.h libgen.h)
1371 # Check for thread headers.
1372 AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
1373 AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
1375 # These tests can't be done till we know if we have limits.h.
1379 # ----------------------
1380 # Checks for C++ headers
1381 # ----------------------
1383 dnl Autoconf will give an error in the configure script if there is no
1384 dnl C++ preprocessor. Hack to prevent that.
1385 m4_pushdef([AC_MSG_ERROR], m4_defn([AC_MSG_WARN]))[]dnl
1387 m4_popdef([AC_MSG_ERROR])[]dnl
1389 AC_CHECK_HEADERS(unordered_map)
1390 AC_CHECK_HEADERS(tr1/unordered_map)
1391 AC_CHECK_HEADERS(ext/hash_map)
1394 # Dependency checking.
1398 AC_CONFIG_COMMANDS([gccdepdir],[
1399 ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs build/$DEPDIR
1400 for lang in $subdirs c-family common analyzer text-art rtl-ssa sym-exec
1402 ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR
1403 done], [subdirs="$subdirs" ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR])
1405 ZW_PROG_COMPILER_DEPENDENCIES([CXX])
1412 # These libraries may be used by collect2.
1413 # We may need a special search path to get them linked.
1414 AC_CACHE_CHECK(for collect2 libraries, gcc_cv_collect2_libs,
1416 for libs in '' -lld -lmld \
1417 '-L/usr/lib/cmplrs/cc2.11 -lmld' \
1418 '-L/usr/lib/cmplrs/cc3.11 -lmld'
1421 AC_TRY_LINK_FUNC(ldopen,
1422 [gcc_cv_collect2_libs="$libs"; break])
1425 test -z "$gcc_cv_collect2_libs" && gcc_cv_collect2_libs='none required'])
1426 case $gcc_cv_collect2_libs in
1428 *) COLLECT2_LIBS=$gcc_cv_collect2_libs ;;
1430 AC_SUBST(COLLECT2_LIBS)
1432 # When building Ada code on Alpha, we need exc_resume which is usually in
1433 # -lexc. So test for it.
1436 AC_SEARCH_LIBS(exc_resume, exc)
1439 AC_SUBST(GNAT_LIBEXC)
1441 # To support -mcpu=native on Solaris/SPARC, we need libkstat.
1444 AC_SEARCH_LIBS(kstat_open, kstat)
1445 EXTRA_GCC_LIBS="$LIBS"
1447 AC_SUBST(EXTRA_GCC_LIBS)
1449 # Some systems put ldexp and frexp in libm instead of libc; assume
1450 # they're both in the same place. jcf-dump needs them.
1453 AC_SEARCH_LIBS(ldexp, m)
1458 # Some systems need dlopen
1461 AC_SEARCH_LIBS(dlopen, dl)
1466 # Use <inttypes.h> only if it exists,
1467 # doesn't clash with <sys/types.h>, declares intmax_t and defines
1469 AC_MSG_CHECKING(for inttypes.h)
1470 AC_CACHE_VAL(gcc_cv_header_inttypes_h,
1471 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1472 [[#define __STDC_FORMAT_MACROS
1473 #include <sys/types.h>
1474 #include <inttypes.h>]],
1479 [gcc_cv_header_inttypes_h=yes],
1480 [gcc_cv_header_inttypes_h=no])])
1481 AC_MSG_RESULT($gcc_cv_header_inttypes_h)
1482 if test $gcc_cv_header_inttypes_h = yes; then
1483 AC_DEFINE(HAVE_INTTYPES_H, 1,
1484 [Define if you have a working <inttypes.h> header file.])
1487 # Look for the ZSTD package.
1490 AC_SUBST(ZSTD_INCLUDE)
1494 AC_SUBST(ZSTD_CPPFLAGS)
1495 AC_SUBST(ZSTD_LDFLAGS)
1497 [AS_HELP_STRING([--with-zstd=PATH],
1498 [specify prefix directory for installed zstd library.
1499 Equivalent to --with-zstd-include=PATH/include
1500 plus --with-zstd-lib=PATH/lib])])
1501 AC_ARG_WITH(zstd-include,
1502 [AS_HELP_STRING([--with-zstd-include=PATH],
1503 [specify directory for installed zstd include files])])
1504 AC_ARG_WITH(zstd-lib,
1505 [AS_HELP_STRING([--with-zstd-lib=PATH],
1506 [specify directory for the installed zstd library])])
1507 case "x$with_zstd" in
1513 *) ZSTD_INCLUDE=$with_zstd/include
1514 ZSTD_LIB=$with_zstd/lib
1518 if test "x$with_zstd" != xno; then
1519 if test "x$with_zstd_include" != x; then
1520 ZSTD_INCLUDE=$with_zstd_include
1522 if test "x$with_zstd_lib" != x; then
1523 ZSTD_LIB=$with_zstd_lib
1525 if test "x$ZSTD_INCLUDE" != x \
1526 && test "x$ZSTD_INCLUDE" != xno; then
1527 ZSTD_CPPFLAGS=-I$ZSTD_INCLUDE
1529 if test "x$ZSTD_LIB" != x \
1530 && test "x$ZSTD_LIB" != xno; then
1531 ZSTD_LDFLAGS=-L$ZSTD_LIB
1534 CXXFLAGS="$CXXFLAGS $ZSTD_CPPFLAGS"
1535 LDFLAGS="$LDFLAGS $ZSTD_LDFLAGS"
1537 # LTO can use zstd compression algorithm
1540 AC_SEARCH_LIBS(ZSTD_compress, zstd,, gcc_cv_header_zstd_h=no)
1545 AC_MSG_CHECKING(for zstd.h)
1546 AC_CACHE_VAL(gcc_cv_header_zstd_h,
1547 # We require version 1.3.0 or later. This is the first version that has
1548 # ZSTD_getFrameContentSize.
1549 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1551 #if ZSTD_VERSION_NUMBER < 10300
1552 #error "need zstd 1.3.0 or better"
1554 [gcc_cv_header_zstd_h=yes],
1555 [gcc_cv_header_zstd_h=no])])
1556 AC_MSG_RESULT($gcc_cv_header_zstd_h)
1557 if test $gcc_cv_header_zstd_h = yes; then
1558 AC_DEFINE(HAVE_ZSTD_H, 1,
1559 [Define if you have a working <zstd.h> header file.])
1560 elif test "x$with_zstd" != x; then
1561 as_fn_error $? "Unable to find zstd.h. See config.log for details." "$LINENO" 5
1565 dnl Disabled until we have a complete test for buggy enum bitfields.
1566 dnl gcc_AC_C_ENUM_BF_UNSIGNED
1568 define(gcc_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
1569 ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl
1570 fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl
1571 fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
1572 putchar_unlocked putc_unlocked)
1573 AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoq \
1574 popen sysconf strsignal getrusage nl_langinfo \
1575 gettimeofday mbstowcs wcswidth mmap posix_fallocate setlocale \
1576 gcc_UNLOCKED_FUNCS madvise mallinfo mallinfo2 fstatat getauxval \
1577 clock_gettime munmap msync get_current_dir_name memrchr)
1579 # At least for glibc, clock_gettime is in librt. But don't pull that
1580 # in if it still doesn't give us the function we want.
1581 if test $ac_cv_func_clock_gettime = no; then
1582 AC_CHECK_LIB(rt, clock_gettime,
1584 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
1585 [Define to 1 if you have the `clock_gettime' function.])])
1588 if test x$ac_cv_func_mbstowcs = xyes; then
1589 AC_CACHE_CHECK(whether mbstowcs works, gcc_cv_func_mbstowcs_works,
1590 [ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
1596 [gcc_cv_func_mbstowcs_works=yes],
1597 [gcc_cv_func_mbstowcs_works=no],
1598 [gcc_cv_func_mbstowcs_works=yes])])
1599 if test x$gcc_cv_func_mbstowcs_works = xyes; then
1600 AC_DEFINE(HAVE_WORKING_MBSTOWCS, 1,
1601 [Define this macro if mbstowcs does not crash when its
1602 first argument is NULL.])
1606 AC_CHECK_TYPE(ssize_t, int)
1607 AC_CHECK_TYPE(caddr_t, char *)
1608 AC_CHECK_TYPE(sighander_t,
1609 AC_DEFINE(HAVE_SIGHANDLER_T, 1,
1610 [Define if <sys/signal.h> defines sighandler_t]),
1613 GCC_AC_FUNC_MMAP_BLACKLIST
1617 # Under VMS, vfork works very differently than on Unix. The standard test
1618 # won't work, and it isn't easily adaptable. It makes more sense to
1620 ac_cv_func_vfork_works=yes
1627 # Until we have in-tree GNU iconv:
1629 if test -f "$LTLIBICONV"; then
1630 LIBICONV_DEP=$LTLIBICONV
1632 AC_SUBST(LIBICONV_DEP)
1638 # We will need to find libiberty.h and ansidecl.h
1639 saved_CFLAGS="$CFLAGS"
1640 CFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/../include $GMPINC"
1641 saved_CXXFLAGS="$CXXFLAGS"
1642 CXXFLAGS="$CXXFLAGS -I${srcdir} -I${srcdir}/../include $GMPINC"
1644 # gcc_AC_CHECK_DECLS doesn't support overloaded functions, so use the
1645 # normal autoconf function for these. But force definition of
1646 # HAVE_DECL_BASENAME like gcc_AC_CHECK_DECLS does, to suppress the bizarre
1647 # basename handling in libiberty.h.
1648 # Match the configure test in libiberty so that we have a consistent result.
1649 AC_CHECK_DECLS([basename(char*)], , ,[
1650 #undef HAVE_DECL_BASENAME
1651 #define HAVE_DECL_BASENAME 1
1653 # include <libgen.h>
1655 #include "ansidecl.h"
1656 #include "system.h"])
1658 AC_CHECK_DECLS([strstr(const char*,const char*)], , ,[
1659 #include "ansidecl.h"
1660 #include "system.h"])
1662 gcc_AC_CHECK_DECLS(getenv atol atoll asprintf sbrk abort atof getcwd getwd \
1663 madvise mkstemps stpcpy strnlen strsignal strverscmp \
1664 strtol strtoul strtoll strtoull setenv unsetenv \
1665 errno snprintf vsnprintf vasprintf malloc realloc calloc \
1666 free getopt clock getpagesize ffs fmemopen gcc_UNLOCKED_FUNCS, , ,[
1667 #include "ansidecl.h"
1668 #include "system.h"])
1670 gcc_AC_CHECK_DECLS(getrlimit setrlimit getrusage, , ,[
1671 #include "ansidecl.h"
1673 #ifdef HAVE_SYS_RESOURCE_H
1674 #include <sys/resource.h>
1678 gcc_AC_CHECK_DECLS(mallinfo mallinfo2, , ,[
1679 #include "ansidecl.h"
1681 #ifdef HAVE_MALLOC_H
1686 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1687 #include "ansidecl.h"
1689 #ifdef HAVE_SYS_RESOURCE_H
1690 #include <sys/resource.h>
1692 ]], [[rlim_t l = 0;]])],[],[AC_DEFINE([rlim_t],[long],
1693 [Define to `long' if <sys/resource.h> doesn't define.])])
1695 # On AIX 5.2, <ldfcn.h> conflicts with <fcntl.h>, as both define incompatible
1696 # FREAD and FWRITE macros. Fortunately, for GCC's single usage of ldgetname
1697 # in collect2.cc, <fcntl.h> isn't visible, but the configure test below needs
1698 # to undef these macros to get the correct value for HAVE_DECL_LDGETNAME.
1699 gcc_AC_CHECK_DECLS(ldgetname, , ,[
1700 #include "ansidecl.h"
1709 gcc_AC_CHECK_DECLS(times, , ,[
1710 #include "ansidecl.h"
1712 #ifdef HAVE_SYS_TIMES_H
1713 #include <sys/times.h>
1717 gcc_AC_CHECK_DECLS(sigaltstack, , ,[
1718 #include "ansidecl.h"
1723 # More time-related stuff.
1724 AC_CACHE_CHECK(for struct tms, ac_cv_struct_tms, [
1725 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1726 #include "ansidecl.h"
1728 #ifdef HAVE_SYS_TIMES_H
1729 #include <sys/times.h>
1731 ]], [[struct tms tms;]])],[ac_cv_struct_tms=yes],[ac_cv_struct_tms=no])])
1732 if test $ac_cv_struct_tms = yes; then
1733 AC_DEFINE(HAVE_STRUCT_TMS, 1,
1734 [Define if <sys/times.h> defines struct tms.])
1737 # use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
1738 # revisit after autoconf 2.50.
1739 AC_CACHE_CHECK(for clock_t, gcc_cv_type_clock_t, [
1740 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1741 #include "ansidecl.h"
1743 ]], [[clock_t x;]])],[gcc_cv_type_clock_t=yes],[gcc_cv_type_clock_t=no])])
1744 if test $gcc_cv_type_clock_t = yes; then
1745 AC_DEFINE(HAVE_CLOCK_T, 1,
1746 [Define if <time.h> defines clock_t.])
1749 # Check if F_SETLKW is supported by fcntl.
1750 AC_CACHE_CHECK(for F_SETLKW, ac_cv_f_setlkw, [
1751 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1752 #include <fcntl.h>]], [[
1758 return fcntl (1, F_SETLKW, &fl);]])],
1759 [ac_cv_f_setlkw=yes],[ac_cv_f_setlkw=no])])
1760 if test $ac_cv_f_setlkw = yes; then
1761 AC_DEFINE(HOST_HAS_F_SETLKW, 1,
1762 [Define if F_SETLKW supported by fcntl.])
1765 # Check if O_CLOEXEC is defined by fcntl
1766 AC_CACHE_CHECK(for O_CLOEXEC, ac_cv_o_cloexec, [
1767 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1768 #include <fcntl.h>]], [[
1769 return open ("/dev/null", O_RDONLY | O_CLOEXEC);]])],
1770 [ac_cv_o_cloexec=yes],[ac_cv_o_cloexec=no])])
1771 if test $ac_cv_o_cloexec = yes; then
1772 AC_DEFINE(HOST_HAS_O_CLOEXEC, 1,
1773 [Define if O_CLOEXEC supported by fcntl.])
1776 # Check if O_NONBLOCK is defined by fcntl
1777 AC_CHECK_HEADERS([fcntl.h])
1778 AC_CHECK_DECL(O_NONBLOCK,,,[#include <fcntl.h>])
1779 if test $ac_cv_have_decl_O_NONBLOCK = yes; then
1780 AC_DEFINE(HOST_HAS_O_NONBLOCK, 1,
1781 [Define if O_NONBLOCK supported by fcntl.])
1784 # Check if personality and ADDR_NO_RANDOMIZE are declared
1785 # in sys/personality.h
1786 AC_CACHE_CHECK(for personality ADDR_NO_RANDOMIZE,
1787 ac_cv_personality_addr_no_randomize, [
1788 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1789 #include <sys/personality.h>]], [[
1790 personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE);]])],
1791 [ac_cv_personality_addr_no_randomize=yes],
1792 [ac_cv_personality_addr_no_randomize=no])])
1793 if test $ac_cv_personality_addr_no_randomize = yes; then
1794 AC_DEFINE(HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE, 1,
1795 [Define if personality and ADDR_NO_RANDOMIZE are declared in
1796 sys/personality.h.])
1800 # C++ Modules would like some networking features to provide the mapping
1801 # server. You can still use modules without them though.
1802 # The following network-related checks could probably do with some
1803 # Windows and other non-linux defenses and checking.
1805 # Local socket connectivity wants AF_UNIX networking
1806 # Check for AF_UNIX networking
1807 AC_CACHE_CHECK(for AF_UNIX, ac_cv_af_unix, [
1808 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1809 #include <sys/types.h>
1810 #include <sys/socket.h>
1812 #include <netinet/in.h>]],[[
1814 un.sun_family = AF_UNSPEC;
1815 int fd = socket (AF_UNIX, SOCK_STREAM, 0);
1816 connect (fd, (sockaddr *)&un, sizeof (un));]])],
1817 [ac_cv_af_unix=yes],
1818 [ac_cv_af_unix=no])])
1819 if test $ac_cv_af_unix = yes; then
1820 AC_DEFINE(HAVE_AF_UNIX, 1,
1821 [Define if AF_UNIX supported.])
1824 # Remote socket connectivity wants AF_INET6 networking
1825 # Check for AF_INET6 networking
1826 AC_CACHE_CHECK(for AF_INET6, ac_cv_af_inet6, [
1827 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1828 #include <sys/types.h>
1829 #include <sys/socket.h>
1830 #include <netinet/in.h>
1831 #include <netdb.h>]],[[
1833 in6.sin6_family = AF_UNSPEC;
1834 struct addrinfo *addrs = 0;
1835 struct addrinfo hints;
1837 hints.ai_family = AF_INET6;
1838 hints.ai_socktype = SOCK_STREAM;
1839 hints.ai_protocol = 0;
1840 hints.ai_canonname = 0;
1843 int e = getaddrinfo ("localhost", 0, &hints, &addrs);
1844 const char *str = gai_strerror (e);
1845 freeaddrinfo (addrs);
1846 int fd = socket (AF_INET6, SOCK_STREAM, 0);
1847 connect (fd, (sockaddr *)&in6, sizeof (in6));]])],
1848 [ac_cv_af_inet6=yes],
1849 [ac_cv_af_inet6=no])])
1850 if test $ac_cv_af_inet6 = yes; then
1851 AC_DEFINE(HAVE_AF_INET6, 1,
1852 [Define if AF_INET6 supported.])
1855 # Check if _LK_LOCK is supported by _locking
1856 AC_CACHE_CHECK(for _LK_LOCK, ac_cv_lk_lock, [
1857 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1859 #include <sys/locking.h>]], [[
1861 return _locking (fd, _LK_LOCK, 0);]])],
1862 [ac_cv_lk_lock=yes],[ac_cv_lk_lock=no])])
1863 if test $ac_cv_lk_lock = yes; then
1864 AC_DEFINE(HOST_HAS_LK_LOCK, 1,
1865 [Define if _LK_LOC supported by _locking.])
1868 # Restore CFLAGS, CXXFLAGS from before the gcc_AC_NEED_DECLARATIONS tests.
1869 CFLAGS="$saved_CFLAGS"
1870 CXXFLAGS="$saved_CXXFLAGS"
1872 # mkdir takes a single argument on some systems.
1873 gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
1881 # With Setjmp/Longjmp based exception handling.
1882 AC_ARG_ENABLE(sjlj-exceptions,
1883 [AS_HELP_STRING([--enable-sjlj-exceptions],
1884 [arrange to use setjmp/longjmp exception handling])],
1885 [force_sjlj_exceptions=yes],
1888 force_sjlj_exceptions=yes
1892 force_sjlj_exceptions=no
1895 if test $force_sjlj_exceptions = yes; then
1896 sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
1897 AC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
1898 [Define 0/1 to force the choice for exception handling model.])
1901 # Windows32 UTF-8 manifest support for running the driver and compiler
1902 # executables with the UTF-8 active code page on mingw hosts.
1903 # Non-mingw hosts ignore this option.
1904 # The shell variables this sets are picked up from the mingw branches
1905 # of config.host so they have to be set before it gets sourced.
1906 AC_ARG_ENABLE(win32-utf8-manifest,
1907 [AS_HELP_STRING([--disable-win32-utf8-manifest],
1908 [disable embedding a utf8 manifest on mingw hosts])
1909 AS_HELP_STRING([--enable-win32-utf8-manifest],
1910 [enable embedding a utf8 manifest on mingw hosts (default)])],,)
1912 if test "x$enable_win32_utf8_manifest" != xno; then
1913 host_xmake_mingw=i386/x-mingw32-utf8
1914 host_extra_gcc_objs_mingw=utf8rc-mingw32.o
1915 host_extra_objs_mingw=utf8-mingw32.o
1918 # --------------------------------------------------------
1919 # Build, host, and target specific configuration fragments
1920 # --------------------------------------------------------
1922 # Collect build-machine-specific information.
1923 . ${srcdir}/config.build || exit 1
1925 # Collect host-machine-specific information.
1926 . ${srcdir}/config.host || exit 1
1930 # Collect target-machine-specific information.
1931 . ${srcdir}/config.gcc || exit 1
1933 extra_objs="${host_extra_objs} ${extra_objs}"
1934 extra_gcc_objs="${host_extra_gcc_objs} ${extra_gcc_objs}"
1936 # Default the target-machine variables that were not explicitly set.
1937 if test x"$tm_file" = x
1938 then tm_file=$cpu_type/$cpu_type.h; fi
1940 if test x"$extra_headers" = x
1941 then extra_headers=; fi
1943 if test x$md_file = x
1944 then md_file=$cpu_type/$cpu_type.md; fi
1946 if test x$out_file = x
1947 then out_file=$cpu_type/$cpu_type.cc; fi
1949 if test x"$tmake_file" = x
1950 then tmake_file=$cpu_type/t-$cpu_type
1953 # Support --enable-initfini-array.
1954 if test x$enable_initfini_array != xno; then
1955 tm_file="${tm_file} initfini-array.h"
1958 if test x"$dwarf2" = xyes
1959 then tm_file="$tm_file tm-dwarf2.h"
1962 # Say what files are being used for the output code and MD file.
1963 echo "Using \`$srcdir/config/$out_file' for machine-specific logic."
1964 echo "Using \`$srcdir/config/$md_file' as machine description file."
1966 # If any of the xm_file variables contain nonexistent files, warn
1967 # about them and drop them.
1970 for x in $build_xm_file; do
1971 if test -f $srcdir/config/$x
1973 else AC_MSG_WARN($srcdir/config/$x does not exist.)
1979 for x in $host_xm_file; do
1980 if test -f $srcdir/config/$x
1982 else AC_MSG_WARN($srcdir/config/$x does not exist.)
1988 for x in $xm_file; do
1989 if test -f $srcdir/config/$x
1991 else AC_MSG_WARN($srcdir/config/$x does not exist.)
1997 for f in $tm_file; do
2000 if test $count = ax; then
2001 echo "Using \`$srcdir/config/$tm_file' as target machine macro file."
2003 echo "Using the following target machine macro files:"
2004 for f in $tm_file; do
2005 echo " $srcdir/config/$f"
2009 if test x$use_long_long_for_widest_fast_int = xyes; then
2010 AC_DEFINE(USE_LONG_LONG_FOR_WIDEST_FAST_INT, 1,
2011 [Define to 1 if the 'long long' type is wider than 'long' but still
2012 efficiently supported by the host hardware.])
2015 gnu_ld_bool=`if test x"$gnu_ld" = x"yes"; then echo 1; else echo 0; fi`
2016 AC_DEFINE_UNQUOTED(HAVE_GNU_LD, $gnu_ld_bool, [Define to 1 if using GNU ld.])
2018 gnu_as_bool=`if test x"$gas" = x"yes"; then echo 1; else echo 0; fi`
2019 AC_DEFINE_UNQUOTED(HAVE_GNU_AS, $gnu_as_bool, [Define to 1 if using GNU as.])
2022 for f in $host_xm_file; do
2025 if test $count = a; then
2027 elif test $count = ax; then
2028 echo "Using \`$srcdir/config/$host_xm_file' as host machine macro file."
2030 echo "Using the following host machine macro files:"
2031 for f in $host_xm_file; do
2032 echo " $srcdir/config/$f"
2035 echo "Using ${out_host_hook_obj} for host machine hooks."
2037 if test "$host_xm_file" != "$build_xm_file"; then
2039 for f in $build_xm_file; do
2042 if test $count = a; then
2044 elif test $count = ax; then
2045 echo "Using \`$srcdir/config/$build_xm_file' as build machine macro file."
2047 echo "Using the following build machine macro files:"
2048 for f in $build_xm_file; do
2049 echo " $srcdir/config/$f"
2054 if test -n "$configured_native_system_header_dir"; then
2055 native_system_header_dir=$configured_native_system_header_dir
2057 NATIVE_SYSTEM_HEADER_DIR="$native_system_header_dir"
2058 AC_SUBST(NATIVE_SYSTEM_HEADER_DIR)
2062 AC_CACHE_CHECK([whether mcontext_t fields have underscores],
2063 gcc_cv_mcontext_underscores,
2064 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
2065 #include <sys/cdefs.h>
2066 #include <sys/signal.h>
2067 #include <ucontext.h>
2068 int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; }
2070 gcc_cv_mcontext_underscores=no, gcc_cv_mcontext_underscores=yes))
2071 if test $gcc_cv_mcontext_underscores = yes; then
2072 AC_DEFINE(HAS_MCONTEXT_T_UNDERSCORES,,dnl
2073 [mcontext_t fields start with __])
2082 # Check if a valid thread package
2083 case ${enable_threads} in
2086 target_thread_file='single'
2090 target_thread_file='single'
2092 aix | dce | lynx | mipssde | posix | rtems | \
2093 single | tpf | vxworks | win32 | mcf)
2094 target_thread_file=${enable_threads}
2097 echo "${enable_threads} is an unknown thread package" 1>&2
2102 if test x${thread_file} = x; then
2103 # No thread file set by target-specific clauses in config.gcc,
2104 # so use file chosen by default logic above
2105 thread_file=${target_thread_file}
2113 if test x$enable___cxa_atexit = xyes || \
2114 test x$enable___cxa_atexit = x -a x$default_use_cxa_atexit = xyes; then
2115 if test x$host = x$target; then
2117 # mingw32 doesn't have __cxa_atexit but uses atexit registration
2118 # keyed to flag_use_cxa_atexit
2126 AC_CHECK_FUNC(__cxa_atexit,[use_cxa_atexit=yes],
2127 [echo "__cxa_atexit can't be enabled on this target"])
2131 # We can't check for __cxa_atexit when building a cross, so assume
2135 if test x$use_cxa_atexit = xyes; then
2136 AC_DEFINE(DEFAULT_USE_CXA_ATEXIT, 2,
2137 [Define if you want to use __cxa_atexit, rather than atexit, to
2138 register C++ destructors for local statics and global objects.
2139 This is essential for fully standards-compliant handling of
2140 destructors, but requires __cxa_atexit in libc.])
2144 # Look for a file containing extra machine modes.
2145 if test -n "$extra_modes" && test -f $srcdir/config/$extra_modes; then
2146 extra_modes_file='$(srcdir)'/config/${extra_modes}
2147 AC_SUBST(extra_modes_file)
2148 AC_DEFINE_UNQUOTED(EXTRA_MODES_FILE, "config/$extra_modes",
2149 [Define to the name of a file containing a list of extra machine modes
2150 for this architecture.])
2153 # Convert extra_options into a form suitable for Makefile use.
2156 for f in $extra_options; do
2157 extra_opt_files="$extra_opt_files \$(srcdir)/config/$f"
2158 all_opt_files="$all_opt_files $srcdir/config/$f"
2160 AC_SUBST(extra_opt_files)
2162 # auto-host.h is the file containing items generated by autoconf and is
2163 # the first file included by config.h.
2164 # If host=build, it is correct to have bconfig include auto-host.h
2165 # as well. If host!=build, we are in error and need to do more
2166 # work to find out the build config parameters.
2167 if test x$host = x$build
2169 build_auto=auto-host.h
2170 HAVE_AUTO_BUILD='# '
2172 # We create a subdir, then run autoconf in the subdir.
2173 # To prevent recursion we set host and build for the new
2174 # invocation of configure to the build for this invocation
2181 /* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
2182 *) realsrcdir=../${srcdir};;
2184 # Clearing GMPINC is necessary to prevent host headers being
2185 # used by the build compiler. Defining GENERATOR_FILE stops
2186 # system.h from including gmp.h.
2187 CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
2188 CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
2189 LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
2190 GMPINC="" CPPFLAGS="${CPPFLAGS_FOR_BUILD} -DGENERATOR_FILE" \
2191 ${realsrcdir}/configure \
2192 --enable-languages=${enable_languages-all} \
2193 ${enable_obsolete+--enable-obsolete="$enable_obsolete"} \
2194 ${enable_option_checking+--enable-option-checking="$enable_option_checking"} \
2195 --target=$target_alias --host=$build_alias \
2196 --build=$build_alias || exit # retaining $tempdir
2198 # We just finished tests for the build machine, so rename
2199 # the file auto-build.h in the gcc directory.
2200 mv auto-host.h ../auto-build.h
2203 build_auto=auto-build.h
2206 AC_SUBST(build_subdir)
2207 AC_SUBST(HAVE_AUTO_BUILD)
2209 tm_file="${tm_file} defaults.h"
2210 tm_p_file="${tm_p_file} tm-preds.h"
2211 host_xm_file="auto-host.h ansidecl.h ${host_xm_file}"
2212 build_xm_file="${build_auto} ansidecl.h ${build_xm_file}"
2213 # We don't want ansidecl.h in target files, write code there in ISO/GNU C.
2214 # put this back in temporarily.
2215 xm_file="auto-host.h ansidecl.h ${xm_file}"
2222 # Compile in configure arguments.
2223 if test -f configargs.h ; then
2224 # Being re-configured.
2225 gcc_config_arguments=`grep configuration_arguments configargs.h | sed -e 's/.*"\([^"]*\)".*/\1/'`
2226 gcc_reconf_arguments=`echo "$gcc_config_arguments" | sed -e 's/^.*\( : (reconfigured) .*$\)/\1/'`
2227 if [ "$gcc_reconf_arguments" != " : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS" ]; then
2228 gcc_config_arguments="$gcc_config_arguments : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS"
2231 gcc_config_arguments="$TOPLEVEL_CONFIGURE_ARGUMENTS"
2234 # Double all backslashes and backslash all quotes to turn
2235 # gcc_config_arguments into a C string.
2236 sed -e 's/\\/\\\\/g; s/"/\\"/g' <<EOF >conftest.out
2237 $gcc_config_arguments
2239 gcc_config_arguments_str=`cat conftest.out`
2242 cat > configargs.h <<EOF
2243 /* Generated automatically. */
2244 static const char configuration_arguments[] = "$gcc_config_arguments_str";
2245 static const char thread_model[] = "$thread_file";
2247 static const struct {
2248 const char *name, *value;
2249 } configure_default_options[] = $configure_default_options;
2254 gcc_BASEVER=`cat $srcdir/BASE-VER`
2255 gcc_DEVPHASE=`cat $srcdir/DEV-PHASE`
2256 gcc_DATESTAMP=`cat $srcdir/DATESTAMP`
2257 if test -f $srcdir/REVISION ; then
2258 gcc_REVISION=`cat $srcdir/REVISION`
2262 cat > plugin-version.h <<EOF
2263 #include "configargs.h"
2265 #define GCCPLUGIN_VERSION_MAJOR `echo $gcc_BASEVER | sed -e 's/^\([0-9]*\).*$/\1/'`
2266 #define GCCPLUGIN_VERSION_MINOR `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.\([0-9]*\).*$/\1/'`
2267 #define GCCPLUGIN_VERSION_PATCHLEVEL `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$/\1/'`
2268 #define GCCPLUGIN_VERSION (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR)
2270 static char basever[] = "$gcc_BASEVER";
2271 static char datestamp[] = "$gcc_DATESTAMP";
2272 static char devphase[] = "$gcc_DEVPHASE";
2273 static char revision[] = "$gcc_REVISION";
2275 /* FIXME plugins: We should make the version information more precise.
2276 One way to do is to add a checksum. */
2278 static struct plugin_gcc_version gcc_version = {basever, datestamp,
2280 configuration_arguments};
2284 # Determine what GCC version number to use in filesystem paths.
2287 # Internationalization
2288 ZW_GNU_GETTEXT_SISTER_DIR
2290 # If LIBINTL contains LIBICONV, then clear LIBICONV so we don't get
2291 # -liconv on the link line twice.
2292 case "$LIBINTL" in *$LIBICONV*)
2296 AC_ARG_ENABLE(secureplt,
2297 [AS_HELP_STRING([--enable-secureplt],
2298 [enable -msecure-plt by default for PowerPC])],
2301 AC_ARG_ENABLE(mingw-wildcard,
2302 [AS_HELP_STRING([--enable-mingw-wildcard],
2303 [Set whether to expand wildcard on command-line.
2304 Default to platform configuration])],
2305 [],[enable_mingw_wildcard=platform])
2306 AS_IF([test x"$enable_mingw_wildcard" != xplatform ],
2307 [AC_DEFINE_UNQUOTED(MINGW_DOWILDCARD,
2308 $(test x"$enable_mingw_wildcard" = xno; echo $?),
2309 [Value to set mingw's _dowildcard to.])])
2311 AC_ARG_ENABLE(large-address-aware,
2312 [AS_HELP_STRING([--enable-large-address-aware],
2313 [Link mingw executables with --large-address-aware])])
2314 AS_IF([test x"$enable_large_address_aware" = xyes],
2315 [AC_DEFINE([MINGW_DEFAULT_LARGE_ADDR_AWARE], 1,
2316 [Define if we should link mingw executables with --large-address-aware])])
2318 AC_ARG_ENABLE(leading-mingw64-underscores,
2319 AS_HELP_STRING([--enable-leading-mingw64-underscores],
2320 [enable leading underscores on 64 bit mingw targets]),
2322 AS_IF([ test x"$enable_leading_mingw64_underscores" = xyes ],
2323 [AC_DEFINE(USE_MINGW64_LEADING_UNDERSCORES, 1,
2324 [Define if we should use leading underscore on 64 bit mingw targets])])
2327 [AS_HELP_STRING([--enable-cld], [enable -mcld by default for 32bit x86])], [],
2330 AC_ARG_ENABLE(frame-pointer,
2331 [AS_HELP_STRING([--enable-frame-pointer],
2332 [enable -fno-omit-frame-pointer by default for x86])], [],
2335 linux* | gnu* | darwin[[8912]]* | cygwin* | mingw*)
2336 # Enable -fomit-frame-pointer by default for these systems with DWARF2.
2337 enable_frame_pointer=no
2340 enable_frame_pointer=yes
2346 i[[34567]]86-*-* | x86_64-*-*)
2347 if test "x$enable_cld" = xyes; then
2348 tm_defines="${tm_defines} USE_IX86_CLD=1"
2350 if test "x$enable_frame_pointer" = xyes; then
2351 tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1"
2356 # Windows32 Registry support for specifying GCC installation paths.
2357 AC_ARG_ENABLE(win32-registry,
2358 [AS_HELP_STRING([--disable-win32-registry],
2359 [disable lookup of installation paths in the
2360 Registry on Windows hosts])
2361 AS_HELP_STRING([--enable-win32-registry], [enable registry lookup (default)])
2362 AS_HELP_STRING([--enable-win32-registry=KEY],
2363 [use KEY instead of GCC version as the last portion
2364 of the registry key])],,)
2367 win32 | pe | cygwin* | mingw32*)
2368 if test "x$enable_win32_registry" != xno; then
2369 AC_SEARCH_LIBS(RegOpenKeyExA, advapi32,, [enable_win32_registry=no])
2372 if test "x$enable_win32_registry" != xno; then
2373 AC_DEFINE(ENABLE_WIN32_REGISTRY, 1,
2374 [Define to 1 if installation paths should be looked up in the Windows
2375 Registry. Ignored on non-Windows hosts.])
2377 if test "x$enable_win32_registry" != xyes \
2378 && test "x$enable_win32_registry" != x; then
2379 AC_DEFINE_UNQUOTED(WIN32_REGISTRY_KEY, "$enable_win32_registry",
2380 [Define to be the last component of the Windows registry key under which
2381 to look for installation paths. The full key used will be
2382 HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}.
2383 The default is the GCC version number.])
2389 # Get an absolute path to the GCC top-level source directory
2390 holddir=`${PWDCMD-pwd}`
2392 topdir=`${PWDCMD-pwd}`
2395 # Conditionalize the makefile for this host machine.
2397 for f in ${host_xmake_file}
2399 if test -f ${srcdir}/config/$f
2401 xmake_file="${xmake_file} \$(srcdir)/config/$f"
2405 # Conditionalize the makefile for this target machine.
2407 for f in ${tmake_file}
2409 if test -f ${srcdir}/config/$f
2411 tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
2414 tmake_file="${tmake_file_}${omp_device_property_tmake_file}"
2416 out_object_file=`basename $out_file .cc`.o
2417 common_out_object_file=`basename $common_out_file .cc`.o
2419 tm_file_list="options.h"
2420 tm_include_list="options.h insn-constants.h"
2421 for f in $tm_file; do
2424 f=`echo $f | sed 's/^..//'`
2425 tm_file_list="${tm_file_list} $f"
2426 tm_include_list="${tm_include_list} $f"
2429 tm_file_list="${tm_file_list} \$(srcdir)/$f"
2430 tm_include_list="${tm_include_list} $f"
2433 tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
2434 tm_include_list="${tm_include_list} config/$f"
2441 for f in $tm_p_file; do
2444 tm_p_file_list="${tm_p_file_list} $f"
2445 tm_p_include_list="${tm_p_include_list} $f"
2448 tm_p_file_list="${tm_p_file_list} \$(srcdir)/config/$f"
2449 tm_p_include_list="${tm_p_include_list} config/$f"
2455 for f in $tm_d_file; do
2458 tm_d_file_list="${tm_d_file_list} \$(srcdir)/config/$f"
2459 tm_d_include_list="${tm_d_include_list} config/$f"
2465 tm_rust_include_list=
2466 for f in $tm_rust_file; do
2469 tm_rust_file_list="${tm_rust_file_list} \$(srcdir)/config/$f"
2470 tm_rust_include_list="${tm_rust_include_list} config/$f"
2477 for f in $xm_file; do
2480 xm_file_list="${xm_file_list} \$(srcdir)/../include/$f"
2481 xm_include_list="${xm_include_list} $f"
2484 xm_file_list="${xm_file_list} $f"
2485 xm_include_list="${xm_include_list} $f"
2488 xm_file_list="${xm_file_list} \$(srcdir)/config/$f"
2489 xm_include_list="${xm_include_list} config/$f"
2495 host_xm_include_list=
2496 for f in $host_xm_file; do
2499 host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/$f"
2500 host_xm_include_list="${host_xm_include_list} $f"
2503 host_xm_file_list="${host_xm_file_list} $f"
2504 host_xm_include_list="${host_xm_include_list} $f"
2507 host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
2508 host_xm_include_list="${host_xm_include_list} config/$f"
2514 for f in $build_xm_file; do
2517 build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/$f"
2518 build_xm_include_list="${build_xm_include_list} $f"
2520 auto-build.h | auto-host.h )
2521 build_xm_file_list="${build_xm_file_list} $f"
2522 build_xm_include_list="${build_xm_include_list} $f"
2525 build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
2526 build_xm_include_list="${build_xm_include_list} config/$f"
2531 # Define macro CROSS_DIRECTORY_STRUCTURE in compilation if this is a
2532 # cross-compiler which does not use the native headers and libraries.
2533 # Also use all.cross instead of all.internal and adjust SYSTEM_HEADER_DIR.
2534 CROSS= AC_SUBST(CROSS)
2535 ALL=all.internal AC_SUBST(ALL)
2536 SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)' AC_SUBST(SYSTEM_HEADER_DIR)
2537 BUILD_SYSTEM_HEADER_DIR=$SYSTEM_HEADER_DIR AC_SUBST(BUILD_SYSTEM_HEADER_DIR)
2539 if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
2540 test x$build != x$host || test "x$with_build_sysroot" != x; then
2541 if test "x$with_build_sysroot" != x; then
2542 BUILD_SYSTEM_HEADER_DIR=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
2544 BUILD_SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
2547 if test x$host != x$target
2549 CROSS="-DCROSS_DIRECTORY_STRUCTURE"
2551 SYSTEM_HEADER_DIR=$BUILD_SYSTEM_HEADER_DIR
2552 elif test "x$TARGET_SYSTEM_ROOT" != x; then
2553 SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
2556 if test "x$with_build_sysroot" != "x"; then
2557 target_header_dir="${with_build_sysroot}${native_system_header_dir}"
2558 elif test "x$with_sysroot" = x; then
2559 target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
2560 elif test "x$with_sysroot" = xyes; then
2561 target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
2563 target_header_dir="${with_sysroot}${native_system_header_dir}"
2566 target_header_dir=${native_system_header_dir}
2569 # If this is a cross-compiler that does not
2570 # have its own set of headers then define
2573 # If this is using newlib, without having the headers available now,
2574 # then define inhibit_libc in LIBGCC2_CFLAGS.
2575 # This prevents libgcc2 from containing any code which requires libc
2577 : ${inhibit_libc=false}
2578 if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
2579 test x$with_newlib = xyes ; } &&
2580 { test "x$with_headers" = xno || test ! -f "$target_header_dir/stdio.h"; } ; then
2583 AC_SUBST(inhibit_libc)
2585 # When building gcc with a cross-compiler, we need to adjust things so
2586 # that the generator programs are still built with the native compiler.
2587 # Also, we cannot run fixincludes.
2589 # These are the normal (build=host) settings:
2590 CC_FOR_BUILD='$(CC)' AC_SUBST(CC_FOR_BUILD)
2591 CXX_FOR_BUILD='$(CXX)' AC_SUBST(CXX_FOR_BUILD)
2592 BUILD_CFLAGS='$(ALL_CFLAGS)' AC_SUBST(BUILD_CFLAGS)
2593 BUILD_CXXFLAGS='$(ALL_CXXFLAGS)' AC_SUBST(BUILD_CXXFLAGS)
2594 BUILD_LDFLAGS='$(LDFLAGS)' AC_SUBST(BUILD_LDFLAGS)
2595 STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_FIXINC)
2597 # And these apply if build != host, or we are generating coverage data
2598 if test x$build != x$host || test "x$coverage_flags" != x
2600 BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) $(CFLAGS_FOR_BUILD)'
2601 BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS_FOR_BUILD)'
2602 BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
2606 if test x$enable_fixincludes = xno;
2611 # Expand extra_headers to include complete path.
2612 # This substitutes for lots of t-* files.
2614 # Prepend $(srcdir)/config/${cpu_type}/ to every entry in extra_headers.
2615 for file in ${extra_headers} ; do
2616 extra_headers_list="${extra_headers_list} \$(srcdir)/config/${cpu_type}/${file}"
2619 # If use_gcc_tgmath is set, append ginclude/tgmath.h.
2620 if test x"$use_gcc_tgmath" = xyes
2621 then extra_headers_list="${extra_headers_list} \$(srcdir)/ginclude/tgmath.h"
2624 # Define collect2 in Makefile.
2625 case $host_can_use_collect2 in
2627 *) collect2='collect2$(exeext)' ;;
2629 AC_SUBST([collect2])
2631 # Add a definition of USE_COLLECT2 if system wants one.
2632 case $use_collect2 in
2633 no) use_collect2= ;;
2636 host_xm_defines="${host_xm_defines} USE_COLLECT2"
2637 xm_defines="${xm_defines} USE_COLLECT2"
2638 case $host_can_use_collect2 in
2640 AC_MSG_ERROR([collect2 is required but cannot be built on this system])
2646 AC_DEFINE_UNQUOTED(LTOPLUGINSONAME,"${host_lto_plugin_soname}",
2647 [Define to the name of the LTO plugin DSO that must be
2648 passed to the linker's -plugin=LIB option.])
2650 # ---------------------------
2651 # Assembler & linker features
2652 # ---------------------------
2654 # During stage 2, ld is actually gcc/collect-ld, which is a small script to
2655 # discern between when to use prev-ld/ld-new and when to use ld/ld-new.
2656 # However when ld-new is first executed from the build tree, libtool will
2657 # relink it as .libs/lt-ld-new, so that it can give it an RPATH that refers
2658 # to the build tree. While doing this we need to use the previous-stage
2659 # linker, or we have an infinite loop. The presence of a shell script as
2660 # ld/ld-new, and the fact that the script *uses ld itself*, is what confuses
2661 # the gcc/collect-ld script. So we need to know how libtool works, or
2662 # exec-tool will fail.
2664 m4_defun([_LT_CONFIG_COMMANDS], [])
2667 AC_SUBST(enable_fast_install)
2669 AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
2670 DARWIN_DO_EXTRA_RPATH=0
2671 AC_ARG_WITH(darwin-extra-rpath,
2673 [[--with-darwin-extra-rpath=[ARG]]],
2674 [Specify a runpath directory, additional to those provided by the compiler])],
2675 [if test x"$withval" != x; then
2676 DARWIN_ADD_RPATH="$withval"
2677 DARWIN_DO_EXTRA_RPATH=1
2679 AC_DEFINE_UNQUOTED(DARWIN_DO_EXTRA_RPATH, $DARWIN_DO_EXTRA_RPATH,
2680 [Should add an extra runpath directory])
2681 AC_DEFINE_UNQUOTED(DARWIN_ADD_RPATH, "$DARWIN_ADD_RPATH",
2682 [Specify a runpath directory, additional to those provided by the compiler])
2684 # Identify the assembler which will work hand-in-glove with the newly
2685 # built GCC, so that we can examine its features. This is the assembler
2686 # which will be driven by the driver program.
2688 # If build != host, and we aren't building gas in-tree, we identify a
2689 # build->target assembler and hope that it will have the same features
2690 # as the host->target assembler we'll be using.
2691 gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
2693 m4_pattern_allow([AS_FOR_TARGET])dnl
2694 AS_VAR_SET_IF(gcc_cv_as,, [
2695 if test -x "$DEFAULT_ASSEMBLER"; then
2696 gcc_cv_as="$DEFAULT_ASSEMBLER"
2697 elif test -f $gcc_cv_as_gas_srcdir/configure.ac \
2698 && test -f ../gas/Makefile \
2699 && test x$build = x$host; then
2700 gcc_cv_as=../gas/as-new$build_exeext
2701 elif test -x as$build_exeext; then
2702 # Build using assembler in the current directory.
2703 gcc_cv_as=./as$build_exeext
2704 elif ( set dummy $AS_FOR_TARGET; test -x $[2] ); then
2705 gcc_cv_as="$AS_FOR_TARGET"
2707 AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
2710 ORIGINAL_AS_FOR_TARGET=$gcc_cv_as
2711 AC_SUBST(ORIGINAL_AS_FOR_TARGET)
2712 case "$ORIGINAL_AS_FOR_TARGET" in
2713 ./as | ./as$build_exeext) ;;
2714 *) AC_CONFIG_FILES(as:exec-tool.in, [chmod +x as]) ;;
2719 [[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
2720 [case "${enableval}" in
2726 install_gold_as_default=no
2728 [[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
2729 [case "${enableval}" in
2731 install_gold_as_default=yes
2734 if test x${default_ld} != x; then
2735 install_gold_as_default=yes
2741 AC_MSG_ERROR([invalid --enable-gold argument])
2745 # Identify the linker which will work hand-in-glove with the newly
2746 # built GCC, so that we can examine its features. This is the linker
2747 # which will be driven by the driver program.
2749 # If build != host, and we aren't building gas in-tree, we identify a
2750 # build->target linker and hope that it will have the same features
2751 # as the host->target linker we'll be using.
2752 gcc_cv_gld_major_version=
2753 gcc_cv_gld_minor_version=
2754 gcc_cv_ld_gld_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/ld
2755 gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold
2756 gcc_cv_ld_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
2758 AS_VAR_SET_IF(gcc_cv_ld,, [
2759 if test -x "$DEFAULT_LINKER"; then
2760 gcc_cv_ld="$DEFAULT_LINKER"
2761 elif test $install_gold_as_default = yes \
2762 && test -f $gcc_cv_ld_gold_srcdir/configure.ac \
2763 && test -f ../gold/Makefile \
2764 && test x$build = x$host; then
2765 gcc_cv_ld=../gold/ld-new$build_exeext
2766 elif test -f $gcc_cv_ld_gld_srcdir/configure.ac \
2767 && test -f ../ld/Makefile \
2768 && test x$build = x$host; then
2769 gcc_cv_ld=../ld/ld-new$build_exeext
2770 elif test -x collect-ld$build_exeext; then
2771 # Build using linker in the current directory.
2772 gcc_cv_ld=./collect-ld$build_exeext
2773 elif ( set dummy $LD_FOR_TARGET; test -x $[2] ); then
2774 gcc_cv_ld="$LD_FOR_TARGET"
2776 AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
2779 ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld
2780 PLUGIN_LD_SUFFIX=`basename $gcc_cv_ld | sed -e "s,$target_alias-,,"`
2781 # if the PLUGIN_LD is set ld-new, just have it as ld
2782 # as that is the installed named.
2783 if test x$PLUGIN_LD_SUFFIX = xld-new \
2784 || test x$PLUGIN_LD_SUFFIX = xcollect-ld ; then
2787 AC_ARG_WITH(plugin-ld,
2788 [AS_HELP_STRING([[--with-plugin-ld=[ARG]]], [specify the plugin linker])],
2789 [if test x"$withval" != x; then
2790 ORIGINAL_PLUGIN_LD_FOR_TARGET="$withval"
2791 PLUGIN_LD_SUFFIX="$withval"
2793 AC_SUBST(ORIGINAL_PLUGIN_LD_FOR_TARGET)
2794 AC_DEFINE_UNQUOTED(PLUGIN_LD_SUFFIX, "$PLUGIN_LD_SUFFIX", [Specify plugin linker])
2796 # Check to see if we are using gold instead of ld
2797 AC_MSG_CHECKING(whether we are using gold)
2799 if test x$gcc_cv_ld != x; then
2800 if $gcc_cv_ld --version 2>/dev/null | sed 1q \
2801 | grep "GNU gold" > /dev/null; then
2805 AC_MSG_RESULT($ld_is_gold)
2807 # Check to see if we are using mold instead of ld
2808 AC_MSG_CHECKING(whether we are using mold)
2810 if test x$gcc_cv_ld != x; then
2811 if $gcc_cv_ld --version 2>/dev/null | sed 1q \
2812 | grep "mold" > /dev/null; then
2816 AC_MSG_RESULT($ld_is_mold)
2819 AC_MSG_CHECKING(gold linker with split stack support as non default)
2820 # Check to see if default ld is not gold, but gold is
2821 # available and has support for split stack. If gcc was configured
2822 # with gold then no checking is done.
2824 if test x$ld_is_gold = xno && which ${gcc_cv_ld}.gold >/dev/null 2>&1; then
2826 # For platforms other than powerpc64*, enable as appropriate.
2829 ld_gold=`which ${gcc_cv_ld}.gold`
2830 # Make sure this gold has minimal split stack support
2831 if $ld_gold --help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
2832 ld_vers=`$ld_gold --version | sed 1q`
2833 gold_vers=`echo $ld_vers | sed -n \
2834 -e 's,^[[^)]]*[[ ]]\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*[[^)]]*\)) .*$,\1,p'`
2836 # check that the gold version contains the complete split stack support
2837 # on powerpc64 big and little endian
2839 case "$gold_vers" in
2840 2.25.[[1-9]]*|2.2[[6-9]][[.0-9]]*|2.[[3-9]][[.0-9]]*|[[3-9]].[[.0-9]]*) gold_non_default=yes
2842 *) gold_non_default=no
2848 if test $gold_non_default = yes; then
2849 AC_DEFINE(HAVE_GOLD_NON_DEFAULT_SPLIT_STACK, 1,
2850 [Define if the gold linker supports split stack and is available as a non-default])
2853 AC_MSG_RESULT($gold_non_default)
2855 ORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
2856 AC_SUBST(ORIGINAL_LD_FOR_TARGET)
2857 case "$ORIGINAL_LD_FOR_TARGET" in
2858 ./collect-ld | ./collect-ld$build_exeext) ;;
2859 *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;;
2862 AC_MSG_CHECKING(what linker to use)
2863 if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext \
2864 || test "$gcc_cv_ld" = ../gold/ld-new$build_exeext; then
2865 # Single tree build which includes ld. We want to prefer it
2866 # over whatever linker top-level may have detected, since
2867 # we'll use what we're building after installation anyway.
2868 AC_MSG_RESULT(newly built ld)
2870 in_tree_ld_is_elf=no
2871 if (grep 'EMUL = .*elf' ../ld/Makefile \
2872 || grep 'EMUL = .*linux' ../ld/Makefile \
2873 || grep 'EMUL = .*lynx' ../ld/Makefile) > /dev/null; then
2874 in_tree_ld_is_elf=yes
2875 elif test "$ld_is_gold" = yes; then
2876 in_tree_ld_is_elf=yes
2878 for f in $gcc_cv_ld_bfd_srcdir/configure $gcc_cv_ld_gld_srcdir/configure $gcc_cv_ld_gld_srcdir/configure.ac $gcc_cv_ld_gld_srcdir/Makefile.in
2881 gcc_cv_gld_version=`sed -n -e 's/^[ ]*VERSION=[^0-9A-Za-z_]*\([0-9]*\.[0-9]*.*\)/VERSION=\1/p' < $f`
2882 if test x$gcc_cv_gld_version != x; then
2886 case $gcc_cv_gld_version in
2889 *) AC_MSG_ERROR([[cannot find version of in-tree linker]]) ;;
2892 gcc_cv_gld_major_version=`expr "$gcc_cv_gld_version" : "VERSION=\([0-9]*\)"`
2893 gcc_cv_gld_minor_version=`expr "$gcc_cv_gld_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
2895 ORIGINAL_LD_BFD_FOR_TARGET=../ld/ld-new$build_exeext
2896 ORIGINAL_LD_GOLD_FOR_TARGET=../gold/ld-new$build_exeext
2898 AC_MSG_RESULT($gcc_cv_ld)
2900 gcc_cvs_ld_program=`dirname $gcc_cv_ld`/`basename $gcc_cv_ld $host_exeext`
2901 ORIGINAL_LD_BFD_FOR_TARGET=${gcc_cvs_ld_program}.bfd$host_exeext
2902 ORIGINAL_LD_GOLD_FOR_TARGET=${gcc_cvs_ld_program}.gold$host_exeext
2905 AC_SUBST(ORIGINAL_LD_BFD_FOR_TARGET)
2906 AC_SUBST(ORIGINAL_LD_GOLD_FOR_TARGET)
2908 # Figure out what nm we will be using.
2909 gcc_cv_binutils_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/binutils
2910 AS_VAR_SET_IF(gcc_cv_nm,, [
2911 if test -f $gcc_cv_binutils_srcdir/configure.ac \
2912 && test -f ../binutils/Makefile \
2913 && test x$build = x$host; then
2914 gcc_cv_nm=../binutils/nm-new$build_exeext
2915 elif test -x nm$build_exeext; then
2916 gcc_cv_nm=./nm$build_exeext
2917 elif ( set dummy $NM_FOR_TARGET; test -x $[2] ); then
2918 gcc_cv_nm="$NM_FOR_TARGET"
2920 AC_PATH_PROG(gcc_cv_nm, $NM_FOR_TARGET)
2923 AC_MSG_CHECKING(what nm to use)
2924 if test "$gcc_cv_nm" = ../binutils/nm-new$build_exeext; then
2925 # Single tree build which includes binutils.
2926 AC_MSG_RESULT(newly built nm)
2929 AC_MSG_RESULT($gcc_cv_nm)
2933 ORIGINAL_NM_FOR_TARGET=$gcc_cv_nm
2934 AC_SUBST(ORIGINAL_NM_FOR_TARGET)
2935 case "$ORIGINAL_NM_FOR_TARGET" in
2936 ./nm | ./nm$build_exeext) ;;
2937 *) AC_CONFIG_FILES(nm:exec-tool.in, [chmod +x nm]) ;;
2941 # Figure out what objdump we will be using.
2942 AS_VAR_SET_IF(gcc_cv_objdump,, [
2943 if test -f $gcc_cv_binutils_srcdir/configure.ac \
2944 && test -f ../binutils/Makefile \
2945 && test x$build = x$host; then
2946 # Single tree build which includes binutils.
2947 gcc_cv_objdump=../binutils/objdump$build_exeext
2948 elif test -x objdump$build_exeext; then
2949 gcc_cv_objdump=./objdump$build_exeext
2950 elif ( set dummy $OBJDUMP_FOR_TARGET; test -x $[2] ); then
2951 gcc_cv_objdump="$OBJDUMP_FOR_TARGET"
2953 AC_PATH_PROG(gcc_cv_objdump, $OBJDUMP_FOR_TARGET)
2956 AC_MSG_CHECKING(what objdump to use)
2957 if test "$gcc_cv_objdump" = ../binutils/objdump$build_exeext; then
2958 # Single tree build which includes binutils.
2959 AC_MSG_RESULT(newly built objdump)
2960 elif test x$gcc_cv_objdump = x; then
2961 AC_MSG_RESULT(not found)
2963 AC_MSG_RESULT($gcc_cv_objdump)
2966 # Figure out what readelf we will be using.
2967 AS_VAR_SET_IF(gcc_cv_readelf,, [
2968 if test -f $gcc_cv_binutils_srcdir/configure.ac \
2969 && test -f ../binutils/Makefile \
2970 && test x$build = x$host; then
2971 # Single tree build which includes binutils.
2972 gcc_cv_readelf=../binutils/readelf$build_exeext
2973 elif test -x readelf$build_exeext; then
2974 gcc_cv_readelf=./readelf$build_exeext
2975 elif ( set dummy $READELF_FOR_TARGET; test -x $[2] ); then
2976 gcc_cv_readelf="$READELF_FOR_TARGET"
2978 AC_PATH_PROG(gcc_cv_readelf, $READELF_FOR_TARGET)
2981 AC_MSG_CHECKING(what readelf to use)
2982 if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then
2983 # Single tree build which includes binutils.
2984 AC_MSG_RESULT(newly built readelf)
2985 elif test x$gcc_cv_readelf = x; then
2986 AC_MSG_RESULT(not found)
2988 AC_MSG_RESULT($gcc_cv_readelf)
2991 # Figure out what otool we will be using.
2992 AS_VAR_SET_IF(gcc_cv_otool,, [
2993 if test -x otool$build_exeext; then
2994 gcc_cv_otool=./otool$build_exeext
2995 elif ( set dummy $OTOOL_FOR_TARGET; test -x $[2] ); then
2996 gcc_cv_otool="$OTOOL_FOR_TARGET"
2998 AC_PATH_PROG(gcc_cv_otool, $OTOOL_FOR_TARGET)
3001 AC_MSG_CHECKING(what otool to use)
3002 if test x$gcc_cv_otool = x; then
3003 AC_MSG_RESULT(not found)
3005 AC_MSG_RESULT($gcc_cv_otool)
3008 # Figure out the dsymutil we will use.
3009 AS_VAR_SET_IF(gcc_cv_dsymutil,, [
3010 if test -x "$DEFAULT_DSYMUTIL"; then
3011 gcc_cv_dsymutil="$DEFAULT_DSYMUTIL"
3012 elif test -x dsymutil$build_exeext; then
3013 gcc_cv_dsymutil=./dsymutil$build_exeext
3014 elif ( set dummy $DSYMUTIL_FOR_TARGET; test -x $[2] ); then
3015 gcc_cv_dsymutil=$DSYMUTIL_FOR_TARGET
3016 elif ( set dummy $DSYMUTIL; test -x $[2] ); then
3017 gcc_cv_dsymutil=$DSYMUTIL
3019 AC_PATH_PROG(gcc_cv_dsymutil, $DSYMUTIL_FOR_TARGET)
3022 ORIGINAL_DSYMUTIL_FOR_TARGET=$gcc_cv_dsymutil
3023 AC_SUBST(ORIGINAL_DSYMUTIL_FOR_TARGET)
3024 case "$ORIGINAL_DSYMUTIL_FOR_TARGET" in
3025 ./dsymutil | ./dsymutil$build_exeext) ;;
3026 *) AC_CONFIG_FILES(dsymutil:exec-tool.in, [chmod +x dsymutil]) ;;
3029 # Figure out what assembler alignment features are present.
3030 gcc_GAS_CHECK_FEATURE([.balign and .p2align], gcc_cv_as_balign_and_p2align,,
3033 [AC_DEFINE(HAVE_GAS_BALIGN_AND_P2ALIGN, 1,
3034 [Define if your assembler supports .balign and .p2align.])])
3036 gcc_GAS_CHECK_FEATURE([.p2align with maximum skip], gcc_cv_as_max_skip_p2align,,
3038 [AC_DEFINE(HAVE_GAS_MAX_SKIP_P2ALIGN, 1,
3039 [Define if your assembler supports specifying the maximum number
3040 of bytes to skip when using the GAS .p2align command.])])
3042 gcc_GAS_CHECK_FEATURE([.literal16], gcc_cv_as_literal16,,
3044 [AC_DEFINE(HAVE_GAS_LITERAL16, 1,
3045 [Define if your assembler supports .literal16.])])
3047 gcc_GAS_CHECK_FEATURE([working .subsection -1], gcc_cv_as_subsection_m1,,
3048 [conftest_label1: .word 0
3050 conftest_label2: .word 0
3052 [if test x$gcc_cv_nm != x; then
3053 $gcc_cv_nm conftest.o | grep conftest_label1 > conftest.nm1
3054 $gcc_cv_nm conftest.o | grep conftest_label2 | sed -e 's/label2/label1/' > conftest.nm2
3055 if cmp conftest.nm1 conftest.nm2 > /dev/null 2>&1
3057 else gcc_cv_as_subsection_m1=yes
3059 rm -f conftest.nm1 conftest.nm2
3061 [AC_DEFINE(HAVE_GAS_SUBSECTION_ORDERING, 1,
3062 [Define if your assembler supports .subsection and .subsection -1 starts
3063 emitting at the beginning of your section.])])
3065 gcc_GAS_CHECK_FEATURE([.weak], gcc_cv_as_weak,,
3067 [AC_DEFINE(HAVE_GAS_WEAK, 1, [Define if your assembler supports .weak.])])
3069 gcc_GAS_CHECK_FEATURE([.weakref], gcc_cv_as_weakref,,
3070 [ .weakref foobar, barfnot],,
3071 [AC_DEFINE(HAVE_GAS_WEAKREF, 1, [Define if your assembler supports .weakref.])])
3073 gcc_GAS_CHECK_FEATURE([.nsubspa comdat], gcc_cv_as_nsubspa_comdat,,
3075 .NSUBSPA $CODE$,COMDAT],,
3076 [AC_DEFINE(HAVE_GAS_NSUBSPA_COMDAT, 1, [Define if your assembler supports .nsubspa comdat option.])])
3078 # .hidden needs to be supported in both the assembler and the linker,
3079 # because GNU LD versions before 2.12.1 have buggy support for STV_HIDDEN.
3080 # This is irritatingly difficult to feature test for; we have to check the
3081 # date string after the version number. If we've got an in-tree
3082 # ld, we don't know its patchlevel version, so we set the baseline at 2.13
3084 # The gcc_GAS_CHECK_FEATURE call just sets a cache variable.
3087 conftest_s=' .globl foobar,hidden'
3090 conftest_s=' .hidden foobar
3094 gcc_GAS_CHECK_FEATURE([.hidden], gcc_cv_as_hidden,, [$conftest_s])
3097 # Darwin as has some visibility support, though with a different syntax.
3098 gcc_cv_as_hidden=yes
3102 gcc_GAS_CHECK_FEATURE([.base64], gcc_cv_as_base64,,
3104 .base64 "Tm9uIHB1ZG9yIGVzdCBuaWwgc2NpcmUsIHB1ZG9yIG5pbCBkaXNjZXJlIHZlbGxlLgo="],,
3105 [AC_DEFINE(HAVE_GAS_BASE64, 1, [Define if your assembler supports .base64.])])
3107 gcc_GAS_CHECK_FEATURE([.cv_ucomp], gcc_cv_as_cv_ucomp,,[.cv_ucomp 0],,
3108 [AC_DEFINE(HAVE_GAS_CV_UCOMP, 1, [Define if your assembler supports .cv_ucomp.])])
3110 # gnu_indirect_function type is an extension proposed at
3111 # http://groups.google/com/group/generic-abi/files. It allows dynamic runtime
3112 # selection of function implementation
3113 AC_ARG_ENABLE(gnu-indirect-function,
3114 [AS_HELP_STRING([--enable-gnu-indirect-function],
3115 [enable the use of the @gnu_indirect_function to glibc systems])],
3116 [case $enable_gnu_indirect_function in
3118 *) AC_MSG_ERROR(['$enable_gnu_indirect_function' is an invalid value for --enable-gnu-indirect-function.
3119 Valid choices are 'yes' and 'no'.]) ;;
3121 [enable_gnu_indirect_function="$default_gnu_indirect_function"])
3125 AC_MSG_CHECKING(linker ifunc IRELATIVE support)
3126 cat > conftest.s <<EOF
3128 .type foo_resolver, @function
3131 .size foo_resolver, .-foo_resolver
3134 .type foo, %gnu_indirect_function
3135 .set foo, foo_resolver
3138 .type bar, @function
3144 if test x$gcc_cv_as != x \
3145 && test x$gcc_cv_ld != x \
3146 && test x$gcc_cv_readelf != x \
3147 && $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
3148 && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \
3149 && $gcc_cv_readelf --relocs --wide conftest \
3150 | grep R_RISCV_IRELATIVE > /dev/null 2>&1; then
3151 enable_gnu_indirect_function=yes
3153 rm -f conftest conftest.o conftest.s
3154 AC_MSG_RESULT($enable_gnu_indirect_function)
3158 gif=`if test x$enable_gnu_indirect_function = xyes; then echo 1; else echo 0; fi`
3159 AC_DEFINE_UNQUOTED(HAVE_GNU_INDIRECT_FUNCTION, $gif,
3160 [Define if your system supports gnu indirect functions.])
3164 ld_ver=`$gcc_cv_ld --version 2>/dev/null | sed 1q`
3165 if test $in_tree_ld != yes ; then
3166 if echo "$ld_ver" | grep GNU > /dev/null; then
3167 if test x"$ld_is_gold" = xyes; then
3168 # GNU gold --version looks like this:
3170 # GNU gold (GNU Binutils 2.21.51.20110225) 1.11
3172 # We extract the binutils version which is more familiar and specific
3173 # than the gold version.
3174 ld_vers=`echo $ld_ver | sed -n \
3175 -e 's,^[^)]*[ ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
3177 # GNU ld --version looks like this:
3179 # GNU ld (GNU Binutils) 2.21.51.20110225
3180 ld_vers=`echo $ld_ver | sed -n \
3181 -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
3183 ld_date=`echo $ld_ver | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)\(-*\)\([01][0-9]\)\2\([0-3][0-9]\).*$,\1\3\4,p'`
3184 ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
3185 ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
3186 ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
3190 # Solaris 2 ld -V output looks like this for a regular version:
3192 # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1699
3194 # but test versions add stuff at the end:
3196 # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1701:onnv-ab196087-6931056-03/25/10
3198 # ld and ld.so.1 are guaranteed to be updated in lockstep, so ld version
3199 # numbers can be used in ld.so.1 feature checks even if a different
3200 # linker is configured.
3201 ld_ver=`$gcc_cv_ld -V 2>&1`
3202 if echo "$ld_ver" | grep 'Solaris Link Editors' > /dev/null; then
3203 ld_vers=`echo $ld_ver | sed -n \
3204 -e 's,^.*: 5\.[0-9][0-9]*-\([0-9]\.[0-9][0-9]*\).*$,\1,p'`
3205 ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
3206 ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
3214 AC_CACHE_CHECK(linker for .hidden support, gcc_cv_ld_hidden,
3215 [[if test $in_tree_ld = yes ; then
3217 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 13 -o "$gcc_cv_gld_major_version" -gt 2 \
3218 && test $in_tree_ld_is_elf = yes; then
3219 gcc_cv_ld_hidden=yes
3222 gcc_cv_ld_hidden=yes
3223 if test x"$ld_is_gold" = xyes; then
3225 elif test x"$ld_is_mold" = xyes; then
3227 elif echo "$ld_ver" | grep GNU > /dev/null; then
3228 if test 0"$ld_date" -lt 20020404; then
3229 if test -n "$ld_date"; then
3230 # If there was date string, but was earlier than 2002-04-04, fail
3232 elif test -z "$ld_vers"; then
3233 # If there was no date string nor ld version number, something is wrong
3236 test -z "$ld_vers_patch" && ld_vers_patch=0
3237 if test "$ld_vers_major" -lt 2; then
3239 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 12; then
3240 gcc_cv_ld_hidden="no"
3241 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 12 -a "$ld_vers_patch" -eq 0; then
3249 gcc_cv_ld_hidden=yes
3252 # Darwin ld has some visibility support.
3253 gcc_cv_ld_hidden=yes
3255 hppa64*-*-hpux* | ia64*-*-hpux*)
3256 gcc_cv_ld_hidden=yes
3259 # Support for .hidden in Sun ld appeared in Solaris 9 FCS, but
3260 # .symbolic was only added in Solaris 9 12/02.
3261 gcc_cv_ld_hidden=yes
3269 libgcc_visibility=no
3270 AC_SUBST(libgcc_visibility)
3271 GCC_TARGET_TEMPLATE([HAVE_GAS_HIDDEN])
3272 if test $gcc_cv_as_hidden = yes && test $gcc_cv_ld_hidden = yes; then
3273 libgcc_visibility=yes
3274 AC_DEFINE(HAVE_GAS_HIDDEN, 1,
3275 [Define if your assembler and linker support .hidden.])
3278 AC_MSG_CHECKING(linker read-only and read-write section mixing)
3279 gcc_cv_ld_ro_rw_mix=unknown
3280 if test $in_tree_ld = yes ; then
3281 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 \
3282 && test $in_tree_ld_is_elf = yes; then
3283 gcc_cv_ld_ro_rw_mix=read-write
3285 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
3286 echo '.section myfoosect, "a"' > conftest1.s
3287 echo '.section myfoosect, "aw"' > conftest2.s
3288 echo '.byte 1' >> conftest2.s
3289 echo '.section myfoosect, "a"' > conftest3.s
3290 echo '.byte 0' >> conftest3.s
3291 if $gcc_cv_as -o conftest1.o conftest1.s > /dev/null 2>&1 \
3292 && $gcc_cv_as -o conftest2.o conftest2.s > /dev/null 2>&1 \
3293 && $gcc_cv_as -o conftest3.o conftest3.s > /dev/null 2>&1; then
3294 if $gcc_cv_ld -shared -o conftest1.so conftest1.o \
3295 conftest2.o conftest3.o > /dev/null 2>&1 \
3296 || $gcc_cv_ld -r -o conftest1.so conftest1.o \
3297 conftest2.o conftest3.o > /dev/null 2>&1; then
3298 gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest1.so \
3299 | sed -e '/myfoosect/!d' -e N`
3300 if echo "$gcc_cv_ld_ro_rw_mix" | grep CONTENTS > /dev/null; then
3301 if echo "$gcc_cv_ld_ro_rw_mix" | grep READONLY > /dev/null; then
3302 gcc_cv_ld_ro_rw_mix=read-only
3304 gcc_cv_ld_ro_rw_mix=read-write
3310 rm -f conftest.* conftest[123].*
3313 if test x$gcc_cv_ld_ro_rw_mix = xread-write; then
3314 AC_DEFINE(HAVE_LD_RO_RW_SECTION_MIXING, 1,
3315 [Define if your linker links a mix of read-only
3316 and read-write sections into a read-write section.])
3318 AC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)
3320 gcc_AC_INITFINI_ARRAY
3322 gcc_CHECK_ATTRIBUTE_ALIAS
3324 # Some assemblers (GNU as for LoongArch) generates relocations for
3325 # leb128 symbol arithmetic for relaxation, we need to disable relaxation
3326 # probing leb128 support then.
3329 gcc_GAS_CHECK_FEATURE([-mno-relax support],
3330 gcc_cv_as_mno_relax,[-mno-relax],[.text],,
3331 [check_leb128_asflags=-mno-relax])
3334 check_leb128_asflags=
3338 # Check if we have .[us]leb128, and support symbol arithmetic with it.
3339 # Older versions of GAS and some non-GNU assemblers, have a bugs handling
3340 # these directives, even when they appear to accept them.
3341 gcc_GAS_CHECK_FEATURE([.sleb128 and .uleb128], gcc_cv_as_leb128,
3342 [$check_leb128_asflags],
3349 .uleb128 0x8000000000000000
3352 if test "x$gcc_cv_objdump" != x; then
3353 if $gcc_cv_objdump -s conftest.o 2>/dev/null \
3354 | grep '04800a8e 78808080 80808080 808001' >/dev/null; then
3355 gcc_cv_as_leb128=yes
3357 elif test "x$gcc_cv_otool" != x; then
3358 if $gcc_cv_otool -d conftest.o 2>/dev/null \
3359 | grep '04 80 0a 8e 78 80 80 80 80 80 80 80 80 80 01' >/dev/null; then
3360 gcc_cv_as_leb128=yes
3363 # play safe, assume the assembler is broken.
3367 [AC_DEFINE(HAVE_AS_LEB128, 1,
3368 [Define if your assembler supports .sleb128 and .uleb128.])],
3369 [AC_DEFINE(HAVE_AS_LEB128, 0,
3370 [Define if your assembler supports .sleb128 and .uleb128.])])
3372 # Determine if an .eh_frame section is read-only.
3373 gcc_fn_eh_frame_ro () {
3374 $gcc_cv_as $1 -o conftest.o conftest.s > /dev/null 2>&1 && \
3375 $gcc_cv_objdump -h conftest.o 2>/dev/null | \
3376 sed -e '/.eh_frame/!d' -e N | grep READONLY > /dev/null
3379 # Check if we have assembler support for unwind directives.
3380 gcc_GAS_CHECK_FEATURE([cfi directives], gcc_cv_as_cfi_directive,,
3386 .cfi_escape 1, 2, 3, 4, 5
3390 # If the linker used on Solaris (like Sun ld) isn't capable of merging
3391 # read-only and read-write sections, we need to make sure that the
3392 # assembler used emits read-write .eh_frame sections.
3393 if test "x$gcc_cv_ld_ro_rw_mix" = xread-write; then
3394 gcc_cv_as_cfi_directive=yes
3395 elif test "x$gcc_cv_objdump" = x; then
3396 # No objdump, err on the side of caution.
3397 gcc_cv_as_cfi_directive=no
3399 if test x$gas = xyes; then
3407 sparc*-*-solaris2.*)
3408 # On Solaris/SPARC, .eh_frame sections should always be read-write.
3409 if gcc_fn_eh_frame_ro $as_32_opt \
3410 || gcc_fn_eh_frame_ro $as_64_opt; then
3411 gcc_cv_as_cfi_directive=no
3413 gcc_cv_as_cfi_directive=yes
3416 i?86-*-solaris2.* | x86_64-*-solaris2.*)
3417 # On Solaris/x86, make sure that GCC and assembler agree on using
3418 # read-only .eh_frame sections for 64-bit.
3419 if gcc_fn_eh_frame_ro $as_32_opt; then
3420 gcc_cv_as_cfi_directive=no
3421 elif gcc_fn_eh_frame_ro $as_64_opt; then
3422 gcc_cv_as_cfi_directive=yes
3424 gcc_cv_as_cfi_directive=no
3431 gcc_cv_as_cfi_directive=yes
3434 if test $gcc_cv_as_cfi_directive = yes && test x$gcc_cv_objdump != x; then
3435 gcc_GAS_CHECK_FEATURE([working cfi advance], gcc_cv_as_cfi_advance_working,,
3438 .cfi_adjust_cfa_offset 64
3440 .cfi_adjust_cfa_offset 128
3443 if $gcc_cv_objdump -Wf conftest.o 2>/dev/null \
3444 | grep 'DW_CFA_advance_loc[24]:[ ][ ]*75040[ ]' >/dev/null; then
3445 gcc_cv_as_cfi_advance_working=yes
3449 # no objdump, err on the side of caution
3450 gcc_cv_as_cfi_advance_working=no
3452 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_DIRECTIVE)
3453 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_DIRECTIVE,
3454 [`if test $gcc_cv_as_cfi_directive = yes \
3455 && test $gcc_cv_as_cfi_advance_working = yes; then echo 1; else echo 0; fi`],
3456 [Define 0/1 if your assembler supports CFI directives.])
3458 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
3459 gcc_GAS_CHECK_FEATURE([cfi personality directive],
3460 gcc_cv_as_cfi_personality_directive,,
3463 .cfi_personality 0, symbol
3465 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE,
3466 [`if test $gcc_cv_as_cfi_personality_directive = yes; then echo 1; else echo 0; fi`],
3467 [Define 0/1 if your assembler supports .cfi_personality.])
3469 gcc_GAS_CHECK_FEATURE([cfi sections directive],
3470 gcc_cv_as_cfi_sections_directive,,
3472 .cfi_sections .debug_frame, .eh_frame
3476 win32 | pe | cygwin* | mingw32*)
3477 # Need to check that we generated the correct relocation for the
3478 # .debug_frame section. This was fixed for binutils 2.21.
3479 gcc_cv_as_cfi_sections_directive=no
3480 if test "x$gcc_cv_objdump" != x; then
3481 if $gcc_cv_objdump -j .debug_frame -r conftest.o 2>/dev/null | \
3482 grep -i secrel > /dev/null; then
3483 gcc_cv_as_cfi_sections_directive=yes
3488 gcc_cv_as_cfi_sections_directive=yes
3491 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
3492 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_SECTIONS_DIRECTIVE,
3493 [`if test $gcc_cv_as_cfi_sections_directive = yes; then echo 1; else echo 0; fi`],
3494 [Define 0/1 if your assembler supports .cfi_sections.])
3496 # GAS versions up to and including 2.11.0 may mis-optimize
3498 gcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,,
3505 .section .eh_frame,"aw",@progbits
3507 .4byte .LECIE1-.LSCIE1
3521 .4byte .LEFDE1-.LASFDE1
3523 .4byte .LASFDE1-__FRAME_BEGIN__
3531 [ dnl # For autoconf 2.5x, must protect trailing spaces with @&t@.
3532 cat > conftest.lit <<EOF
3533 0000 10000000 00000000 017a0001 781a0004 .........z..x...
3534 0010 01000000 12000000 18000000 00000000 ................
3535 0020 08000000 04080000 0044 .........D @&t@
3537 cat > conftest.big <<EOF
3538 0000 00000010 00000000 017a0001 781a0004 .........z..x...
3539 0010 00000001 00000012 00000018 00000000 ................
3540 0020 00000008 04000000 0844 .........D @&t@
3542 # If the assembler didn't choke, and we can objdump,
3543 # and we got the correct data, then succeed.
3544 # The text in the here-document typically retains its unix-style line
3545 # endings, while the output of objdump will use host line endings.
3546 # Therefore, use diff -b for the comparisons.
3547 if test x$gcc_cv_objdump != x \
3548 && $gcc_cv_objdump -s -j .eh_frame conftest.o 2>/dev/null \
3549 | tail -3 > conftest.got \
3550 && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \
3551 || diff -b conftest.big conftest.got > /dev/null 2>&1; }
3553 gcc_cv_as_eh_frame=yes
3554 elif AC_TRY_COMMAND($gcc_cv_as -o conftest.o --traditional-format /dev/null); then
3555 gcc_cv_as_eh_frame=buggy
3557 # Uh oh, what do we do now?
3558 gcc_cv_as_eh_frame=no
3561 if test $gcc_cv_as_eh_frame = buggy; then
3562 AC_DEFINE(USE_AS_TRADITIONAL_FORMAT, 1,
3563 [Define if your assembler mis-optimizes .eh_frame data.])
3566 # Test if the assembler supports the section flag 'e' or #exclude for
3567 # specifying an excluded section.
3568 gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_e,
3572 if test $gcc_cv_as_section_exclude_e = no; then
3574 # Solaris as uses #exclude instead.
3578 conftest_s='.section "foo1", #exclude'
3580 i?86-*-solaris2* | x86_64-*-solaris2*)
3581 conftest_s='.section foo1, #exclude'
3586 gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_hash,,
3590 AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_EXCLUDE,
3591 [`if test $gcc_cv_as_section_exclude_e = yes || test $gcc_cv_as_section_exclude_hash = yes; then echo 1; else echo 0; fi`],
3592 [Define if your assembler supports specifying the exclude section flag.])
3594 # Test if the assembler supports the section flag 'R' for specifying
3595 # section with SHF_GNU_RETAIN.
3597 # Solaris may use GNU assembler with Solairs ld. Even if GNU
3598 # assembler supports the section flag 'R', it doesn't mean that
3599 # Solairs ld supports it.
3601 gcc_cv_as_shf_gnu_retain=no
3604 gcc_GAS_CHECK_FEATURE([section 'R' flag], gcc_cv_as_shf_gnu_retain,
3606 [.section .foo,"awR",%progbits
3610 AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_GNU_RETAIN,
3611 [`if test $gcc_cv_as_shf_gnu_retain = yes; then echo 1; else echo 0; fi`],
3612 [Define 0/1 if your assembler supports marking sections with SHF_GNU_RETAIN flag.])
3614 # Test if the assembler supports the section flag 'o' for specifying
3615 # section with link-order.
3617 # Solaris may use GNU assembler with Solairs ld. Even if GNU
3618 # assembler supports the section flag 'o', it doesn't mean that
3619 # Solairs ld supports it.
3621 gcc_cv_as_section_link_order=no
3624 gcc_GAS_CHECK_FEATURE([section 'o' flag], gcc_cv_as_section_link_order,
3628 .section __patchable_function_entries,"awo",%progbits,.foo
3632 AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_LINK_ORDER,
3633 [`if test $gcc_cv_as_section_link_order = yes; then echo 1; else echo 0; fi`],
3634 [Define 0/1 if your assembler supports 'o' flag in .section directive.])
3636 gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
3638 [.section .rodata.str, "aMS", @progbits, 1])
3639 if test $gcc_cv_as_shf_merge = no; then
3640 gcc_GAS_CHECK_FEATURE(section merging support (%progbits),
3641 gcc_cv_as_shf_merge_percent,
3643 [.section .rodata.str, "aMS", %progbits, 1])
3645 AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
3646 [`if test $gcc_cv_as_shf_merge = yes \
3647 || test $gcc_cv_as_shf_merge_percent = yes; then echo 1; else echo 0; fi`],
3648 [Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
3650 gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as)],
3651 gcc_cv_as_comdat_group,
3653 [.section .text,"axG",@progbits,.foo,comdat])
3654 if test $gcc_cv_as_comdat_group = yes; then
3655 gcc_cv_as_comdat_group_percent=no
3656 gcc_cv_as_comdat_group_group=no
3658 gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as, %type)],
3659 gcc_cv_as_comdat_group_percent,
3661 [.section .text,"axG",%progbits,.foo,comdat])
3662 if test $gcc_cv_as_comdat_group_percent = yes; then
3663 gcc_cv_as_comdat_group_group=no
3666 # Sun as uses a completely different syntax.
3671 .group foo,".text%foo",#comdat
3672 .section ".text%foo", #alloc,#execinstr,#progbits
3677 i?86-*-solaris2* | x86_64-*-solaris2*)
3679 .group foo,.text%foo,#comdat
3680 .section .text%foo, "ax", @progbits
3686 gcc_GAS_CHECK_FEATURE([COMDAT group support (Sun as, .group)],
3687 gcc_cv_as_comdat_group_group,
3691 if test -z "${gcc_cv_as_comdat_group_group+set}"; then
3692 gcc_cv_as_comdat_group_group=no
3696 if test x"$ld_is_gold" = xyes; then
3698 elif test x"$ld_is_mold" = xyes; then
3700 elif test $in_tree_ld = yes ; then
3702 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
3703 && test $in_tree_ld_is_elf = yes; then
3706 elif echo "$ld_ver" | grep GNU > /dev/null; then
3708 if test 0"$ld_date" -lt 20050308; then
3709 if test -n "$ld_date"; then
3710 # If there was date string, but was earlier than 2005-03-08, fail
3712 elif test "$ld_vers_major" -lt 2; then
3714 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
3721 *-*-solaris2.1[1-9]*)
3723 # Sun ld has COMDAT group support since Solaris 9, but it doesn't
3724 # interoperate with GNU as until Solaris 11 build 130, i.e. ld
3727 # If using Sun as for COMDAT group as emitted by GCC, one needs at
3728 # least ld version 1.2267.
3729 if test "$ld_vers_major" -gt 1; then
3731 elif test "x$gas_flag" = xyes && test "$ld_vers_minor" -ge 1688; then
3733 elif test "$ld_vers_minor" -ge 2267; then
3738 # Assume linkers other than GNU ld don't support COMDAT group.
3744 # Allow overriding the automatic COMDAT group tests above.
3745 AC_ARG_ENABLE(comdat,
3746 [AS_HELP_STRING([--enable-comdat], [enable COMDAT group support])],
3747 [comdat_group="$enable_comdat"])
3748 if test $comdat_group = no; then
3749 gcc_cv_as_comdat_group=no
3750 gcc_cv_as_comdat_group_percent=no
3751 gcc_cv_as_comdat_group_group=no
3753 AC_DEFINE_UNQUOTED(HAVE_COMDAT_GROUP,
3754 [`if test $gcc_cv_as_comdat_group = yes \
3755 || test $gcc_cv_as_comdat_group_percent = yes \
3756 || test $gcc_cv_as_comdat_group_group = yes; then echo 1; else echo 0; fi`],
3757 [Define 0/1 if your assembler and linker support COMDAT groups.])
3759 gcc_GAS_CHECK_FEATURE([line table is_stmt support],
3763 .loc 1 1 0 is_stmt 1],,
3764 [AC_DEFINE(HAVE_GAS_LOC_STMT, 1,
3765 [Define if your assembler supports the .loc is_stmt sub-directive.])])
3767 gcc_GAS_CHECK_FEATURE([line table discriminator support],
3768 gcc_cv_as_discriminator,,
3771 .loc 1 1 0 discriminator 1],,
3772 [AC_DEFINE(HAVE_GAS_DISCRIMINATOR, 1,
3773 [Define if your assembler supports the .loc discriminator sub-directive.])])
3775 # Catch the newlib flag of the same name so we can gate GCC features on it.
3776 AC_ARG_ENABLE(newlib-nano-formatted-io,
3777 [AS_HELP_STRING([--enable-newlib-nano-formatted-io], [Use nano version
3779 [case "${enableval}" in
3783 AC_MSG_ERROR([unknown newlib-nano-formatted-io setting $enableval])
3787 # Thread-local storage - the check is heavily parameterized.
3794 .section ".tdata","awT",@progbits
3797 ldq $27,__tls_get_addr($29) !literal!1
3798 lda $16,foo($29) !tlsgd!1
3799 jsr $26,($27),__tls_get_addr !lituse_tlsgd!1
3800 ldq $27,__tls_get_addr($29) !literal!2
3801 lda $16,foo($29) !tlsldm!2
3802 jsr $26,($27),__tls_get_addr !lituse_tlsldm!2
3803 ldq $1,foo($29) !gotdtprel
3804 ldah $2,foo($29) !dtprelhi
3805 lda $3,foo($2) !dtprello
3806 lda $4,foo($29) !dtprel
3807 ldq $1,foo($29) !gottprel
3808 ldah $2,foo($29) !tprelhi
3809 lda $3,foo($2) !tprello
3810 lda $4,foo($29) !tprel'
3811 tls_as_opt=--fatal-warnings
3815 add_s r0,r0, @foo@tpoff'
3817 cris-*-*|crisv32-*-*)
3819 .section ".tdata","awT",@progbits
3824 tls_as_opt=--fatal-warnings
3828 .section ".tdata","awT",@progbits
3838 .section ".tdata","awT",@progbits
3842 addil LT%foo-$tls_gdidx$,gp
3843 ldo RT%foo-$tls_gdidx$(%r1),%arg0
3846 addil LT%foo-$tls_ldidx$,gp
3848 ldo RT%foo-$tls_ldidx$(%r1),%arg0
3849 addil LR%foo-$tls_dtpoff$,%ret0
3850 ldo RR%foo-$tls_dtpoff$(%r1),%t1
3852 addil LT%foo-$tls_ieoff$,gp
3853 ldw RT%foo-$tls_ieoff$(%r1),%t2
3856 addil LR%foo-$tls_leoff$,%t1
3857 ldo RR%foo-$tls_leoff$(%r1),%t2'
3858 tls_as_opt=--fatal-warnings
3862 .section ".tdata","awT",%progbits
3871 i[34567]86-*-* | x86_64-*-*)
3873 i[34567]86-*-solaris2.* | x86_64-*-solaris2.*)
3880 if test x$on_solaris = xyes && test x$gas_flag = xno; then
3882 .section .tdata,"awt",@progbits'
3885 AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
3886 [Define to the flag used to mark TLS sections if the default (`T') doesn't work.])
3890 .section ".tdata","awT",@progbits'
3892 tls_as_opt="--fatal-warnings"
3896 if test x$on_solaris = xyes; then
3898 yes) tls_as_opt="$tls_as_opt --32" ;;
3901 conftest_s="$conftest_s
3905 leal foo@tlsgd(,%ebx,1), %eax
3906 leal foo@tlsldm(%ebx), %eax
3907 leal foo@dtpoff(%eax), %edx
3908 movl foo@gottpoff(%ebx), %eax
3909 subl foo@gottpoff(%ebx), %eax
3910 addl foo@gotntpoff(%ebx), %eax
3911 movl foo@indntpoff, %eax
3912 movl \$foo@tpoff, %eax
3913 subl \$foo@tpoff, %eax
3914 leal foo@ntpoff(%ecx), %eax"
3917 if test x$on_solaris = xyes; then
3919 yes) tls_as_opt="$tls_as_opt --64" ;;
3920 no) tls_as_opt="$tls_as_opt -xarch=amd64" ;;
3923 conftest_s="$conftest_s
3927 leaq foo@tlsgd(%rip), %rdi
3928 leaq foo@tlsld(%rip), %rdi
3929 leaq foo@dtpoff(%rax), %rdx
3930 movq foo@gottpoff(%rip), %rax
3931 movq \$foo@tpoff, %rax"
3937 .section ".tdata","awT",@progbits
3940 addl r16 = @ltoff(@dtpmod(foo#)), gp
3941 addl r17 = @ltoff(@dtprel(foo#)), gp
3942 addl r18 = @ltoff(@tprel(foo#)), gp
3943 addl r19 = @dtprel(foo#), gp
3944 adds r21 = @dtprel(foo#), r13
3945 movl r23 = @dtprel(foo#)
3946 addl r20 = @tprel(foo#), gp
3947 adds r22 = @tprel(foo#), r13
3948 movl r24 = @tprel(foo#)'
3949 tls_as_opt=--fatal-warnings
3953 .section .tdata,"awT",@progbits
3960 tls_as_opt='--fatal-warnings'
3964 .section .tdata,"awT",@progbits
3968 addik r5,r20,x@TLSGD
3969 addik r5,r20,x@TLSLDM'
3970 tls_as_opt='--fatal-warnings'
3974 .section .tdata,"awT",@progbits
3978 addiu $4, $28, %tlsgd(x)
3979 addiu $4, $28, %tlsldm(x)
3980 lui $4, %dtprel_hi(x)
3981 addiu $4, $4, %dtprel_lo(x)
3982 lw $4, %gottprel(x)($28)
3983 lui $4, %tprel_hi(x)
3984 addiu $4, $4, %tprel_lo(x)'
3985 tls_as_opt='-32 --fatal-warnings'
3989 .section .tdata,"awT",@progbits
3994 move.l x@TLSGD(%a5),%a0
3995 move.l x@TLSLDM(%a5),%a0
3996 move.l x@TLSLDO(%a5),%a0
3997 move.l x@TLSIE(%a5),%a0
3998 move.l x@TLSLE(%a5),%a0'
3999 tls_as_opt='--fatal-warnings'
4003 .section ".tdata","awT",%progbits
4007 add x0, x0, #:tlsgd_lo12:x
4010 tls_as_opt='--fatal-warnings'
4014 .section ".tdata","awT",@progbits
4017 l.movhi r3, tpoffha(foo)
4019 l.lwz r4, tpofflo(foo)(r3)'
4020 tls_as_opt=--fatal-warnings
4024 .extern __get_tpointer
4040 .section ".tdata","awT",@progbits
4048 addi 3,2,ld0@got@tlsgd
4054 addi 3,2,x1@got@tlsld
4060 addis 9,3,x2@dtprel@ha
4061 addi 9,9,x2@dtprel@l
4064 ld 9,x3@got@dtprel(2)
4068 tls_as_opt="-a64 --fatal-warnings"
4072 .section ".tdata","awT",@progbits
4080 addi 3,31,ld0@got@tlsgd
4082 addi 3,31,x1@got@tlsld
4085 addis 9,3,x2@dtprel@ha
4086 addi 9,9,x2@dtprel@l
4087 lwz 9,x3@got@tprel(31)
4090 addis 9,2,x2@tprel@ha
4091 addi 9,9,x2@tprel@l'
4092 tls_as_opt="-a32 --fatal-warnings"
4096 .section .tdata,"awT",@progbits
4100 call __tls_get_addr'
4101 tls_as_opt='--fatal-warnings'
4105 .section ".tdata","awT",@progbits
4114 l %r1,foo@GOTNTPOFF(%r12)
4115 l %r1,0(%r1):tls_load:foo
4116 bas %r14,0(%r1,%r13):tls_gdcall:foo
4117 bas %r14,0(%r1,%r13):tls_ldcall:foo'
4118 tls_as_opt="-m31 --fatal-warnings"
4122 .section ".tdata","awT",@progbits
4130 lg %r1,foo@GOTNTPOFF(%r12)
4131 larl %r1,foo@INDNTPOFF
4132 brasl %r14,__tls_get_offset@PLT:tls_gdcall:foo
4133 brasl %r14,__tls_get_offset@PLT:tls_ldcall:foo'
4134 tls_as_opt="-m64 -Aesame --fatal-warnings"
4136 sh-*-* | sh[123456789lbe]*-*-*)
4138 .section ".tdata","awT",@progbits
4146 tls_as_opt=--fatal-warnings
4150 sparc*-sun-solaris2.*)
4157 if test x$on_solaris = xyes && test x$gas_flag = xno; then
4159 .section ".tdata",#alloc,#write,#tls'
4162 .section ".tdata","awT",@progbits'
4163 tls_as_opt="-32 --fatal-warnings"
4165 conftest_s="$conftest_s
4168 sethi %tgd_hi22(foo), %o0
4169 add %o0, %tgd_lo10(foo), %o1
4170 add %l7, %o1, %o0, %tgd_add(foo)
4171 call __tls_get_addr, %tgd_call(foo)
4172 sethi %tldm_hi22(foo), %l1
4173 add %l1, %tldm_lo10(foo), %l2
4174 add %l7, %l2, %o0, %tldm_add(foo)
4175 call __tls_get_addr, %tldm_call(foo)
4176 sethi %tldo_hix22(foo), %l3
4177 xor %l3, %tldo_lox10(foo), %l4
4178 add %o0, %l4, %l5, %tldo_add(foo)
4179 sethi %tie_hi22(foo), %o3
4180 add %o3, %tie_lo10(foo), %o3
4181 ld [%l7 + %o3], %o2, %tie_ld(foo)
4182 add %g7, %o2, %o4, %tie_add(foo)
4183 sethi %tle_hix22(foo), %l1
4184 xor %l1, %tle_lox10(foo), %o5
4185 ld [%g7 + %o5], %o1"
4189 .section ".tdata","awT",@progbits
4192 movi a8, foo@TLSFUNC
4193 movi a10, foo@TLSARG
4194 callx8.tls a8, foo@TLSCALL'
4199 if test "x$enable_tls" = xno ; then
4200 : # TLS explicitly disabled.
4201 elif test "x$enable_tls" = xyes ; then
4202 set_have_as_tls=yes # TLS explicitly enabled.
4203 elif test -z "$conftest_s"; then
4204 : # If we don't have a check, assume no support.
4206 gcc_GAS_CHECK_FEATURE(thread-local storage support, gcc_cv_as_tls,
4207 [$tls_as_opt], [$conftest_s],,
4208 [set_have_as_tls=yes])
4211 win32 | pe | cygwin* | mingw32*)
4212 if test $set_have_as_tls = yes; then
4213 # Hack to check whether ld breaks on @secrel32 for Windows
4214 if test $in_tree_ld = yes; then
4215 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 44 -o "$gcc_cv_gld_major_version" -gt 2; then
4216 : # ld support for @secrel32 was fixed in this version
4218 AC_MSG_ERROR([ld version is known to have broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
4220 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
4221 echo '.text' > conftest.s
4222 echo 'foo: nop' >> conftest.s
4223 echo '.data' >> conftest.s
4224 echo '.secrel32 foo' >> conftest.s
4225 if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 && $gcc_cv_ld -o conftest.exe conftest.o > /dev/null; then
4226 if $gcc_cv_objdump -h conftest.exe | grep '\.reloc\>' > /dev/null; then
4227 AC_MSG_ERROR([ld has broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
4230 AC_MSG_ERROR([Error occurred while checking for broken secrel32 relocations. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
4232 rm -f conftest.s conftest.o conftest.exe
4234 AC_MSG_ERROR([Cannot check for broken secrel32 relocations to determine --enable-tls support. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
4239 if test $set_have_as_tls = yes ; then
4240 AC_DEFINE(HAVE_AS_TLS, 1,
4241 [Define if your assembler and linker support thread-local storage.])
4244 # Target-specific assembler checks.
4246 AC_MSG_CHECKING(linker -Bstatic/-Bdynamic option)
4247 gcc_cv_ld_static_dynamic=no
4248 gcc_cv_ld_static_option='-Bstatic'
4249 gcc_cv_ld_dynamic_option='-Bdynamic'
4250 if test $in_tree_ld = yes ; then
4251 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2; then
4252 gcc_cv_ld_static_dynamic=yes
4254 elif test x$gcc_cv_ld != x; then
4255 # Check if linker supports -Bstatic/-Bdynamic option
4256 if $gcc_cv_ld --help 2>&1 | grep -- -Bstatic > /dev/null \
4257 && $gcc_cv_ld --help 2>&1 | grep -- -Bdynamic > /dev/null; then
4258 gcc_cv_ld_static_dynamic=yes
4261 # AIX ld uses -b flags
4262 *-*-aix4.[[23]]* | *-*-aix[[5-9]]*)
4263 gcc_cv_ld_static_dynamic=yes
4264 gcc_cv_ld_static_option="-bstatic"
4265 gcc_cv_ld_dynamic_option="-bdynamic"
4267 # HP-UX ld uses -a flags to select between shared and archive.
4269 if test x"$gnu_ld" = xno; then
4270 gcc_cv_ld_static_dynamic=yes
4271 gcc_cv_ld_static_option="-aarchive_shared"
4272 gcc_cv_ld_dynamic_option="-adefault"
4275 # Solaris 2 ld always supports -Bstatic/-Bdynamic.
4277 gcc_cv_ld_static_dynamic=yes
4282 if test x"$gcc_cv_ld_static_dynamic" = xyes; then
4283 AC_DEFINE(HAVE_LD_STATIC_DYNAMIC, 1,
4284 [Define if your linker supports -Bstatic/-Bdynamic or equivalent options.])
4285 AC_DEFINE_UNQUOTED(LD_STATIC_OPTION, "$gcc_cv_ld_static_option",
4286 [Define to the linker option to disable use of shared objects.])
4287 AC_DEFINE_UNQUOTED(LD_DYNAMIC_OPTION, "$gcc_cv_ld_dynamic_option",
4288 [Define to the linker option to enable use of shared objects.])
4290 AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
4292 AC_MSG_CHECKING(linker --version-script option)
4293 gcc_cv_ld_version_script=no
4294 ld_version_script_option=''
4295 if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
4296 gcc_cv_ld_version_script=yes
4297 ld_version_script_option='--version-script'
4298 elif test x$gcc_cv_ld != x; then
4300 # Solaris 2 ld always supports -M. It also supports a subset of
4301 # --version-script since Solaris 11.4, but requires
4302 # -z gnu-version-script-compat to activate.
4304 gcc_cv_ld_version_script=yes
4305 ld_version_script_option='-M'
4309 # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
4310 AC_MSG_RESULT($gcc_cv_ld_version_script)
4311 AC_SUBST(ld_version_script_option)
4313 AC_MSG_CHECKING(linker soname option)
4315 if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
4316 gcc_cv_ld_soname=yes
4317 ld_soname_option='-soname'
4318 elif test x$gcc_cv_ld != x; then
4321 gcc_cv_ld_soname=yes
4322 ld_soname_option='-install_name'
4324 # Solaris 2 ld always supports -h. It also supports --soname for GNU
4325 # ld compatiblity since some Solaris 10 update.
4327 gcc_cv_ld_soname=yes
4328 ld_soname_option='-h'
4332 # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
4333 AC_MSG_RESULT($gcc_cv_ld_soname)
4334 AC_SUBST(ld_soname_option)
4336 if test x"$demangler_in_ld" = xyes; then
4337 AC_MSG_CHECKING(linker --demangle support)
4338 gcc_cv_ld_demangle=no
4339 if test $in_tree_ld = yes; then
4340 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
4341 gcc_cv_ld_demangle=yes
4343 elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
4344 # Check if the GNU linker supports --demangle option
4345 if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
4346 gcc_cv_ld_demangle=yes
4349 if test x"$gcc_cv_ld_demangle" = xyes; then
4350 AC_DEFINE(HAVE_LD_DEMANGLE, 1,
4351 [Define if your linker supports --demangle option.])
4353 AC_MSG_RESULT($gcc_cv_ld_demangle)
4356 AC_MSG_CHECKING(linker plugin support)
4358 if test -f liblto_plugin.la; then
4359 save_ld_ver="$ld_ver"
4360 save_ld_vers_major="$ld_vers_major"
4361 save_ld_vers_minor="$ld_vers_minor"
4362 save_ld_is_gold="$ld_is_gold"
4366 if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" = x"$gcc_cv_ld"; then
4368 # FIXME: ld_is_gold?
4369 ld_vers_major="$gcc_cv_gld_major_version"
4370 ld_vers_minor="$gcc_cv_gld_minor_version"
4372 # Determine plugin linker version.
4373 # FIXME: Partial duplicate from above, generalize.
4375 ld_ver=`$ORIGINAL_PLUGIN_LD_FOR_TARGET --version 2>/dev/null | sed 1q`
4376 if echo "$ld_ver" | grep GNU > /dev/null; then
4377 if echo "$ld_ver" | grep "GNU gold" > /dev/null; then
4379 ld_vers=`echo $ld_ver | sed -n \
4380 -e 's,^[^)]*[ ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
4382 ld_vers=`echo $ld_ver | sed -n \
4383 -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
4385 ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
4386 ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
4391 # Determine plugin support.
4392 if echo "$ld_ver" | grep GNU > /dev/null; then
4393 # Require GNU ld or gold 2.21+ for plugin support by default.
4394 if test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 21; then
4396 elif test "$ld_is_mold" = yes; then
4398 # Allow -fuse-linker-plugin to enable plugin support in GNU gold 2.20.
4399 elif test "$ld_is_gold" = yes -a "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 20; then
4404 ld_ver="$save_ld_ver"
4405 ld_vers_major="$save_ld_vers_major"
4406 ld_vers_minor="$save_ld_vers_minor"
4407 ld_is_gold="$save_ld_is_gold"
4409 AC_DEFINE_UNQUOTED(HAVE_LTO_PLUGIN, $gcc_cv_lto_plugin,
4410 [Define to the level of your linker's plugin support.])
4411 AC_MSG_RESULT($gcc_cv_lto_plugin)
4413 # Target OS-specific assembler checks.
4415 case "$target_os" in
4417 gcc_GAS_CHECK_FEATURE([-mmacosx-version-min option],
4418 gcc_cv_as_mmacosx_version_min,
4419 [-mmacosx-version-min=10.1], [.text],,
4420 [AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1,
4421 [Define if your macOS assembler supports the -mmacos-version-min option.])])
4422 if test x$gcc_cv_as_mmacosx_version_min = "xyes"; then
4423 gcc_GAS_CHECK_FEATURE([.build_version],
4424 gcc_cv_as_darwin_build_version,
4425 [-mmacosx-version-min=10.14],
4426 [ .build_version macos, 10, 14 sdk_version 10, 14],,
4427 [AC_DEFINE(HAVE_AS_MACOS_BUILD_VERSION, 1,
4428 [Define if your macOS assembler supports .build_version directives])])
4433 # Target CPU-specific assembler checks.
4437 gcc_GAS_CHECK_FEATURE([-mabi option], gcc_cv_as_aarch64_mabi,
4438 [-mabi=lp64], [.text],,,)
4439 if test x$gcc_cv_as_aarch64_mabi = xyes; then
4440 AC_DEFINE(HAVE_AS_MABI_OPTION, 1,
4441 [Define if your assembler supports the -mabi option.])
4443 if test x$with_abi = xilp32; then
4444 AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4445 Upgrade the Assembler.])
4447 if test x"$with_multilib_list" = xdefault; then
4448 TM_MULTILIB_CONFIG=lp64
4450 aarch64_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
4451 for aarch64_multilib in ${aarch64_multilibs}; do
4452 case ${aarch64_multilib} in
4454 AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4455 Upgrade the Assembler.])
4463 # Check if we have binutils support for relocations types needed by -fpic
4464 gcc_GAS_CHECK_FEATURE([-fpic relocs], gcc_cv_as_aarch64_picreloc,,
4467 ldr x0, [[x2, #:gotpage_lo15:globalsym]]
4468 ],,[AC_DEFINE(HAVE_AS_SMALL_PIC_RELOCS, 1,
4469 [Define if your assembler supports relocs needed by -fpic.])])
4470 # Check if we have binutils support for AEABI build attributes.
4471 gcc_GAS_CHECK_FEATURE([support of AEABI build attributes], gcc_cv_as_aarch64_aeabi_build_attributes,,
4473 .aeabi_subsection aeabi_feature_and_bits, optional, ULEB128
4474 .aeabi_attribute Tag_Feature_BTI, 1
4475 .aeabi_attribute Tag_Feature_PAC, 1
4476 .aeabi_attribute Tag_Feature_GCS, 1
4477 ],,[AC_DEFINE(HAVE_AS_AEABI_BUILD_ATTRIBUTES, 1,
4478 [Define if your assembler supports AEABI build attributes.])])
4479 # Enable Branch Target Identification Mechanism and Return Address
4480 # Signing by default.
4481 AC_ARG_ENABLE(standard-branch-protection,
4483 AS_HELP_STRING([--enable-standard-branch-protection],
4484 [enable Branch Target Identification Mechanism, Return Address Signing, and Guarded Control Stack by default for AArch64])
4485 AS_HELP_STRING([--disable-standard-branch-protection],
4486 [disable Branch Target Identification Mechanism, Return Address Signing, and Guarded Control Stack by default for AArch64])
4491 tm_defines="${tm_defines} TARGET_ENABLE_BTI=1 TARGET_ENABLE_PAC_RET=1 TARGET_ENABLE_GCS=1"
4496 AC_MSG_ERROR(['$enableval' is an invalid value for --enable-standard-branch-protection.\
4497 Valid choices are 'yes' and 'no'.])
4502 # Enable default workaround for AArch64 Cortex-A53 erratum 835769.
4503 AC_ARG_ENABLE(fix-cortex-a53-835769,
4505 AS_HELP_STRING([--enable-fix-cortex-a53-835769],
4506 [enable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4507 AS_HELP_STRING([--disable-fix-cortex-a53-835769],
4508 [disable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4513 tm_defines="${tm_defines} TARGET_FIX_ERR_A53_835769_DEFAULT=1"
4518 AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-835769.\
4519 Valid choices are 'yes' and 'no'.])
4525 # Enable default workaround for AArch64 Cortex-A53 erratum 843419.
4526 AC_ARG_ENABLE(fix-cortex-a53-843419,
4528 AS_HELP_STRING([--enable-fix-cortex-a53-843419],
4529 [enable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4530 AS_HELP_STRING([--disable-fix-cortex-a53-843419],
4531 [disable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4536 tm_defines="${tm_defines} TARGET_FIX_ERR_A53_843419_DEFAULT=1"
4541 AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-843419.\
4542 Valid choices are 'yes' and 'no'.])
4550 # All TARGET_ABI_OSF targets.
4551 alpha*-*-linux* | alpha*-*-*bsd*)
4552 gcc_GAS_CHECK_FEATURE([explicit relocation support],
4553 gcc_cv_as_alpha_explicit_relocs,,
4556 extbl $3, $2, $3 !lituse_bytoff!1
4557 ldq $2, a($29) !literal!1
4558 ldq $4, b($29) !literal!2
4559 ldq_u $3, 0($2) !lituse_base!1
4560 ldq $27, f($29) !literal!5
4561 jsr $26, ($27), f !lituse_jsr!5
4562 ldah $29, 0($26) !gpdisp!3
4563 lda $0, c($29) !gprel
4564 ldah $1, d($29) !gprelhigh
4565 lda $1, d($1) !gprellow
4566 lda $29, 0($29) !gpdisp!3],,
4567 [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
4568 [Define if your assembler supports explicit relocations.])])
4569 gcc_GAS_CHECK_FEATURE([jsrdirect relocation support],
4570 gcc_cv_as_alpha_jsrdirect_relocs,,
4573 ldq $27, a($29) !literal!1
4574 jsr $26, ($27), a !lituse_jsrdirect!1],,
4575 [AC_DEFINE(HAVE_AS_JSRDIRECT_RELOCS, 1,
4576 [Define if your assembler supports the lituse_jsrdirect relocation.])])
4580 gcc_GAS_CHECK_FEATURE([--mlink-relax option], gcc_cv_as_avr_mlink_relax,
4581 [--mlink-relax], [.text],,
4582 [AC_DEFINE(HAVE_AS_AVR_MLINK_RELAX_OPTION, 1,
4583 [Define if your avr assembler supports --mlink-relax option.])])
4585 gcc_GAS_CHECK_FEATURE([-mrmw option], gcc_cv_as_avr_mrmw,
4587 [AC_DEFINE(HAVE_AS_AVR_MRMW_OPTION, 1,
4588 [Define if your avr assembler supports -mrmw option.])])
4590 gcc_GAS_CHECK_FEATURE([__gcc_isr pseudo instruction],
4591 gcc_cv_as_avr_mgccisr,
4597 [AC_DEFINE(HAVE_AS_AVR_MGCCISR_OPTION, 1,
4598 [Define if your avr assembler supports -mgcc-isr option.])])
4600 avr_ld_ver="`$gcc_cv_ld -v | sed -e 's:^.* ::'`"
4601 # Check how default linker description file implements .rodata for
4602 # avrxmega3 (PR21472). avr-gcc assumes .rodata is *not* loaded to
4603 # RAM so avr-gcc skips __do_copy_data for .rodata objects.
4604 AC_MSG_CHECKING(binutils for avrxmega3 .rodata support)
4605 cat > conftest.s <<EOF
4606 .section .rodata,"a",@progbits
4608 ;; avr-nm should print "... R xxvaryy", not "... D xxvaryy".
4613 AC_TRY_COMMAND([$gcc_cv_as -mmcu=avrxmega3 conftest.s -o conftest.o])
4614 AC_TRY_COMMAND([$gcc_cv_ld -mavrxmega3 conftest.o -o conftest.elf])
4615 AC_TRY_COMMAND([$gcc_cv_nm conftest.elf > conftest.nm])
4616 if test -s conftest.nm
4618 if grep ' R xxvaryy' conftest.nm > /dev/null; then
4620 AC_DEFINE(HAVE_LD_AVR_AVRXMEGA3_RODATA_IN_FLASH, 1,
4621 [Define if your default avr linker script for avrxmega3 leaves .rodata in flash.])
4623 AC_MSG_RESULT(no: avrxmega3 .rodata located in RAM)
4624 echo "$as_me: nm output was" >&AS_MESSAGE_LOG_FD
4625 cat conftest.nm >&AS_MESSAGE_LOG_FD
4626 AC_MSG_WARN([[support for avrxmega3 .rodata in flash needs Binutils 2.29 or higher (have $avr_ld_ver)]])
4629 AC_MSG_RESULT(test failed)
4630 echo "$as_me: failed program was" >&AS_MESSAGE_LOG_FD
4631 cat conftest.s >&AS_MESSAGE_LOG_FD
4632 AC_MSG_WARN([[see `config.log' for details]])
4634 rm -f conftest.s conftest.o conftest.elf conftest.nm
4636 # Check for emulation avrxmega2_flmap.
4637 AC_MSG_CHECKING(binutils for avrxmega2_flmap support (PR31124))
4638 cat > conftest.s <<EOF
4639 .section .text,"ax",@progbits
4640 ldi r16, __flmap_value_with_lock
4642 AC_TRY_COMMAND([$gcc_cv_as -mmcu=avrxmega2 conftest.s -o conftest.o])
4643 AC_TRY_COMMAND([$gcc_cv_ld -mavrxmega2_flmap conftest.o -o conftest.elf])
4644 if test -s conftest.elf
4647 AC_DEFINE(HAVE_LD_AVR_AVRXMEGA2_FLMAP, 1,
4648 [Define if your linker supports emulation avrxmega2_flmap.])
4651 AC_MSG_WARN([[support for avrxmega2_flmap requires Binutils 2.42 or higher (have $avr_ld_ver)]])
4652 AC_MSG_WARN([[see `config.log' for details]])
4654 rm -f conftest.o conftest.elf
4656 # Check for emulation avrxmega4_flmap.
4657 AC_MSG_CHECKING(binutils for avrxmega4_flmap support (PR31124))
4658 AC_TRY_COMMAND([$gcc_cv_as -mmcu=avrxmega4 conftest.s -o conftest.o])
4659 AC_TRY_COMMAND([$gcc_cv_ld -mavrxmega4_flmap conftest.o -o conftest.elf])
4660 if test -s conftest.elf
4663 AC_DEFINE(HAVE_LD_AVR_AVRXMEGA4_FLMAP, 1,
4664 [Define if your linker supports emulation avrxmega4_flmap.])
4667 AC_MSG_WARN([[support for avrxmega4_flmap requires Binutils 2.42 or higher (have $avr_ld_ver)]])
4668 AC_MSG_WARN([[see `config.log' for details]])
4670 rm -f conftest.s conftest.o conftest.elf
4674 gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
4675 gcc_cv_as_cris_no_mul_bug,
4676 [-no-mul-bug-abort], [.text],,
4677 [AC_DEFINE(HAVE_AS_NO_MUL_BUG_ABORT_OPTION, 1,
4678 [Define if your assembler supports the -no-mul-bug-abort option.])])
4682 gcc_GAS_CHECK_FEATURE([-relax option], gcc_cv_as_sparc_relax,
4684 [AC_DEFINE(HAVE_AS_RELAX_OPTION, 1,
4685 [Define if your assembler supports -relax option.])])
4687 gcc_GAS_CHECK_FEATURE([GOTDATA_OP relocs],
4688 gcc_cv_as_sparc_gotdata_op,
4695 sethi %gdop_hix22(foo), %g1
4696 xor %g1, %gdop_lox10(foo), %g1
4697 ld [[%l7 + %g1]], %g2, %gdop(foo)],
4698 [if test x$gcc_cv_ld != x \
4699 && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
4700 if test x$gcc_cv_objdump != x; then
4701 if $gcc_cv_objdump -s -j .text conftest 2> /dev/null \
4702 | grep ' 03000004 82186004 c405c001'> /dev/null 2>&1; then
4703 gcc_cv_as_sparc_gotdata_op=no
4705 gcc_cv_as_sparc_gotdata_op=yes
4710 [AC_DEFINE(HAVE_AS_SPARC_GOTDATA_OP, 1,
4711 [Define if your assembler and linker support GOTDATA_OP relocs.])])
4713 gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs],
4714 gcc_cv_as_sparc_ua_pcrel,
4722 .uaword %r_disp32(foo)],
4723 [if test x$gcc_cv_ld != x \
4724 && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
4725 gcc_cv_as_sparc_ua_pcrel=yes
4728 [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
4729 [Define if your assembler and linker support unaligned PC relative relocs.])
4731 gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs against hidden symbols],
4732 gcc_cv_as_sparc_ua_pcrel_hidden,
4737 .uaword %r_disp32(foo)
4738 .byte 0x32, 0x33, 0x34
4743 [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4744 && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
4745 && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
4746 | grep ' 31000000 07323334' > /dev/null 2>&1; then
4747 if $gcc_cv_objdump -R conftest 2> /dev/null \
4748 | grep 'DISP32' > /dev/null 2>&1; then
4751 gcc_cv_as_sparc_ua_pcrel_hidden=yes
4755 [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL_HIDDEN, 1,
4756 [Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])])
4757 ]) # unaligned pcrel relocs
4759 gcc_GAS_CHECK_FEATURE([offsetable %lo()],
4760 gcc_cv_as_sparc_offsetable_lo10,
4763 or %g1, %lo(ab) + 12, %g1
4764 or %g1, %lo(ab + 12), %g1],
4765 [if test x$gcc_cv_objdump != x \
4766 && $gcc_cv_objdump -s -j .text conftest.o 2> /dev/null \
4767 | grep ' 82106000 82106000' > /dev/null 2>&1; then
4768 gcc_cv_as_sparc_offsetable_lo10=yes
4770 [AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
4771 [Define if your assembler supports offsetable %lo().])])
4773 gcc_GAS_CHECK_FEATURE([FMAF, HPC, and VIS 3.0 instructions],
4774 gcc_cv_as_sparc_fmaf,
4777 .register %g2, #scratch
4778 .register %g3, #scratch
4780 fmaddd %f0, %f2, %f4, %f6
4781 addxccc %g1, %g2, %g3
4782 fsrl32 %f2, %f4, %f8
4783 fnaddd %f10, %f12, %f14],,
4784 [AC_DEFINE(HAVE_AS_FMAF_HPC_VIS3, 1,
4785 [Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions.])])
4787 gcc_GAS_CHECK_FEATURE([SPARC4 instructions],
4788 gcc_cv_as_sparc_sparc4,
4791 .register %g2, #scratch
4792 .register %g3, #scratch
4795 1: cwbneg %g2, %g3, 1f
4798 aes_kexpand0 %f4, %f6, %f8
4799 des_round %f38, %f40, %f42, %f44
4800 camellia_f %f54, %f56, %f58, %f60
4801 kasumi_fi_xor %f46, %f48, %f50, %f52],,
4802 [AC_DEFINE(HAVE_AS_SPARC4, 1,
4803 [Define if your assembler supports SPARC4 instructions.])])
4805 gcc_GAS_CHECK_FEATURE([SPARC5 and VIS 4.0 instructions],
4806 gcc_cv_as_sparc_sparc5,
4809 .register %g2, #scratch
4810 .register %g3, #scratch
4813 fpadd8 %f0, %f2, %f4],,
4814 [AC_DEFINE(HAVE_AS_SPARC5_VIS4, 1,
4815 [Define if your assembler supports SPARC5 and VIS 4.0 instructions.])])
4817 gcc_GAS_CHECK_FEATURE([SPARC6 instructions],
4818 gcc_cv_as_sparc_sparc6,
4821 .register %g2, #scratch
4822 .register %g3, #scratch
4825 fpsll64x %f0, %f2, %f4],,
4826 [AC_DEFINE(HAVE_AS_SPARC6, 1,
4827 [Define if your assembler supports SPARC6 instructions.])])
4829 gcc_GAS_CHECK_FEATURE([LEON instructions],
4830 gcc_cv_as_sparc_leon,
4833 .register %g2, #scratch
4834 .register %g3, #scratch
4838 casa [[%g2]] 0xb, %g3, %g1],,
4839 [AC_DEFINE(HAVE_AS_LEON, 1,
4840 [Define if your assembler supports LEON instructions.])])
4844 i[34567]86-*-* | x86_64-*-*)
4848 # Full C++ conformance when using a shared libstdc++-v3 requires some
4849 # support from the Cygwin DLL, which in more recent versions exports
4850 # wrappers to aid in interposing and redirecting operators new, delete,
4851 # etc., as per n2800 #17.6.4.6 [replacement.functions]. Check if we
4852 # are configuring for a version of Cygwin that exports the wrappers.
4853 if test x$host = x$target && test x$host_cpu = xi686; then
4854 AC_CHECK_FUNC([__wrap__Znaj],[gcc_ac_cygwin_dll_wrappers=yes],[gcc_ac_cygwin_dll_wrappers=no])
4856 # Can't check presence of libc functions during cross-compile, so
4857 # we just have to assume we're building for an up-to-date target.
4858 gcc_ac_cygwin_dll_wrappers=yes
4860 AC_DEFINE_UNQUOTED(USE_CYGWIN_LIBSTDCXX_WRAPPERS,
4861 [`if test $gcc_ac_cygwin_dll_wrappers = yes; then echo 1; else echo 0; fi`],
4862 [Define if you want to generate code by default that assumes that the
4863 Cygwin DLL exports wrappers to support libstdc++ function replacement.])
4866 cygwin* | pe | mingw32*)
4867 # Recent binutils allows the three-operand form of ".comm" on PE. This
4868 # definition is used unconditionally to initialise the default state of
4869 # the target option variable that governs usage of the feature.
4870 gcc_GAS_CHECK_FEATURE([.comm with alignment], gcc_cv_as_comm_has_align,,
4872 AC_DEFINE_UNQUOTED(HAVE_GAS_ALIGNED_COMM,
4873 [`if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi`],
4874 [Define if your assembler supports specifying the alignment
4875 of objects allocated using the GAS .comm command.])
4876 # Used for DWARF 2 in PE
4877 gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
4878 gcc_cv_as_ix86_pe_secrel32,,
4883 [if test x$gcc_cv_ld != x \
4884 && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
4885 gcc_cv_as_ix86_pe_secrel32=yes
4888 [AC_DEFINE(HAVE_GAS_PE_SECREL32_RELOC, 1,
4889 [Define if your assembler and linker support 32-bit section relative relocs via '.secrel32 label'.])])
4890 # Test if the assembler supports the extended form of the .section
4891 # directive that specifies section alignment. LTO support uses this,
4892 # but normally only after installation, so we warn but don't fail the
4893 # configure if LTO is enabled but the assembler does not support it.
4894 gcc_GAS_CHECK_FEATURE([.section with alignment], gcc_cv_as_section_has_align,
4895 -fatal-warnings,[.section lto_test,"dr0"])
4896 if test x$gcc_cv_as_section_has_align != xyes; then
4897 case ",$enable_languages," in
4899 AC_MSG_WARN([LTO for $target requires binutils >= 2.20.1, but version found appears insufficient; LTO will not work until binutils is upgraded.])
4906 darwin2* | darwin19*)
4907 gcc_GAS_CHECK_FEATURE([llvm assembler x86-pad-for-align option],
4908 gcc_cv_as_mllvm_x86_pad_for_align,
4909 [-mllvm -x86-pad-for-align=false], [.text],,
4910 [AC_DEFINE(HAVE_AS_MLLVM_X86_PAD_FOR_ALIGN, 1,
4911 [Define if your macOS assembler supports -mllvm -x86-pad-for-align=false.])])
4915 gcc_GAS_CHECK_FEATURE([-xbrace_comment], gcc_cv_as_ix86_xbrace_comment,
4916 [-xbrace_comment=no], [.text],,
4917 [AC_DEFINE(HAVE_AS_XBRACE_COMMENT_OPTION, 1,
4918 [Define if your assembler supports -xbrace_comment option.])])
4920 gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
4921 gcc_cv_as_ix86_filds,,
4922 [filds (%ebp); fists (%ebp)],,
4923 [AC_DEFINE(HAVE_AS_IX86_FILDS, 1,
4924 [Define if your assembler uses filds and fists mnemonics.])])
4926 gcc_GAS_CHECK_FEATURE([fildq and fistpq mnemonics],
4927 gcc_cv_as_ix86_fildq,,
4928 [fildq (%ebp); fistpq (%ebp)],,
4929 [AC_DEFINE(HAVE_AS_IX86_FILDQ, 1,
4930 [Define if your assembler uses fildq and fistq mnemonics.])])
4932 gcc_GAS_CHECK_FEATURE([cmov syntax],
4933 gcc_cv_as_ix86_cmov_sun_syntax,,
4934 [cmovl.l %edx, %eax],,
4935 [AC_DEFINE(HAVE_AS_IX86_CMOV_SUN_SYNTAX, 1,
4936 [Define if your assembler supports the Sun syntax for cmov.])])
4938 gcc_GAS_CHECK_FEATURE([ffreep mnemonic],
4939 gcc_cv_as_ix86_ffreep,,
4941 [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
4942 [Define if your assembler supports the ffreep mnemonic.])])
4944 gcc_GAS_CHECK_FEATURE([.quad directive],
4945 gcc_cv_as_ix86_quad,,
4947 [AC_DEFINE(HAVE_AS_IX86_QUAD, 1,
4948 [Define if your assembler supports the .quad directive.])])
4950 gcc_GAS_CHECK_FEATURE([sahf mnemonic],
4951 gcc_cv_as_ix86_sahf,,
4954 [AC_DEFINE(HAVE_AS_IX86_SAHF, 1,
4955 [Define if your assembler supports the sahf mnemonic in 64bit mode.])])
4957 gcc_GAS_CHECK_FEATURE([interunit movq mnemonic],
4958 gcc_cv_as_ix86_interunit_movq,,
4962 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_INTERUNIT_MOVQ,
4963 [`if test $gcc_cv_as_ix86_interunit_movq = yes; then echo 1; else echo 0; fi`],
4964 [Define if your assembler supports interunit movq mnemonic.])
4966 gcc_GAS_CHECK_FEATURE([hle prefixes],
4967 gcc_cv_as_ix86_hle,,
4968 [lock xacquire cmpxchg %esi, (%ecx)],,
4969 [AC_DEFINE(HAVE_AS_IX86_HLE, 1,
4970 [Define if your assembler supports HLE prefixes.])])
4972 gcc_GAS_CHECK_FEATURE([swap suffix],
4973 gcc_cv_as_ix86_swap,,
4974 [movl.s %esp, %ebp],,
4975 [AC_DEFINE(HAVE_AS_IX86_SWAP, 1,
4976 [Define if your assembler supports the swap suffix.])])
4978 gcc_GAS_CHECK_FEATURE([different section symbol subtraction],
4979 gcc_cv_as_ix86_diff_sect_delta,,
4987 [AC_DEFINE(HAVE_AS_IX86_DIFF_SECT_DELTA, 1,
4988 [Define if your assembler supports the subtraction of symbols in different sections.])])
4990 gcc_GAS_CHECK_FEATURE([rep and lock prefix],
4991 gcc_cv_as_ix86_rep_lock_prefix,,
4997 lock addl %edi, (%eax,%esi)
4998 lock orl $0, (%esp)],,
4999 [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
5000 [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
5002 gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
5003 gcc_cv_as_ix86_ud2,,
5005 [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
5006 [Define if your assembler supports the 'ud2' mnemonic.])])
5008 # Enforce 32-bit output with gas and gld.
5009 if test x$gas = xyes; then
5010 as_ix86_gas_32_opt="--32"
5012 if echo "$ld_ver" | grep GNU > /dev/null; then
5013 if $gcc_cv_ld -V 2>/dev/null | grep elf_i386_sol2 > /dev/null; then
5014 ld_ix86_gld_32_opt="-melf_i386_sol2"
5016 ld_ix86_gld_32_opt="-melf_i386"
5020 gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
5021 gcc_cv_as_ix86_tlsgdplt,
5022 [$as_ix86_gas_32_opt],
5023 [call tls_gd@tlsgdplt],
5024 [if test x$gcc_cv_ld != x \
5025 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
5026 gcc_cv_as_ix86_tlsgdplt=yes
5029 [AC_DEFINE(HAVE_AS_IX86_TLSGDPLT, 1,
5030 [Define if your assembler and linker support @tlsgdplt.])])
5033 .section .tdata,"aw'$tls_section_flag'",@progbits
5035 .section .text,"ax",@progbits
5036 call tls_ld@tlsldmplt'
5038 gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM_PLT reloc],
5039 gcc_cv_as_ix86_tlsldmplt,
5040 [$as_ix86_gas_32_opt],
5042 [if test x$gcc_cv_ld != x \
5043 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
5044 gcc_cv_as_ix86_tlsldmplt=yes
5047 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDMPLT,
5048 [`if test $gcc_cv_as_ix86_tlsldmplt = yes; then echo 1; else echo 0; fi`],
5049 [Define to 1 if your assembler and linker support @tlsldmplt.])
5052 .section .text,"ax",@progbits
5054 .type _start, @function
5056 leal value@tlsldm(%ebx), %eax
5057 call ___tls_get_addr@plt
5059 .section .tdata,"aw'$tls_section_flag'",@progbits
5060 .type value, @object
5062 gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM reloc],
5063 gcc_cv_as_ix86_tlsldm,
5064 [$as_ix86_gas_32_opt],
5066 [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
5067 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o $ld_tls_libs -lc > /dev/null 2>&1; then
5068 if $gcc_cv_objdump -d conftest 2>/dev/null | grep nop > /dev/null \
5069 || dis conftest 2>/dev/null | grep nop > /dev/null; then
5070 gcc_cv_as_ix86_tlsldm=yes
5074 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDM,
5075 [`if test $gcc_cv_as_ix86_tlsldm = yes; then echo 1; else echo 0; fi`],
5076 [Define to 1 if your assembler and linker support @tlsldm.])
5087 gcc_GAS_CHECK_FEATURE([R_386_GOT32X reloc],
5088 gcc_cv_as_ix86_got32x,
5089 [$as_ix86_gas_32_opt],
5091 [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
5092 && test x$gcc_cv_readelf != x \
5093 && $gcc_cv_readelf --relocs --wide conftest.o 2>&1 \
5094 | grep R_386_GOT32X > /dev/null 2>&1 \
5095 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
5096 if $gcc_cv_objdump -dw conftest 2>&1 \
5097 | grep 0xffffff > /dev/null 2>&1; then
5098 gcc_cv_as_ix86_got32x=no
5100 gcc_cv_as_ix86_got32x=yes
5104 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_GOT32X,
5105 [`if test x"$gcc_cv_as_ix86_got32x" = xyes; then echo 1; else echo 0; fi`],
5106 [Define 0/1 if your assembler and linker support @GOT.])
5108 # Check if gas and gld support "addq %r23,foo@GOTTPOFF(%rip), %r15"
5109 # with R_X86_64_CODE_6_GOTTPOFF relocation.
5110 if echo "$ld_ver" | grep GNU > /dev/null; then
5111 if $gcc_cv_ld -V 2>/dev/null | grep elf_x86_64_sol2 > /dev/null; then
5112 ld_ix86_gld_64_opt="-melf_x86_64_sol2"
5114 ld_ix86_gld_64_opt="-melf_x86_64"
5117 # Enforce 64-bit output with gas and gld.
5118 if test x$gas = xyes; then
5119 as_ix86_gas_64_opt="--64"
5124 .type _start, @function
5126 addq %r23,foo@GOTTPOFF(%rip), %r15
5127 .section .tdata,"awT",@progbits
5131 gcc_GAS_CHECK_FEATURE([R_X86_64_CODE_6_GOTTPOFF reloc],
5132 gcc_cv_as_x86_64_code_6_gottpoff,
5133 [$as_ix86_gas_64_opt],
5135 [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
5136 && test x$gcc_cv_readelf != x \
5137 && $gcc_cv_readelf --relocs --wide conftest.o 2>&1 \
5138 | grep R_X86_64_CODE_6_GOTTPOFF > /dev/null 2>&1 \
5139 && $gcc_cv_ld $ld_ix86_gld_64_opt -o conftest conftest.o > /dev/null 2>&1; then
5140 if $gcc_cv_objdump -dw conftest 2>&1 \
5141 | grep "add \+\$0xf\+8,%r23,%r15" > /dev/null 2>&1; then
5142 gcc_cv_as_x86_64_code_6_gottpoff=yes
5144 gcc_cv_as_x86_64_code_6_gottpoff=no
5148 AC_DEFINE_UNQUOTED(HAVE_AS_R_X86_64_CODE_6_GOTTPOFF,
5149 [`if test x"$gcc_cv_as_x86_64_code_6_gottpoff" = xyes; then echo 1; else echo 0; fi`],
5150 [Define 0/1 if your assembler and linker support R_X86_64_CODE_6_GOTTPOFF.])
5152 gcc_GAS_CHECK_FEATURE([GOTOFF in data],
5153 gcc_cv_as_ix86_gotoff_in_data,
5154 [$as_ix86_gas_32_opt],
5160 AC_DEFINE_UNQUOTED(HAVE_AS_GOTOFF_IN_DATA,
5161 [`if test $gcc_cv_as_ix86_gotoff_in_data = yes; then echo 1; else echo 0; fi`],
5162 [Define true if the assembler supports '.long foo@GOTOFF'.])
5165 .section .text,"ax",@progbits
5167 .type _start, @function
5169 leal ld@tlsldm(%ecx), %eax
5170 call *___tls_get_addr@GOT(%ecx)
5171 leal gd@tlsgd(%ecx), %eax
5172 call *___tls_get_addr@GOT(%ecx)
5174 .section .tdata,"aw'$tls_section_flag'",@progbits
5182 gcc_GAS_CHECK_FEATURE([calling ___tls_get_addr via GOT],
5183 gcc_cv_as_ix86_tls_get_addr_via_got,
5184 [$as_ix86_gas_32_opt],
5186 [if test x$gcc_cv_ld != x \
5187 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
5188 gcc_cv_as_ix86_tls_get_addr_via_got=yes
5191 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLS_GET_ADDR_GOT,
5192 [`if test x"$gcc_cv_as_ix86_tls_get_addr_via_got" = xyes; then echo 1; else echo 0; fi`],
5193 [Define 0/1 if your assembler and linker support calling ___tls_get_addr via GOT.])
5197 gcc_GAS_CHECK_FEATURE([ltoffx and ldxmov relocs],
5198 gcc_cv_as_ia64_ltoffx_ldxmov_relocs,,
5200 addl r15 = @ltoffx(x#), gp
5202 ld8.mov r16 = [[r15]], x#
5204 [AC_DEFINE(HAVE_AS_LTOFFX_LDXMOV_RELOCS, 1,
5205 [Define if your assembler supports ltoffx and ldxmov relocations.])])
5213 gcc_GAS_CHECK_FEATURE([.machine directive support],
5214 gcc_cv_as_machine_directive,,
5215 [ .machine ppc7400])
5216 if test x$gcc_cv_as_machine_directive != xyes; then
5217 echo "*** This target requires an assembler supporting \".machine\"" >&2
5218 echo you can get it from: https://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg >&2
5219 test x$build = x$target && exit 1
5225 *-*-aix*) conftest_s=' .machine "pwr5"
5228 *-*-darwin*) conftest_s=' .text
5230 *) conftest_s=' .machine power4
5235 gcc_GAS_CHECK_FEATURE([mfcr field support],
5236 gcc_cv_as_powerpc_mfcrf,,
5238 [AC_DEFINE(HAVE_AS_MFCRF, 1,
5239 [Define if your assembler supports mfcr field.])])
5242 *-*-aix*) conftest_s=' .machine "pwr10"
5245 *-*-darwin*) conftest_s=' .text
5247 *) conftest_s=' .machine power10
5252 gcc_GAS_CHECK_FEATURE([htm support on Power10],
5253 gcc_cv_as_power10_htm,,
5255 [AC_DEFINE(HAVE_AS_POWER10_HTM, 1,
5256 [Define if your assembler supports htm insns on power10.])])
5259 *-*-aix*) conftest_s=' .csect .text[[PR]]
5261 addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';;
5265 addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';;
5266 *) conftest_s=' .text
5268 addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
5271 gcc_GAS_CHECK_FEATURE([rel16 relocs],
5272 gcc_cv_as_powerpc_rel16, -a32,
5274 [AC_DEFINE(HAVE_AS_REL16, 1,
5275 [Define if your assembler supports R_PPC_REL16 relocs.])])
5278 *-*-aix*) conftest_s=' .machine "pwr7"
5281 *) conftest_s=' .machine power7
5286 gcc_GAS_CHECK_FEATURE([vector-scalar support],
5287 gcc_cv_as_powerpc_vsx, -a32,
5289 [AC_DEFINE(HAVE_AS_VSX, 1,
5290 [Define if your assembler supports VSX instructions.])])
5292 gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5293 gcc_cv_as_powerpc_gnu_attribute,,
5294 [.gnu_attribute 4,1],,
5295 [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5296 [Define if your assembler supports .gnu_attribute.])])
5298 gcc_GAS_CHECK_FEATURE([prologue entry point marker support],
5299 gcc_cv_as_powerpc_entry_markers,-a64 --fatal-warnings,
5300 [ .reloc .,R_PPC64_ENTRY; nop],,
5301 [AC_DEFINE(HAVE_AS_ENTRY_MARKERS, 1,
5302 [Define if your assembler supports the R_PPC64_ENTRY relocation.])])
5304 gcc_GAS_CHECK_FEATURE([plt sequence marker support],
5305 gcc_cv_as_powerpc_pltseq_markers,-a32 --fatal-warnings,
5306 [ .reloc .,R_PPC_PLTSEQ; nop],,
5307 [AC_DEFINE(HAVE_AS_PLTSEQ, 1,
5308 [Define if your assembler supports R_PPC*_PLTSEQ relocations.])])
5312 gcc_GAS_CHECK_FEATURE([AIX .ref support],
5314 [ .csect stuff[[rw]]
5320 [AC_DEFINE(HAVE_AS_REF, 1,
5321 [Define if your assembler supports .ref])])
5323 gcc_GAS_CHECK_FEATURE([AIX DWARF location lists section support],
5324 gcc_cv_as_aix_dwloc,,
5329 [AC_DEFINE(HAVE_XCOFF_DWARF_EXTRAS, 1,
5330 [Define if your assembler supports AIX debug frame section label reference.])])
5336 gcc_GAS_CHECK_FEATURE([explicit relocation support: %pcrel_hi/%pcrel_lo],
5337 gcc_cv_as_mips_explicit_relocs_pcrel,,
5338 [ lui $4,%pcrel_hi(foo)],,
5339 [AC_DEFINE(MIPS_EXPLICIT_RELOCS, MIPS_EXPLICIT_RELOCS_PCREL,
5340 [Define if assembler supports %pcrel_hi/%pcrel_lo.])])
5342 if test x$gcc_cv_as_mips_explicit_relocs_pcrel = xno; then \
5343 gcc_GAS_CHECK_FEATURE([explicit relocation support: %gp_rel],
5344 gcc_cv_as_mips_explicit_relocs,,
5345 [ lw $4,%gp_rel(foo)($4)],,
5346 [AC_DEFINE(MIPS_EXPLICIT_RELOCS, MIPS_EXPLICIT_RELOCS_BASE,
5347 [Define if assembler supports %reloc.])])
5349 gcc_cv_as_mips_explicit_relocs=yes
5352 if test x$gcc_cv_as_mips_explicit_relocs = xno; then \
5353 AC_DEFINE(MIPS_EXPLICIT_RELOCS, MIPS_EXPLICIT_RELOCS_NONE,
5354 [Define if assembler supports %reloc.])
5357 gcc_GAS_CHECK_FEATURE([-mno-shared support],
5358 gcc_cv_as_mips_no_shared,[-mno-shared], [nop],,
5359 [AC_DEFINE(HAVE_AS_NO_SHARED, 1,
5360 [Define if the assembler understands -mno-shared.])])
5362 gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5363 gcc_cv_as_mips_gnu_attribute,,
5364 [.gnu_attribute 4,1],,
5365 [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5366 [Define if your assembler supports .gnu_attribute.])])
5368 gcc_GAS_CHECK_FEATURE([.module support],
5369 gcc_cv_as_mips_dot_module,[-32],
5372 [AC_DEFINE(HAVE_AS_DOT_MODULE, 1,
5373 [Define if your assembler supports .module.])])
5374 if test x$gcc_cv_as_mips_dot_module = xno \
5375 && test x$with_fp_32 != x; then
5377 [Requesting --with-fp-32= requires assembler support for .module.])
5380 gcc_GAS_CHECK_FEATURE([.micromips support],
5381 gcc_cv_as_micromips_support,[--fatal-warnings],
5383 [AC_DEFINE(HAVE_GAS_MICROMIPS, 1,
5384 [Define if your assembler supports the .set micromips directive])])
5386 gcc_GAS_CHECK_FEATURE([.dtprelword support],
5387 gcc_cv_as_mips_dtprelword,,
5388 [.section .tdata,"awT",@progbits
5392 .dtprelword x+0x8000],,
5393 [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
5394 [Define if your assembler supports .dtprelword.])])
5396 gcc_GAS_CHECK_FEATURE([DSPR1 mult with four accumulators support],
5397 gcc_cv_as_mips_dspr1_mult,,
5407 [AC_DEFINE(HAVE_AS_DSPR1_MULT, 1,
5408 [Define if your assembler supports DSPR1 mult.])])
5410 AC_MSG_CHECKING(assembler and linker for explicit JALR relocation)
5411 gcc_cv_as_ld_jalr_reloc=no
5412 if test $gcc_cv_as_mips_explicit_relocs = yes; then
5413 if test $in_tree_ld = yes ; then
5414 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 20 -o "$gcc_cv_gld_major_version" -gt 2 \
5415 && test $in_tree_ld_is_elf = yes; then
5416 gcc_cv_as_ld_jalr_reloc=yes
5418 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
5419 echo ' .ent x' > conftest.s
5420 echo 'x: lw $2,%got_disp(y)($3)' >> conftest.s
5421 echo ' lw $25,%call16(y)($28)' >> conftest.s
5422 echo ' .reloc 1f,R_MIPS_JALR,y' >> conftest.s
5423 echo '1: jalr $25' >> conftest.s
5424 echo ' .reloc 1f,R_MIPS_JALR,x' >> conftest.s
5425 echo '1: jalr $25' >> conftest.s
5426 echo ' .end x' >> conftest.s
5427 if $gcc_cv_as -o conftest.o conftest.s >/dev/null 2>&AS_MESSAGE_LOG_FD \
5428 && $gcc_cv_ld -shared -o conftest.so conftest.o >/dev/null 2>&AS_MESSAGE_LOG_FD; then
5429 if $gcc_cv_objdump -d conftest.so | grep jalr >/dev/null 2>&1 \
5430 && $gcc_cv_objdump -d conftest.so | grep "bal.*<x>" >/dev/null 2>&1; then
5431 gcc_cv_as_ld_jalr_reloc=yes
5437 if test $gcc_cv_as_ld_jalr_reloc = yes; then
5438 if test x$target_cpu_default = x; then
5439 target_cpu_default=MASK_RELAX_PIC_CALLS
5441 target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
5444 AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
5446 AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
5447 [gcc_cv_ld_mips_personality_relaxation],
5448 [gcc_cv_ld_mips_personality_relaxation=no
5449 if test $in_tree_ld = yes ; then
5450 if test "$gcc_cv_gld_major_version" -eq 2 \
5451 -a "$gcc_cv_gld_minor_version" -ge 21 \
5452 -o "$gcc_cv_gld_major_version" -gt 2; then
5453 gcc_cv_ld_mips_personality_relaxation=yes
5455 elif test x$gcc_cv_as != x \
5456 -a x$gcc_cv_ld != x \
5457 -a x$gcc_cv_readelf != x ; then
5458 cat > conftest.s <<EOF
5460 .cfi_personality 0x80,indirect_ptr
5467 .section .data,"aw",@progbits
5471 if $gcc_cv_as -KPIC -o conftest.o conftest.s > /dev/null 2>&1 \
5472 && $gcc_cv_ld -o conftest conftest.o -shared > /dev/null 2>&1; then
5473 if $gcc_cv_readelf -d conftest 2>&1 \
5474 | grep TEXTREL > /dev/null 2>&1; then
5476 elif $gcc_cv_readelf --relocs conftest 2>&1 \
5477 | grep 'R_MIPS_REL32 *$' > /dev/null 2>&1; then
5480 gcc_cv_ld_mips_personality_relaxation=yes
5484 rm -f conftest.s conftest.o conftest])
5485 if test x$gcc_cv_ld_mips_personality_relaxation = xyes; then
5486 AC_DEFINE(HAVE_LD_PERSONALITY_RELAXATION, 1,
5487 [Define if your linker can relax absolute .eh_frame personality
5488 pointers into PC-relative form.])
5491 gcc_GAS_CHECK_FEATURE([-mnan= support],
5494 [AC_DEFINE(HAVE_AS_NAN, 1,
5495 [Define if the assembler understands -mnan=.])])
5496 if test x$gcc_cv_as_mips_nan = xno \
5497 && test x$with_nan != x; then
5499 [Requesting --with-nan= requires assembler support for -mnan=])
5503 # Earlier GAS versions generically support .gnu_attribute, but the
5504 # msp430 assembler will not do anything with it.
5505 gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5506 gcc_cv_as_msp430_gnu_attribute,,
5507 [.gnu_attribute 4,1],,
5508 [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5509 [Define if your assembler supports .gnu_attribute.])])
5510 gcc_GAS_CHECK_FEATURE([.mspabi_attribute support],
5511 gcc_cv_as_msp430_mspabi_attribute,,
5512 [.mspabi_attribute 4,2],,
5513 [AC_DEFINE(HAVE_AS_MSPABI_ATTRIBUTE, 1,
5514 [Define if your assembler supports .mspabi_attribute.])])
5515 if test x$enable_newlib_nano_formatted_io = xyes; then
5516 AC_DEFINE(HAVE_NEWLIB_NANO_FORMATTED_IO, 1, [Define if GCC has been
5517 configured with --enable-newlib-nano-formatted-io.])
5521 gcc_GAS_CHECK_FEATURE([.attribute support],
5522 gcc_cv_as_riscv_attribute,,
5523 [.attribute stack_align,4],,
5524 [AC_DEFINE(HAVE_AS_RISCV_ATTRIBUTE, 1,
5525 [Define if your assembler supports .attribute.])])
5526 gcc_GAS_CHECK_FEATURE([-misa-spec= support],
5527 gcc_cv_as_riscv_isa_spec,
5529 [AC_DEFINE(HAVE_AS_MISA_SPEC, 1,
5530 [Define if the assembler understands -misa-spec=.])])
5531 gcc_GAS_CHECK_FEATURE([-march=rv32i_zifencei support],
5532 gcc_cv_as_riscv_march_zifencei,
5533 [-march=rv32i_zifencei2p0],,,
5534 [AC_DEFINE(HAVE_AS_MARCH_ZIFENCEI, 1,
5535 [Define if the assembler understands -march=rv*_zifencei.])])
5536 gcc_GAS_CHECK_FEATURE([-march=rv32i_zaamo_zalrsc support],
5537 gcc_cv_as_riscv_march_zaamo_zalrsc,
5538 [-march=rv32i_zaamo_zalrsc],,,
5539 [AC_DEFINE(HAVE_AS_MARCH_ZAAMO_ZALRSC, 1,
5540 [Define if the assembler understands -march=rv*_zaamo_zalrsc.])])
5541 gcc_GAS_CHECK_FEATURE([-march=rv32i_b support],
5542 gcc_cv_as_riscv_march_b,
5544 [AC_DEFINE(HAVE_AS_MARCH_B, 1,
5545 [Define if the assembler understands -march=rv*_b.])])
5548 gcc_GAS_CHECK_FEATURE([.dtprelword support],
5549 gcc_cv_as_loongarch_dtprelword, [2,18,0],,
5550 [.section .tdata,"awT",@progbits
5554 .dtprelword x+0x8000],,
5555 [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
5556 [Define if your assembler supports .dtprelword.])])
5557 gcc_GAS_CHECK_FEATURE([explicit relocation support],
5558 gcc_cv_as_loongarch_explicit_relocs,,
5559 [a:pcalau12i $t0,%pc_hi20(a)],,
5560 [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
5561 [Define if your assembler supports explicit relocation.])])
5562 gcc_GAS_CHECK_FEATURE([call36 relocation support],
5563 gcc_cv_as_loongarch_call36,,
5564 [pcaddu18i $r1, %call36(a)
5566 [AC_DEFINE(HAVE_AS_SUPPORT_CALL36, 1,
5567 [Define if your assembler supports call36 relocation.])])
5568 gcc_GAS_CHECK_FEATURE([eh_frame pcrel encoding support],
5569 gcc_cv_as_loongarch_eh_frame_pcrel_encoding_support,,
5571 .cfi_personality 0x9b,a
5574 [AC_DEFINE(HAVE_AS_EH_FRAME_PCREL_ENCODING_SUPPORT, 1,
5575 [Define if your assembler supports eh_frame pcrel encoding.])])
5576 gcc_GAS_CHECK_FEATURE([-mrelax option], gcc_cv_as_loongarch_relax,
5577 [-mrelax], [.text],,
5578 [AC_DEFINE(HAVE_AS_MRELAX_OPTION, 1,
5579 [Define if your assembler supports -mrelax option.])])
5580 gcc_GAS_CHECK_FEATURE([conditional branch relaxation support],
5581 gcc_cv_as_loongarch_cond_branch_relax,
5588 [AC_DEFINE(HAVE_AS_COND_BRANCH_RELAXATION, 1,
5589 [Define if your assembler supports conditional branch relaxation.])])
5590 gcc_GAS_CHECK_FEATURE([tls le relaxation support],
5591 gcc_cv_as_loongarch_tls_le_relaxation_support,,
5592 [lu12i.w $t0,%le_hi20_r(a)],,
5593 [AC_DEFINE(HAVE_AS_TLS_LE_RELAXATION, 1,
5594 [Define if your assembler supports tls le relocation.])])
5597 gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5598 gcc_cv_as_s390_gnu_attribute,,
5599 [.gnu_attribute 8,1],,
5600 [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5601 [Define if your assembler supports .gnu_attribute.])])
5602 gcc_GAS_CHECK_FEATURE([.machine and .machinemode support],
5603 gcc_cv_as_s390_machine_machinemode,,
5608 [AC_DEFINE(HAVE_AS_MACHINE_MACHINEMODE, 1,
5609 [Define if your assembler supports .machine and .machinemode.])])
5610 gcc_GAS_CHECK_FEATURE([architecture modifiers support],
5611 gcc_cv_as_s390_architecture_modifiers,,
5612 [ .machine z13+vx ],,
5613 [AC_DEFINE(HAVE_AS_ARCHITECTURE_MODIFIERS, 1,
5614 [Define if your assembler supports architecture modifiers.])])
5615 gcc_GAS_CHECK_FEATURE([vector load/store alignment hints],
5616 gcc_cv_as_s390_vector_loadstore_alignment_hints,,
5617 [ vl %v24,0(%r15),3 ],,
5618 [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS, 1,
5619 [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument.])])
5620 gcc_GAS_CHECK_FEATURE([vector load/store alignment hints on z13],
5621 gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13, [-mzarch -march=z13],
5622 [ vl %v24,0(%r15),3 ],,
5623 [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13, 1,
5624 [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument on z13.])])
5629 # Mips, LoongArch and HP-UX need the GNU assembler.
5630 # Linux on IA64 might be able to use the Intel assembler.
5633 mips*-*-* | loongarch*-*-* | *-*-hpux* )
5634 if test x$gas_flag = xyes \
5635 || test x"$host" != x"$build" \
5636 || test ! -x "$gcc_cv_as" \
5637 || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
5640 echo "*** This configuration requires the GNU assembler" >&2
5646 # AMD GCN needs the LLVM assembler and linker.
5647 # Test that LLVM is at least 13.0.1.
5650 AC_MSG_CHECKING(llvm assembler version)
5651 gcc_cv_as_version="unknown"
5652 if test x$gcc_cv_as != x; then
5653 gcc_cv_as_version=`$gcc_cv_as --version 2>&1 | sed -ne '/version/s/.* \([[0-9]]\)/\1/p' || echo error`
5654 case "$gcc_cv_as_version" in
5655 13.0.[[1-9]]*) ;; # 13.0.1+
5656 13.[[1-9]]*) ;; # 13.1+
5657 1[[4-9]]*) ;; # 14..19
5658 [[2-9]][[0-9]]*) ;; # 20..99
5659 [[1-9]][[0-9]][[0-9]]*) ;; # 100+
5660 error) AC_MSG_ERROR([cannot determine LLVM version]) ;;
5661 *) AC_MSG_ERROR([LLVM 13.0.1 or later is required (found LLVM $gcc_cv_as_version)]) ;;
5664 AC_MSG_RESULT([$gcc_cv_as_version, ok])
5670 gcc_GAS_CHECK_FEATURE([assembler for arm accepts context-specific architecture extensions],
5671 gcc_cv_as_arm_option_extensions,
5672 [-march=armv8.1-m.main+mve],
5677 [AC_DEFINE(HAVE_GAS_ARM_EXTENDED_ARCH, 1,
5678 [Define if your Arm assembler permits context-specific feature extensions.])])
5681 # ??? Not all targets support dwarf2 debug_line, even within a version
5682 # of gas. Moreover, we need to emit a valid instruction to trigger any
5683 # info to the output file. So, as supported targets are added to gas 2.11,
5684 # add some instruction here to (also) show we expect this might work.
5685 # ??? Once 2.11 is released, probably need to add first known working
5686 # version to the per-target configury.
5688 aarch64 | alpha | arc | arm | avr | bfin | cris | csky | i386 | loongarch | m32c \
5689 | m68k | microblaze | mips | nds32 | pa | riscv | rs6000 | score | sparc \
5690 | visium | xstormy16 | xtensa | ft32)
5700 if test x"$insn" != x; then
5702 .file 1 \"conftest.s\"
5705 gcc_GAS_CHECK_FEATURE([dwarf2 debug_line support],
5706 gcc_cv_as_dwarf2_debug_line,,
5708 [if test x$gcc_cv_objdump != x \
5709 && $gcc_cv_objdump -h conftest.o 2> /dev/null \
5710 | grep debug_line > /dev/null 2>&1; then
5711 gcc_cv_as_dwarf2_debug_line=yes
5712 elif test x$gcc_cv_otool != x \
5713 && $gcc_cv_otool -l conftest.o 2> /dev/null \
5714 | grep debug_line > /dev/null 2>&1; then
5715 gcc_cv_as_dwarf2_debug_line=yes
5718 # The .debug_line file table must be in the exact order that
5719 # we specified the files, since these indices are also used
5720 # by DW_AT_decl_file. Approximate this test by testing if
5721 # the assembler bitches if the same index is assigned twice.
5722 gcc_GAS_CHECK_FEATURE([buggy dwarf2 .file directive],
5723 gcc_cv_as_dwarf2_file_buggy,,
5727 if test $gcc_cv_as_dwarf2_debug_line = yes \
5728 && test $gcc_cv_as_dwarf2_file_buggy = no; then
5729 AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1,
5730 [Define if your assembler supports dwarf2 .file/.loc directives,
5731 and preserves file table indices exactly as given.])
5733 if test $gcc_cv_as_leb128 = yes; then
5735 .file 1 \"conftest.s\"
5736 .loc 1 3 0 view .LVU1
5742 gcc_GAS_CHECK_FEATURE([dwarf2 debug_view support],
5743 gcc_cv_as_dwarf2_debug_view,,
5745 [AC_DEFINE(HAVE_AS_DWARF2_DEBUG_VIEW, 1,
5746 [Define if your assembler supports views in dwarf2 .loc directives.])])
5750 gcc_GAS_CHECK_FEATURE([--gdwarf2 option],
5751 gcc_cv_as_gdwarf2_flag,
5752 [--gdwarf2], [$insn],,
5753 [AC_DEFINE(HAVE_AS_GDWARF2_DEBUG_FLAG, 1,
5754 [Define if your assembler supports the --gdwarf2 option.])])
5756 gcc_GAS_CHECK_FEATURE([--gdwarf-5 option],
5757 gcc_cv_as_gdwarf_5_flag,
5758 [--gdwarf-5], [$insn],
5759 [if test x$gcc_cv_objdump != x \
5760 && $gcc_cv_objdump -Wi conftest.o 2>&1 \
5761 | grep DW_TAG_compile_unit > /dev/null 2>&1; then
5762 gcc_cv_as_gdwarf_5_flag=yes;
5763 fi],[AC_DEFINE(HAVE_AS_GDWARF_5_DEBUG_FLAG, 1,
5764 [Define if your assembler supports the --gdwarf-5 option.])])
5767 win32 | pe | cygwin* | mingw32*)
5768 section_flags=\"dr\"
5769 function_type=".def foo; .scl 2; .type 32; .endef"
5772 section_flags=\"\",%progbits
5773 function_type=".type foo, %function"
5774 function_size=".size foo, .-foo";;
5776 dwarf4_debug_info_size=0x46
5777 dwarf4_high_pc_form=7
5778 dwarf4_debug_aranges_size=0x2c
5780 for dwarf4_addr_size in 8 4; do
5796 .section .debug_info,$section_flags
5798 .4byte $dwarf4_debug_info_size
5800 .4byte .Ldebug_abbrev0
5801 .byte 0x$dwarf4_addr_size
5803 .ascii \"GNU C17\\0\"
5807 .${dwarf4_addr_size}byte .Ltext0
5808 .${dwarf4_addr_size}byte .Letext0-.Ltext0
5809 .4byte .Ldebug_line0
5815 .${dwarf4_addr_size}byte .LFB0
5816 .${dwarf4_addr_size}byte .LFE0-.LFB0
5820 .section .debug_abbrev,$section_flags
5836 .byte 0x$dwarf4_high_pc_form
5857 .byte 0x$dwarf4_high_pc_form
5863 .section .debug_aranges,$section_flags
5864 .4byte $dwarf4_debug_aranges_size
5866 .4byte .Ldebug_info0
5871 .${dwarf4_addr_size}byte .Ltext0
5872 .${dwarf4_addr_size}byte .Letext0-.Ltext0
5873 .${dwarf4_addr_size}byte 0
5874 .${dwarf4_addr_size}byte 0
5875 .section .debug_line,$section_flags
5877 .4byte .LELT0-.LSLT0
5880 .4byte .LELTP0-.LASLTP0
5908 .byte 0x$dwarf4_line_sz
5910 .${dwarf4_addr_size}byte .LM1
5915 .byte 0x$dwarf4_line_sz
5917 .${dwarf4_addr_size}byte .LM2
5922 .byte 0x$dwarf4_line_sz
5924 .${dwarf4_addr_size}byte .Letext0
5929 .section .debug_str,$section_flags
5933 if test $dwarf4_addr_size = 4; then
5934 gcc_GAS_CHECK_FEATURE([assembly of compiler generated 32-bit .debug_line],
5935 gcc_cv_as_debug_line_32_flag,,
5937 [dwarf4_success=yes])
5939 gcc_GAS_CHECK_FEATURE([assembly of compiler generated 64-bit .debug_line],
5940 gcc_cv_as_debug_line_64_flag,,
5942 [dwarf4_success=yes])
5944 if test $dwarf4_success = yes; then
5946 gcc_GAS_CHECK_FEATURE([--gdwarf-4 not refusing compiler generated .debug_line],
5947 gcc_cv_as_dwarf_4_debug_line_flag,
5948 [--gdwarf-4], [$conftest_s],,
5949 [dwarf4_success=yes])
5952 dwarf4_debug_info_size=0x36
5953 dwarf4_high_pc_form=6
5954 dwarf4_debug_aranges_size=0x1c
5958 if test $dwarf4_success = yes; then
5976 gcc_GAS_CHECK_FEATURE([--gdwarf-4 with the APP marker],
5977 gcc_cv_as_dwarf_4_app_flag,
5978 [--gdwarf-4], [$conftest_s],, [dwarf4_success=yes])
5981 if test $dwarf4_success = yes; then
5991 gcc_GAS_CHECK_FEATURE([working --gdwarf-4/--gdwarf-5 for all sources],
5992 gcc_cv_as_working_gdwarf_n_flag,
5996 if test x$gcc_cv_objdump != x \
5997 && $gcc_cv_objdump -W conftest.o 2>&1 \
5998 | grep conftest.s > /dev/null 2>&1; then
5999 gcc_cv_as_working_gdwarf_n_flag=no
6001 gcc_cv_as_working_gdwarf_n_flag=yes
6003 changequote([,])dnl])
6004 if test $gcc_cv_as_working_gdwarf_n_flag = yes; then
6005 AC_DEFINE(HAVE_AS_WORKING_DWARF_N_FLAG, 1,
6006 [Define if your assembler supports --gdwarf-4/--gdwarf-5 even with
6007 compiler generated .debug_line.])
6011 gcc_GAS_CHECK_FEATURE([--debug-prefix-map option],
6012 gcc_cv_as_debug_prefix_map_flag,
6013 [--debug-prefix-map /a=/b], [$insn],,
6014 [AC_DEFINE(HAVE_AS_DEBUG_PREFIX_MAP, 1,
6015 [Define if your assembler supports the --debug-prefix-map option.])])
6018 gcc_GAS_CHECK_FEATURE([compressed debug sections],
6019 gcc_cv_as_compress_debug,,,
6020 [# gas compiled without zlib cannot compress debug sections and warns
6021 # about it, but still exits successfully. So check for this, too.
6022 if $gcc_cv_as --compress-debug-sections -o conftest.o conftest.s 2>&1 | grep -i warning > /dev/null
6024 gcc_cv_as_compress_debug=0
6025 elif $gcc_cv_as --compress-debug-sections=zlib -o conftest.o conftest.s > /dev/null 2>&1
6027 gcc_cv_as_compress_debug=1
6028 gcc_cv_as_compress_debug_option="--compress-debug-sections"
6029 gcc_cv_as_no_compress_debug_option="--nocompress-debug-sections"
6030 # Since binutils 2.40, gas supports --compress-debug-sections=zstd.
6031 if $gcc_cv_as --compress-debug-sections=zstd -o conftest.o conftest.s > /dev/null 2>&1
6033 gcc_cv_as_compress_debug=2
6036 gcc_cv_as_compress_debug=0
6038 AC_DEFINE_UNQUOTED(HAVE_AS_COMPRESS_DEBUG, $gcc_cv_as_compress_debug,
6039 [Define to the level of your assembler's compressed debug section support.])
6040 AC_DEFINE_UNQUOTED(AS_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_compress_debug_option",
6041 [Define to the assembler option to enable compressed debug sections.])
6042 AC_DEFINE_UNQUOTED(AS_NO_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_no_compress_debug_option",
6043 [Define to the assembler option to disable compressed debug sections.])
6045 gcc_GAS_CHECK_FEATURE([.lcomm with alignment], gcc_cv_as_lcomm_with_alignment,,
6047 [AC_DEFINE(HAVE_GAS_LCOMM_WITH_ALIGNMENT, 1,
6048 [Define if your assembler supports .lcomm with an alignment field.])])
6050 if test x$with_sysroot = x && test x$host = x$target \
6051 && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" \
6052 && test "$prefix" != "NONE"; then
6053 AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
6054 [Define to PREFIX/include if cpp should also search that directory.])
6057 # Determine the version of glibc, if any, used on the target.
6058 AC_MSG_CHECKING([for target glibc version])
6059 AC_ARG_WITH([glibc-version],
6060 [AS_HELP_STRING([--with-glibc-version=M.N],
6061 [assume GCC used with glibc version M.N or later])], [
6062 if [echo "$with_glibc_version" | grep '^[0-9][0-9]*\.[0-9][0-9]*$']; then
6063 glibc_version_major=`echo "$with_glibc_version" | sed -e 's/\..*//'`
6064 glibc_version_minor=`echo "$with_glibc_version" | sed -e 's/.*\.//'`
6066 AC_MSG_ERROR([option --with-glibc-version requires a version number M.N])
6068 glibc_version_major=0
6069 glibc_version_minor=0
6070 [if test -f $target_header_dir/features.h \
6071 && glibc_version_major_define=`$EGREP '^[ ]*#[ ]*define[ ]+__GLIBC__[ ]+[0-9]' $target_header_dir/features.h` \
6072 && glibc_version_minor_define=`$EGREP '^[ ]*#[ ]*define[ ]+__GLIBC_MINOR__[ ]+[0-9]' $target_header_dir/features.h`; then
6073 glibc_version_major=`echo "$glibc_version_major_define" | sed -e 's/.*__GLIBC__[ ]*//'`
6074 glibc_version_minor=`echo "$glibc_version_minor_define" | sed -e 's/.*__GLIBC_MINOR__[ ]*//'`
6076 AC_MSG_RESULT([$glibc_version_major.$glibc_version_minor])
6077 AC_DEFINE_UNQUOTED([TARGET_GLIBC_MAJOR], [$glibc_version_major],
6078 [GNU C Library major version number used on the target, or 0.])
6079 AC_DEFINE_UNQUOTED([TARGET_GLIBC_MINOR], [$glibc_version_minor],
6080 [GNU C Library minor version number used on the target, or 0.])
6082 AC_ARG_ENABLE(gnu-unique-object,
6083 [AS_HELP_STRING([--enable-gnu-unique-object],
6084 [enable the use of the @gnu_unique_object ELF extension on glibc systems])],
6085 [case $enable_gnu_unique_object in
6087 *) AC_MSG_ERROR(['$enable_gnu_unique_object' is an invalid value for --enable-gnu-unique-object.
6088 Valid choices are 'yes' and 'no'.]) ;;
6090 [gcc_GAS_CHECK_FEATURE([gnu_unique_object], gcc_cv_as_gnu_unique_object,,
6091 [.type foo, '$target_type_format_char'gnu_unique_object],,
6092 # We need to unquote above to to use the definition from config.gcc.
6093 # Also check for ld.so support, i.e. glibc 2.11 or higher.
6094 [GCC_GLIBC_VERSION_GTE_IFELSE([2], [11], [enable_gnu_unique_object=yes], )]
6096 if test x$enable_gnu_unique_object = xyes; then
6097 AC_DEFINE(HAVE_GAS_GNU_UNIQUE_OBJECT, 1,
6098 [Define if your assembler supports @gnu_unique_object.])
6101 AC_CACHE_CHECK([assembler for tolerance to line number 0],
6102 [gcc_cv_as_line_zero],
6103 [gcc_cv_as_line_zero=no
6104 if test "x$gcc_cv_as" != x; then
6105 { echo '# 1 "test.s" 1'; echo '# 0 "" 2'; } > conftest.s
6106 if AC_TRY_COMMAND([$gcc_cv_as -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD 2>conftest.out]) &&
6107 test "x`cat conftest.out`" = x
6109 gcc_cv_as_line_zero=yes
6111 echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
6112 cat conftest.s >&AS_MESSAGE_LOG_FD
6113 echo "configure: error output was" >&AS_MESSAGE_LOG_FD
6114 cat conftest.out >&AS_MESSAGE_LOG_FD
6116 rm -f conftest.o conftest.s conftest.out
6118 if test "x$gcc_cv_as_line_zero" = xyes; then
6119 AC_DEFINE([HAVE_AS_LINE_ZERO], 1,
6120 [Define if the assembler won't complain about a line such as # 0 "" 2.])
6123 AC_MSG_CHECKING(support for thin archives)
6124 thin_archive_support=no
6125 echo 'int main (void) { return 0; }' > conftest.c
6126 if ($AR --version | sed 1q | grep "GNU ar" \
6127 && $CC $CFLAGS -c conftest.c \
6128 && $AR rcT conftest.a conftest.o \
6129 && $CC $CFLAGS $LDFLAGS -o conftest conftest.a) >/dev/null 2>&1; then
6130 thin_archive_support=yes
6132 rm -f conftest.c conftest.o conftest.a conftest
6133 AC_MSG_RESULT($thin_archive_support)
6134 AC_SUBST(thin_archive_support)
6136 AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
6137 gcc_cv_ld_eh_frame_hdr=no
6138 if test $in_tree_ld = yes ; then
6139 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 \
6140 && test $in_tree_ld_is_elf = yes; then
6141 gcc_cv_ld_eh_frame_hdr=yes
6143 elif test x$gcc_cv_ld != x; then
6144 if echo "$ld_ver" | grep GNU > /dev/null; then
6145 # Check if linker supports --eh-frame-hdr option
6146 if $gcc_cv_ld --help 2>&1 | grep eh-frame-hdr > /dev/null; then
6147 gcc_cv_ld_eh_frame_hdr=yes
6152 # Sun ld has various bugs in .eh_frame_hdr support before version 1.2251.
6153 if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2251; then
6154 gcc_cv_ld_eh_frame_hdr=yes
6160 GCC_TARGET_TEMPLATE([HAVE_LD_EH_FRAME_HDR])
6161 if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then
6162 AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1,
6163 [Define if your linker supports .eh_frame_hdr.])
6165 AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr)
6167 AC_MSG_CHECKING(linker position independent executable support)
6169 if test $in_tree_ld = yes ; then
6171 # Full PIE support on Solaris was only introduced in gld 2.26.
6172 *-*-solaris2*) gcc_gld_pie_min_version=26 ;;
6173 *) gcc_gld_pie_min_version=15 ;;
6175 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge "$gcc_gld_pie_min_version" -o "$gcc_cv_gld_major_version" -gt 2 \
6176 && test $in_tree_ld_is_elf = yes; then
6179 elif test x$gcc_cv_ld != x; then
6180 # Check if linker supports -pie option
6181 if $gcc_cv_ld --help 2>&1 | grep -- -pie > /dev/null; then
6185 if echo "$ld_ver" | grep GNU > /dev/null \
6186 && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 26; then
6193 *-*-solaris2.1[[1-9]]*)
6194 # Solaris 11.3 added PIE support.
6195 if $gcc_cv_ld -z help 2>&1 | grep -- type.*pie > /dev/null; then
6202 if test x"$gcc_cv_ld_pie" = xyes; then
6203 AC_DEFINE(HAVE_LD_PIE, 1,
6204 [Define if your linker supports PIE option.])
6206 AC_MSG_RESULT($gcc_cv_ld_pie)
6208 AC_MSG_CHECKING(linker PIE support with copy reloc)
6209 gcc_cv_ld_pie_copyreloc=no
6210 if test $gcc_cv_ld_pie = yes ; then
6211 if test $in_tree_ld = yes ; then
6212 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
6213 gcc_cv_ld_pie_copyreloc=yes
6215 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6216 # Check if linker supports -pie option with copy reloc
6218 i?86-*-linux* | x86_64-*-linux*)
6219 cat > conftest1.s <<EOF
6222 .type a_glob, @object
6227 cat > conftest2.s <<EOF
6230 .type main, @function
6232 movl %eax, a_glob(%rip)
6235 .section .data.rel,"aw",@progbits
6240 if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6241 && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
6242 && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6243 && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
6244 gcc_cv_ld_pie_copyreloc=yes
6246 rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
6251 AC_DEFINE_UNQUOTED(HAVE_LD_PIE_COPYRELOC,
6252 [`if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`],
6253 [Define 0/1 if your linker supports -pie option with copy reloc.])
6254 AC_MSG_RESULT($gcc_cv_ld_pie_copyreloc)
6256 AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
6257 gcc_cv_ld_eh_gc_sections=no
6258 if test $in_tree_ld = yes ; then
6259 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 17 -o "$gcc_cv_gld_major_version" -gt 2 \
6260 && test $in_tree_ld_is_elf = yes; then
6261 gcc_cv_ld_eh_gc_sections=yes
6263 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
6264 cat > conftest.s <<EOF
6267 .type _start, @function
6270 .size _start, .-_start
6271 .section .text.foo,"ax",@progbits
6272 .type foo, @function
6276 .section .gcc_except_table.foo,"a",@progbits
6279 .section .eh_frame,"a",@progbits
6282 if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6283 if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6284 | grep "gc-sections option ignored" > /dev/null; then
6285 gcc_cv_ld_eh_gc_sections=no
6286 elif $gcc_cv_objdump -h conftest 2> /dev/null \
6287 | grep gcc_except_table > /dev/null; then
6288 gcc_cv_ld_eh_gc_sections=yes
6289 # If no COMDAT groups, the compiler will emit .gnu.linkonce.t. sections.
6290 if test x$gcc_cv_as_comdat_group != xyes; then
6291 gcc_cv_ld_eh_gc_sections=no
6292 cat > conftest.s <<EOF
6295 .type _start, @function
6298 .size _start, .-_start
6299 .section .gnu.linkonce.t.foo,"ax",@progbits
6300 .type foo, @function
6304 .section .gcc_except_table.foo,"a",@progbits
6307 .section .eh_frame,"a",@progbits
6310 if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6311 if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6312 | grep "gc-sections option ignored" > /dev/null; then
6313 gcc_cv_ld_eh_gc_sections=no
6314 elif $gcc_cv_objdump -h conftest 2> /dev/null \
6315 | grep gcc_except_table > /dev/null; then
6316 gcc_cv_ld_eh_gc_sections=yes
6322 rm -f conftest.s conftest.o conftest
6326 # ??? This apparently exposes a binutils bug with PC-relative relocations.
6327 gcc_cv_ld_eh_gc_sections=no
6330 if test x$gcc_cv_ld_eh_gc_sections = xyes; then
6331 AC_DEFINE(HAVE_LD_EH_GC_SECTIONS, 1,
6332 [Define if your linker supports garbage collection of
6333 sections in presence of EH frames.])
6335 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections)
6337 AC_MSG_CHECKING(linker EH garbage collection of sections bug)
6338 gcc_cv_ld_eh_gc_sections_bug=no
6339 if test $in_tree_ld = yes ; then
6340 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -lt 19 -o "$gcc_cv_gld_major_version" -lt 2 \
6341 && test $in_tree_ld_is_elf = yes; then
6342 gcc_cv_ld_eh_gc_sections_bug=yes
6344 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x -a x$gcc_cv_as_comdat_group = xyes; then
6345 gcc_cv_ld_eh_gc_sections_bug=yes
6346 cat > conftest.s <<EOF
6349 .type _start, @function
6352 .size _start, .-_start
6353 .section .text.startup.foo,"ax",@progbits
6354 .type foo, @function
6358 .section .gcc_except_table.foo,"a",@progbits
6361 .section .eh_frame,"a",@progbits
6364 if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6365 if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6366 | grep "gc-sections option ignored" > /dev/null; then
6368 elif $gcc_cv_objdump -h conftest 2> /dev/null \
6369 | grep gcc_except_table > /dev/null; then
6370 gcc_cv_ld_eh_gc_sections_bug=no
6373 rm -f conftest.s conftest.o conftest
6375 if test x$gcc_cv_ld_eh_gc_sections_bug = xyes; then
6376 AC_DEFINE(HAVE_LD_EH_GC_SECTIONS_BUG, 1,
6377 [Define if your linker has buggy garbage collection of
6378 sections support when .text.startup.foo like sections are used.])
6380 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections_bug)
6382 AC_MSG_CHECKING(linker for compressed debug sections)
6383 # GNU ld/gold support --compressed-debug-sections=zlib since binutils 2.26.
6384 if $gcc_cv_ld --help 2>&1 | grep -- '--compress-debug-sections.*\<zlib-gabi\>' > /dev/null; then
6385 gcc_cv_ld_compress_debug=1
6386 gcc_cv_ld_compress_debug_option="--compress-debug-sections"
6387 # Detect zstd debug section compression support
6388 if $gcc_cv_ld --help 2>&1 | grep -- '--compress-debug-sections.*\<zstd\>' > /dev/null; then
6389 gcc_cv_ld_compress_debug=2
6395 # Introduced in Solaris 11.2.
6396 if $gcc_cv_ld --help 2>&1 | grep -- '-z compress-sections' > /dev/null; then
6397 gcc_cv_ld_compress_debug=1
6398 gcc_cv_ld_compress_debug_option="-z compress-sections"
6400 gcc_cv_ld_compress_debug=0
6404 # Assume linkers other than GNU ld don't support compessed debug
6406 gcc_cv_ld_compress_debug=0
6411 AC_DEFINE_UNQUOTED(HAVE_LD_COMPRESS_DEBUG, $gcc_cv_ld_compress_debug,
6412 [Define to the level of your linker's compressed debug section support.])
6413 AC_DEFINE_UNQUOTED(LD_COMPRESS_DEBUG_OPTION, "$gcc_cv_ld_compress_debug_option",
6414 [Define to the linker option to enable compressed debug sections.])
6415 AC_MSG_RESULT($gcc_cv_ld_compress_debug)
6417 if test x"$ld64_flag" = x"yes"; then
6419 # Set defaults for possibly untestable items.
6420 gcc_cv_ld64_export_dynamic=0
6421 gcc_cv_ld64_platform_version=0
6422 gcc_cv_ld64_macos_version_min=0
6423 gcc_cv_ld64_demangle=0
6425 if test "$build" = "$host"; then
6431 # On Darwin, because of FAT library support, it is often possible to execute
6432 # exes from compatible archs even when the host differs from the build system.
6433 case "$build","$host" in
6434 x86_64-*-darwin*,i?86-*-darwin* | powerpc64*-*-darwin*,powerpc*-*-darwin*)
6439 # If the configurer specified a minimum ld64 version to be supported, then use
6440 # that to determine feature support.
6441 if test x"${gcc_cv_ld64_version}" != x; then
6442 AC_MSG_CHECKING(ld64 specified version)
6443 gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'`
6444 AC_MSG_RESULT($gcc_cv_ld64_major)
6445 if test "$gcc_cv_ld64_major" -ge 97; then
6446 gcc_cv_ld64_demangle=1
6448 if test "$gcc_cv_ld64_major" -ge 236; then
6449 gcc_cv_ld64_export_dynamic=1
6451 if test "$gcc_cv_ld64_major" -ge 512; then
6452 gcc_cv_ld64_platform_version=1
6453 gcc_cv_ld64_macos_version_min=1
6455 elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
6456 # If the version was not specified, try to find it.
6457 AC_MSG_CHECKING(linker version)
6458 if test x"${gcc_cv_ld64_version}" = x; then
6459 gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \
6460 | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \
6463 AC_MSG_RESULT($gcc_cv_ld64_version)
6465 AC_MSG_CHECKING(linker for -demangle support)
6466 gcc_cv_ld64_demangle=1
6467 if $gcc_cv_ld -demangle < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6468 gcc_cv_ld64_demangle=0
6470 AC_MSG_RESULT($gcc_cv_ld64_demangle)
6472 AC_MSG_CHECKING(linker for -export_dynamic support)
6473 gcc_cv_ld64_export_dynamic=1
6474 if $gcc_cv_ld -export_dynamic < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6475 gcc_cv_ld64_export_dynamic=0
6477 AC_MSG_RESULT($gcc_cv_ld64_export_dynamic)
6479 AC_MSG_CHECKING(linker for -platform_version support)
6480 gcc_cv_ld64_platform_version=1
6481 if $gcc_cv_ld -platform_version macos 10.5 0.0 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6482 gcc_cv_ld64_platform_version=0
6484 AC_MSG_RESULT($gcc_cv_ld64_platform_version)
6486 AC_MSG_CHECKING(linker for -macos_version_min)
6487 gcc_cv_ld64_macos_version_min=1
6488 if $gcc_cv_ld -macos_version_min 10.5 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6489 gcc_cv_ld64_macos_version_min=0
6491 AC_MSG_RESULT($gcc_cv_ld64_macos_version_min)
6494 if test x"${gcc_cv_ld64_version}" != x; then
6495 AC_DEFINE_UNQUOTED(LD64_VERSION, "${gcc_cv_ld64_version}",
6496 [Define to ld64 version.])
6499 AC_DEFINE_UNQUOTED(LD64_HAS_DEMANGLE, $gcc_cv_ld64_demangle,
6500 [Define to 1 if ld64 supports '-demangle'.])
6502 AC_DEFINE_UNQUOTED(LD64_HAS_EXPORT_DYNAMIC, $gcc_cv_ld64_export_dynamic,
6503 [Define to 1 if ld64 supports '-export_dynamic'.])
6505 AC_DEFINE_UNQUOTED(LD64_HAS_PLATFORM_VERSION, $gcc_cv_ld64_platform_version,
6506 [Define to 1 if ld64 supports '-platform_version'.])
6508 AC_DEFINE_UNQUOTED(LD64_HAS_MACOS_VERSION_MIN, $gcc_cv_ld64_macos_version_min,
6509 [Define to 1 if ld64 supports '-macos_version_min'.])
6512 if test x"$dsymutil_flag" = x"yes"; then
6514 # If the user specified a dsymutil path, then we will already have the
6515 # version string, otherwise, pick it up.
6516 if test x"$gcc_cv_dsymutil" = x; then
6517 AC_MSG_WARN([dsymutil is a required tool for this system, but not found])
6518 dsymutil_vers="tool unspecified"
6519 elif test x"$dsymutil_vers" = x; then
6520 dsymutil_vers=`$gcc_cv_dsymutil -v /dev/null 2>&1`
6523 dsymutil_temp=`echo $dsymutil_vers | sed 1q`
6524 AC_MSG_CHECKING(dsymutil version "$dsymutil_temp")
6525 if echo $dsymutil_temp | grep dwarfutils- > /dev/null; then
6526 dsymutil_kind=DWARFUTILS
6527 dsymutil_vers=`echo $dsymutil_temp | sed 's/.*dwarfutils-\([[0-9\.]]*\).*/\1/'`
6528 elif echo $dsymutil_temp | grep clang- > /dev/null; then
6530 dsymutil_vers=`echo $dsymutil_temp | sed 's/.*clang-\([[0-9\.]]*\).*/\1/'`
6531 elif echo $dsymutil_temp | grep 'LLVM version ' > /dev/null; then
6533 dsymutil_vers=`echo $dsymutil_temp | sed 's/.*LLVM\ version\ \([[0-9\.]]*\).*/\1/'`
6535 dsymutil_kind=DET_UNKNOWN
6538 dsymutil_major=`expr "$dsymutil_vers" : '\([[0-9]]*\)'`
6539 dsymutil_minor=`expr "$dsymutil_vers" : '[[0-9]]*\.\([[0-9]]*\)'`
6540 dsymutil_tiny=`expr "$dsymutil_vers" : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
6541 if test x"${dsymutil_minor}" = x; then
6544 if test x"${dsymutil_tiny}" = x; then
6547 AC_DEFINE_UNQUOTED(DSYMUTIL_VERSION, [$dsymutil_kind,${dsymutil_major},${dsymutil_minor},${dsymutil_tiny}],
6548 [Define to the dsymutil version.])
6549 AC_MSG_RESULT($dsymutil_vers : $dsymutil_kind ${dsymutil_major} ${dsymutil_minor} ${dsymutil_tiny} )
6553 win32 | pe | cygwin* | mingw32*)
6554 AC_MSG_CHECKING(broken PE linker dwarf5 support)
6555 gcc_cv_ld_broken_pe_dwarf5=yes
6556 if test $in_tree_ld = yes ; then
6557 if grep -q '\.debug_loclists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6558 $gcc_cv_ld_gld_srcdir/scripttempl/pe*.sc \
6559 && grep -q '\.debug_rnglists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6560 $gcc_cv_ld_gld_srcdir/scripttempl/pe*.sc; then
6561 gcc_cv_ld_broken_pe_dwarf5=no
6564 if $gcc_cv_ld --verbose 2>&1 | grep -q '\.debug_loclists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6565 && $gcc_cv_ld --verbose 2>&1 | grep -q '\.debug_rnglists.*BLOCK.*__section_alignment__.*NOLOAD.*:'; then
6566 gcc_cv_ld_broken_pe_dwarf5=no
6569 if test x$gcc_cv_ld_broken_pe_dwarf5 = xyes; then
6570 AC_DEFINE(HAVE_LD_BROKEN_PE_DWARF5, 1,
6571 [Define if the PE linker has broken DWARF 5 support.])
6573 AC_MSG_RESULT($gcc_cv_ld_broken_pe_dwarf5)
6575 AC_MSG_CHECKING(PE linker --disable-dynamicbase support)
6576 gcc_cv_ld_disable_dynamicbase=no
6577 if test $in_tree_ld = yes; then
6578 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 36 -o "$gcc_cv_gld_major_version" -gt 2; then \
6579 gcc_cv_ld_disable_dynamicbase=yes
6582 if $gcc_cv_ld --help 2>&1 | grep -q 'disable\-]dynamicbase' > /dev/null; then
6583 gcc_cv_ld_disable_dynamicbase=yes
6586 if test x"$gcc_cv_ld_disable_dynamicbase" = xyes; then
6587 AC_DEFINE(HAVE_LD_PE_DISABLE_DYNAMICBASE, 1,
6588 [Define if the PE linker supports --disable-dynamicbase option.])
6590 AC_MSG_RESULT($gcc_cv_ld_disable_dynamicbase)
6598 AC_CACHE_CHECK(linker --as-needed support,
6599 gcc_cv_ld_as_needed,
6600 [gcc_cv_ld_as_needed=no
6601 gcc_cv_ld_as_needed_option='--as-needed'
6602 gcc_cv_ld_no_as_needed_option='--no-as-needed'
6603 if test $in_tree_ld = yes ; then
6604 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
6605 && test $in_tree_ld_is_elf = yes; then
6606 gcc_cv_ld_as_needed=yes
6607 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 28; then
6608 gcc_cv_ld_as_needed_option='--push-state --as-needed'
6609 gcc_cv_ld_no_as_needed_option='--pop-state'
6612 elif test x$gcc_cv_ld != x; then
6613 # Check if linker supports --as-needed and --no-as-needed options
6614 if $gcc_cv_ld --help 2>&1 | grep as-needed > /dev/null; then
6615 gcc_cv_ld_as_needed=yes
6616 if $gcc_cv_ld --help 2>&1 | grep push-state > /dev/null \
6617 && $gcc_cv_ld --help 2>&1 | grep pop-state > /dev/null \
6618 && echo "$ld_ver" | grep GNU > /dev/null \
6619 && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 28; then
6620 # Use these options only when both ld.bfd and ld.gold support
6621 # --push-state/--pop-state, which unfortunately wasn't added
6623 gcc_cv_ld_as_needed_option='--push-state --as-needed'
6624 gcc_cv_ld_no_as_needed_option='--pop-state'
6627 case "$target:$gnu_ld" in
6629 # Solaris 2 ld always supports -z ignore/-z record. Prefer the native
6631 gcc_cv_ld_as_needed=yes
6632 gcc_cv_ld_as_needed_option="-z ignore"
6633 gcc_cv_ld_no_as_needed_option="-z record"
6637 # --as-needed/-z ignore can only be used if libgcc_s.so.1 uses
6638 # dl_iterate_phdr, i.e. since Solaris 11.
6640 *-*-solaris2.1[[1-9]]*)
6642 i?86-*-* | x86_64-*-*)
6643 if echo "$ld_ver" | grep GNU > /dev/null; then
6644 # Doesn't work with gld on Solaris/x86 due to PR ld/12320.
6645 gcc_cv_ld_as_needed=no
6651 gcc_cv_ld_as_needed=no
6655 if test x"$gcc_cv_ld_as_needed" = xyes; then
6656 AC_DEFINE(HAVE_LD_AS_NEEDED, 1,
6657 [Define if your linker supports --as-needed/--no-as-needed or equivalent options.])
6658 AC_DEFINE_UNQUOTED(LD_AS_NEEDED_OPTION, "$gcc_cv_ld_as_needed_option",
6659 [Define to the linker option to ignore unused dependencies.])
6660 AC_DEFINE_UNQUOTED(LD_NO_AS_NEEDED_OPTION, "$gcc_cv_ld_no_as_needed_option",
6661 [Define to the linker option to keep unused dependencies.])
6664 AC_MSG_CHECKING(linker mapfile support for clearing hardware capabilities)
6665 saved_LDFLAGS="$LDFLAGS"
6666 for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
6667 LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
6668 AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
6669 [gcc_cv_ld_clearcap=yes; break], [gcc_cv_ld_clearcap=no])
6671 LDFLAGS="$saved_LDFLAGS"
6672 if test "x$gcc_cv_ld_clearcap" = xyes; then
6673 AC_DEFINE([HAVE_LD_CLEARCAP], 1,
6674 [Define if the linker supports clearing hardware capabilities via mapfile.])
6675 AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/$clearcap_map])
6677 AC_MSG_RESULT($gcc_cv_ld_clearcap)
6683 emul_name="-melf32lppc"
6686 emul_name="-melf32ppc"
6689 AC_CACHE_CHECK(linker .gnu.attributes long double support,
6691 [gcc_cv_ld_ppc_attr=no
6692 if test x"$ld_is_gold" = xyes; then
6693 gcc_cv_ld_ppc_attr=yes
6694 elif test $in_tree_ld = yes ; then
6695 if test "$gcc_cv_gld_major_version" -eq 2 \
6696 -a "$gcc_cv_gld_minor_version" -ge 28 \
6697 -o "$gcc_cv_gld_major_version" -gt 2; then
6698 gcc_cv_ld_ppc_attr=yes
6700 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6701 # check that merging the long double .gnu_attribute doesn't warn
6702 cat > conftest1.s <<EOF
6705 cat > conftest2.s <<EOF
6708 if $gcc_cv_as -a32 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6709 && $gcc_cv_as -a32 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6710 && $gcc_cv_ld $emul_name -r -o conftest.o conftest1.o conftest2.o > /dev/null 2> conftest.err \
6711 && test ! -s conftest.err; then
6712 gcc_cv_ld_ppc_attr=yes
6714 rm -f conftest.err conftest.o conftest1.o conftest2.o conftest1.s conftest2.s
6717 if test x$gcc_cv_ld_ppc_attr = xyes; then
6718 AC_DEFINE(HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE, 1,
6719 [Define if your PowerPC linker has .gnu.attributes long double support.])
6724 case "$target:$tm_file" in
6725 powerpc64*-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
6728 emul_name="-melf64lppc"
6731 emul_name="-melf64ppc"
6734 emul_name="-melf64lppc_fbsd"
6737 emul_name="-melf64ppc_fbsd"
6740 AC_CACHE_CHECK(linker support for omitting dot symbols,
6741 gcc_cv_ld_no_dot_syms,
6742 [gcc_cv_ld_no_dot_syms=no
6743 if test x"$ld_is_gold" = xyes; then
6744 gcc_cv_ld_no_dot_syms=yes
6745 elif test $in_tree_ld = yes ; then
6746 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2; then
6747 gcc_cv_ld_no_dot_syms=yes
6749 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6750 cat > conftest1.s <<EOF
6754 cat > conftest2.s <<EOF
6755 .section ".opd","aw"
6760 .quad .LEfoo,.TOC.@tocbase,0
6766 if $gcc_cv_as -a64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6767 && $gcc_cv_as -a64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6768 && $gcc_cv_ld $emul_name -o conftest conftest1.o conftest2.o > /dev/null 2>&1; then
6769 gcc_cv_ld_no_dot_syms=yes
6771 rm -f conftest conftest1.o conftest2.o conftest1.s conftest2.s
6774 if test x"$gcc_cv_ld_no_dot_syms" = xyes; then
6775 AC_DEFINE(HAVE_LD_NO_DOT_SYMS, 1,
6776 [Define if your PowerPC64 linker only needs function descriptor syms.])
6779 AC_CACHE_CHECK(linker large toc support,
6780 gcc_cv_ld_large_toc,
6781 [gcc_cv_ld_large_toc=no
6782 if test x"$ld_is_gold" = xyes; then
6783 gcc_cv_ld_large_toc=yes
6784 elif test $in_tree_ld = yes ; then
6785 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 21 -o "$gcc_cv_gld_major_version" -gt 2; then
6786 gcc_cv_ld_large_toc=yes
6788 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6789 cat > conftest.s <<EOF
6790 .section ".tbss","awT",@nobits
6796 addis 9,13,ie0@got@tprel@ha
6797 ld 9,ie0@got@tprel@l(9)
6799 if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
6800 && $gcc_cv_ld $emul_name --no-toc-sort -o conftest conftest.o > /dev/null 2>&1; then
6801 gcc_cv_ld_large_toc=yes
6803 rm -f conftest conftest.o conftest.s
6806 if test x"$gcc_cv_ld_large_toc" = xyes; then
6807 AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
6808 [Define if your PowerPC64 linker supports a large TOC.])
6811 AC_CACHE_CHECK(linker toc pointer alignment,
6812 gcc_cv_ld_toc_align,
6813 [if test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_nm != x; then
6814 cat > conftest.s <<EOF
6819 .section .data.rel.ro,"aw",@progbits
6824 if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
6825 && $gcc_cv_ld $emul_name -z norelro -o conftest conftest.o > /dev/null 2>&1; then
6826 gcc_cv_ld_toc_align=`$gcc_cv_nm conftest | ${AWK} '/\.TOC\./ { match ($0, "0[[[:xdigit:]]]*", a); print strtonum ("0x" substr(a[[0]], length(a[[0]])-3)) }'`
6828 rm -f conftest conftest.o conftest.s
6831 if test -n "$gcc_cv_ld_toc_align" && test $gcc_cv_ld_toc_align -gt 8; then
6832 AC_DEFINE_UNQUOTED(POWERPC64_TOC_POINTER_ALIGNMENT, $gcc_cv_ld_toc_align,
6833 [Define to .TOC. alignment forced by your linker.])
6840 AC_CACHE_CHECK(linker large toc support,
6841 gcc_cv_ld_large_toc,
6842 [gcc_cv_ld_large_toc=no
6843 if test x$gcc_cv_as != x ; then
6844 cat > conftest.s <<EOF
6854 if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1; then
6855 gcc_cv_ld_large_toc=yes
6857 rm -f conftest conftest.o conftest.s
6860 if test x"$gcc_cv_ld_large_toc" = xyes; then
6861 AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
6862 [Define if your PowerPC64 linker supports a large TOC.])
6867 AC_CACHE_CHECK(linker --build-id support,
6869 [gcc_cv_ld_buildid=no
6870 if test $in_tree_ld = yes ; then
6871 if test "$gcc_cv_gld_major_version" -eq 2 -a \
6872 "$gcc_cv_gld_minor_version" -ge 18 -o \
6873 "$gcc_cv_gld_major_version" -gt 2 \
6874 && test $in_tree_ld_is_elf = yes; then
6875 gcc_cv_ld_buildid=yes
6877 elif test x$gcc_cv_ld != x; then
6878 if $gcc_cv_ld --help 2>&1 | grep build-id > /dev/null; then
6879 gcc_cv_ld_buildid=yes
6882 if test x"$gcc_cv_ld_buildid" = xyes; then
6883 AC_DEFINE(HAVE_LD_BUILDID, 1,
6884 [Define if your linker supports --build-id.])
6887 AC_ARG_ENABLE(linker-build-id,
6888 [AS_HELP_STRING([--enable-linker-build-id],
6889 [compiler will always pass --build-id to linker])],
6891 enable_linker_build_id=no)
6893 if test x"$enable_linker_build_id" = xyes; then
6894 if test x"$gcc_cv_ld_buildid" = xyes; then
6895 AC_DEFINE(ENABLE_LD_BUILDID, 1,
6896 [Define if gcc should always pass --build-id to linker.])
6898 AC_MSG_WARN(--build-id is not supported by your linker; --enable-linker-build-id ignored)
6902 # In binutils 2.21, GNU ld gained support for new emulations fully
6903 # supporting the Solaris 2 ABI. Detect their presence in the linker used.
6904 AC_CACHE_CHECK(linker *_sol2 emulation support,
6905 gcc_cv_ld_sol2_emulation,
6906 [gcc_cv_ld_sol2_emulation=no
6907 if test $in_tree_ld = yes ; then
6908 if test "$gcc_cv_gld_major_version" -eq 2 -a \
6909 "$gcc_cv_gld_minor_version" -ge 21 -o \
6910 "$gcc_cv_gld_major_version" -gt 2 \
6911 && test $in_tree_ld_is_elf = yes; then
6912 gcc_cv_ld_sol2_emulation=yes
6914 elif test x$gcc_cv_ld != x; then
6915 if $gcc_cv_ld -V 2>/dev/null | sed -e '1,/Supported emulations/d;q' | \
6916 grep _sol2 > /dev/null; then
6917 gcc_cv_ld_sol2_emulation=yes
6920 if test x"$gcc_cv_ld_sol2_emulation" = xyes; then
6921 AC_DEFINE(HAVE_LD_SOL2_EMULATION, 1,
6922 [Define if your linker supports the *_sol2 emulations.])
6925 AC_CACHE_CHECK(linker --sysroot support,
6927 [gcc_cv_ld_sysroot=no
6928 if test $in_tree_ld = yes ; then
6929 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 ; then
6930 gcc_cv_ld_sysroot=yes
6932 elif test x$gcc_cv_ld != x; then
6933 if $gcc_cv_ld --help 2>&1 | grep sysroot > /dev/null; then
6934 gcc_cv_ld_sysroot=yes
6937 if test x"$gcc_cv_ld_sysroot" = xyes; then
6938 AC_DEFINE(HAVE_LD_SYSROOT, 1,
6939 [Define if your linker supports --sysroot.])
6944 # Check for system-provided CRTs on Solaris 11.x and Solaris 12.
6945 AC_CACHE_CHECK([system-provided CRTs on Solaris],
6946 gcc_cv_solaris_crts,
6947 [gcc_cv_solaris_crts=no
6948 if test x$host != x$target; then
6949 if test "x$with_sysroot" = xyes; then
6950 target_sysroot="${test_exec_prefix}/${target_noncanonical}/sys-root"
6952 target_sysroot="${with_sysroot}"
6955 target_libdir="$target_sysroot/usr/lib"
6956 # At the time they were added, gcrt1.o became a symlink for backwards
6957 # compatibility on x86, while crt1.o was added on sparc, so check for that.
6959 i?86-*-solaris2* | x86_64-*-solaris2*)
6960 if test -h "$target_libdir/gcrt1.o"; then gcc_cv_solaris_crts=yes; fi
6963 if test -f "$target_libdir/crt1.o"; then gcc_cv_solaris_crts=yes; fi
6968 if test x$gcc_cv_solaris_crts = xyes; then
6969 AC_DEFINE(HAVE_SOLARIS_CRTS, 1,
6970 [Define if the system-provided CRTs are present on Solaris.])
6973 AC_ARG_ENABLE(libssp,
6974 [AS_HELP_STRING([--enable-libssp], [enable linking against libssp])],
6975 [case "${enableval}" in
6979 AC_MSG_ERROR([unknown libssp setting $enableval])
6983 # Test for stack protector support in target C library.
6984 AC_CACHE_CHECK(__stack_chk_fail in target C library,
6985 gcc_cv_libc_provides_ssp,
6986 [gcc_cv_libc_provides_ssp=no
6987 if test "x$enable_libssp" = "xno"; then
6988 gcc_cv_libc_provides_ssp=yes
6989 elif test "x$enable_libssp" = "xyes"; then
6990 gcc_cv_libc_provides_ssp=no
6994 # All versions of musl provide stack protector
6995 gcc_cv_libc_provides_ssp=yes;;
6996 *-*-linux* | *-*-kfreebsd*-gnu)
6997 # glibc 2.4 and later provides __stack_chk_fail and
6998 # either __stack_chk_guard, or TLS access to stack guard canary.
6999 GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_libc_provides_ssp=yes], [
7000 [if test -f $target_header_dir/features.h \
7001 && $EGREP '^[ ]*#[ ]*define[ ]+__GNU_LIBRARY__[ ]+([1-9][0-9]|[6-9])' \
7002 $target_header_dir/features.h > /dev/null; then
7003 if $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC__[ ]+1' \
7004 $target_header_dir/features.h > /dev/null && \
7005 test -f $target_header_dir/bits/uClibc_config.h && \
7006 $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC_HAS_SSP__[ ]+1' \
7007 $target_header_dir/bits/uClibc_config.h > /dev/null; then
7008 gcc_cv_libc_provides_ssp=yes
7010 # all versions of Bionic support stack protector
7011 elif test -f $target_header_dir/sys/cdefs.h \
7012 && $EGREP '^[ ]*#[ ]*define[ ]+__BIONIC__[ ]+1' \
7013 $target_header_dir/sys/cdefs.h > /dev/null; then
7014 gcc_cv_libc_provides_ssp=yes
7018 # Avoid complicated tests (see
7019 # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
7020 # simply assert that glibc does provide this, which is true for all
7021 # realistically usable GNU/Hurd configurations.
7022 # All supported versions of musl provide it as well
7023 gcc_cv_libc_provides_ssp=yes;;
7024 *-*-darwin* | *-*-freebsd* | *-*-netbsd*)
7025 AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
7026 [echo "no __stack_chk_fail on this target"])
7028 *) gcc_cv_libc_provides_ssp=no ;;
7032 if test x$gcc_cv_libc_provides_ssp = xyes; then
7033 AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
7034 [Define if your target C library provides stack protector support])
7037 # Check whether --enable-default-ssp was given.
7038 AC_ARG_ENABLE(default-ssp,
7039 [AS_HELP_STRING([--enable-default-ssp],
7040 [enable Stack Smashing Protection as default])],[
7041 if test x$gcc_cv_libc_provides_ssp = xyes; then
7043 ia64*-*-*) enable_default_ssp=no ;;
7044 *) enable_default_ssp=$enableval ;;
7047 enable_default_ssp=no
7049 enable_default_ssp=no)
7050 if test x$enable_default_ssp = xyes ; then
7051 AC_DEFINE(ENABLE_DEFAULT_SSP, 1,
7052 [Define if your target supports default stack protector and it is enabled.])
7054 AC_SUBST([enable_default_ssp])
7056 # Test for <sys/sdt.h> on the target.
7057 GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H])
7058 AC_CACHE_CHECK([sys/sdt.h in the target C library], [gcc_cv_sys_sdt_h], [
7060 if test -f $target_header_dir/sys/sdt.h; then
7061 gcc_cv_sys_sdt_h=yes
7064 AS_IF([test x$gcc_cv_sys_sdt_h = xyes], [
7065 AC_DEFINE([HAVE_SYS_SDT_H], [1],
7066 [Define if your target C library provides sys/sdt.h])
7069 # Check if TFmode long double should be used by default or not.
7070 # Some glibc targets used DFmode long double, but with glibc 2.4
7071 # and later they can use TFmode.
7073 powerpc*-*-linux* | \
7077 AC_ARG_WITH(long-double-128,
7078 [AS_HELP_STRING([--with-long-double-128],
7079 [use 128-bit long double by default])],
7080 gcc_cv_target_ldbl128="$with_long_double_128", [
7082 s390*-*-linux-musl*)
7083 gcc_cv_target_ldbl128=yes
7085 powerpc*-*-linux-musl*)
7086 gcc_cv_target_ldbl128=no
7089 [GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_target_ldbl128=yes], [
7090 [gcc_cv_target_ldbl128=no
7091 grep '^[ ]*#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
7092 $target_header_dir/bits/wordsize.h > /dev/null 2>&1 \
7093 && gcc_cv_target_ldbl128=yes
7101 if test x$gcc_cv_target_ldbl128 = xyes; then
7102 AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
7103 [Define if TFmode long double should be the default])
7106 # Check if TFmode long double target should use the IBM extended double or IEEE
7107 # 128-bit floating point formats if long doubles are 128-bits long. The long
7108 # double type can only be switched on powerpc64 bit Linux systems where VSX is
7109 # supported. Other PowerPC systems do not build the IEEE 128-bit emulator in
7111 AC_ARG_WITH([long-double-format],
7112 [AS_HELP_STRING([--with-long-double-format={ieee,ibm}]
7113 [Specify whether PowerPC long double uses IEEE or IBM format])],[
7114 case "$target:$with_long_double_format" in
7115 powerpc64le-*-linux*:ieee | powerpc64le-*-linux*:ibm)
7118 powerpc64-*-linux*:ieee | powerpc64-*-linux*:ibm)
7119 # IEEE 128-bit emulation is only built on 64-bit VSX Linux systems
7121 power7 | power8 | power9 | power1*)
7125 AC_MSG_ERROR([Configuration option --with-long-double-format is only \
7126 supported if the default cpu is power7 or newer])
7127 with_long_double_format=""
7131 powerpc64*-*-linux*:*)
7132 AC_MSG_ERROR([--with-long-double-format argument should be ibm or ieee])
7133 with_long_double_format=""
7136 AC_MSG_ERROR([Configure option --with-long-double-format is only supported \
7137 on 64-bit PowerPC VSX Linux systems])
7138 with_long_double_format=""
7143 # Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP
7144 # values in the TCB. Currently, only GLIBC 2.23 and later support this.
7145 gcc_cv_libc_provides_hwcap_in_tcb=no
7148 GCC_GLIBC_VERSION_GTE_IFELSE([2], [23], [gcc_cv_libc_provides_hwcap_in_tcb=yes], )
7151 if test x$gcc_cv_libc_provides_hwcap_in_tcb = xyes; then
7152 AC_DEFINE(TARGET_LIBC_PROVIDES_HWCAP_IN_TCB, 1,
7153 [Define if your target C Library provides the AT_HWCAP value in the TCB])
7156 # Check if the target LIBC handles PT_GNU_STACK.
7157 gcc_cv_libc_gnustack=unknown
7159 mips*-*-linux-musl*)
7160 gcc_cv_libc_gnustack=yes
7163 GCC_GLIBC_VERSION_GTE_IFELSE([2], [31], [gcc_cv_libc_gnustack=yes], )
7166 if test x$gcc_cv_libc_gnustack = xyes; then
7167 AC_DEFINE(TARGET_LIBC_GNUSTACK, 1,
7168 [Define if your target C Library properly handles PT_GNU_STACK])
7171 AC_MSG_CHECKING(dl_iterate_phdr in target C library)
7172 gcc_cv_target_dl_iterate_phdr=unknown
7175 gcc_cv_target_dl_iterate_phdr=yes
7177 *-*-dragonfly* | *-*-freebsd*)
7178 if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
7179 gcc_cv_target_dl_iterate_phdr=yes
7181 gcc_cv_target_dl_iterate_phdr=no
7185 gcc_cv_target_dl_iterate_phdr=yes
7188 GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
7189 if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
7190 AC_DEFINE(TARGET_DL_ITERATE_PHDR, 1,
7191 [Define if your target C library provides the `dl_iterate_phdr' function.])
7193 AC_MSG_RESULT($gcc_cv_target_dl_iterate_phdr)
7195 # We no longer support different GC mechanisms. Emit an error if
7196 # the user configures with --with-gc.
7198 [AS_HELP_STRING([--with-gc={page,zone}],
7199 [this option is not supported anymore. It used to choose
7200 the garbage collection mechanism to use with the compiler])],
7201 [AC_MSG_ERROR([Configure option --with-gc is only supported up to GCC 4.7.x])],
7204 # Libraries to use on the host. This will normally be set by the top
7205 # level Makefile. Here we simply capture the value for our Makefile.
7206 if test -z "${HOST_LIBS+set}"; then
7211 # Use the system's zlib library.
7214 dnl Very limited version of automake's enable-maintainer-mode
7216 AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
7217 dnl maintainer-mode is disabled by default
7218 AC_ARG_ENABLE(maintainer-mode,
7219 [AS_HELP_STRING([--enable-maintainer-mode],
7220 [enable make rules and dependencies not useful
7221 (and sometimes confusing) to the casual installer])],
7222 maintainer_mode=$enableval,
7225 AC_MSG_RESULT($maintainer_mode)
7227 if test "$maintainer_mode" = "yes"; then
7234 dnl Variables for tags utilities; copied from automake 1.16.4+'s init.m4
7235 if test -z "$CTAGS"; then
7239 if test -z "$ETAGS"; then
7243 if test -z "$CSCOPE"; then
7248 dnl Whether to prevent multiple front-ends from linking at the same time
7250 AC_MSG_CHECKING([whether to avoid linking multiple front-ends at once])
7251 AC_ARG_ENABLE(link-mutex,
7252 [AS_HELP_STRING([--enable-link-mutex],
7253 [avoid linking multiple front-ends at once to avoid thrashing
7254 on the build machine])],
7255 do_link_mutex=$enableval,
7257 AC_MSG_RESULT($do_link_mutex)
7259 if test "$do_link_mutex" = "yes"; then
7261 AC_MSG_WARN([--enable-link-mutex is deprecated and will be removed in the next release, use --enable-link-serialization instead])
7265 AC_SUBST(DO_LINK_MUTEX)
7267 dnl Whether to prevent multiple GCC front-ends from linking at the same time
7269 AC_MSG_CHECKING([whether to serialize linking of multiple front-ends])
7270 AC_ARG_ENABLE(link-serialization,
7271 [AS_HELP_STRING([--enable-link-serialization],
7272 [avoid linking multiple GCC front-ends at once using make
7273 dependencies to avoid thrashing on the build machine])],
7274 do_link_serialization=$enableval,
7275 do_link_serialization=no)
7276 AC_MSG_RESULT($do_link_serialization)
7278 case "$do_link_serialization" in
7280 DO_LINK_SERIALIZATION=1;;
7281 [[1-9]] | [[1-9]][[0-9]] | [[1-9]][[0-9]][[0-9]])
7282 DO_LINK_SERIALIZATION=$do_link_serialization;;
7284 DO_LINK_SERIALIZATION=;;
7286 AC_MSG_ERROR(bad value ${do_link_serialization} given for --enable-link-serialization) ;;
7288 AC_SUBST(DO_LINK_SERIALIZATION)
7294 # Make empty files to contain the specs and options for each language.
7295 # Then add #include lines to for a compiler that has specs and/or options.
7301 # These (without "all_") are set in each config-lang.in.
7302 # `language' must be a single word so is spelled singularly.
7305 all_outputs='Makefile'
7306 # List of language configure and makefile fragments.
7307 all_lang_configurefrags=
7309 # Additional files for gengtype
7310 all_gtfiles="$target_gtfiles"
7312 # These are the languages that are set in --enable-languages,
7313 # and are available in the GCC tree.
7314 all_selected_languages=
7316 # Add the language fragments.
7317 # Languages are added via two mechanisms. Some information must be
7318 # recorded in makefile variables, these are defined in config-lang.in.
7319 # We accumulate them and plug them into the main Makefile.
7320 # The other mechanism is a set of hooks for each of the main targets
7321 # like `clean', `install', etc.
7323 language_hooks="Make-hooks"
7325 for lang in ${srcdir}/*/config-lang.in
7328 test "$lang" = "${srcdir}/*/config-lang.in" && continue
7330 lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang`
7331 if test "x$lang_alias" = x
7333 echo "$lang doesn't set \$language." 1>&2
7336 subdir="`echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`"
7337 subdirs="$subdirs $subdir"
7339 # $gcc_subdir is where the gcc integration files are to be found
7340 # for a language, both for internal compiler purposes (compiler
7341 # sources implementing front-end to GCC tree converters), and for
7342 # build infrastructure purposes (Make-lang.in, etc.)
7344 # This will be <subdir> (relative to $srcdir) if a line like
7345 # gcc_subdir="<subdir>" or gcc_subdir=<subdir>
7346 # is found in <langdir>/config-lang.in, and will remain <langdir>
7349 # Except for the language alias (fetched above), the regular
7350 # "config-lang.in" contents are always retrieved from $gcc_subdir,
7351 # so a <langdir>/config-lang.in setting gcc_subdir typically sets
7352 # only this and the language alias.
7354 gcc_subdir=`sed -n -e 's,^gcc_subdir=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^gcc_subdir=\([^ ]*\).*$,\1,p' $lang`
7355 if [ "$gcc_subdir" = "" ]; then
7356 gcc_subdir="$subdir"
7359 case ",$enable_languages," in
7361 all_selected_languages="$all_selected_languages $lang_alias"
7362 if test -f $srcdir/$gcc_subdir/lang-specs.h; then
7363 lang_specs_files="$lang_specs_files $srcdir/$gcc_subdir/lang-specs.h"
7375 . ${srcdir}/$gcc_subdir/config-lang.in
7376 if test "x$language" = x
7378 echo "${srcdir}/$gcc_subdir/config-lang.in doesn't set \$language." 1>&2
7383 case ",$enable_languages," in
7386 for i in $subdir_requires; do
7387 test -f "${srcdir}/$i/config-lang.in" && continue
7395 all_lang_configurefrags="$all_lang_configurefrags \$(srcdir)/$gcc_subdir/config-lang.in"
7396 if test "x$language" = xc && test -n "$all_lang_makefrags"; then
7397 # Put c/Make-lang.in fragment first to match serialization languages order.
7398 all_lang_makefrags="\$(srcdir)/$gcc_subdir/Make-lang.in $all_lang_makefrags"
7400 all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$gcc_subdir/Make-lang.in"
7402 if test -f $srcdir/$gcc_subdir/lang.opt; then
7403 lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt"
7404 all_opt_files="$all_opt_files $srcdir/$gcc_subdir/lang.opt"
7406 if test -f $srcdir/$gcc_subdir/$subdir-tree.def; then
7407 lang_tree_files="$lang_tree_files $srcdir/$gcc_subdir/$subdir-tree.def"
7409 all_languages="$all_languages $language"
7410 all_compilers="$all_compilers $compilers"
7411 all_outputs="$all_outputs $outputs"
7412 all_gtfiles="$all_gtfiles [[$subdir]] $gtfiles"
7413 case ",$enable_languages," in
7415 AC_DEFINE(ENABLE_LTO, 1, [Define to enable LTO support.])
7417 AC_SUBST(enable_lto)
7424 for language in $all_selected_languages
7426 check_languages="$check_languages check-$language"
7428 if test x$enable_libgdiagnostics = xyes; then
7429 check_languages="$check_languages check-libgdiagnostics check-sarif-replay"
7433 for language in $all_selected_languages
7435 selftest_languages="$selftest_languages selftest-$language"
7438 # We link each language in with a set of hooks, reached indirectly via
7439 # lang.${target}. Only do so for selected languages.
7443 target_list="all.cross start.encap rest.encap tags \
7444 install-common install-man install-info install-dvi install-pdf \
7445 install-html dvi pdf html uninstall info man srcextra srcman srcinfo \
7446 mostlyclean clean distclean maintainer-clean install-plugin"
7448 for t in $target_list
7451 for lang in $all_selected_languages
7455 echo "lang.$t: $x" >> Make-hooks
7458 echo "ifeq (\$(DO_LINK_SERIALIZATION),)" >> Make-hooks
7459 echo "SERIAL_LIST =" >> Make-hooks
7460 echo else >> Make-hooks
7464 serialization_languages=c
7465 for lang in $all_selected_languages
7467 test $lang = c && continue
7468 if test $lang = lto; then
7469 serialization_languages="$serialization_languages lto1 lto2"
7471 serialization_languages="$serialization_languages $lang"
7474 for lang in $serialization_languages
7476 test $lang = c && continue
7477 lang_cnt=`expr $lang_cnt + 1`
7478 lang_list=" $prev$lang_list"
7481 echo "SERIAL_LIST = \$(wordlist \$(DO_LINK_SERIALIZATION),$lang_cnt,$lang_list)" >> Make-hooks
7482 echo endif >> Make-hooks
7483 echo "SERIAL_COUNT = `expr $lang_cnt + 1`" >> Make-hooks
7484 echo "INDEX.c = 0" >> Make-hooks
7486 for lang in $serialization_languages
7488 test $lang = c && continue
7489 echo "$lang.prev = \$(if \$(word $lang_cnt,\$(SERIAL_LIST)),\$(\$(word $lang_cnt,\$(SERIAL_LIST)).serial))" >> Make-hooks
7490 echo "INDEX.$lang = $lang_idx" >> Make-hooks
7491 lang_cnt=`expr $lang_cnt - 1`
7492 lang_idx=`expr $lang_idx + 1`
7496 # Option include files
7499 ${AWK} -f $srcdir/opt-include.awk $all_opt_files > option-includes.mk
7500 option_includes="option-includes.mk"
7501 AC_SUBST_FILE(option_includes)
7509 echo "dir ." > .gdbinit
7510 echo "dir ${srcdir}" >> .gdbinit
7511 if test x$gdb_needs_out_file_path = xyes
7513 echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
7515 if test "x$subdirs" != x; then
7518 echo "dir ${srcdir}/$s" >> .gdbinit
7521 echo "source ${srcdir}/gdbinit.in" >> .gdbinit
7522 echo "python import sys; sys.path.append('${srcdir}'); import gdbhooks" >> .gdbinit
7524 # Put a breakpoint on __asan_report_error to help with debugging buffer
7527 *-fsanitize=address*)
7528 echo "source ${srcdir}/gdbasan.in" >> .gdbinit
7532 gcc_tooldir='$(libsubdir)/$(libsubdir_to_prefix)$(target_noncanonical)'
7533 AC_SUBST(gcc_tooldir)
7536 # Find a directory in which to install a shared libgcc.
7538 AC_ARG_ENABLE(version-specific-runtime-libs,
7539 [AS_HELP_STRING([--enable-version-specific-runtime-libs],
7540 [specify that runtime libraries should be
7541 installed in a compiler-specific directory])])
7543 # Substitute configuration variables
7546 AC_SUBST(all_compilers)
7547 AC_SUBST(all_gtfiles)
7548 AC_SUBST(all_lang_configurefrags)
7549 AC_SUBST(all_lang_makefrags)
7550 AC_SUBST(all_languages)
7551 AC_SUBST(all_selected_languages)
7552 AC_SUBST(build_exeext)
7553 AC_SUBST(build_install_headers_dir)
7554 AC_SUBST(build_xm_file_list)
7555 AC_SUBST(build_xm_include_list)
7556 AC_SUBST(build_xm_defines)
7557 AC_SUBST(build_file_translate)
7558 AC_SUBST(check_languages)
7559 AC_SUBST(selftest_languages)
7560 AC_SUBST(cpp_install_dir)
7561 AC_SUBST(xmake_file)
7562 AC_SUBST(tmake_file)
7563 AC_SUBST(TM_ENDIAN_CONFIG)
7564 AC_SUBST(TM_MULTILIB_CONFIG)
7565 AC_SUBST(TM_MULTILIB_EXCEPTIONS_CONFIG)
7566 AC_SUBST(extra_gcc_objs)
7567 AC_SUBST(user_headers_inc_next_pre)
7568 AC_SUBST(user_headers_inc_next_post)
7569 AC_SUBST(extra_headers_list)
7570 AC_SUBST(extra_objs)
7571 AC_SUBST(extra_programs)
7572 AC_SUBST(float_h_file)
7573 AC_SUBST(gcc_config_arguments)
7574 AC_SUBST(gcc_gxx_include_dir)
7575 AC_SUBST(gcc_gxx_include_dir_add_sysroot)
7576 AC_SUBST(gcc_gxx_libcxx_include_dir)
7577 AC_SUBST(gcc_gxx_libcxx_include_dir_add_sysroot)
7578 AC_SUBST(host_exeext)
7579 AC_SUBST(host_xm_file_list)
7580 AC_SUBST(host_xm_include_list)
7581 AC_SUBST(host_xm_defines)
7582 AC_SUBST(out_host_hook_obj)
7584 AC_SUBST(lang_opt_files)
7585 AC_SUBST(lang_specs_files)
7586 AC_SUBST(lang_tree_files)
7587 AC_SUBST(local_prefix)
7589 AC_SUBST(objc_boehm_gc)
7591 AC_SUBST(out_object_file)
7592 AC_SUBST(common_out_file)
7593 AC_SUBST(common_out_object_file)
7594 AC_SUBST(tm_file_list)
7595 AC_SUBST(tm_include_list)
7596 AC_SUBST(tm_defines)
7597 AC_SUBST(tm_p_file_list)
7598 AC_SUBST(tm_p_include_list)
7599 AC_SUBST(tm_d_file_list)
7600 AC_SUBST(tm_d_include_list)
7601 AC_SUBST(tm_rust_file_list)
7602 AC_SUBST(tm_rust_include_list)
7603 AC_SUBST(xm_file_list)
7604 AC_SUBST(xm_include_list)
7605 AC_SUBST(xm_defines)
7606 AC_SUBST(use_gcc_stdint)
7607 AC_SUBST(c_target_objs)
7608 AC_SUBST(cxx_target_objs)
7609 AC_SUBST(fortran_target_objs)
7610 AC_SUBST(d_target_objs)
7611 AC_SUBST(rust_target_objs)
7612 AC_SUBST(target_cpu_default)
7614 AC_SUBST_FILE(language_hooks)
7617 if test x${build} = x${host} ; then
7618 if test x${host} = x${target} ; then
7619 echo "Links are now set up to build a native compiler for ${target}." 1>&2
7621 echo "Links are now set up to build a cross-compiler" 1>&2
7622 echo " from ${host} to ${target}." 1>&2
7625 if test x${host} = x${target} ; then
7626 echo "Links are now set up to build (on ${build}) a native compiler" 1>&2
7627 echo " for ${target}." 1>&2
7629 echo "Links are now set up to build (on ${build}) a cross-compiler" 1>&2
7630 echo " from ${host} to ${target}." 1>&2
7634 AC_ARG_VAR(GMPLIBS,[How to link GMP])
7635 AC_ARG_VAR(GMPINC,[How to find GMP include files])
7637 AC_ARG_VAR(ISLLIBS,[How to link isl])
7638 AC_ARG_VAR(ISLINC,[How to find isl include files])
7639 if test "x${ISLLIBS}" != "x" ; then
7640 AC_DEFINE(HAVE_isl, 1, [Define if isl is in use.])
7644 AC_SUBST(pluginlibs)
7645 AC_SUBST(enable_plugin)
7646 if test x"$enable_plugin" = x"yes"; then
7647 AC_DEFINE(ENABLE_PLUGIN, 1, [Define to enable plugin support.])
7651 # Enable --enable-host-shared
7652 AC_ARG_ENABLE(host-shared,
7653 [AS_HELP_STRING([--enable-host-shared],
7654 [build host code as shared libraries])])
7655 AC_SUBST(enable_host_shared)
7657 # Enable --enable-host-pie
7658 AC_ARG_ENABLE(host-pie,
7659 [AS_HELP_STRING([--enable-host-pie],
7660 [build host code as PIE])])
7661 AC_SUBST(enable_host_pie)
7663 AC_ARG_ENABLE(libgdiagnostics,
7664 [AS_HELP_STRING([--enable-libgdiagnostics],
7665 [build libgdiagnostics shared library])])
7666 AC_SUBST(enable_libgdiagnostics)
7668 if test "$enable_libgdiagnostics" = "yes"; then
7669 LIBGDIAGNOSTICS='libgdiagnostics sarif-replay'
7673 AC_SUBST(LIBGDIAGNOSTICS)
7676 # Enable --enable-host-bind-now
7677 AC_ARG_ENABLE(host-bind-now,
7678 [AS_HELP_STRING([--enable-host-bind-now],
7679 [link host code as BIND_NOW])])
7680 AC_SUBST(enable_host_bind_now)
7682 AC_ARG_ENABLE(libquadmath-support,
7683 [AS_HELP_STRING([--disable-libquadmath-support],
7684 [disable libquadmath support for Fortran])],
7685 ENABLE_LIBQUADMATH_SUPPORT=$enableval,
7686 ENABLE_LIBQUADMATH_SUPPORT=yes)
7687 if test "${ENABLE_LIBQUADMATH_SUPPORT}" != "no" ; then
7688 AC_DEFINE(ENABLE_LIBQUADMATH_SUPPORT, 1,
7689 [Define to 1 to enable libquadmath support])
7693 # Specify what hash style to use by default.
7694 AC_ARG_WITH([linker-hash-style],
7695 [AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
7696 [specify the linker hash style])],
7697 [case x"$withval" in
7699 LINKER_HASH_STYLE=sysv
7702 LINKER_HASH_STYLE=gnu
7705 LINKER_HASH_STYLE=both
7708 AC_MSG_ERROR([$withval is an invalid option to --with-linker-hash-style])
7711 [LINKER_HASH_STYLE=''])
7712 if test x"${LINKER_HASH_STYLE}" != x; then
7713 AC_DEFINE_UNQUOTED(LINKER_HASH_STYLE, "$LINKER_HASH_STYLE",
7714 [The linker hash style])
7717 # Specify what should be the default of -fdiagnostics-color option.
7718 AC_ARG_WITH([diagnostics-color],
7719 [AC_HELP_STRING([--with-diagnostics-color={never,auto,auto-if-env,always}],
7720 [specify the default of -fdiagnostics-color option
7721 auto-if-env stands for -fdiagnostics-color=auto if
7722 GCC_COLOR environment variable is present and
7723 -fdiagnostics-color=never otherwise])],
7724 [case x"$withval" in
7726 DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_NO
7729 DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO
7732 DIAGNOSTICS_COLOR_DEFAULT=-1
7735 DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_YES
7738 AC_MSG_ERROR([$withval is an invalid option to --with-diagnostics-color])
7741 [DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO])
7742 AC_DEFINE_UNQUOTED(DIAGNOSTICS_COLOR_DEFAULT, $DIAGNOSTICS_COLOR_DEFAULT,
7743 [The default for -fdiagnostics-color option])
7745 # Specify what should be the default of -fdiagnostics-urls option.
7746 AC_ARG_WITH([diagnostics-urls],
7747 [AC_HELP_STRING([--with-diagnostics-urls={never,auto,auto-if-env,always}],
7748 [specify the default of -fdiagnostics-urls option
7749 auto-if-env stands for -fdiagnostics-urls=auto if
7750 GCC_URLS or TERM_URLS environment variable is present and
7751 -fdiagnostics-urls=never otherwise])],
7752 [case x"$withval" in
7754 DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_NO
7757 DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_AUTO
7760 DIAGNOSTICS_URLS_DEFAULT=-1
7763 DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_YES
7766 AC_MSG_ERROR([$withval is an invalid option to --with-diagnostics-urls])
7769 [DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_AUTO])
7770 AC_DEFINE_UNQUOTED(DIAGNOSTICS_URLS_DEFAULT, $DIAGNOSTICS_URLS_DEFAULT,
7771 [The default for -fdiagnostics-urls option])
7773 # Generate gcc-driver-name.h containing GCC_DRIVER_NAME for the benefit
7774 # of jit/jit-playback.cc.
7775 gcc_driver_version=`eval "${get_gcc_base_ver} $srcdir/BASE-VER"`
7776 echo "gcc_driver_version: ${gcc_driver_version}"
7777 cat > gcc-driver-name.h <<EOF
7778 #define GCC_DRIVER_NAME "${target_noncanonical}-gcc-${gcc_driver_version}${exeext}"
7781 # Check whether --enable-versioned-jit was given.
7782 AC_ARG_ENABLE(versioned-jit,
7783 [AS_HELP_STRING([--enable-versioned-jit],
7784 [enable versioned libgccjit build])],
7785 enable_versioned_jit=$enableval,
7786 enable_versioned_jit=no)
7787 if test x$enable_versioned_jit = xyes ; then
7788 libgccjit_version=$gcc_driver_version
7789 elif test x$enable_versioned_jit = xno ; then
7792 AC_MSG_ERROR(bad value ${enableval} given for --enable-versioned-jit option)
7794 AC_SUBST([libgccjit_version])
7796 # Check whether --enable-default-pie was given.
7797 AC_ARG_ENABLE(default-pie,
7798 [AS_HELP_STRING([--enable-default-pie],
7799 [enable Position Independent Executable as default])],
7800 enable_default_pie=$enableval,
7801 enable_default_pie=no)
7802 if test x$enable_default_pie = xyes ; then
7803 AC_DEFINE(ENABLE_DEFAULT_PIE, 1,
7804 [Define if your target supports default PIE and it is enabled.])
7806 AC_SUBST([enable_default_pie])
7808 # Check if -fno-PIE works.
7809 AC_CACHE_CHECK([for -fno-PIE option],
7811 [saved_CXXFLAGS="$CXXFLAGS"
7812 CXXFLAGS="$CXXFLAGS -fno-PIE"
7813 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
7814 [gcc_cv_c_no_fpie=yes],
7815 [gcc_cv_c_no_fpie=no])
7816 CXXFLAGS="$saved_CXXFLAGS"])
7818 # Check if -no-pie works.
7819 AC_CACHE_CHECK([for -no-pie option],
7821 [saved_LDFLAGS="$LDFLAGS"
7822 LDFLAGS="$LDFLAGS -no-pie"
7823 AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
7824 [gcc_cv_no_pie=yes],
7826 LDFLAGS="$saved_LDFLAGS"])
7828 if test x$enable_host_shared = xyes; then
7830 elif test x$enable_host_pie = xyes; then
7832 elif test x$gcc_cv_c_no_fpie = xyes; then
7840 if test x$enable_host_pie = xyes; then
7842 elif test x$gcc_cv_no_pie = xyes; then
7848 if test x$enable_host_bind_now = xyes; then
7849 LD_PICFLAG="$LD_PICFLAG -Wl,-z,now"
7852 AC_SUBST([LD_PICFLAG])
7854 # Enable Intel CET on Intel CET enabled host if jit is enabled.
7855 GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
7856 case x$enable_languages in
7863 AC_SUBST(CET_HOST_FLAGS)
7865 # Check linker supports '-z bndplt'
7866 ld_bndplt_support=no
7867 AC_MSG_CHECKING(linker -z bndplt option)
7868 if test x"$ld_is_gold" = xno; then
7869 if test $in_tree_ld = yes ; then
7870 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
7871 ld_bndplt_support=yes
7873 elif test x$gcc_cv_ld != x; then
7874 # Check if linker supports -z bndplt option
7875 if $gcc_cv_ld --help 2>&1 | grep -- '-z bndplt' > /dev/null; then
7876 ld_bndplt_support=yes
7880 if test x"$ld_bndplt_support" = xyes; then
7881 AC_DEFINE(HAVE_LD_BNDPLT_SUPPORT, 1,
7882 [Define if your linker supports -z bndplt])
7884 AC_MSG_RESULT($ld_bndplt_support)
7886 # Check linker supports '--push-state'/'--pop-state'
7887 ld_pushpopstate_support=no
7888 AC_MSG_CHECKING(linker --push-state/--pop-state options)
7889 if test x"$ld_is_gold" = xno; then
7890 if test $in_tree_ld = yes ; then
7891 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
7892 ld_pushpopstate_support=yes
7894 elif test x$gcc_cv_ld != x; then
7895 # Check if linker supports --push-state/--pop-state options
7896 if $gcc_cv_ld --help 2>&1 | grep -- '--push-state' > /dev/null; then
7897 ld_pushpopstate_support=yes
7901 if test x"$ld_pushpopstate_support" = xyes; then
7902 AC_DEFINE(HAVE_LD_PUSHPOPSTATE_SUPPORT, 1,
7903 [Define if your linker supports --push-state/--pop-state])
7905 AC_MSG_RESULT($ld_pushpopstate_support)
7907 # On s390, float_t has historically been statically defined as double for no
7908 # good reason. To comply with the C standard in the light of this definition,
7909 # gcc has evaluated float expressions in double precision when in
7910 # standards-compatible mode or when given -fexcess-precision=standard. To enable
7911 # a smooth transition towards the new model used by most architectures, where
7912 # gcc describes its behavior via the macro __FLT_EVAL_METHOD__ and glibc derives
7913 # float_t from that, this behavior can be configured with
7914 # --enable-s390-excess-float-precision. When given as enabled, that flag selects
7915 # the old model. When omitted, native builds and cross compiles that have target
7916 # libc headers will detect whether libc clamps float_t to double and in that
7917 # case maintain the old model. Otherwise, they will default to the new model.
7918 AC_ARG_ENABLE(s390-excess-float-precision,
7919 [AS_HELP_STRING([--enable-s390-excess-float-precision],
7920 [on s390 targets, evaluate float with double precision
7921 when in standards-conforming mode])],
7922 [],[enable_s390_excess_float_precision=auto])
7926 if test x"$enable_s390_excess_float_precision" = xauto; then
7927 # Can we autodetect the behavior of the target libc?
7928 if test "$target" = "$host" -a "$host" = "$build"; then
7929 enable_s390_excess_float_precision=autodetect
7930 elif test "x$with_headers" != xno; then
7931 # cross build. are target headers available?
7932 # carefully coerce the build-system compiler to use target headers
7933 saved_CXXFLAGS="$CXXFLAGS"
7934 fixed_XGCC_FLAGS_FOR_TARGET=`echo "$XGCC_FLAGS_FOR_TARGET" | sed 's/-B/-idirafter/g'`
7935 CROSS_TEST_CXXFLAGS="-nostdinc $fixed_XGCC_FLAGS_FOR_TARGET"
7936 CXXFLAGS="$CROSS_TEST_CXXFLAGS"
7937 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7939 ]])], [enable_s390_excess_float_precision=autodetect], [])
7940 CXXFLAGS="$saved_CXXFLAGS"
7943 if test x"$enable_s390_excess_float_precision" = xautodetect; then
7944 saved_CXXFLAGS="$CXXFLAGS"
7945 if ! test "$target" = "$host" -a "$host" = "$build"; then
7946 CXXFLAGS="$CROSS_TEST_CXXFLAGS"
7947 unset CROSS_TEST_CXXFLAGS
7949 AC_CACHE_CHECK([for glibc clamping float_t to double],
7950 gcc_cv_float_t_clamped_to_double, [
7951 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7952 #define __FLT_EVAL_METHOD__ 0
7954 int dummy[sizeof(float_t) == sizeof(double) ? 1 : -1];
7956 [gcc_cv_float_t_clamped_to_double=yes],
7957 [gcc_cv_float_t_clamped_to_double=no])])
7958 CXXFLAGS="$saved_CXXFLAGS"
7959 enable_s390_excess_float_precision="$gcc_cv_float_t_clamped_to_double"
7961 # no way to detect behavior of target libc, default to new model
7962 enable_s390_excess_float_precision=no
7966 GCC_TARGET_TEMPLATE(ENABLE_S390_EXCESS_FLOAT_PRECISION)
7967 if test x"$enable_s390_excess_float_precision" = xyes; then
7968 AC_DEFINE(ENABLE_S390_EXCESS_FLOAT_PRECISION, 1,
7969 [Define to enable evaluating float expressions with double precision in
7970 standards-compatible mode on s390 targets.])
7975 # Check if the linker supports '-z now'
7977 AC_MSG_CHECKING(linker -z now option)
7978 if test x"$ld_is_gold" = xyes; then
7980 elif test $in_tree_ld = yes ; then
7981 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then
7984 elif test x$gcc_cv_ld != x; then
7985 # Check if linker supports -z now
7986 if $gcc_cv_ld --help 2>&1 | grep -- '-z now' > /dev/null; then
7990 AC_DEFINE_UNQUOTED(HAVE_LD_NOW_SUPPORT,
7991 [`if test x"$ld_now_support" = xyes; then echo 1; else echo 0; fi`],
7992 [Define 0/1 if your linker supports -z now])
7993 AC_MSG_RESULT($ld_now_support)
7995 # Check if the linker supports '-z relro'
7997 AC_MSG_CHECKING(linker -z relro option)
7998 if test x"$ld_is_gold" = xyes; then
7999 ld_relro_support=yes
8000 elif test $in_tree_ld = yes ; then
8001 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 15 -o "$gcc_cv_gld_major_version" -gt 2; then
8002 ld_relro_support=yes
8004 elif test x$gcc_cv_ld != x; then
8005 # Check if linker supports -z relro
8006 if $gcc_cv_ld --help 2>&1 | grep -- '-z relro' > /dev/null; then
8007 ld_relro_support=yes
8010 AC_DEFINE_UNQUOTED(HAVE_LD_RELRO_SUPPORT,
8011 [`if test x"$ld_relro_support" = xyes; then echo 1; else echo 0; fi`],
8012 [Define 0/1 if your linker supports -z relro])
8013 AC_MSG_RESULT($ld_relro_support)
8017 # -fhardened is only supported on GNU/Linux.
8018 fhardened_support=yes
8021 fhardened_support=no
8025 AC_DEFINE_UNQUOTED(HAVE_FHARDENED_SUPPORT,
8026 [`if test x"$fhardened_support" = xyes; then echo 1; else echo 0; fi`],
8027 [Define 0/1 if -fhardened is supported])
8028 AC_MSG_RESULT($fhardened_support)
8030 # Configure the subdirectories
8031 # AC_CONFIG_SUBDIRS($subdirs)
8033 # Create the Makefile
8034 # and configure language subdirectories
8035 AC_CONFIG_FILES($all_outputs)
8037 AC_CONFIG_COMMANDS([default],
8039 case ${CONFIG_HEADERS} in
8040 *auto-host.h:config.in*)
8043 # Make sure all the subdirs exist.
8044 for d in $subdirs doc build common c-family
8046 test -d $d || mkdir $d
8049 [subdirs='$subdirs'])