Skip -fwhole-program when merging LTO options.
[official-gcc.git] / gcc / configure.ac
blobb91f54ce05bcd363416c34c3a901c94148b68b1b
1 # configure.ac for GCC
2 # Process this file with autoconf to generate a configuration script.
4 # Copyright (C) 1997-2022 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
11 #version.
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
16 #for more details.
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 # --------------------------------
26 AC_INIT
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
34 AC_CANONICAL_BUILD
35 AC_CANONICAL_HOST
36 AC_CANONICAL_TARGET
38 # Determine the noncanonical host name, for Ada.
39 ACX_NONCANONICAL_HOST
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}
46 accel_dir_suffix=
48 # Determine the target- and build-specific subdirectories
49 GCC_TOPLEV_SUBDIRS
51 # Set program_transform_name
52 AC_ARG_PROGRAM
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
58 # is true:
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)
63 changequote(,)dnl
64 case ${LIBRARY_PATH} in
65   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
66     library_path_setting="contains current directory"
67     ;;
68   *)
69     library_path_setting="ok"
70     ;;
71 esac
72 changequote([,])dnl
73 AC_MSG_RESULT($library_path_setting)
74 if test "$library_path_setting" != "ok"; then
75 AC_MSG_ERROR([
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
84 # is true:
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)
89 changequote(,)dnl
90 case ${GCC_EXEC_PREFIX} in
91   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
92     gcc_exec_prefix_setting="contains current directory"
93     ;;
94   *)
95     gcc_exec_prefix_setting="ok"
96     ;;
97 esac
98 changequote([,])dnl
99 AC_MSG_RESULT($gcc_exec_prefix_setting)
100 if test "$gcc_exec_prefix_setting" != "ok"; then
101 AC_MSG_ERROR([
102 *** GCC_EXEC_PREFIX shouldn't contain the current directory when
103 *** building gcc. Please change the environment variable
104 *** and run configure again.])
107 # -----------
108 # Directories
109 # -----------
111 # Specify the local prefix
112 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) ;;
118 no)     ;;
119 *)      local_prefix=$with_local_prefix ;;
120 esac])
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]) ;;
136  esac
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"
145    fi],
146   [SYSROOT_CFLAGS_FOR_TARGET=])
147 AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
149 if test "x$prefix" = xNONE; then
150  test_prefix=/usr/local
151 else
152  test_prefix=$prefix
154 if test "x$exec_prefix" = xNONE; then
155  test_exec_prefix=$test_prefix
156 else
157  test_exec_prefix=$exec_prefix
160 AC_ARG_WITH(sysroot,
161 [AS_HELP_STRING([[--with-sysroot[=DIR]]],
162                 [search for usr/lib, usr/include, et al, within DIR])],
164  case ${with_sysroot} in
165  /) ;;
166  */) with_sysroot=`echo $with_sysroot | sed 's,/$,,'` ;;
167  esac
168  case ${with_sysroot} in
169  yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
170  *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
171  esac
172    
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)'
175         
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"
183    ;;
184  esac
185 ], [
186  TARGET_SYSTEM_ROOT=
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.
197 gcc_gxx_include_dir=
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) ;;
204 no)     ;;
205 *)      gcc_gxx_include_dir=$with_gxx_include_dir ;;
206 esac])
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++'
217   else
218     libstdcxx_incdir='include/c++/$(version)'
219     if test x$host != x$target; then
220        libstdcxx_incdir="$target_alias/$libstdcxx_incdir"
221     fi
222     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
223   fi
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
229   fi
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 no)     ;;
241 *)      gcc_gxx_libcxx_include_dir=$with_gxx_libcxx_include_dir ;;
242 esac])
244 # If both --with-sysroot and --with-gxx-libcxx-include-dir are passed, we
245 # check to see if the latter starts with the former and, upon success, compute
246 # gcc_gxx_libcxx_include_dir as relative to the sysroot.
247 gcc_gxx_libcxx_include_dir_add_sysroot=0
249 if test x${gcc_gxx_libcxx_include_dir} != x; then
250   AC_DEFINE(ENABLE_STDLIB_OPTION, 1,
251             [Define if the -stdlib= option should be enabled.])
252 else
253   AC_DEFINE(ENABLE_STDLIB_OPTION, 0)
255 # ??? This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
256 if test x${gcc_gxx_libcxx_include_dir} = x; then
257   if test x${enable_version_specific_runtime_libs} = xyes; then
258     gcc_gxx_libcxx_include_dir='${libsubdir}/libc++_include/c++/v1'
259   else
260     libcxx_incdir='libc++_include/c++/$(version)/v1'
261     if test x$host != x$target; then
262        libcxx_incdir="$target_alias/$libcxx_incdir"
263     fi
264     gcc_gxx_libcxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libcxx_incdir"
265   fi
266 elif test "${with_sysroot+set}" = set; then
267   gcc_gxx_libcxx_without_sysroot=`expr "${gcc_gxx_libcxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
268   if test "${gcc_gxx_libcxx_without_sysroot}"; then
269     gcc_gxx_libcxx_include_dir="${gcc_gxx_libcxx_without_sysroot}"
270     gcc_gxx_libcxx_include_dir_add_sysroot=1
271   fi
274 AC_ARG_WITH(cpp_install_dir,
275 [AC_HELP_STRING([--with-cpp-install-dir=DIR],
276                 [install the user visible C preprocessor in DIR
277                  (relative to PREFIX) as well as PREFIX/bin])],
278 [if test x$withval = xyes; then
279   AC_MSG_ERROR([option --with-cpp-install-dir requires an argument])
280 elif test x$withval != xno; then
281   cpp_install_dir=$withval
282 fi])
284 # We would like to our source tree to be readonly.  However when releases or
285 # pre-releases are generated, the flex/bison generated files as well as the 
286 # various formats of manuals need to be included along with the rest of the
287 # sources.  Therefore we have --enable-generated-files-in-srcdir to do 
288 # just that.
290 AC_MSG_CHECKING([whether to place generated files in the source directory])
291   dnl generated-files-in-srcdir is disabled by default
292   AC_ARG_ENABLE(generated-files-in-srcdir, 
293     [AS_HELP_STRING([--enable-generated-files-in-srcdir],
294                     [put copies of generated files in source dir
295                      intended for creating source tarballs for users
296                      without texinfo bison or flex])],
297       generated_files_in_srcdir=$enableval,
298       generated_files_in_srcdir=no)
300 AC_MSG_RESULT($generated_files_in_srcdir)
302 if test "$generated_files_in_srcdir" = "yes"; then
303   GENINSRC=''
304 else
305   GENINSRC='#'
307 AC_SUBST(GENINSRC)
309 # -------------------
310 # Find default linker
311 # -------------------
313 # With GNU ld
314 AC_ARG_WITH(gnu-ld,
315 [AS_HELP_STRING([--with-gnu-ld], [arrange to work with GNU ld])],
316 gnu_ld_flag="$with_gnu_ld",
317 gnu_ld_flag=no)
319 case $target in
320     *darwin*)
321         ld64_flag=yes # Darwin can only use a ld64-compatible linker.
322         dsymutil_flag=yes # Darwin uses dsymutil to link debug.
323         ;;
324     *)
325         ld64_flag=no
326         dsymutil_flag=no
327         ;;
328 esac
330 # With pre-defined ld
331 AC_ARG_WITH(ld,
332 [AS_HELP_STRING([--with-ld], [arrange to use the specified ld (full pathname)])],
333 DEFAULT_LINKER="$with_ld")
334 if test x"${DEFAULT_LINKER+set}" = x"set"; then
335   if test ! -x "$DEFAULT_LINKER"; then
336     AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
337   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
338     gnu_ld_flag=yes
339   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then
340     ld64_flag=yes
341   fi
342   AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
343         [Define to enable the use of a default linker.])
346 AC_MSG_CHECKING([whether a default linker was specified])
347 if test x"${DEFAULT_LINKER+set}" = x"set"; then
348   if test x"$gnu_ld_flag" = x"no"; then
349     AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
350   else
351     AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
352   fi
353 else
354   AC_MSG_RESULT(no)
357 # With demangler in GNU ld
358 AC_ARG_WITH(demangler-in-ld,
359 [AS_HELP_STRING([--with-demangler-in-ld], [try to use demangler in GNU ld])],
360 demangler_in_ld="$with_demangler_in_ld",
361 demangler_in_ld=yes)
363 # Allow the user to specify a dsymutil executable (used on Darwin only, so far)
364 AC_ARG_WITH(dsymutil,
365 [AS_HELP_STRING([--with-dsymutil], [arrange to use the specified dsymutil (full pathname)])],
366 DEFAULT_DSYMUTIL="$with_dsymutil")
368 dsymutil_vers=
369 if test x"${DEFAULT_DSYMUTIL+set}" = x"set"; then
370   if test ! -x "$DEFAULT_DSYMUTIL"; then
371     AC_MSG_ERROR([cannot execute: $DEFAULT_DSYMUTIL: check --with-dsymutil or env. var. DEFAULT_DSYMUTIL])
372   else
373     if dsymutil_vers=`$DEFAULT_DSYMUTIL -v /dev/null 2>&1`; then
374       dsymutil_flag=yes
375     fi
376   fi
377   AC_DEFINE_UNQUOTED(DEFAULT_DSYMUTIL,"$DEFAULT_DSYMUTIL",
378         [Define to enable the use of a default debug linker.])
381 AC_MSG_CHECKING([whether a default dsymutil was specified])
382 if test x"${DEFAULT_DSYMUTIL+set}" = x"set"; then
383   AC_MSG_RESULT([yes ($DEFAULT_DSYMUTIL)])
384 else
385   AC_MSG_RESULT(no)
388 # ----------------------
389 # Find default assembler
390 # ----------------------
392 # With GNU as
393 AC_ARG_WITH(gnu-as,
394 [AS_HELP_STRING([--with-gnu-as], [arrange to work with GNU as])],
395 gas_flag="$with_gnu_as",
396 gas_flag=no)
398 AC_ARG_WITH(as,
399 [AS_HELP_STRING([--with-as], [arrange to use the specified as (full pathname)])],
400 DEFAULT_ASSEMBLER="$with_as")
401 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
402   if test ! -x "$DEFAULT_ASSEMBLER"; then
403     AC_MSG_ERROR([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
404   elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
405     gas_flag=yes
406   fi
407   AC_DEFINE_UNQUOTED(DEFAULT_ASSEMBLER,"$DEFAULT_ASSEMBLER",
408         [Define to enable the use of a default assembler.])
411 AC_MSG_CHECKING([whether a default assembler was specified])
412 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
413   if test x"$gas_flag" = x"no"; then
414     AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
415   else
416     AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
417   fi
418 else
419   AC_MSG_RESULT(no)
422 # ---------------
423 # Find C compiler
424 # ---------------
426 # If a non-executable a.out is present (e.g. created by GNU as above even if
427 # invoked with -v only), the IRIX 6 native ld just overwrites the existing
428 # file, even when creating an executable, so an execution test fails.
429 # Remove possible default executable files to avoid this.
431 # FIXME: This really belongs into AC_PROG_CC and can be removed once
432 # Autoconf includes it.
433 rm -f a.out a.exe b.out
435 # Find the native compiler
436 AC_PROG_CC
437 AC_PROG_CXX
438 ACX_PROG_GNAT([-I"$srcdir"/ada/libgnat])
439 ACX_PROG_GDC([-I"$srcdir"/d])
441 # Do configure tests with the C++ compiler, since that's what we build with.
442 AC_LANG(C++)
444 # Remove the -O2: for historical reasons, unless bootstrapping we prefer
445 # optimizations to be activated explicitly by the toplevel.
446 case "$CC" in
447   */prev-gcc/xgcc*) ;;
448   *) CFLAGS=`echo "$CFLAGS " | sed -e "s/-Ofast[[       ]]//" -e "s/-O[[gs]][[  ]]//" -e "s/-O[[0-9]]*[[        ]]//" `
449      CXXFLAGS=`echo "$CXXFLAGS " | sed -e "s/-Ofast[[   ]]//" -e "s/-O[[gs]][[  ]]//" -e "s/-O[[0-9]]*[[        ]]//" ` ;;
450 esac
451 AC_SUBST(CFLAGS)
452 AC_SUBST(CXXFLAGS)
453 AC_SUBST(GDCFLAGS)
455 # Determine PICFLAG for target gnatlib.
456 GCC_PICFLAG_FOR_TARGET
457 AC_SUBST(PICFLAG_FOR_TARGET)
459 # -------------------------
460 # Check C compiler features
461 # -------------------------
463 AC_USE_SYSTEM_EXTENSIONS
465 AC_PROG_CPP
466 AC_C_INLINE
468 AC_SYS_LARGEFILE
469 AC_CHECK_SIZEOF(ino_t)
470 AC_CHECK_SIZEOF(dev_t)
472 # Select the right stat being able to handle 64bit inodes, if needed.
473 if test "$enable_largefile" != no; then
474   case "$host, $build" in
475     *-*-aix*,*|*,*-*-aix*)
476       if test "$ac_cv_sizeof_ino_t" == "4" -a "$ac_cv_sizeof_dev_t" == 4; then
477         AC_DEFINE(HOST_STAT_FOR_64BIT_INODES, stat64x,
478           [Define which stat syscall is able to handle 64bit indodes.])
479       fi;;
480   esac
484 # sizeof(char) is 1 by definition.
485 AC_CHECK_SIZEOF(void *)
486 AC_CHECK_SIZEOF(short)
487 AC_CHECK_SIZEOF(int)
488 AC_CHECK_SIZEOF(long)
489 AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
490 GCC_STDINT_TYPES
491 if test x"$ac_cv_c_uint64_t" = x"no" -o x"$ac_cv_c_int64_t" = x"no"; then
492   AC_MSG_ERROR([uint64_t or int64_t not found])
495 # check what underlying integer type int64_t uses
496 AC_CACHE_CHECK(for int64_t underlying type, ac_cv_int64_t_type, [
497 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
498 #ifdef HAVE_STDINT_H
499 #include <stdint.h>
500 #endif
501 template <typename T> struct X { };
502 template <>
503 struct X<long> { typedef long t; };
504 ]], [[X<int64_t>::t x;]])],[ac_cv_int64_t_type=long],[ac_cv_int64_t_type="long long"])])
505 if test "$ac_cv_int64_t_type" = "long"; then
506   AC_DEFINE(INT64_T_IS_LONG, 1,
507   [Define if int64_t uses long as underlying type.])
508 else
509 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
510 #ifdef HAVE_STDINT_H
511 #include <stdint.h>
512 #endif
513 template <typename T> struct X { };
514 template <>
515 struct X<long long> { typedef long long t; };
516 ]], [[X<int64_t>::t x;]])],[],[AC_MSG_ERROR([error verifying int64_t uses long long])])
519 AC_CACHE_CHECK(for std::swap in <utility>, ac_cv_std_swap_in_utility, [
520 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
521 #include <utility>
522 ]], [[int a, b; std::swap(a,b);]])],[ac_cv_std_swap_in_utility=yes],[ac_cv_std_swap_in_utility=no])])
523 if test $ac_cv_std_swap_in_utility = yes; then
524   AC_DEFINE(HAVE_SWAP_IN_UTILITY, 1,
525   [Define if <utility> defines std::swap.])
528 # Check whether compiler is affected by placement new aliasing bug (PR 29286).
529 # If the host compiler is affected by the bug, and we build with optimization
530 # enabled (which happens e.g. when cross-compiling), the pool allocator may
531 # get miscompiled.  Use -fno-strict-aliasing to work around this problem.
532 # Since there is no reliable feature check for the presence of this bug,
533 # we simply use a GCC version number check.  (This should never trigger for
534 # stages 2 or 3 of a native bootstrap.)
535 aliasing_flags=
536 if test "$GCC" = yes; then
537   saved_CXXFLAGS="$CXXFLAGS"
539   # The following test compilation will succeed if and only if $CXX accepts
540   # -fno-strict-aliasing *and* is older than GCC 4.3.
541   CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
542   AC_MSG_CHECKING([whether $CXX is affected by placement new aliasing bug])
543   AC_COMPILE_IFELSE([AC_LANG_SOURCE([
544 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
545 #error compiler not affected by placement new aliasing bug
546 #endif
547 ])],
548     [AC_MSG_RESULT([yes]); aliasing_flags='-fno-strict-aliasing'],
549     [AC_MSG_RESULT([no])])
551   CXXFLAGS="$saved_CXXFLAGS"
553 AC_SUBST(aliasing_flags)
557 # ---------------------
558 # Warnings and checking
559 # ---------------------
561 # Check $CC warning features (if it's GCC).
562 # We want to use -pedantic, but we don't want warnings about
563 # * 'long long'
564 # * variadic macros
565 # * overlong strings
566 # * C++11 narrowing conversions in { }
567 # So, we only use -pedantic if we can disable those warnings.
569 # In stage 1, disable -Wformat warnings from old GCCs about new % codes
570 AC_ARG_ENABLE(build-format-warnings,
571   AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
572   [],[enable_build_format_warnings=yes])
573 AS_IF([test $enable_build_format_warnings = no],
574       [wf_opt=-Wno-format],[wf_opt=])
575 ACX_PROG_CXX_WARNING_OPTS(
576         m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
577                        [-Wcast-qual $wf_opt])),
578                        [loose_warn])
579 ACX_PROG_CC_WARNING_OPTS(
580         m4_quote(m4_do([-Wstrict-prototypes -Wmissing-prototypes ],
581                        [])), [c_loose_warn])
582 ACX_PROG_CXX_WARNING_OPTS(
583         m4_quote(m4_do([-Wmissing-format-attribute ], [-Wconditionally-supported ],
584                        [-Woverloaded-virtual])), [strict_warn])
585 ACX_PROG_CC_WARNING_OPTS(
586         m4_quote(m4_do([-Wold-style-definition -Wc++-compat])), [c_strict_warn])
587 ACX_PROG_CXX_WARNING_ALMOST_PEDANTIC(
588         m4_quote(m4_do([-Wno-long-long -Wno-variadic-macros ], 
589                        [-Wno-overlength-strings])), [strict_warn])
590 ACX_PROG_CXX_WARNINGS_ARE_ERRORS([manual], [strict_warn])
592 # The above macros do nothing if the compiler is not GCC.  However, the
593 # Makefile has more goo to add other flags, so these variables are used
594 # to enable warnings only for GCC.
595 warn_cflags=
596 warn_cxxflags=
597 if test "x$GCC" = "xyes"; then
598   warn_cflags='$(GCC_WARN_CFLAGS)'
599   warn_cxxflags='$(GCC_WARN_CXXFLAGS)'
601 AC_SUBST(warn_cflags)
602 AC_SUBST(warn_cxxflags)
604 # Disable exceptions and RTTI if building with g++
605 ACX_PROG_CC_WARNING_OPTS(
606         m4_quote(m4_do([-fno-exceptions -fno-rtti -fasynchronous-unwind-tables])),
607                        [noexception_flags])
608         
609 # Enable expensive internal checks
610 is_release=
611 if test x"`cat $srcdir/DEV-PHASE`" != xexperimental; then
612   is_release=yes
615 AC_ARG_ENABLE(checking,
616 [AS_HELP_STRING([[--enable-checking[=LIST]]],
617                 [enable expensive run-time checks.  With LIST,
618                  enable only specific categories of checks.
619                  Categories are: yes,no,all,none,release.
620                  Flags are: assert,df,extra,fold,gc,gcac,gimple,misc,
621                  rtlflag,rtl,runtime,tree,valgrind,types])],
622 [ac_checking_flags="${enableval}"],[
623 # Determine the default checks.
624 if test x$is_release = x ; then
625   ac_checking_flags=yes,extra
626 else
627   ac_checking_flags=release
628 fi])
629 IFS="${IFS=     }"; ac_save_IFS="$IFS"; IFS="$IFS,"
630 for check in release $ac_checking_flags
632         case $check in
633         # these set all the flags to specific states
634         yes)            ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking= ;
635                         ac_fold_checking= ; ac_gc_checking=1 ; ac_extra_checking= ;
636                         ac_gc_always_collect= ; ac_gimple_checking=1 ; ac_rtl_checking= ;
637                         ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
638                         ac_tree_checking=1 ; ac_valgrind_checking= ;
639                         ac_types_checking=1 ;;
640         no|none)        ac_assert_checking= ; ac_checking= ; ac_df_checking= ;
641                         ac_fold_checking= ; ac_gc_checking= ; ac_extra_checking= ;
642                         ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
643                         ac_rtlflag_checking= ; ac_runtime_checking= ;
644                         ac_tree_checking= ; ac_valgrind_checking= ;
645                         ac_types_checking= ;;
646         all)            ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking=1 ;
647                         ac_fold_checking=1 ; ac_gc_checking=1 ; ac_extra_checking=1 ;
648                         ac_gc_always_collect=1 ; ac_gimple_checking=1 ; ac_rtl_checking=1 ;
649                         ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
650                         ac_tree_checking=1 ; ac_valgrind_checking= ;
651                         ac_types_checking=1 ;;
652         release)        ac_assert_checking=1 ; ac_checking= ; ac_df_checking= ;
653                         ac_fold_checking= ; ac_gc_checking= ; ac_extra_checking= ;
654                         ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
655                         ac_rtlflag_checking= ; ac_runtime_checking=1 ;
656                         ac_tree_checking= ; ac_valgrind_checking= ;
657                         ac_types_checking= ;;
658         # these enable particular checks
659         assert)         ac_assert_checking=1 ;;
660         df)             ac_df_checking=1 ;;
661         extra)          ac_extra_checking=1 ;;
662         fold)           ac_fold_checking=1 ;;
663         gc)             ac_gc_checking=1 ;;
664         gcac)           ac_gc_always_collect=1 ;;
665         gimple)         ac_gimple_checking=1 ;;
666         misc)           ac_checking=1 ;;
667         rtl)            ac_rtl_checking=1 ;;
668         rtlflag)        ac_rtlflag_checking=1 ;;
669         runtime)        ac_runtime_checking=1 ;;
670         tree)           ac_tree_checking=1 ;;
671         types)          ac_types_checking=1 ;;
672         valgrind)       ac_valgrind_checking=1 ;;
673         *)      AC_MSG_ERROR(unknown check category $check) ;;
674         esac
675 done
676 IFS="$ac_save_IFS"
678 nocommon_flag=""
679 if test x$ac_checking != x ; then
680   AC_DEFINE(CHECKING_P, 1,
681 [Define to 0/1 if you want more run-time sanity checks.  This one gets a grab
682 bag of miscellaneous but relatively cheap checks.])
683   nocommon_flag=-fno-common
684 else
685   AC_DEFINE(CHECKING_P, 0)
687 AC_SUBST(nocommon_flag)
688 if test x$ac_extra_checking != x ; then
689   AC_DEFINE(ENABLE_EXTRA_CHECKING, 1,
690 [Define to 0/1 if you want extra run-time checking that might affect code
691 generation.])
692 else
693   AC_DEFINE(ENABLE_EXTRA_CHECKING, 0)
695 if test x$ac_df_checking != x ; then
696   AC_DEFINE(ENABLE_DF_CHECKING, 1,
697 [Define if you want more run-time sanity checks for dataflow.])
699 if test x$ac_assert_checking != x ; then
700   AC_DEFINE(ENABLE_ASSERT_CHECKING, 1,
701 [Define if you want assertions enabled.  This is a cheap check.])
703 if test x$ac_gimple_checking != x ; then
704   AC_DEFINE(ENABLE_GIMPLE_CHECKING, 1,
705 [Define if you want operations on GIMPLE (the basic data structure of
706 the high-level optimizers) to be checked for dynamic type safety at
707 runtime.  This is moderately expensive.])
709 GCC_TARGET_TEMPLATE(ENABLE_RUNTIME_CHECKING)
710 if test x$ac_runtime_checking != x ; then
711   AC_DEFINE(ENABLE_RUNTIME_CHECKING, 1,
712 [Define if you want runtime assertions enabled.  This is a cheap check.])
714 if test x$ac_tree_checking != x ; then
715   AC_DEFINE(ENABLE_TREE_CHECKING, 1,
716 [Define if you want all operations on trees (the basic data
717    structure of the front ends) to be checked for dynamic type safety
718    at runtime.  This is moderately expensive.
719    ])
720   TREECHECKING=yes
722 if test x$ac_types_checking != x ; then
723   AC_DEFINE(ENABLE_TYPES_CHECKING, 1,
724 [Define if you want all gimple types to be verified after gimplifiation.
725    This is cheap.
726    ])
728 AC_SUBST(TREECHECKING)
729 if test x$ac_rtl_checking != x ; then
730   AC_DEFINE(ENABLE_RTL_CHECKING, 1,
731 [Define if you want all operations on RTL (the basic data structure
732    of the optimizer and back end) to be checked for dynamic type safety
733    at runtime.  This is quite expensive.])
735 if test x$ac_rtlflag_checking != x ; then
736   AC_DEFINE(ENABLE_RTL_FLAG_CHECKING, 1,
737 [Define if you want RTL flag accesses to be checked against the RTL
738    codes that are supported for each access macro.  This is relatively
739    cheap.])
741 if test x$ac_gc_checking != x ; then
742   AC_DEFINE(ENABLE_GC_CHECKING, 1,
743 [Define if you want the garbage collector to do object poisoning and
744    other memory allocation checks.  This is quite expensive.])
746 if test x$ac_gc_always_collect != x ; then
747   AC_DEFINE(ENABLE_GC_ALWAYS_COLLECT, 1,
748 [Define if you want the garbage collector to operate in maximally
749    paranoid mode, validating the entire heap and collecting garbage at
750    every opportunity.  This is extremely expensive.])
752 if test x$ac_fold_checking != x ; then
753   AC_DEFINE(ENABLE_FOLD_CHECKING, 1,
754 [Define if you want fold checked that it never destructs its argument.
755    This is quite expensive.])
757 valgrind_path_defines=
758 valgrind_command=
760 dnl # This check AC_REQUIREs various stuff, so it *must not* be inside
761 dnl # an if statement.  This was the source of very frustrating bugs
762 dnl # in converting to autoconf 2.5x!
763 AC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
765 # It is certainly possible that there's valgrind but no valgrind.h.
766 # GCC relies on making annotations so we must have both.
767 AC_MSG_CHECKING(for VALGRIND_DISCARD in <valgrind/memcheck.h>)
768 AC_PREPROC_IFELSE([AC_LANG_SOURCE(
769   [[#include <valgrind/memcheck.h>
770 #ifndef VALGRIND_DISCARD
771 #error VALGRIND_DISCARD not defined
772 #endif]])],
773   [gcc_cv_header_valgrind_memcheck_h=yes],
774   [gcc_cv_header_valgrind_memcheck_h=no])
775 AC_MSG_RESULT($gcc_cv_header_valgrind_memcheck_h)
776 AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
777 AC_PREPROC_IFELSE([AC_LANG_SOURCE(
778   [[#include <memcheck.h>
779 #ifndef VALGRIND_DISCARD
780 #error VALGRIND_DISCARD not defined
781 #endif]])],
782   [gcc_cv_header_memcheck_h=yes],
783   [gcc_cv_header_memcheck_h=no])
784 AC_MSG_RESULT($gcc_cv_header_memcheck_h)
785 if test $gcc_cv_header_valgrind_memcheck_h = yes; then
786   AC_DEFINE(HAVE_VALGRIND_MEMCHECK_H, 1,
787         [Define if valgrind's valgrind/memcheck.h header is installed.])
789 if test $gcc_cv_header_memcheck_h = yes; then
790   AC_DEFINE(HAVE_MEMCHECK_H, 1,
791         [Define if valgrind's memcheck.h header is installed.])
794 if test x$ac_valgrind_checking != x ; then
795   AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
796         [$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
797   if test "x$valgrind_path" = "x" \
798     || (test $have_valgrind_h = no \
799         && test $gcc_cv_header_memcheck_h = no \
800         && test $gcc_cv_header_valgrind_memcheck_h = no); then
801         AC_MSG_ERROR([*** Can't find both valgrind and valgrind/memcheck.h, memcheck.h or valgrind.h])
802   fi
803   valgrind_path_defines=-DVALGRIND_PATH='\"'$valgrind_path'\"'
804   valgrind_command="$valgrind_path -q"
805   AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
806 [Define if you want to run subprograms and generated programs
807    through valgrind (a memory checker).  This is extremely expensive.])
809 AC_SUBST(valgrind_path_defines)
810 AC_SUBST(valgrind_command)
812 # Enable code coverage collection
813 AC_ARG_ENABLE(coverage,
814 [AS_HELP_STRING([[--enable-coverage[=LEVEL]]],
815                 [enable compiler's code coverage collection.
816                  Use to measure compiler performance and locate
817                  unused parts of the compiler. With LEVEL, specify
818                  optimization. Values are opt, noopt,
819                  default is noopt])],
820 [case "${enableval}" in
821   yes|noopt)
822     coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O0 -fkeep-static-functions"
823     ;;
824   opt)
825     coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O2 -fkeep-static-functions"
826     ;;
827   no)
828     # a.k.a. --disable-coverage
829     coverage_flags=""
830     ;;
831   *)
832     AC_MSG_ERROR(unknown coverage setting $enableval)
833     ;;
834 esac],
835 [coverage_flags=""])
836 AC_SUBST(coverage_flags)
838 AC_ARG_ENABLE(gather-detailed-mem-stats, 
839 [AS_HELP_STRING([--enable-gather-detailed-mem-stats],
840                 [enable detailed memory allocation stats gathering])], [],
841 [enable_gather_detailed_mem_stats=no])
842 gather_stats=`if test $enable_gather_detailed_mem_stats != no; then echo 1; else echo 0; fi`
843 AC_DEFINE_UNQUOTED(GATHER_STATISTICS, $gather_stats,
844 [Define to enable detailed memory allocation stats gathering.])
846 AC_ARG_ENABLE(valgrind-annotations,
847 [AS_HELP_STRING([--enable-valgrind-annotations],
848                 [enable valgrind runtime interaction])], [],
849 [enable_valgrind_annotations=no])
850 if test x$enable_valgrind_annotations != xno \
851     || test x$ac_valgrind_checking != x; then
852   if (test $have_valgrind_h = no \
853       && test $gcc_cv_header_memcheck_h = no \
854       && test $gcc_cv_header_valgrind_memcheck_h = no); then
855     AC_MSG_ERROR([*** Can't find valgrind/memcheck.h, memcheck.h or valgrind.h])
856   fi
857   AC_DEFINE(ENABLE_VALGRIND_ANNOTATIONS, 1,
858 [Define to get calls to the valgrind runtime enabled.])
861 # -------------------------------
862 # Miscenalleous configure options
863 # -------------------------------
865 # Determine whether or not multilibs are enabled.
866 AC_ARG_ENABLE(multilib,
867 [AS_HELP_STRING([--enable-multilib],
868                 [enable library support for multiple ABIs])],
869 [], [enable_multilib=yes])
870 AC_SUBST(enable_multilib)
872 # Determine whether or not multiarch is enabled.
873 AC_ARG_ENABLE(multiarch,
874 [AS_HELP_STRING([--enable-multiarch],
875                 [enable support for multiarch paths])],
876 [case "${enableval}" in
877 yes|no|auto) enable_multiarch=$enableval;;
878 *) AC_MSG_ERROR(bad value ${enableval} given for --enable-multiarch option) ;;
879 esac], [enable_multiarch=auto])
880 if test x${enable_multiarch} = xauto; then
881   if test x${with_native_system_header_dir} != x; then
882     ma_msg_suffix=", disabled auto check (configured with --native-system-header-dir)"
883     enable_multiarch=no
884   fi
885   if test x$host != x$target && test "x$with_sysroot" = x; then
886     ma_msg_suffix=", disabled auto check (cross build configured without --with-sysroot)"
887     enable_multiarch=no
888   fi
890 if test x${enable_multiarch} = xyes; then
891   AC_DEFINE(ENABLE_MULTIARCH, 1, [If --with-multiarch option is used])
893 AC_MSG_CHECKING(for multiarch configuration)
894 AC_SUBST(enable_multiarch)
895 AC_MSG_RESULT($enable_multiarch$ma_msg_suffix)
897 # needed for setting the multiarch name for soft-float/hard-float ABIs
898 AC_SUBST(with_cpu)
899 AC_SUBST(with_float)
901 # default stack clash protection guard size as power of twos in bytes.
902 # Please keep these in sync with params.def.
903 stk_clash_min=12
904 stk_clash_max=30
906 # Keep the default value when the option is not used to 0, this allows us to
907 # distinguish between the cases where the user specifially set a value via
908 # configure and when the normal default value is used.
909 AC_ARG_WITH(stack-clash-protection-guard-size,
910 [AS_HELP_STRING([--with-stack-clash-protection-guard-size=size],
911 [Set the default stack clash protection guard size for specific targets as a power of two in bytes.])],
912 [DEFAULT_STK_CLASH_GUARD_SIZE="$with_stack_clash_protection_guard_size"], [DEFAULT_STK_CLASH_GUARD_SIZE=0])
913 if test $DEFAULT_STK_CLASH_GUARD_SIZE -ne 0 \
914      && (test $DEFAULT_STK_CLASH_GUARD_SIZE -lt $stk_clash_min \
915          || test $DEFAULT_STK_CLASH_GUARD_SIZE -gt $stk_clash_max); then
916   AC_MSG_ERROR(m4_normalize([
917                 Invalid value $DEFAULT_STK_CLASH_GUARD_SIZE for --with-stack-clash-protection-guard-size. \
918                 Must be between $stk_clash_min and $stk_clash_max.]))
921 AC_DEFINE_UNQUOTED(DEFAULT_STK_CLASH_GUARD_SIZE, $DEFAULT_STK_CLASH_GUARD_SIZE,
922         [Define to larger than zero set the default stack clash protector size.])
924 # Enable __cxa_atexit for C++.
925 AC_ARG_ENABLE(__cxa_atexit,
926 [AS_HELP_STRING([--enable-__cxa_atexit], [enable __cxa_atexit for C++])],
927 [], [])
929 # Enable C extension for decimal float if target supports it.
930 GCC_AC_ENABLE_DECIMAL_FLOAT([$target])
932 dfp=`if test $enable_decimal_float != no; then echo 1; else echo 0; fi`
933 AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_FLOAT, $dfp,
934 [Define to 1 to enable decimal float extension to C.])
936 # Use default_decimal_float for dependency.
937 enable_decimal_float=$default_decimal_float
939 bid=`if test $enable_decimal_float = bid; then echo 1; else echo 0; fi`
940 AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_BID_FORMAT, $bid,
941 [Define to 1 to specify that we are using the BID decimal floating
942 point format instead of DPD])
944 # Enable C extension for fixed-point arithmetic.
945 AC_ARG_ENABLE(fixed-point,
946 [AS_HELP_STRING([--enable-fixed-point],
947                 [enable fixed-point arithmetic extension to C])],
950   case $target in
951     arm*)
952       enable_fixed_point=yes
953       ;;
955     mips*-*-*)
956       enable_fixed_point=yes
957       ;;
958     loongarch*-*-*)
959       enable_fixed_point=yes
960       ;;
961     *)
962       AC_MSG_WARN([fixed-point is not supported for this target, ignored])
963       enable_fixed_point=no
964       ;;
965   esac
967 AC_SUBST(enable_fixed_point)
969 fixedpoint=`if test $enable_fixed_point = yes; then echo 1; else echo 0; fi`
970 AC_DEFINE_UNQUOTED(ENABLE_FIXED_POINT, $fixedpoint,
971 [Define to 1 to enable fixed-point arithmetic extension to C.])
973 # Enable threads
974 # Pass with no value to take the default
975 # Pass with a value to specify a thread package
976 AC_ARG_ENABLE(threads,
977 [AS_HELP_STRING([[--enable-threads[=LIB]]],
978                 [enable thread usage for target GCC,
979                  using LIB thread package])],,
980 [enable_threads=''])
982 AC_ARG_ENABLE(tls,
983 [AS_HELP_STRING([--enable-tls],
984                 [enable or disable generation of tls code
985                  overriding the assembler check for tls support])],
987   case $enable_tls in
988     yes | no) ;;
989     *) AC_MSG_ERROR(['$enable_tls' is an invalid value for --enable-tls.
990 Valid choices are 'yes' and 'no'.]) ;;
991   esac
992 ], [enable_tls=''])
994 AC_ARG_ENABLE(vtable-verify,
995 [AS_HELP_STRING([--enable-vtable-verify],
996                 [enable vtable verification feature])],,
997 [enable_vtable_verify=no])
998 vtable_verify=`if test x$enable_vtable_verify = xyes; then echo 1; else echo 0; fi`
999 AC_DEFINE_UNQUOTED(ENABLE_VTABLE_VERIFY, $vtable_verify,
1000 [Define 0/1 if vtable verification feature is enabled.])
1002 AC_ARG_ENABLE(analyzer,
1003 [AS_HELP_STRING([--disable-analyzer],
1004                 [disable -fanalyzer static analyzer])],
1005 if test x$enable_analyzer = xno; then
1006         analyzer=0
1007 else
1008         analyzer=1
1010 analyzer=1)
1011 AC_DEFINE_UNQUOTED(ENABLE_ANALYZER, $analyzer,
1012 [Define 0/1 if static analyzer feature is enabled.])
1014 AC_ARG_ENABLE(objc-gc,
1015 [AS_HELP_STRING([--enable-objc-gc],
1016                 [enable the use of Boehm's garbage collector with
1017                  the GNU Objective-C runtime])],
1018 if test x$enable_objc_gc = xno; then
1019         objc_boehm_gc=''
1020 else
1021         objc_boehm_gc=1
1023 objc_boehm_gc='')
1025 AC_ARG_WITH(dwarf2,
1026 [AS_HELP_STRING([--with-dwarf2], [force the default debug format to be DWARF 2 (or later)])],
1027 dwarf2="$with_dwarf2",
1028 dwarf2=no)
1030 AC_ARG_ENABLE(shared,
1031 [AS_HELP_STRING([--disable-shared], [don't provide a shared libgcc])],
1033   case $enable_shared in
1034   yes | no) ;;
1035   *)
1036     enable_shared=no
1037     IFS="${IFS=         }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
1038     for pkg in $enableval; do
1039       if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
1040         enable_shared=yes
1041       fi
1042     done
1043     IFS="$ac_save_ifs"
1044     ;;
1045   esac
1046 ], [enable_shared=yes])
1047 AC_SUBST(enable_shared)
1049 AC_ARG_ENABLE(gcov,
1050 [  --disable-gcov          don't provide libgcov and related host tools],
1051 [], [case $target in
1052        bpf-*-*)
1053          enable_gcov=no
1054        ;;
1055        *)
1056          enable_gcov=yes
1057        ;;
1058      esac])
1060 AC_SUBST(enable_gcov)
1062 AC_ARG_WITH(specs,
1063   [AS_HELP_STRING([--with-specs=SPECS],
1064                   [add SPECS to driver command-line processing])],
1065   [CONFIGURE_SPECS=$withval],
1066   [CONFIGURE_SPECS=]
1068 AC_SUBST(CONFIGURE_SPECS)
1070 ACX_PKGVERSION([GCC])
1071 ACX_BUGURL([https://gcc.gnu.org/bugs/])
1073 # Allow overriding the default URL for documentation
1074 AC_ARG_WITH(documentation-root-url,
1075     AS_HELP_STRING([--with-documentation-root-url=URL],
1076                    [Root for documentation URLs]),
1077     [case "$withval" in
1078       yes) AC_MSG_ERROR([documentation root URL not specified]) ;;
1079       no)  AC_MSG_ERROR([documentation root URL not specified]) ;;
1080       */)  DOCUMENTATION_ROOT_URL="$withval" ;;
1081       *)   AC_MSG_ERROR([documentation root URL does not end with /]) ;;
1082      esac],
1083      DOCUMENTATION_ROOT_URL="https://gcc.gnu.org/onlinedocs/"
1085 AC_DEFINE_UNQUOTED(DOCUMENTATION_ROOT_URL,"$DOCUMENTATION_ROOT_URL",
1086         [Define to the root for documentation URLs.])
1088 # Allow overriding the default URL for GCC changes
1089 AC_ARG_WITH(changes-root-url,
1090     AS_HELP_STRING([--with-changes-root-url=URL],
1091                    [Root for GCC changes URLs]),
1092     [case "$withval" in
1093       yes) AC_MSG_ERROR([changes root URL not specified]) ;;
1094       no)  AC_MSG_ERROR([changes root URL not specified]) ;;
1095       */)  CHANGES_ROOT_URL="$withval" ;;
1096       *)   AC_MSG_ERROR([changes root URL does not end with /]) ;;
1097      esac],
1098      CHANGES_ROOT_URL="https://gcc.gnu.org/"
1100 AC_DEFINE_UNQUOTED(CHANGES_ROOT_URL,"$CHANGES_ROOT_URL",
1101         [Define to the root for URLs about GCC changes.])
1103 # Sanity check enable_languages in case someone does not run the toplevel
1104 # configure # script.
1105 AC_ARG_ENABLE(languages,
1106 [AS_HELP_STRING([--enable-languages=LIST], [specify which front-ends to build])],
1107 [case ,${enable_languages}, in
1108        ,,|,yes,)
1109                 # go safe -- we cannot be much sure without the toplevel
1110                 # configure's
1111                 # analysis of which target libs are present and usable
1112                 enable_languages=c
1113                 ;;
1114          *,all,*)
1115                 AC_MSG_ERROR([only the toplevel supports --enable-languages=all])
1116                 ;;
1117         *,c,*)
1118                 ;;
1119         *)
1120                 enable_languages=c,${enable_languages}
1121                 ;;
1122 esac],
1123 [enable_languages=c])
1125 # If top-level libada has been disabled, then wire in install-gnatlib
1126 # invocation with `make install', so that one can build and install
1127 # the library manually with `make -C gcc all gnatlib gnattools install'.
1128 if test x"$enable_libada" = xno; then
1129   gnat_install_lib=gnat-install-lib
1130 else
1131   gnat_install_lib=
1133 AC_SUBST(gnat_install_lib)
1135 if test x"$enable_as_accelerator_for" != x; then
1136   AC_DEFINE(ACCEL_COMPILER, 1,
1137     [Define if this compiler should be built as the offload target compiler.])
1138   enable_as_accelerator=yes
1139   sedscript="s#${target_noncanonical}#${enable_as_accelerator_for}-accel-${target_noncanonical}#"
1140   program_transform_name=`echo $program_transform_name | sed $sedscript`
1141   accel_dir_suffix=/accel/${target_noncanonical}
1142   real_target_noncanonical=${enable_as_accelerator_for}
1144 AC_SUBST(enable_as_accelerator)
1145 AC_SUBST(real_target_noncanonical)
1146 AC_SUBST(accel_dir_suffix)
1148 for tgt in `echo $enable_offload_targets | sed 's/,/ /g'`; do
1149   tgt=`echo $tgt | sed 's/=.*//'`
1151   enable_offloading=1
1152   case "$tgt" in
1153     amdgcn*)
1154         omp_device_property=omp-device-properties-gcn
1155         omp_device_property_tmake_file="${omp_device_property_tmake_file} \$(srcdir)/config/gcn/t-omp-device"
1156         ;;
1157     nvptx*)
1158         omp_device_property=omp-device-properties-nvptx
1159         omp_device_property_tmake_file="${omp_device_property_tmake_file} \$(srcdir)/config/nvptx/t-omp-device"
1160         ;;
1161     *)
1162         AC_MSG_ERROR([unknown offload target specified])
1163         ;;
1164   esac
1165   omp_device_properties="${omp_device_properties} ${tgt}=${omp_device_property}"
1166   omp_device_property_deps="${omp_device_property_deps} ${omp_device_property}"
1168   if test x"$offload_targets" = x; then
1169     offload_targets=$tgt
1170   else
1171     offload_targets="$offload_targets,$tgt"
1172   fi
1173 done
1174 AC_SUBST(omp_device_properties)
1175 AC_SUBST(omp_device_property_deps)
1177 AC_DEFINE_UNQUOTED(OFFLOAD_TARGETS, "$offload_targets",
1178   [Define to offload targets, separated by commas.])
1179 if test x"$enable_offloading" != x; then
1180   AC_DEFINE(ENABLE_OFFLOADING, 1,
1181     [Define this to enable support for offloading.])
1182 else
1183   AC_DEFINE(ENABLE_OFFLOADING, 0,
1184     [Define this to enable support for offloading.])
1187 if test "x$enable_offload_defaulted" = xyes; then
1188   AC_DEFINE(OFFLOAD_DEFAULTED, 1,
1189     [Define to 1 to if -foffload is defaulted])
1192 AC_ARG_WITH(multilib-list,
1193 [AS_HELP_STRING([--with-multilib-list], [select multilibs (AArch64, ARM, AVR, OR1K, RISC-V, SH and x86-64 only)])],
1195 with_multilib_list=default)
1197 AC_ARG_WITH(multilib-generator,
1198 [AS_HELP_STRING([--with-multilib-generator], [Multi-libs configuration string (RISC-V only)])],
1200 with_multilib_generator=default)
1202 # -------------------------
1203 # Checks for other programs
1204 # -------------------------
1206 AC_PROG_MAKE_SET
1208 # Find some useful tools
1209 AC_PROG_AWK
1210 # We need awk to create options.cc and options.h.
1211 # Bail out if it's missing.
1212 case ${AWK} in
1213   "") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
1214 esac
1216 gcc_AC_PROG_LN_S
1217 ACX_PROG_LN($LN_S)
1218 AC_PROG_RANLIB
1219 ranlib_flags=""
1220 AC_SUBST(ranlib_flags)
1221      
1222 gcc_AC_PROG_INSTALL
1224 # See if cmp has --ignore-initial.
1225 gcc_AC_PROG_CMP_IGNORE_INITIAL
1227 # See if we have the mktemp command.
1228 AC_CHECK_PROG(have_mktemp_command, mktemp, yes, no)
1230 # See if makeinfo has been installed and is modern enough
1231 # that we can use it.
1232 ACX_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
1233   [GNU texinfo.* \([0-9][0-9.]*\)],
1234   [4.[7-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
1235 if test $gcc_cv_prog_makeinfo_modern = no; then
1236   AC_MSG_WARN([
1237 *** Makeinfo is missing or too old.
1238 *** Info documentation will not be built.])
1239   BUILD_INFO=
1240 else
1241   BUILD_INFO=info
1243 AC_SUBST(BUILD_INFO)
1245 # Is pod2man recent enough to regenerate manpages?
1246 AC_MSG_CHECKING([for recent Pod::Man])
1247 if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
1248   AC_MSG_RESULT(yes)
1249   GENERATED_MANPAGES=generated-manpages
1250 else
1251   AC_MSG_RESULT(no)
1252   GENERATED_MANPAGES=
1254 AC_SUBST(GENERATED_MANPAGES)
1256 MISSING="${CONFIG_SHELL-/bin/sh} $ac_aux_dir/missing"
1258 # How about lex?
1259 dnl Don't use AC_PROG_LEX; we insist on flex.
1260 dnl LEXLIB is not useful in gcc.
1261 AC_CHECK_PROGS([FLEX], flex, [$MISSING flex])
1263 # Bison?
1264 AC_CHECK_PROGS([BISON], bison, [$MISSING bison])
1266 # Python3?
1267 ACX_CHECK_PROG_VER(PYTHON, python3, --version,
1268   [Python.* \([0-9][0-9.]*\)],
1269   [3.[4-9]*|3.[1-9][0-9]*|[4-9].*|[1-9][0-9]*])
1270 if test $gcc_cv_prog_python3_modern = no; then
1271   AC_MSG_WARN([
1272 *** Python3 is missing.
1273 *** Documentation for modula-2 will not include the target SYSTEM module.])
1274   HAVE_PYTHON=no
1275 else
1276   HAVE_PYTHON=yes
1278 AC_SUBST(HAVE_PYTHON)
1280 # Binutils are not build modules, unlike bison/flex/makeinfo.  So we
1281 # check for build == host before using them.
1283 # NM
1284 if test x${build} = x${host} && test -f $srcdir/../binutils/nm.c \
1285   && test -d ../binutils ; then
1286   NM='${objdir}/../binutils/nm-new'
1287 else
1288   AC_CHECK_PROG(NM, nm, nm, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing nm)
1291 # AR
1292 if test x${build} = x${host} && test -f $srcdir/../binutils/ar.c \
1293   && test -d ../binutils ; then
1294   AR='${objdir}/../binutils/ar'
1295 else
1296   AC_CHECK_PROG(AR, ar, ar, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing ar)
1299 # The jit documentation looks better if built with sphinx, but can be
1300 # built with texinfo if sphinx is not available.
1301 # Set "doc_build_sys" to "sphinx" or "texinfo" accordingly.
1302 AC_CHECK_PROG(doc_build_sys, sphinx-build, sphinx, texinfo)
1304 # --------------------
1305 # Checks for C headers
1306 # --------------------
1308 # Need to reject headers which give warnings, so that the -Werror bootstrap
1309 # works later. *sigh*  This needs to come before all header checks.
1310 AC_PROG_CPP_WERROR
1312 AC_HEADER_STDC
1313 AC_HEADER_TIME
1314 ACX_HEADER_STRING
1315 AC_HEADER_SYS_WAIT
1316 AC_HEADER_TIOCGWINSZ
1317 AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \
1318                  fcntl.h ftw.h unistd.h sys/auxv.h sys/file.h sys/time.h sys/mman.h \
1319                  sys/resource.h sys/param.h sys/times.h sys/stat.h sys/locking.h \
1320                  direct.h malloc.h langinfo.h ldfcn.h locale.h wchar.h)
1322 # Check for thread headers.
1323 AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
1324 AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
1326 # These tests can't be done till we know if we have limits.h.
1327 gcc_AC_C_CHAR_BIT
1328 AC_C_BIGENDIAN
1330 # ----------------------
1331 # Checks for C++ headers
1332 # ----------------------
1334 dnl Autoconf will give an error in the configure script if there is no
1335 dnl C++ preprocessor.  Hack to prevent that.
1336 m4_pushdef([AC_MSG_ERROR], m4_defn([AC_MSG_WARN]))[]dnl
1337 AC_PROG_CXXCPP
1338 m4_popdef([AC_MSG_ERROR])[]dnl
1340 AC_CHECK_HEADERS(unordered_map)
1341 AC_CHECK_HEADERS(tr1/unordered_map)
1342 AC_CHECK_HEADERS(ext/hash_map)
1344 # --------
1345 # Dependency checking.
1346 # --------
1348 ZW_CREATE_DEPDIR
1349 AC_CONFIG_COMMANDS([gccdepdir],[
1350   ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs build/$DEPDIR
1351   for lang in $subdirs c-family common analyzer rtl-ssa
1352   do
1353       ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR
1354   done], [subdirs="$subdirs" ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR])
1356 ZW_PROG_COMPILER_DEPENDENCIES([CXX])
1358 # --------
1359 # UNSORTED
1360 # --------
1363 # These libraries may be used by collect2.
1364 # We may need a special search path to get them linked.
1365 AC_CACHE_CHECK(for collect2 libraries, gcc_cv_collect2_libs,
1366 [save_LIBS="$LIBS"
1367 for libs in '' -lld -lmld \
1368                 '-L/usr/lib/cmplrs/cc2.11 -lmld' \
1369                 '-L/usr/lib/cmplrs/cc3.11 -lmld'
1371         LIBS="$libs"
1372         AC_TRY_LINK_FUNC(ldopen,
1373                 [gcc_cv_collect2_libs="$libs"; break])
1374 done
1375 LIBS="$save_LIBS"
1376 test -z "$gcc_cv_collect2_libs" && gcc_cv_collect2_libs='none required'])
1377 case $gcc_cv_collect2_libs in
1378         "none required")        ;;
1379         *)      COLLECT2_LIBS=$gcc_cv_collect2_libs ;;
1380 esac
1381 AC_SUBST(COLLECT2_LIBS)
1383 # When building Ada code on Alpha, we need exc_resume which is usually in
1384 # -lexc.  So test for it.
1385 save_LIBS="$LIBS"
1386 LIBS=
1387 AC_SEARCH_LIBS(exc_resume, exc)
1388 GNAT_LIBEXC="$LIBS"
1389 LIBS="$save_LIBS"
1390 AC_SUBST(GNAT_LIBEXC)
1392 # To support -mcpu=native on Solaris/SPARC, we need libkstat.
1393 save_LIBS="$LIBS"
1394 LIBS=
1395 AC_SEARCH_LIBS(kstat_open, kstat)
1396 EXTRA_GCC_LIBS="$LIBS"
1397 LIBS="$save_LIBS"
1398 AC_SUBST(EXTRA_GCC_LIBS)
1400 # Solaris needs libsocket and libnsl for socket functions before 11.4.
1401 # C++ needs those for libcody.
1402 save_LIBS="$LIBS"
1403 LIBS=
1404 AX_LIB_SOCKET_NSL
1405 NETLIBS="$LIBS"
1406 LIBS="$save_LIBS"
1407 AC_SUBST(NETLIBS)
1409 # Some systems put ldexp and frexp in libm instead of libc; assume
1410 # they're both in the same place.  jcf-dump needs them.
1411 save_LIBS="$LIBS"
1412 LIBS=
1413 AC_SEARCH_LIBS(ldexp, m)
1414 LDEXP_LIB="$LIBS"
1415 LIBS="$save_LIBS"
1416 AC_SUBST(LDEXP_LIB)
1418 # Some systems need dlopen
1419 save_LIBS="$LIBS"
1420 LIBS=
1421 AC_SEARCH_LIBS(dlopen, dl)
1422 DL_LIB="$LIBS"
1423 LIBS="$save_LIBS"
1424 AC_SUBST(DL_LIB)
1426 # Use <inttypes.h> only if it exists,
1427 # doesn't clash with <sys/types.h>, declares intmax_t and defines
1428 # PRId64
1429 AC_MSG_CHECKING(for inttypes.h)
1430 AC_CACHE_VAL(gcc_cv_header_inttypes_h,
1431 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1432 [[#define __STDC_FORMAT_MACROS
1433 #include <sys/types.h>
1434 #include <inttypes.h>]],
1435   [[intmax_t i = -1;
1436 #ifndef PRId64
1437 choke me
1438 #endif]])],
1439   [gcc_cv_header_inttypes_h=yes],
1440   [gcc_cv_header_inttypes_h=no])])
1441 AC_MSG_RESULT($gcc_cv_header_inttypes_h)
1442 if test $gcc_cv_header_inttypes_h = yes; then
1443   AC_DEFINE(HAVE_INTTYPES_H, 1,
1444         [Define if you have a working <inttypes.h> header file.])
1447 # Look for the ZSTD package.
1448 ZSTD_INCLUDE=
1449 ZSTD_LIB=
1450 AC_SUBST(ZSTD_INCLUDE)
1451 AC_SUBST(ZSTD_LIB)
1452 ZSTD_CPPFLAGS=
1453 ZSTD_LDFLAGS=
1454 AC_SUBST(ZSTD_CPPFLAGS)
1455 AC_SUBST(ZSTD_LDFLAGS)
1456 AC_ARG_WITH(zstd,
1457         [AS_HELP_STRING([--with-zstd=PATH],
1458                 [specify prefix directory for installed zstd library.
1459                  Equivalent to --with-zstd-include=PATH/include
1460                  plus --with-zstd-lib=PATH/lib])])
1461 AC_ARG_WITH(zstd-include,
1462         [AS_HELP_STRING([--with-zstd-include=PATH],
1463                 [specify directory for installed zstd include files])])
1464 AC_ARG_WITH(zstd-lib,
1465         [AS_HELP_STRING([--with-zstd-lib=PATH],
1466                 [specify directory for the installed zstd library])])
1467 case "x$with_zstd" in
1468   x) ;;
1469   xno)
1470     ZSTD_INCLUDE=
1471     ZSTD_LIB=
1472     ;;
1473   *) ZSTD_INCLUDE=$with_zstd/include
1474      ZSTD_LIB=$with_zstd/lib
1475      ;;
1476 esac
1478 if test "x$with_zstd" != xno; then
1479 if test "x$with_zstd_include" != x; then
1480   ZSTD_INCLUDE=$with_zstd_include
1482 if test "x$with_zstd_lib" != x; then
1483   ZSTD_LIB=$with_zstd_lib
1485 if test "x$ZSTD_INCLUDE" != x \
1486    && test "x$ZSTD_INCLUDE" != xno; then
1487   ZSTD_CPPFLAGS=-I$ZSTD_INCLUDE
1489 if test "x$ZSTD_LIB" != x \
1490    && test "x$ZSTD_LIB" != xno; then
1491   ZSTD_LDFLAGS=-L$ZSTD_LIB
1494 CXXFLAGS="$CXXFLAGS $ZSTD_CPPFLAGS"
1495 LDFLAGS="$LDFLAGS $ZSTD_LDFLAGS"
1497 AC_MSG_CHECKING(for zstd.h)
1498 AC_CACHE_VAL(gcc_cv_header_zstd_h,
1499 # We require version 1.3.0 or later.  This is the first version that has
1500 # ZSTD_getFrameContentSize.
1501 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1502 [[#include <zstd.h>
1503 #if ZSTD_VERSION_NUMBER < 10300
1504 #error "need zstd 1.3.0 or better"
1505 #endif]])],
1506   [gcc_cv_header_zstd_h=yes],
1507   [gcc_cv_header_zstd_h=no])])
1508 AC_MSG_RESULT($gcc_cv_header_zstd_h)
1509 if test $gcc_cv_header_zstd_h = yes; then
1510   AC_DEFINE(HAVE_ZSTD_H, 1,
1511         [Define if you have a working <zstd.h> header file.])
1512 elif test "x$with_zstd" != x; then
1513     as_fn_error $? "Unable to find zstd.h.  See config.log for details." "$LINENO" 5
1516 # LTO can use zstd compression algorithm
1517 save_LIBS="$LIBS"
1518 LIBS=
1519 AC_SEARCH_LIBS(ZSTD_compress, zstd)
1520 ZSTD_LIB="$LIBS"
1521 LIBS="$save_LIBS"
1522 AC_SUBST(ZSTD_LIB)
1525 dnl Disabled until we have a complete test for buggy enum bitfields.
1526 dnl gcc_AC_C_ENUM_BF_UNSIGNED
1528 define(gcc_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
1529   ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl
1530   fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl
1531   fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
1532   putchar_unlocked putc_unlocked)
1533 AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoq \
1534         popen sysconf strsignal getrusage nl_langinfo \
1535         gettimeofday mbstowcs wcswidth mmap posix_fallocate setlocale \
1536         gcc_UNLOCKED_FUNCS madvise mallinfo mallinfo2 fstatat getauxval)
1538 if test x$ac_cv_func_mbstowcs = xyes; then
1539   AC_CACHE_CHECK(whether mbstowcs works, gcc_cv_func_mbstowcs_works,
1540 [    AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
1541 int main()
1543   mbstowcs(0, "", 0);
1544   return 0;
1545 }]])],
1546     [gcc_cv_func_mbstowcs_works=yes],
1547     [gcc_cv_func_mbstowcs_works=no],
1548     [gcc_cv_func_mbstowcs_works=yes])])
1549   if test x$gcc_cv_func_mbstowcs_works = xyes; then
1550     AC_DEFINE(HAVE_WORKING_MBSTOWCS, 1,
1551   [Define this macro if mbstowcs does not crash when its
1552    first argument is NULL.])
1553   fi
1556 AC_CHECK_TYPE(ssize_t, int)
1557 AC_CHECK_TYPE(caddr_t, char *)
1558 AC_CHECK_TYPE(sighander_t,
1559   AC_DEFINE(HAVE_SIGHANDLER_T, 1,
1560     [Define if <sys/signal.h> defines sighandler_t]),
1561     ,signal.h)
1563 GCC_AC_FUNC_MMAP_BLACKLIST
1565 case "${host}" in
1566 *-*-*vms*)
1567   # Under VMS, vfork works very differently than on Unix. The standard test 
1568   # won't work, and it isn't easily adaptable. It makes more sense to
1569   # just force it.
1570   ac_cv_func_vfork_works=yes
1571   ;;
1572 esac
1573 AC_FUNC_FORK
1575 AM_ICONV
1577 # Until we have in-tree GNU iconv:
1578 LIBICONV_DEP=
1579 if test -f "$LTLIBICONV"; then
1580   LIBICONV_DEP=$LTLIBICONV
1582 AC_SUBST(LIBICONV_DEP)
1584 AM_LC_MESSAGES
1586 AM_LANGINFO_CODESET
1588 # We will need to find libiberty.h and ansidecl.h
1589 saved_CFLAGS="$CFLAGS"
1590 CFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/../include $GMPINC"
1591 saved_CXXFLAGS="$CXXFLAGS"
1592 CXXFLAGS="$CXXFLAGS -I${srcdir} -I${srcdir}/../include $GMPINC"
1594 # gcc_AC_CHECK_DECLS doesn't support overloaded functions, so use the
1595 # normal autoconf function for these.  But force definition of
1596 # HAVE_DECL_BASENAME like gcc_AC_CHECK_DECLS does, to suppress the bizarre
1597 # basename handling in libiberty.h.
1598 AC_CHECK_DECLS([basename(const char*), strstr(const char*,const char*)], , ,[
1599 #undef HAVE_DECL_BASENAME
1600 #define HAVE_DECL_BASENAME 1
1601 #include "ansidecl.h"
1602 #include "system.h"])
1604 gcc_AC_CHECK_DECLS(getenv atol atoll asprintf sbrk abort atof getcwd getwd \
1605         madvise stpcpy strnlen strsignal strverscmp \
1606         strtol strtoul strtoll strtoull setenv unsetenv \
1607         errno snprintf vsnprintf vasprintf malloc realloc calloc \
1608         free getopt clock getpagesize ffs gcc_UNLOCKED_FUNCS, , ,[
1609 #include "ansidecl.h"
1610 #include "system.h"])
1612 gcc_AC_CHECK_DECLS(getrlimit setrlimit getrusage, , ,[
1613 #include "ansidecl.h"
1614 #include "system.h"
1615 #ifdef HAVE_SYS_RESOURCE_H
1616 #include <sys/resource.h>
1617 #endif
1620 gcc_AC_CHECK_DECLS(mallinfo mallinfo2, , ,[
1621 #include "ansidecl.h"
1622 #include "system.h"
1623 #ifdef HAVE_MALLOC_H
1624 #include <malloc.h>
1625 #endif
1628 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1629 #include "ansidecl.h"
1630 #include "system.h"
1631 #ifdef HAVE_SYS_RESOURCE_H
1632 #include <sys/resource.h>
1633 #endif
1634 ]], [[rlim_t l = 0;]])],[],[AC_DEFINE([rlim_t],[long],
1635 [Define to `long' if <sys/resource.h> doesn't define.])])
1637 # On AIX 5.2, <ldfcn.h> conflicts with <fcntl.h>, as both define incompatible
1638 # FREAD and FWRITE macros.  Fortunately, for GCC's single usage of ldgetname
1639 # in collect2.cc, <fcntl.h> isn't visible, but the configure test below needs
1640 # to undef these macros to get the correct value for HAVE_DECL_LDGETNAME.
1641 gcc_AC_CHECK_DECLS(ldgetname, , ,[
1642 #include "ansidecl.h"
1643 #include "system.h"
1644 #ifdef HAVE_LDFCN_H
1645 #undef FREAD
1646 #undef FWRITE
1647 #include <ldfcn.h>
1648 #endif
1651 gcc_AC_CHECK_DECLS(times, , ,[
1652 #include "ansidecl.h"
1653 #include "system.h"
1654 #ifdef HAVE_SYS_TIMES_H
1655 #include <sys/times.h>
1656 #endif
1659 gcc_AC_CHECK_DECLS(sigaltstack, , ,[
1660 #include "ansidecl.h"
1661 #include "system.h"
1662 #include <signal.h>
1665 # More time-related stuff.
1666 AC_CACHE_CHECK(for struct tms, ac_cv_struct_tms, [
1667 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1668 #include "ansidecl.h"
1669 #include "system.h"
1670 #ifdef HAVE_SYS_TIMES_H
1671 #include <sys/times.h>
1672 #endif
1673 ]], [[struct tms tms;]])],[ac_cv_struct_tms=yes],[ac_cv_struct_tms=no])])
1674 if test $ac_cv_struct_tms = yes; then
1675   AC_DEFINE(HAVE_STRUCT_TMS, 1,
1676   [Define if <sys/times.h> defines struct tms.])
1679 # use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
1680 # revisit after autoconf 2.50.
1681 AC_CACHE_CHECK(for clock_t, gcc_cv_type_clock_t, [
1682 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1683 #include "ansidecl.h"
1684 #include "system.h"
1685 ]], [[clock_t x;]])],[gcc_cv_type_clock_t=yes],[gcc_cv_type_clock_t=no])])
1686 if test $gcc_cv_type_clock_t = yes; then
1687   AC_DEFINE(HAVE_CLOCK_T, 1,
1688   [Define if <time.h> defines clock_t.])
1691 # Check if F_SETLKW is supported by fcntl.
1692 AC_CACHE_CHECK(for F_SETLKW, ac_cv_f_setlkw, [
1693 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1694 #include <fcntl.h>]], [[
1695 struct flock fl;
1696 fl.l_whence = 0;
1697 fl.l_start = 0;
1698 fl.l_len = 0;
1699 fl.l_pid = 0;
1700 return fcntl (1, F_SETLKW, &fl);]])],
1701 [ac_cv_f_setlkw=yes],[ac_cv_f_setlkw=no])])
1702 if test $ac_cv_f_setlkw = yes; then
1703   AC_DEFINE(HOST_HAS_F_SETLKW, 1,
1704   [Define if F_SETLKW supported by fcntl.])
1707 # Check if O_CLOEXEC is defined by fcntl
1708 AC_CACHE_CHECK(for O_CLOEXEC, ac_cv_o_cloexec, [
1709 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1710 #include <fcntl.h>]], [[
1711 return open ("/dev/null", O_RDONLY | O_CLOEXEC);]])],
1712 [ac_cv_o_cloexec=yes],[ac_cv_o_cloexec=no])])
1713 if test $ac_cv_o_cloexec = yes; then
1714   AC_DEFINE(HOST_HAS_O_CLOEXEC, 1,
1715   [Define if O_CLOEXEC supported by fcntl.])
1718 # Check if O_NONBLOCK is defined by fcntl
1719 AC_CHECK_HEADERS([fcntl.h])
1720 AC_CHECK_DECL(O_NONBLOCK,,,[#include <fcntl.h>])
1721 if test $ac_cv_have_decl_O_NONBLOCK = yes; then
1722   AC_DEFINE(HOST_HAS_O_NONBLOCK, 1,
1723   [Define if O_NONBLOCK supported by fcntl.])
1727 # C++ Modules would like some networking features to provide the mapping
1728 # server.  You can still use modules without them though.
1729 # The following network-related checks could probably do with some
1730 # Windows and other non-linux defenses and checking.
1732 # Local socket connectivity wants AF_UNIX networking
1733 # Check for AF_UNIX networking
1734 AC_CACHE_CHECK(for AF_UNIX, ac_cv_af_unix, [
1735 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1736 #include <sys/types.h>
1737 #include <sys/socket.h>
1738 #include <sys/un.h>
1739 #include <netinet/in.h>]],[[
1740 sockaddr_un un;
1741 un.sun_family = AF_UNSPEC;
1742 int fd = socket (AF_UNIX, SOCK_STREAM, 0);
1743 connect (fd, (sockaddr *)&un, sizeof (un));]])],
1744 [ac_cv_af_unix=yes],
1745 [ac_cv_af_unix=no])])
1746 if test $ac_cv_af_unix = yes; then
1747   AC_DEFINE(HAVE_AF_UNIX, 1,
1748   [Define if AF_UNIX supported.])
1751 # Remote socket connectivity wants AF_INET6 networking
1752 # Check for AF_INET6 networking
1753 AC_CACHE_CHECK(for AF_INET6, ac_cv_af_inet6, [
1754 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1755 #include <sys/types.h>
1756 #include <sys/socket.h>
1757 #include <netinet/in.h>
1758 #include <netdb.h>]],[[
1759 sockaddr_in6 in6;
1760 in6.sin6_family = AF_UNSPEC;
1761 struct addrinfo *addrs = 0;
1762 struct addrinfo hints;
1763 hints.ai_flags = 0;
1764 hints.ai_family = AF_INET6;
1765 hints.ai_socktype = SOCK_STREAM;
1766 hints.ai_protocol = 0;
1767 hints.ai_canonname = 0;
1768 hints.ai_addr = 0;
1769 hints.ai_next = 0;
1770 int e = getaddrinfo ("localhost", 0, &hints, &addrs);
1771 const char *str = gai_strerror (e);
1772 freeaddrinfo (addrs);
1773 int fd = socket (AF_INET6, SOCK_STREAM, 0);
1774 connect (fd, (sockaddr *)&in6, sizeof (in6));]])],
1775 [ac_cv_af_inet6=yes],
1776 [ac_cv_af_inet6=no])])
1777 if test $ac_cv_af_inet6 = yes; then
1778   AC_DEFINE(HAVE_AF_INET6, 1,
1779   [Define if AF_INET6 supported.])
1782 # Check if _LK_LOCK is supported by _locking
1783 AC_CACHE_CHECK(for _LK_LOCK, ac_cv_lk_lock, [
1784 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1785 #include <io.h>
1786 #include <sys/locking.h>]], [[
1787   int fd;
1788   return _locking (fd, _LK_LOCK, 0);]])],
1789 [ac_cv_lk_lock=yes],[ac_cv_lk_lock=no])])
1790 if test $ac_cv_lk_lock = yes; then
1791   AC_DEFINE(HOST_HAS_LK_LOCK, 1,
1792   [Define if _LK_LOC supported by _locking.])
1795 # Restore CFLAGS, CXXFLAGS from before the gcc_AC_NEED_DECLARATIONS tests.
1796 CFLAGS="$saved_CFLAGS"
1797 CXXFLAGS="$saved_CXXFLAGS"
1799 # mkdir takes a single argument on some systems. 
1800 gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
1802 # File extensions
1803 manext='.1'
1804 objext='.o'
1805 AC_SUBST(manext)
1806 AC_SUBST(objext)
1808 # With Setjmp/Longjmp based exception handling.
1809 AC_ARG_ENABLE(sjlj-exceptions,
1810 [AS_HELP_STRING([--enable-sjlj-exceptions],
1811                 [arrange to use setjmp/longjmp exception handling])],
1812 [force_sjlj_exceptions=yes],
1813 [case $target in
1814   lm32*-*-*)
1815      force_sjlj_exceptions=yes
1816      enableval=yes
1817      ;;
1818   *)
1819     force_sjlj_exceptions=no
1820     ;;
1821 esac])
1822 if test $force_sjlj_exceptions = yes; then
1823   sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
1824   AC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
1825     [Define 0/1 to force the choice for exception handling model.])
1828 # --------------------------------------------------------
1829 # Build, host, and target specific configuration fragments
1830 # --------------------------------------------------------
1832 # Collect build-machine-specific information.
1833 . ${srcdir}/config.build || exit 1
1835 # Collect host-machine-specific information.
1836 . ${srcdir}/config.host || exit 1
1838 target_gtfiles=
1840 # Collect target-machine-specific information.
1841 . ${srcdir}/config.gcc || exit 1
1843 extra_objs="${host_extra_objs} ${extra_objs}"
1844 extra_gcc_objs="${host_extra_gcc_objs} ${extra_gcc_objs}"
1846 # Default the target-machine variables that were not explicitly set.
1847 if test x"$tm_file" = x
1848 then tm_file=$cpu_type/$cpu_type.h; fi
1850 if test x"$extra_headers" = x
1851 then extra_headers=; fi
1853 if test x$md_file = x
1854 then md_file=$cpu_type/$cpu_type.md; fi
1856 if test x$out_file = x
1857 then out_file=$cpu_type/$cpu_type.cc; fi
1859 if test x"$tmake_file" = x
1860 then tmake_file=$cpu_type/t-$cpu_type
1863 # Support --enable-initfini-array.
1864 if test x$enable_initfini_array != xno; then
1865   tm_file="${tm_file} initfini-array.h"
1868 if test x"$dwarf2" = xyes
1869 then tm_file="$tm_file tm-dwarf2.h"
1872 # Say what files are being used for the output code and MD file.
1873 echo "Using \`$srcdir/config/$out_file' for machine-specific logic."
1874 echo "Using \`$srcdir/config/$md_file' as machine description file."
1876 # If any of the xm_file variables contain nonexistent files, warn
1877 # about them and drop them.
1880 for x in $build_xm_file; do
1881   if    test -f $srcdir/config/$x
1882   then      bx="$bx $x"
1883   else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1884   fi
1885 done
1886 build_xm_file="$bx"
1889 for x in $host_xm_file; do
1890   if    test -f $srcdir/config/$x
1891   then      hx="$hx $x"
1892   else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1893   fi
1894 done
1895 host_xm_file="$hx"
1898 for x in $xm_file; do
1899   if    test -f $srcdir/config/$x
1900   then      tx="$tx $x"
1901   else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1902   fi
1903 done
1904 xm_file="$tx"
1906 count=a
1907 for f in $tm_file; do
1908         count=${count}x
1909 done
1910 if test $count = ax; then
1911         echo "Using \`$srcdir/config/$tm_file' as target machine macro file."
1912 else
1913         echo "Using the following target machine macro files:"
1914         for f in $tm_file; do
1915                 echo "  $srcdir/config/$f"
1916         done
1919 if test x$use_long_long_for_widest_fast_int = xyes; then
1920         AC_DEFINE(USE_LONG_LONG_FOR_WIDEST_FAST_INT, 1,
1921 [Define to 1 if the 'long long' type is wider than 'long' but still
1922 efficiently supported by the host hardware.])
1925 gnu_ld_bool=`if test x"$gnu_ld" = x"yes"; then echo 1; else echo 0; fi`
1926 AC_DEFINE_UNQUOTED(HAVE_GNU_LD, $gnu_ld_bool, [Define to 1 if using GNU ld.])
1928 gnu_as_bool=`if test x"$gas" = x"yes"; then echo 1; else echo 0; fi`
1929 AC_DEFINE_UNQUOTED(HAVE_GNU_AS, $gnu_as_bool, [Define to 1 if using GNU as.])
1931 count=a
1932 for f in $host_xm_file; do
1933         count=${count}x
1934 done
1935 if test $count = a; then
1936         :
1937 elif test $count = ax; then
1938         echo "Using \`$srcdir/config/$host_xm_file' as host machine macro file."
1939 else
1940         echo "Using the following host machine macro files:"
1941         for f in $host_xm_file; do
1942                 echo "  $srcdir/config/$f"
1943         done
1945 echo "Using ${out_host_hook_obj} for host machine hooks."
1947 if test "$host_xm_file" != "$build_xm_file"; then
1948         count=a
1949         for f in $build_xm_file; do
1950                 count=${count}x
1951         done
1952         if test $count = a; then
1953                 :
1954         elif test $count = ax; then
1955                 echo "Using \`$srcdir/config/$build_xm_file' as build machine macro file."
1956         else
1957                 echo "Using the following build machine macro files:"
1958                 for f in $build_xm_file; do
1959                         echo "  $srcdir/config/$f"
1960                 done
1961         fi
1964 if test -n "$configured_native_system_header_dir"; then
1965   native_system_header_dir=$configured_native_system_header_dir
1967 NATIVE_SYSTEM_HEADER_DIR="$native_system_header_dir"
1968 AC_SUBST(NATIVE_SYSTEM_HEADER_DIR)
1970 case ${host} in
1971   powerpc*-*-darwin*)
1972     AC_CACHE_CHECK([whether mcontext_t fields have underscores],
1973       gcc_cv_mcontext_underscores,
1974       AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1975 #include <sys/cdefs.h>
1976 #include <sys/signal.h>
1977 #include <ucontext.h>
1978 int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; }
1979 ])],
1980         gcc_cv_mcontext_underscores=no, gcc_cv_mcontext_underscores=yes))
1981       if test $gcc_cv_mcontext_underscores = yes; then
1982         AC_DEFINE(HAS_MCONTEXT_T_UNDERSCORES,,dnl
1983           [mcontext_t fields start with __])
1984       fi
1985     ;;
1986 esac
1988 # ---------
1989 # Threading
1990 # ---------
1992 # Check if a valid thread package
1993 case ${enable_threads} in
1994   "" | no)
1995     # No threads
1996     target_thread_file='single'
1997     ;;
1998   yes)
1999     # default
2000     target_thread_file='single'
2001     ;;
2002   aix | dce | lynx | mipssde | posix | rtems | \
2003   single | tpf | vxworks | win32 | mcf)
2004     target_thread_file=${enable_threads}
2005     ;;
2006   *)
2007     echo "${enable_threads} is an unknown thread package" 1>&2
2008     exit 1
2009     ;;
2010 esac
2012 if test x${thread_file} = x; then
2013   # No thread file set by target-specific clauses in config.gcc,
2014   # so use file chosen by default logic above
2015   thread_file=${target_thread_file}
2018 # --------
2019 # UNSORTED
2020 # --------
2022 use_cxa_atexit=no
2023 if test x$enable___cxa_atexit = xyes || \
2024    test x$enable___cxa_atexit = x -a x$default_use_cxa_atexit = xyes; then
2025   if test x$host = x$target; then
2026     case $host in
2027       # mingw32 doesn't have __cxa_atexit but uses atexit registration
2028       # keyed to flag_use_cxa_atexit
2029       *-*-mingw32*)
2030         use_cxa_atexit=yes
2031         ;;
2032       powerpc-ibm-aix*)
2033         use_cxa_atexit=yes
2034         ;;
2035       *)
2036         AC_CHECK_FUNC(__cxa_atexit,[use_cxa_atexit=yes],
2037           [echo "__cxa_atexit can't be enabled on this target"])
2038         ;;
2039     esac
2040   else
2041     # We can't check for __cxa_atexit when building a cross, so assume
2042     # it is available 
2043     use_cxa_atexit=yes
2044   fi
2045   if test x$use_cxa_atexit = xyes; then
2046     AC_DEFINE(DEFAULT_USE_CXA_ATEXIT, 2,
2047       [Define if you want to use __cxa_atexit, rather than atexit, to
2048       register C++ destructors for local statics and global objects.
2049       This is essential for fully standards-compliant handling of
2050       destructors, but requires __cxa_atexit in libc.])
2051   fi
2054 # Look for a file containing extra machine modes.
2055 if test -n "$extra_modes" && test -f $srcdir/config/$extra_modes; then
2056   extra_modes_file='$(srcdir)'/config/${extra_modes}
2057   AC_SUBST(extra_modes_file)
2058   AC_DEFINE_UNQUOTED(EXTRA_MODES_FILE, "config/$extra_modes",
2059   [Define to the name of a file containing a list of extra machine modes
2060    for this architecture.])
2063 # Convert extra_options into a form suitable for Makefile use.
2064 extra_opt_files=
2065 all_opt_files=
2066 for f in $extra_options; do
2067   extra_opt_files="$extra_opt_files \$(srcdir)/config/$f"
2068   all_opt_files="$all_opt_files $srcdir/config/$f"
2069 done
2070 AC_SUBST(extra_opt_files)
2072 # auto-host.h is the file containing items generated by autoconf and is
2073 # the first file included by config.h.
2074 # If host=build, it is correct to have bconfig include auto-host.h
2075 # as well.  If host!=build, we are in error and need to do more 
2076 # work to find out the build config parameters.
2077 if test x$host = x$build
2078 then
2079         build_auto=auto-host.h
2080         HAVE_AUTO_BUILD='# '
2081 else
2082         # We create a subdir, then run autoconf in the subdir.
2083         # To prevent recursion we set host and build for the new
2084         # invocation of configure to the build for this invocation
2085         # of configure. 
2086         tempdir=build.$$
2087         rm -rf $tempdir
2088         mkdir $tempdir
2089         cd $tempdir
2090         case ${srcdir} in
2091         /* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
2092         *) realsrcdir=../${srcdir};;
2093         esac
2094         # Clearing GMPINC is necessary to prevent host headers being
2095         # used by the build compiler.  Defining GENERATOR_FILE stops
2096         # system.h from including gmp.h.
2097         CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
2098         CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
2099         LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
2100         GMPINC="" CPPFLAGS="${CPPFLAGS_FOR_BUILD} -DGENERATOR_FILE" \
2101         ${realsrcdir}/configure \
2102                 --enable-languages=${enable_languages-all} \
2103                 ${enable_obsolete+--enable-obsolete="$enable_obsolete"} \
2104                 ${enable_option_checking+--enable-option-checking="$enable_option_checking"} \
2105                 --target=$target_alias --host=$build_alias \
2106                 --build=$build_alias || exit # retaining $tempdir
2108         # We just finished tests for the build machine, so rename
2109         # the file auto-build.h in the gcc directory.
2110         mv auto-host.h ../auto-build.h
2111         cd ..
2112         rm -rf $tempdir
2113         build_auto=auto-build.h
2114         HAVE_AUTO_BUILD=
2116 AC_SUBST(build_subdir)
2117 AC_SUBST(HAVE_AUTO_BUILD)
2119 tm_file="${tm_file} defaults.h"
2120 tm_p_file="${tm_p_file} tm-preds.h"
2121 host_xm_file="auto-host.h ansidecl.h ${host_xm_file}"
2122 build_xm_file="${build_auto} ansidecl.h ${build_xm_file}"
2123 # We don't want ansidecl.h in target files, write code there in ISO/GNU C.
2124 # put this back in temporarily.
2125 xm_file="auto-host.h ansidecl.h ${xm_file}"
2127 # --------
2128 # UNSORTED
2129 # --------
2131 changequote(,)dnl
2132 # Compile in configure arguments.
2133 if test -f configargs.h ; then
2134         # Being re-configured.
2135         gcc_config_arguments=`grep configuration_arguments configargs.h | sed -e 's/.*"\([^"]*\)".*/\1/'`
2136         gcc_reconf_arguments=`echo "$gcc_config_arguments" | sed -e 's/^.*\( : (reconfigured) .*$\)/\1/'`
2137         if [ "$gcc_reconf_arguments" != " : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS" ]; then
2138                 gcc_config_arguments="$gcc_config_arguments : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS"
2139         fi
2140 else
2141         gcc_config_arguments="$TOPLEVEL_CONFIGURE_ARGUMENTS"
2144 # Double all backslashes and backslash all quotes to turn
2145 # gcc_config_arguments into a C string.
2146 sed -e 's/\\/\\\\/g; s/"/\\"/g' <<EOF >conftest.out
2147 $gcc_config_arguments
2149 gcc_config_arguments_str=`cat conftest.out`
2150 rm -f conftest.out
2152 cat > configargs.h <<EOF
2153 /* Generated automatically. */
2154 static const char configuration_arguments[] = "$gcc_config_arguments_str";
2155 static const char thread_model[] = "$thread_file";
2157 static const struct {
2158   const char *name, *value;
2159 } configure_default_options[] = $configure_default_options;
2161 changequote([,])dnl
2163 changequote(,)dnl
2164 gcc_BASEVER=`cat $srcdir/BASE-VER`
2165 gcc_DEVPHASE=`cat $srcdir/DEV-PHASE`
2166 gcc_DATESTAMP=`cat $srcdir/DATESTAMP`
2167 if test -f $srcdir/REVISION ; then
2168         gcc_REVISION=`cat $srcdir/REVISION`
2169 else
2170         gcc_REVISION=""
2172 cat > plugin-version.h <<EOF
2173 #include "configargs.h"
2175 #define GCCPLUGIN_VERSION_MAJOR   `echo $gcc_BASEVER | sed -e 's/^\([0-9]*\).*$/\1/'`
2176 #define GCCPLUGIN_VERSION_MINOR   `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.\([0-9]*\).*$/\1/'`
2177 #define GCCPLUGIN_VERSION_PATCHLEVEL   `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$/\1/'`
2178 #define GCCPLUGIN_VERSION  (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR)
2180 static char basever[] = "$gcc_BASEVER";
2181 static char datestamp[] = "$gcc_DATESTAMP";
2182 static char devphase[] = "$gcc_DEVPHASE";
2183 static char revision[] = "$gcc_REVISION";
2185 /* FIXME plugins: We should make the version information more precise.
2186    One way to do is to add a checksum. */
2188 static struct plugin_gcc_version gcc_version = {basever, datestamp,
2189                                                 devphase, revision,
2190                                                 configuration_arguments};
2192 changequote([,])dnl
2194 # Determine what GCC version number to use in filesystem paths.
2195 GCC_BASE_VER
2197 # Internationalization
2198 ZW_GNU_GETTEXT_SISTER_DIR
2200 # If LIBINTL contains LIBICONV, then clear LIBICONV so we don't get
2201 # -liconv on the link line twice.
2202 case "$LIBINTL" in *$LIBICONV*)
2203         LIBICONV= ;;
2204 esac
2206 AC_ARG_ENABLE(secureplt,
2207 [AS_HELP_STRING([--enable-secureplt],
2208                 [enable -msecure-plt by default for PowerPC])],
2209 [], [])
2211 AC_ARG_ENABLE(mingw-wildcard,
2212 [AS_HELP_STRING([--enable-mingw-wildcard],
2213                 [Set whether to expand wildcard on command-line.
2214                  Default to platform configuration])],
2215 [],[enable_mingw_wildcard=platform])
2216 AS_IF([test x"$enable_mingw_wildcard" != xplatform ],
2217       [AC_DEFINE_UNQUOTED(MINGW_DOWILDCARD,
2218                  $(test x"$enable_mingw_wildcard" = xno; echo $?),
2219                  [Value to set mingw's _dowildcard to.])])
2221 AC_ARG_ENABLE(large-address-aware,
2222 [AS_HELP_STRING([--enable-large-address-aware],
2223                 [Link mingw executables with --large-address-aware])])
2224 AS_IF([test x"$enable_large_address_aware" = xyes],
2225   [AC_DEFINE([MINGW_DEFAULT_LARGE_ADDR_AWARE], 1,
2226     [Define if we should link mingw executables with --large-address-aware])])
2228 AC_ARG_ENABLE(leading-mingw64-underscores,
2229   AS_HELP_STRING([--enable-leading-mingw64-underscores],
2230                  [enable leading underscores on 64 bit mingw targets]),
2231   [],[])
2232 AS_IF([ test x"$enable_leading_mingw64_underscores" = xyes ],
2233   [AC_DEFINE(USE_MINGW64_LEADING_UNDERSCORES, 1,
2234     [Define if we should use leading underscore on 64 bit mingw targets])])
2236 AC_ARG_ENABLE(cld,
2237 [AS_HELP_STRING([--enable-cld], [enable -mcld by default for 32bit x86])], [],
2238 [enable_cld=no])
2240 AC_ARG_ENABLE(frame-pointer,
2241 [AS_HELP_STRING([--enable-frame-pointer],
2242                 [enable -fno-omit-frame-pointer by default for x86])], [],
2244 case $target_os in
2245 linux* | gnu* | darwin[[8912]]* | cygwin* | mingw*)
2246   # Enable -fomit-frame-pointer by default for these systems with DWARF2.
2247   enable_frame_pointer=no
2248   ;;
2250   enable_frame_pointer=yes
2251   ;;
2252 esac
2255 case $target in
2256 i[[34567]]86-*-* | x86_64-*-*)
2257         if test "x$enable_cld" = xyes; then
2258                 tm_defines="${tm_defines} USE_IX86_CLD=1"
2259         fi
2260         if test "x$enable_frame_pointer" = xyes; then
2261                 tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1"
2262         fi
2263         ;;
2264 esac
2266 # Windows32 Registry support for specifying GCC installation paths.
2267 AC_ARG_ENABLE(win32-registry,
2268 [AS_HELP_STRING([--disable-win32-registry],
2269                 [disable lookup of installation paths in the
2270                  Registry on Windows hosts])
2271 AS_HELP_STRING([--enable-win32-registry], [enable registry lookup (default)])
2272 AS_HELP_STRING([--enable-win32-registry=KEY],
2273                [use KEY instead of GCC version as the last portion
2274                 of the registry key])],,)
2276 case $host_os in
2277   win32 | pe | cygwin* | mingw32*)
2278     if test "x$enable_win32_registry" != xno; then
2279       AC_SEARCH_LIBS(RegOpenKeyExA, advapi32,, [enable_win32_registry=no])
2280     fi
2282     if test "x$enable_win32_registry" != xno; then
2283       AC_DEFINE(ENABLE_WIN32_REGISTRY, 1,
2284   [Define to 1 if installation paths should be looked up in the Windows
2285    Registry. Ignored on non-Windows hosts.])
2287       if test "x$enable_win32_registry" != xyes \
2288          && test "x$enable_win32_registry" != x; then
2289         AC_DEFINE_UNQUOTED(WIN32_REGISTRY_KEY, "$enable_win32_registry",
2290   [Define to be the last component of the Windows registry key under which
2291    to look for installation paths.  The full key used will be 
2292    HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}.
2293    The default is the GCC version number.])
2294       fi
2295     fi
2296   ;;
2297 esac
2299 # Get an absolute path to the GCC top-level source directory
2300 holddir=`${PWDCMD-pwd}`
2301 cd $srcdir
2302 topdir=`${PWDCMD-pwd}`
2303 cd $holddir
2305 # Conditionalize the makefile for this host machine.
2306 xmake_file=
2307 for f in ${host_xmake_file}
2309         if test -f ${srcdir}/config/$f
2310         then
2311                 xmake_file="${xmake_file} \$(srcdir)/config/$f"
2312         fi
2313 done
2315 # Conditionalize the makefile for this target machine.
2316 tmake_file_=
2317 for f in ${tmake_file}
2319         if test -f ${srcdir}/config/$f
2320         then
2321                 tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
2322         fi
2323 done
2324 tmake_file="${tmake_file_}${omp_device_property_tmake_file}"
2326 out_object_file=`basename $out_file .cc`.o
2327 common_out_object_file=`basename $common_out_file .cc`.o
2329 tm_file_list="options.h"
2330 tm_include_list="options.h insn-constants.h"
2331 for f in $tm_file; do
2332   case $f in
2333     ./* )
2334        f=`echo $f | sed 's/^..//'`
2335        tm_file_list="${tm_file_list} $f"
2336        tm_include_list="${tm_include_list} $f"
2337        ;;
2338     defaults.h )
2339        tm_file_list="${tm_file_list} \$(srcdir)/$f"
2340        tm_include_list="${tm_include_list} $f"
2341        ;;
2342     * )
2343        tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
2344        tm_include_list="${tm_include_list} config/$f"
2345        ;;
2346   esac
2347 done
2349 tm_p_file_list=
2350 tm_p_include_list=
2351 for f in $tm_p_file; do
2352   case $f in
2353     tm-preds.h )
2354        tm_p_file_list="${tm_p_file_list} $f"
2355        tm_p_include_list="${tm_p_include_list} $f"
2356        ;;
2357     * )
2358        tm_p_file_list="${tm_p_file_list} \$(srcdir)/config/$f"
2359        tm_p_include_list="${tm_p_include_list} config/$f"
2360   esac
2361 done
2363 tm_d_file_list=
2364 tm_d_include_list=
2365 for f in $tm_d_file; do
2366   case $f in
2367     * )
2368        tm_d_file_list="${tm_d_file_list} \$(srcdir)/config/$f"
2369        tm_d_include_list="${tm_d_include_list} config/$f"
2370        ;;
2371   esac
2372 done
2374 xm_file_list=
2375 xm_include_list=
2376 for f in $xm_file; do
2377   case $f in
2378     ansidecl.h )
2379        xm_file_list="${xm_file_list} \$(srcdir)/../include/$f"
2380        xm_include_list="${xm_include_list} $f"
2381        ;;
2382     auto-host.h )
2383        xm_file_list="${xm_file_list} $f"
2384        xm_include_list="${xm_include_list} $f"
2385        ;;
2386     * )
2387        xm_file_list="${xm_file_list} \$(srcdir)/config/$f"
2388        xm_include_list="${xm_include_list} config/$f"
2389        ;;
2390   esac
2391 done
2393 host_xm_file_list=
2394 host_xm_include_list=
2395 for f in $host_xm_file; do
2396   case $f in
2397     ansidecl.h )
2398        host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/$f"
2399        host_xm_include_list="${host_xm_include_list} $f"
2400        ;;
2401     auto-host.h )
2402        host_xm_file_list="${host_xm_file_list} $f"
2403        host_xm_include_list="${host_xm_include_list} $f"
2404        ;;
2405     * )
2406        host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
2407        host_xm_include_list="${host_xm_include_list} config/$f"
2408        ;;
2409   esac
2410 done
2412 build_xm_file_list=
2413 for f in $build_xm_file; do
2414   case $f in
2415     ansidecl.h )
2416        build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/$f"
2417        build_xm_include_list="${build_xm_include_list} $f"
2418        ;;
2419     auto-build.h | auto-host.h )
2420        build_xm_file_list="${build_xm_file_list} $f"
2421        build_xm_include_list="${build_xm_include_list} $f"
2422        ;;
2423     * )
2424        build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
2425        build_xm_include_list="${build_xm_include_list} config/$f"
2426        ;;
2427   esac
2428 done
2430 # Define macro CROSS_DIRECTORY_STRUCTURE in compilation if this is a
2431 # cross-compiler which does not use the native headers and libraries.
2432 # Also use all.cross instead of all.internal and adjust SYSTEM_HEADER_DIR.
2433 CROSS=                                          AC_SUBST(CROSS)
2434 ALL=all.internal                                AC_SUBST(ALL)
2435 SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)' AC_SUBST(SYSTEM_HEADER_DIR)
2436 BUILD_SYSTEM_HEADER_DIR=$SYSTEM_HEADER_DIR      AC_SUBST(BUILD_SYSTEM_HEADER_DIR)
2438 if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
2439    test x$build != x$host || test "x$with_build_sysroot" != x; then
2440   if test "x$with_build_sysroot" != x; then
2441     BUILD_SYSTEM_HEADER_DIR=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
2442   else
2443     BUILD_SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
2444   fi
2446   if test x$host != x$target
2447   then
2448     CROSS="-DCROSS_DIRECTORY_STRUCTURE"
2449     ALL=all.cross
2450     SYSTEM_HEADER_DIR=$BUILD_SYSTEM_HEADER_DIR
2451   elif test "x$TARGET_SYSTEM_ROOT" != x; then
2452     SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
2453   fi
2455   if test "x$with_build_sysroot" != "x"; then
2456     target_header_dir="${with_build_sysroot}${native_system_header_dir}"
2457   elif test "x$with_sysroot" = x; then
2458     target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
2459   elif test "x$with_sysroot" = xyes; then
2460     target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
2461   else
2462     target_header_dir="${with_sysroot}${native_system_header_dir}"
2463   fi
2464 else
2465   target_header_dir=${native_system_header_dir}
2468 # If this is a cross-compiler that does not
2469 # have its own set of headers then define
2470 # inhibit_libc
2472 # If this is using newlib, without having the headers available now,
2473 # then define inhibit_libc in LIBGCC2_CFLAGS.
2474 # This prevents libgcc2 from containing any code which requires libc
2475 # support.
2476 : ${inhibit_libc=false}
2477 if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
2478        test x$with_newlib = xyes ; } &&
2479      { test "x$with_headers" = xno || test ! -f "$target_header_dir/stdio.h"; } ; then
2480        inhibit_libc=true
2482 AC_SUBST(inhibit_libc)
2484 # When building gcc with a cross-compiler, we need to adjust things so
2485 # that the generator programs are still built with the native compiler.
2486 # Also, we cannot run fixincludes.
2488 # These are the normal (build=host) settings:
2489 CC_FOR_BUILD='$(CC)'            AC_SUBST(CC_FOR_BUILD)
2490 CXX_FOR_BUILD='$(CXX)'          AC_SUBST(CXX_FOR_BUILD)
2491 BUILD_CFLAGS='$(ALL_CFLAGS)'    AC_SUBST(BUILD_CFLAGS)
2492 BUILD_CXXFLAGS='$(ALL_CXXFLAGS)' AC_SUBST(BUILD_CXXFLAGS)
2493 BUILD_LDFLAGS='$(LDFLAGS)'      AC_SUBST(BUILD_LDFLAGS)
2494 STMP_FIXINC=stmp-fixinc         AC_SUBST(STMP_FIXINC)
2496 # And these apply if build != host, or we are generating coverage data
2497 if test x$build != x$host || test "x$coverage_flags" != x
2498 then
2499     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) $(CFLAGS_FOR_BUILD)'
2500     BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS_FOR_BUILD)'
2501     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
2505 if test x$enable_fixincludes = xno;
2506 then
2507     STMP_FIXINC=''
2510 # Expand extra_headers to include complete path.
2511 # This substitutes for lots of t-* files.
2512 extra_headers_list=
2513 # Prepend $(srcdir)/config/${cpu_type}/ to every entry in extra_headers.
2514 for file in ${extra_headers} ; do
2515   extra_headers_list="${extra_headers_list} \$(srcdir)/config/${cpu_type}/${file}"
2516 done
2518 # If use_gcc_tgmath is set, append ginclude/tgmath.h.
2519 if test x"$use_gcc_tgmath" = xyes
2520 then extra_headers_list="${extra_headers_list} \$(srcdir)/ginclude/tgmath.h"
2523 # Define collect2 in Makefile.
2524 case $host_can_use_collect2 in
2525   no) collect2= ;;
2526   *) collect2='collect2$(exeext)' ;;
2527 esac
2528 AC_SUBST([collect2])
2530 # Add a definition of USE_COLLECT2 if system wants one.
2531 case $use_collect2 in
2532   no) use_collect2= ;;
2533   "") ;;
2534   *) 
2535     host_xm_defines="${host_xm_defines} USE_COLLECT2"
2536     xm_defines="${xm_defines} USE_COLLECT2"
2537     case $host_can_use_collect2 in
2538       no)
2539         AC_MSG_ERROR([collect2 is required but cannot be built on this system])
2540         ;;
2541     esac
2542     ;;
2543 esac
2545 AC_DEFINE_UNQUOTED(LTOPLUGINSONAME,"${host_lto_plugin_soname}",
2546 [Define to the name of the LTO plugin DSO that must be
2547   passed to the linker's -plugin=LIB option.])
2549 # ---------------------------
2550 # Assembler & linker features
2551 # ---------------------------
2553 # During stage 2, ld is actually gcc/collect-ld, which is a small script to
2554 # discern between when to use prev-ld/ld-new and when to use ld/ld-new.
2555 # However when ld-new is first executed from the build tree, libtool will
2556 # relink it as .libs/lt-ld-new, so that it can give it an RPATH that refers
2557 # to the build tree.  While doing this we need to use the previous-stage
2558 # linker, or we have an infinite loop.  The presence of a shell script as
2559 # ld/ld-new, and the fact that the script *uses ld itself*, is what confuses
2560 # the gcc/collect-ld script.  So we need to know how libtool works, or
2561 # exec-tool will fail.
2563 m4_defun([_LT_CONFIG_COMMANDS], [])
2564 AC_PROG_LIBTOOL
2565 AC_SUBST(objdir)
2566 AC_SUBST(enable_fast_install)
2568 # Identify the assembler which will work hand-in-glove with the newly
2569 # built GCC, so that we can examine its features.  This is the assembler
2570 # which will be driven by the driver program.
2572 # If build != host, and we aren't building gas in-tree, we identify a
2573 # build->target assembler and hope that it will have the same features
2574 # as the host->target assembler we'll be using.
2575 gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
2577 m4_pattern_allow([AS_FOR_TARGET])dnl
2578 AS_VAR_SET_IF(gcc_cv_as,, [
2579 if test -x "$DEFAULT_ASSEMBLER"; then
2580         gcc_cv_as="$DEFAULT_ASSEMBLER"
2581 elif test -f $gcc_cv_as_gas_srcdir/configure.ac \
2582      && test -f ../gas/Makefile \
2583      && test x$build = x$host; then
2584         gcc_cv_as=../gas/as-new$build_exeext
2585 elif test -x as$build_exeext; then
2586         # Build using assembler in the current directory.
2587         gcc_cv_as=./as$build_exeext
2588 elif ( set dummy $AS_FOR_TARGET; test -x $[2] ); then
2589         gcc_cv_as="$AS_FOR_TARGET"
2590 else
2591         AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
2592 fi])
2594 ORIGINAL_AS_FOR_TARGET=$gcc_cv_as
2595 AC_SUBST(ORIGINAL_AS_FOR_TARGET)
2596 case "$ORIGINAL_AS_FOR_TARGET" in
2597   ./as | ./as$build_exeext) ;;
2598   *) AC_CONFIG_FILES(as:exec-tool.in, [chmod +x as]) ;;
2599 esac 
2601 default_ld=
2602 AC_ARG_ENABLE(ld,
2603 [[  --enable-ld[=ARG]       build ld [ARG={default,yes,no}]]],
2604 [case "${enableval}" in
2605  no)
2606    default_ld=ld.gold
2607    ;;
2608  esac])
2610 install_gold_as_default=no
2611 AC_ARG_ENABLE(gold,
2612 [[  --enable-gold[=ARG]     build gold [ARG={default,yes,no}]]],
2613 [case "${enableval}" in
2614  default)
2615    install_gold_as_default=yes
2616    ;;
2617  yes)
2618    if test x${default_ld} != x; then
2619      install_gold_as_default=yes
2620    fi
2621    ;;
2622  no)
2623    ;;
2624  *)
2625    AC_MSG_ERROR([invalid --enable-gold argument])
2626    ;;
2627  esac])
2629 # Identify the linker which will work hand-in-glove with the newly
2630 # built GCC, so that we can examine its features.  This is the linker
2631 # which will be driven by the driver program.
2633 # If build != host, and we aren't building gas in-tree, we identify a
2634 # build->target linker and hope that it will have the same features
2635 # as the host->target linker we'll be using.
2636 gcc_cv_gld_major_version=
2637 gcc_cv_gld_minor_version=
2638 gcc_cv_ld_gld_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/ld
2639 gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold
2640 gcc_cv_ld_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
2642 AS_VAR_SET_IF(gcc_cv_ld,, [
2643 if test -x "$DEFAULT_LINKER"; then
2644         gcc_cv_ld="$DEFAULT_LINKER"
2645 elif test $install_gold_as_default = yes \
2646      && test -f $gcc_cv_ld_gold_srcdir/configure.ac \
2647      && test -f ../gold/Makefile \
2648      && test x$build = x$host; then
2649         gcc_cv_ld=../gold/ld-new$build_exeext
2650 elif test -f $gcc_cv_ld_gld_srcdir/configure.ac \
2651      && test -f ../ld/Makefile \
2652      && test x$build = x$host; then
2653         gcc_cv_ld=../ld/ld-new$build_exeext
2654 elif test -x collect-ld$build_exeext; then
2655         # Build using linker in the current directory.
2656         gcc_cv_ld=./collect-ld$build_exeext
2657 elif ( set dummy $LD_FOR_TARGET; test -x $[2] ); then
2658         gcc_cv_ld="$LD_FOR_TARGET"
2659 else
2660         AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
2661 fi])
2663 ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld
2664 PLUGIN_LD_SUFFIX=`basename $gcc_cv_ld | sed -e "s,$target_alias-,,"`
2665 # if the PLUGIN_LD is set ld-new, just have it as ld
2666 # as that is the installed named.
2667 if test x$PLUGIN_LD_SUFFIX = xld-new \
2668    || test x$PLUGIN_LD_SUFFIX = xcollect-ld ; then
2669   PLUGIN_LD_SUFFIX=ld
2671 AC_ARG_WITH(plugin-ld,
2672 [AS_HELP_STRING([[--with-plugin-ld=[ARG]]], [specify the plugin linker])],
2673 [if test x"$withval" != x; then
2674    ORIGINAL_PLUGIN_LD_FOR_TARGET="$withval"
2675    PLUGIN_LD_SUFFIX="$withval"
2676  fi])
2677 AC_SUBST(ORIGINAL_PLUGIN_LD_FOR_TARGET)
2678 AC_DEFINE_UNQUOTED(PLUGIN_LD_SUFFIX, "$PLUGIN_LD_SUFFIX", [Specify plugin linker])
2680 # Check to see if we are using gold instead of ld
2681 AC_MSG_CHECKING(whether we are using gold)
2682 ld_is_gold=no
2683 if test x$gcc_cv_ld != x; then
2684   if $gcc_cv_ld --version 2>/dev/null | sed 1q \
2685      | grep "GNU gold" > /dev/null; then
2686     ld_is_gold=yes
2687   fi
2689 AC_MSG_RESULT($ld_is_gold)
2691 # Check to see if we are using mold instead of ld
2692 AC_MSG_CHECKING(whether we are using mold)
2693 ld_is_mold=no
2694 if test x$gcc_cv_ld != x; then
2695   if $gcc_cv_ld --version 2>/dev/null | sed 1q \
2696      | grep "mold" > /dev/null; then
2697     ld_is_mold=yes
2698   fi
2700 AC_MSG_RESULT($ld_is_mold)
2703 AC_MSG_CHECKING(gold linker with split stack support as non default)
2704 # Check to see if default ld is not gold, but gold is
2705 # available and has support for split stack.  If gcc was configured
2706 # with gold then no checking is done.
2708 if test x$ld_is_gold = xno && which ${gcc_cv_ld}.gold >/dev/null 2>&1; then
2710 # For platforms other than powerpc64*, enable as appropriate.
2712   gold_non_default=no
2713   ld_gold=`which ${gcc_cv_ld}.gold`
2714 # Make sure this gold has minimal split stack support
2715   if $ld_gold --help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
2716     ld_vers=`$ld_gold --version | sed 1q`
2717     gold_vers=`echo $ld_vers | sed -n \
2718           -e 's,^[[^)]]*[[  ]]\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*[[^)]]*\)) .*$,\1,p'`
2719     case $target in
2720 # check that the gold version contains the complete split stack support
2721 # on powerpc64 big and little endian
2722       powerpc64*-*-*)
2723         case "$gold_vers" in
2724           2.25.[[1-9]]*|2.2[[6-9]][[.0-9]]*|2.[[3-9]][[.0-9]]*|[[3-9]].[[.0-9]]*) gold_non_default=yes
2725           ;;
2726           *) gold_non_default=no
2727           ;;
2728         esac
2729         ;;
2730     esac
2731   fi
2732   if test $gold_non_default = yes; then
2733     AC_DEFINE(HAVE_GOLD_NON_DEFAULT_SPLIT_STACK, 1,
2734             [Define if the gold linker supports split stack and is available as a non-default])
2735   fi
2737 AC_MSG_RESULT($gold_non_default)
2739 ORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
2740 AC_SUBST(ORIGINAL_LD_FOR_TARGET)
2741 case "$ORIGINAL_LD_FOR_TARGET" in
2742   ./collect-ld | ./collect-ld$build_exeext) ;;
2743   *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;;
2744 esac 
2746 AC_MSG_CHECKING(what linker to use)
2747 if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext \
2748    || test "$gcc_cv_ld" = ../gold/ld-new$build_exeext; then
2749         # Single tree build which includes ld.  We want to prefer it
2750         # over whatever linker top-level may have detected, since
2751         # we'll use what we're building after installation anyway.
2752         AC_MSG_RESULT(newly built ld)
2753         in_tree_ld=yes
2754         in_tree_ld_is_elf=no
2755         if (grep 'EMUL = .*elf' ../ld/Makefile \
2756             || grep 'EMUL = .*linux' ../ld/Makefile \
2757             || grep 'EMUL = .*lynx' ../ld/Makefile) > /dev/null; then
2758           in_tree_ld_is_elf=yes
2759         elif test "$ld_is_gold" = yes; then
2760           in_tree_ld_is_elf=yes
2761         fi
2762         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
2763         do
2764 changequote(,)dnl
2765                 gcc_cv_gld_version=`sed -n -e 's/^[     ]*VERSION=[^0-9A-Za-z_]*\([0-9]*\.[0-9]*.*\)/VERSION=\1/p' < $f`
2766                 if test x$gcc_cv_gld_version != x; then
2767                         break
2768                 fi
2769         done
2770         case $gcc_cv_gld_version in
2771           VERSION=[0-9]*) ;;
2772 changequote([,])dnl
2773           *) AC_MSG_ERROR([[cannot find version of in-tree linker]]) ;;
2774 changequote(,)dnl
2775         esac
2776         gcc_cv_gld_major_version=`expr "$gcc_cv_gld_version" : "VERSION=\([0-9]*\)"`
2777         gcc_cv_gld_minor_version=`expr "$gcc_cv_gld_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
2778 changequote([,])dnl
2779         ORIGINAL_LD_BFD_FOR_TARGET=../ld/ld-new$build_exeext
2780         ORIGINAL_LD_GOLD_FOR_TARGET=../gold/ld-new$build_exeext
2781 else
2782         AC_MSG_RESULT($gcc_cv_ld)
2783         in_tree_ld=no
2784         gcc_cvs_ld_program=`dirname $gcc_cv_ld`/`basename $gcc_cv_ld $host_exeext`
2785         ORIGINAL_LD_BFD_FOR_TARGET=${gcc_cvs_ld_program}.bfd$host_exeext
2786         ORIGINAL_LD_GOLD_FOR_TARGET=${gcc_cvs_ld_program}.gold$host_exeext
2789 AC_SUBST(ORIGINAL_LD_BFD_FOR_TARGET)
2790 AC_SUBST(ORIGINAL_LD_GOLD_FOR_TARGET)
2792 # Figure out what nm we will be using.
2793 gcc_cv_binutils_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/binutils
2794 AS_VAR_SET_IF(gcc_cv_nm,, [
2795 if test -f $gcc_cv_binutils_srcdir/configure.ac \
2796      && test -f ../binutils/Makefile \
2797      && test x$build = x$host; then
2798         gcc_cv_nm=../binutils/nm-new$build_exeext
2799 elif test -x nm$build_exeext; then
2800         gcc_cv_nm=./nm$build_exeext
2801 elif ( set dummy $NM_FOR_TARGET; test -x $[2] ); then
2802         gcc_cv_nm="$NM_FOR_TARGET"
2803 else
2804         AC_PATH_PROG(gcc_cv_nm, $NM_FOR_TARGET)
2805 fi])
2807 AC_MSG_CHECKING(what nm to use)
2808 if test "$gcc_cv_nm" = ../binutils/nm-new$build_exeext; then
2809         # Single tree build which includes binutils.
2810         AC_MSG_RESULT(newly built nm)
2811         in_tree_nm=yes
2812 else
2813         AC_MSG_RESULT($gcc_cv_nm)
2814         in_tree_nm=no
2817 ORIGINAL_NM_FOR_TARGET=$gcc_cv_nm
2818 AC_SUBST(ORIGINAL_NM_FOR_TARGET)
2819 case "$ORIGINAL_NM_FOR_TARGET" in
2820   ./nm | ./nm$build_exeext) ;;
2821   *) AC_CONFIG_FILES(nm:exec-tool.in, [chmod +x nm]) ;;
2822 esac
2825 # Figure out what objdump we will be using.
2826 AS_VAR_SET_IF(gcc_cv_objdump,, [
2827 if test -f $gcc_cv_binutils_srcdir/configure.ac \
2828      && test -f ../binutils/Makefile \
2829      && test x$build = x$host; then
2830         # Single tree build which includes binutils.
2831         gcc_cv_objdump=../binutils/objdump$build_exeext
2832 elif test -x objdump$build_exeext; then
2833         gcc_cv_objdump=./objdump$build_exeext
2834 elif ( set dummy $OBJDUMP_FOR_TARGET; test -x $[2] ); then
2835         gcc_cv_objdump="$OBJDUMP_FOR_TARGET"
2836 else
2837         AC_PATH_PROG(gcc_cv_objdump, $OBJDUMP_FOR_TARGET)
2838 fi])
2840 AC_MSG_CHECKING(what objdump to use)
2841 if test "$gcc_cv_objdump" = ../binutils/objdump$build_exeext; then
2842         # Single tree build which includes binutils.
2843         AC_MSG_RESULT(newly built objdump)
2844 elif test x$gcc_cv_objdump = x; then
2845         AC_MSG_RESULT(not found)
2846 else
2847         AC_MSG_RESULT($gcc_cv_objdump)
2850 # Figure out what readelf we will be using.
2851 AS_VAR_SET_IF(gcc_cv_readelf,, [
2852 if test -f $gcc_cv_binutils_srcdir/configure.ac \
2853      && test -f ../binutils/Makefile \
2854      && test x$build = x$host; then
2855         # Single tree build which includes binutils.
2856         gcc_cv_readelf=../binutils/readelf$build_exeext
2857 elif test -x readelf$build_exeext; then
2858         gcc_cv_readelf=./readelf$build_exeext
2859 elif ( set dummy $READELF_FOR_TARGET; test -x $[2] ); then
2860         gcc_cv_readelf="$READELF_FOR_TARGET"
2861 else
2862         AC_PATH_PROG(gcc_cv_readelf, $READELF_FOR_TARGET)
2863 fi])
2865 AC_MSG_CHECKING(what readelf to use)
2866 if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then
2867         # Single tree build which includes binutils.
2868         AC_MSG_RESULT(newly built readelf)
2869 elif test x$gcc_cv_readelf = x; then
2870         AC_MSG_RESULT(not found)
2871 else
2872         AC_MSG_RESULT($gcc_cv_readelf)
2875 # Figure out what otool we will be using.
2876 AS_VAR_SET_IF(gcc_cv_otool,, [
2877 if test -x otool$build_exeext; then
2878         gcc_cv_otool=./otool$build_exeext
2879 elif ( set dummy $OTOOL_FOR_TARGET; test -x $[2] ); then
2880         gcc_cv_otool="$OTOOL_FOR_TARGET"
2881 else
2882         AC_PATH_PROG(gcc_cv_otool, $OTOOL_FOR_TARGET)
2883 fi])
2885 AC_MSG_CHECKING(what otool to use)
2886 if test x$gcc_cv_otool = x; then
2887         AC_MSG_RESULT(not found)
2888 else
2889         AC_MSG_RESULT($gcc_cv_otool)
2892 # Figure out the dsymutil we will use.
2893 AS_VAR_SET_IF(gcc_cv_dsymutil,, [
2894 if test -x "$DEFAULT_DSYMUTIL"; then
2895     gcc_cv_dsymutil="$DEFAULT_DSYMUTIL"
2896 elif test -x dsymutil$build_exeext; then
2897     gcc_cv_dsymutil=./dsymutil$build_exeext
2898 elif ( set dummy $DSYMUTIL_FOR_TARGET; test -x $[2] ); then
2899     gcc_cv_dsymutil=$DSYMUTIL_FOR_TARGET
2900 elif ( set dummy $DSYMUTIL; test -x $[2] ); then
2901     gcc_cv_dsymutil=$DSYMUTIL
2902 else
2903     AC_PATH_PROG(gcc_cv_dsymutil, $DSYMUTIL_FOR_TARGET)
2904 fi])
2906 ORIGINAL_DSYMUTIL_FOR_TARGET=$gcc_cv_dsymutil
2907 AC_SUBST(ORIGINAL_DSYMUTIL_FOR_TARGET)
2908 case "$ORIGINAL_DSYMUTIL_FOR_TARGET" in
2909   ./dsymutil | ./dsymutil$build_exeext) ;;
2910   *) AC_CONFIG_FILES(dsymutil:exec-tool.in, [chmod +x dsymutil]) ;;
2911 esac 
2913 # Figure out what assembler alignment features are present.
2914 gcc_GAS_CHECK_FEATURE([.balign and .p2align], gcc_cv_as_balign_and_p2align,,
2915 [.balign 4
2916 .p2align 2],,
2917 [AC_DEFINE(HAVE_GAS_BALIGN_AND_P2ALIGN, 1,
2918   [Define if your assembler supports .balign and .p2align.])])
2920 gcc_GAS_CHECK_FEATURE([.p2align with maximum skip], gcc_cv_as_max_skip_p2align,,
2921  [.p2align 4,,7],,
2922 [AC_DEFINE(HAVE_GAS_MAX_SKIP_P2ALIGN, 1,
2923   [Define if your assembler supports specifying the maximum number
2924    of bytes to skip when using the GAS .p2align command.])])
2926 gcc_GAS_CHECK_FEATURE([.literal16], gcc_cv_as_literal16,,
2927  [.literal16],,
2928 [AC_DEFINE(HAVE_GAS_LITERAL16, 1,
2929   [Define if your assembler supports .literal16.])])
2931 gcc_GAS_CHECK_FEATURE([working .subsection -1], gcc_cv_as_subsection_m1,,
2932  [conftest_label1: .word 0
2933 .subsection -1
2934 conftest_label2: .word 0
2935 .previous],
2936  [if test x$gcc_cv_nm != x; then
2937     $gcc_cv_nm conftest.o | grep conftest_label1 > conftest.nm1
2938     $gcc_cv_nm conftest.o | grep conftest_label2 | sed -e 's/label2/label1/' > conftest.nm2
2939     if cmp conftest.nm1 conftest.nm2 > /dev/null 2>&1
2940     then :
2941     else gcc_cv_as_subsection_m1=yes
2942     fi
2943     rm -f conftest.nm1 conftest.nm2
2944   fi],
2945  [AC_DEFINE(HAVE_GAS_SUBSECTION_ORDERING, 1,
2946   [Define if your assembler supports .subsection and .subsection -1 starts
2947    emitting at the beginning of your section.])])
2949 gcc_GAS_CHECK_FEATURE([.weak], gcc_cv_as_weak,,
2950  [      .weak foobar],,
2951 [AC_DEFINE(HAVE_GAS_WEAK, 1, [Define if your assembler supports .weak.])])
2953 gcc_GAS_CHECK_FEATURE([.weakref], gcc_cv_as_weakref,,
2954  [      .weakref foobar, barfnot],,
2955 [AC_DEFINE(HAVE_GAS_WEAKREF, 1, [Define if your assembler supports .weakref.])])
2957 gcc_GAS_CHECK_FEATURE([.nsubspa comdat], gcc_cv_as_nsubspa_comdat,,
2958  [      .SPACE $TEXT$
2959         .NSUBSPA $CODE$,COMDAT],,
2960 [AC_DEFINE(HAVE_GAS_NSUBSPA_COMDAT, 1, [Define if your assembler supports .nsubspa comdat option.])])
2962 # .hidden needs to be supported in both the assembler and the linker,
2963 # because GNU LD versions before 2.12.1 have buggy support for STV_HIDDEN.
2964 # This is irritatingly difficult to feature test for; we have to check the
2965 # date string after the version number.  If we've got an in-tree
2966 # ld, we don't know its patchlevel version, so we set the baseline at 2.13
2967 # to be safe.
2968 # The gcc_GAS_CHECK_FEATURE call just sets a cache variable.
2969 case "${target}" in
2970   *-*-aix*)
2971     conftest_s='        .globl foobar,hidden'
2972     ;;
2973   *)
2974     conftest_s='        .hidden foobar
2975 foobar:'
2976     ;;
2977 esac
2978 gcc_GAS_CHECK_FEATURE([.hidden], gcc_cv_as_hidden,, [$conftest_s])
2979 case "${target}" in
2980   *-*-darwin*)
2981     # Darwin as has some visibility support, though with a different syntax.
2982     gcc_cv_as_hidden=yes
2983     ;;
2984 esac
2986 # gnu_indirect_function type is an extension proposed at
2987 # http://groups.google/com/group/generic-abi/files. It allows dynamic runtime
2988 # selection of function implementation
2989 AC_ARG_ENABLE(gnu-indirect-function,
2990  [AS_HELP_STRING([--enable-gnu-indirect-function],
2991                  [enable the use of the @gnu_indirect_function to glibc systems])],
2992  [case $enable_gnu_indirect_function in
2993     yes | no) ;;
2994     *) AC_MSG_ERROR(['$enable_gnu_indirect_function' is an invalid value for --enable-gnu-indirect-function.
2995 Valid choices are 'yes' and 'no'.]) ;;
2996   esac],
2997  [enable_gnu_indirect_function="$default_gnu_indirect_function"])
2999 case "${target}" in
3000   riscv*-*-linux*)
3001     AC_MSG_CHECKING(linker ifunc IRELATIVE support)
3002     cat > conftest.s <<EOF
3003         .text
3004         .type   foo_resolver, @function
3005 foo_resolver:
3006         ret
3007         .size   foo_resolver, .-foo_resolver
3009         .globl  foo
3010         .type   foo, %gnu_indirect_function
3011         .set    foo, foo_resolver
3013         .globl  bar
3014         .type   bar, @function
3015 bar:
3016         call    foo
3017         ret
3018         .size   bar, .-bar
3020     if test x$gcc_cv_as != x \
3021        && test x$gcc_cv_ld != x \
3022        && test x$gcc_cv_readelf != x \
3023        && $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
3024        && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \
3025        && $gcc_cv_readelf --relocs --wide conftest \
3026           | grep R_RISCV_IRELATIVE > /dev/null 2>&1; then
3027       enable_gnu_indirect_function=yes
3028     fi
3029     rm -f conftest conftest.o conftest.s
3030     AC_MSG_RESULT($enable_gnu_indirect_function)
3031     ;;
3032 esac
3034 gif=`if test x$enable_gnu_indirect_function = xyes; then echo 1; else echo 0; fi`
3035 AC_DEFINE_UNQUOTED(HAVE_GNU_INDIRECT_FUNCTION, $gif,
3036 [Define if your system supports gnu indirect functions.])
3039 changequote(,)dnl
3040 if test $in_tree_ld != yes ; then
3041   ld_ver=`$gcc_cv_ld --version 2>/dev/null | sed 1q`
3042   if echo "$ld_ver" | grep GNU > /dev/null; then
3043     if test x"$ld_is_gold" = xyes; then
3044       # GNU gold --version looks like this:
3045       #
3046       # GNU gold (GNU Binutils 2.21.51.20110225) 1.11
3047       #
3048       # We extract the binutils version which is more familiar and specific
3049       # than the gold version.
3050       ld_vers=`echo $ld_ver | sed -n \
3051           -e 's,^[^)]*[  ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
3052     else
3053       # GNU ld --version looks like this:
3054       #
3055       # GNU ld (GNU Binutils) 2.21.51.20110225
3056       ld_vers=`echo $ld_ver | sed -n \
3057           -e 's,^.*[     ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
3058     fi
3059     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'`
3060     ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
3061     ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
3062     ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
3063   else
3064     case "${target}" in
3065       *-*-solaris2*)
3066         # Solaris 2 ld -V output looks like this for a regular version:
3067         #
3068         # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1699
3069         #
3070         # but test versions add stuff at the end:
3071         #
3072         # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1701:onnv-ab196087-6931056-03/25/10
3073         #
3074         # ld and ld.so.1 are guaranteed to be updated in lockstep, so ld version
3075         # numbers can be used in ld.so.1 feature checks even if a different
3076         # linker is configured.
3077         ld_ver=`$gcc_cv_ld -V 2>&1`
3078         if echo "$ld_ver" | grep 'Solaris Link Editors' > /dev/null; then
3079           ld_vers=`echo $ld_ver | sed -n \
3080             -e 's,^.*: 5\.[0-9][0-9]*-\([0-9]\.[0-9][0-9]*\).*$,\1,p'`
3081           ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
3082           ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
3083         fi
3084         ;;
3085     esac
3086   fi
3088 changequote([,])dnl
3090 AC_CACHE_CHECK(linker for .hidden support, gcc_cv_ld_hidden,
3091 [[if test $in_tree_ld = yes ; then
3092   gcc_cv_ld_hidden=no
3093   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 \
3094      && test $in_tree_ld_is_elf = yes; then
3095      gcc_cv_ld_hidden=yes
3096   fi
3097 else
3098   gcc_cv_ld_hidden=yes
3099   if test x"$ld_is_gold" = xyes; then
3100     :
3101   elif test x"$ld_is_mold" = xyes; then
3102     :
3103   elif echo "$ld_ver" | grep GNU > /dev/null; then
3104     if test 0"$ld_date" -lt 20020404; then
3105       if test -n "$ld_date"; then
3106         # If there was date string, but was earlier than 2002-04-04, fail
3107         gcc_cv_ld_hidden=no
3108       elif test -z "$ld_vers"; then
3109         # If there was no date string nor ld version number, something is wrong
3110         gcc_cv_ld_hidden=no
3111       else
3112         test -z "$ld_vers_patch" && ld_vers_patch=0
3113         if test "$ld_vers_major" -lt 2; then
3114           gcc_cv_ld_hidden=no
3115         elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 12; then
3116           gcc_cv_ld_hidden="no"
3117         elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 12 -a "$ld_vers_patch" -eq 0; then
3118           gcc_cv_ld_hidden=no
3119         fi
3120       fi
3121     fi
3122   else
3123     case "${target}" in
3124       *-*-aix[789]*)
3125         gcc_cv_ld_hidden=yes
3126         ;;
3127       *-*-darwin*)
3128         # Darwin ld has some visibility support.
3129         gcc_cv_ld_hidden=yes
3130         ;;
3131       hppa64*-*-hpux* | ia64*-*-hpux*)
3132         gcc_cv_ld_hidden=yes
3133         ;;
3134       *-*-solaris2*)
3135         # Support for .hidden in Sun ld appeared in Solaris 9 FCS, but
3136         # .symbolic was only added in Solaris 9 12/02.
3137         gcc_cv_ld_hidden=yes
3138         ;;
3139       *)
3140         gcc_cv_ld_hidden=no
3141         ;;
3142     esac
3143   fi
3144 fi]])
3145 libgcc_visibility=no
3146 AC_SUBST(libgcc_visibility)
3147 GCC_TARGET_TEMPLATE([HAVE_GAS_HIDDEN])
3148 if test $gcc_cv_as_hidden = yes && test $gcc_cv_ld_hidden = yes; then
3149   libgcc_visibility=yes
3150   AC_DEFINE(HAVE_GAS_HIDDEN, 1,
3151   [Define if your assembler and linker support .hidden.])
3154 AC_MSG_CHECKING(linker read-only and read-write section mixing)
3155 gcc_cv_ld_ro_rw_mix=unknown
3156 if test $in_tree_ld = yes ; then
3157   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 \
3158      && test $in_tree_ld_is_elf = yes; then
3159     gcc_cv_ld_ro_rw_mix=read-write
3160   fi
3161 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
3162   echo '.section myfoosect, "a"' > conftest1.s
3163   echo '.section myfoosect, "aw"' > conftest2.s
3164   echo '.byte 1' >> conftest2.s
3165   echo '.section myfoosect, "a"' > conftest3.s
3166   echo '.byte 0' >> conftest3.s
3167   if $gcc_cv_as -o conftest1.o conftest1.s > /dev/null 2>&1 \
3168      && $gcc_cv_as -o conftest2.o conftest2.s > /dev/null 2>&1 \
3169      && $gcc_cv_as -o conftest3.o conftest3.s > /dev/null 2>&1 \
3170      && $gcc_cv_ld -shared -o conftest1.so conftest1.o \
3171         conftest2.o conftest3.o > /dev/null 2>&1; then
3172     gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest1.so \
3173                          | sed -e '/myfoosect/!d' -e N`
3174     if echo "$gcc_cv_ld_ro_rw_mix" | grep CONTENTS > /dev/null; then
3175       if echo "$gcc_cv_ld_ro_rw_mix" | grep READONLY > /dev/null; then
3176         gcc_cv_ld_ro_rw_mix=read-only
3177       else
3178         gcc_cv_ld_ro_rw_mix=read-write
3179       fi
3180     fi
3181   fi
3182 changequote(,)dnl
3183   rm -f conftest.* conftest[123].*
3184 changequote([,])dnl
3186 if test x$gcc_cv_ld_ro_rw_mix = xread-write; then
3187         AC_DEFINE(HAVE_LD_RO_RW_SECTION_MIXING, 1,
3188   [Define if your linker links a mix of read-only
3189    and read-write sections into a read-write section.])
3191 AC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)
3193 gcc_AC_INITFINI_ARRAY
3195 # Check if we have .[us]leb128, and support symbol arithmetic with it.
3196 # Older versions of GAS and some non-GNU assemblers, have a bugs handling
3197 # these directives, even when they appear to accept them.
3198 gcc_GAS_CHECK_FEATURE([.sleb128 and .uleb128], gcc_cv_as_leb128,,
3199 [       .data
3200         .uleb128 L2 - L1
3202         .uleb128 1280
3203         .sleb128 -1010
3205         .uleb128 0x8000000000000000
3208 if test "x$gcc_cv_objdump" != x; then
3209   if $gcc_cv_objdump -s conftest.o 2>/dev/null \
3210      | grep '04800a8e 78808080 80808080 808001' >/dev/null; then
3211     gcc_cv_as_leb128=yes
3212   fi
3213 elif test "x$gcc_cv_otool" != x; then
3214   if $gcc_cv_otool -d conftest.o 2>/dev/null \
3215      | grep '04 80 0a 8e 78 80 80 80 80 80 80 80 80 80 01' >/dev/null; then
3216     gcc_cv_as_leb128=yes
3217   fi
3218 else
3219   # play safe, assume the assembler is broken.
3220   :
3223  [AC_DEFINE(HAVE_AS_LEB128, 1,
3224    [Define if your assembler supports .sleb128 and .uleb128.])],
3225  [AC_DEFINE(HAVE_AS_LEB128, 0,
3226    [Define if your assembler supports .sleb128 and .uleb128.])])
3228 # Determine if an .eh_frame section is read-only.
3229 gcc_fn_eh_frame_ro () {
3230   $gcc_cv_as $1 -o conftest.o conftest.s > /dev/null 2>&1 && \
3231     $gcc_cv_objdump -h conftest.o 2>/dev/null | \
3232     sed -e '/.eh_frame/!d' -e N | grep READONLY > /dev/null
3235 # Check if we have assembler support for unwind directives.
3236 gcc_GAS_CHECK_FEATURE([cfi directives], gcc_cv_as_cfi_directive,,
3237 [       .text
3238         .cfi_startproc
3239         .cfi_offset 0, 0
3240         .cfi_same_value 1
3241         .cfi_def_cfa 1, 2
3242         .cfi_escape 1, 2, 3, 4, 5
3243         .cfi_endproc],
3244 [case "$target" in
3245   *-*-solaris*)
3246     # If the linker used on Solaris (like Sun ld) isn't capable of merging
3247     # read-only and read-write sections, we need to make sure that the
3248     # assembler used emits read-write .eh_frame sections.
3249     if test "x$gcc_cv_ld_ro_rw_mix" = xread-write; then
3250       gcc_cv_as_cfi_directive=yes
3251     elif test "x$gcc_cv_objdump" = x; then
3252       # No objdump, err on the side of caution.
3253       gcc_cv_as_cfi_directive=no
3254     else
3255       if test x$gas = xyes; then
3256         as_32_opt="--32"
3257         as_64_opt="--64"
3258       else
3259         as_32_opt="-m32"
3260         as_64_opt="-m64"
3261       fi
3262       case "$target" in
3263         sparc*-*-solaris2.*)
3264           # On Solaris/SPARC, .eh_frame sections should always be read-write.
3265           if gcc_fn_eh_frame_ro $as_32_opt \
3266              || gcc_fn_eh_frame_ro $as_64_opt; then
3267             gcc_cv_as_cfi_directive=no
3268           else
3269             gcc_cv_as_cfi_directive=yes
3270           fi
3271           ;;
3272         i?86-*-solaris2.* | x86_64-*-solaris2.*)
3273           # On Solaris/x86, make sure that GCC and assembler agree on using
3274           # read-only .eh_frame sections for 64-bit.
3275           if gcc_fn_eh_frame_ro $as_32_opt; then
3276             gcc_cv_as_cfi_directive=no
3277           elif gcc_fn_eh_frame_ro $as_64_opt; then
3278             gcc_cv_as_cfi_directive=yes
3279           else
3280             gcc_cv_as_cfi_directive=no
3281           fi
3282           ;;
3283       esac
3284     fi
3285     ;;
3286   *-*-*)
3287     gcc_cv_as_cfi_directive=yes
3288     ;;
3289 esac])
3290 if test $gcc_cv_as_cfi_directive = yes && test x$gcc_cv_objdump != x; then
3291 gcc_GAS_CHECK_FEATURE([working cfi advance], gcc_cv_as_cfi_advance_working,,
3292 [       .text
3293         .cfi_startproc
3294         .cfi_adjust_cfa_offset 64
3295         .skip 75040, 0
3296         .cfi_adjust_cfa_offset 128
3297         .cfi_endproc],
3299 if $gcc_cv_objdump -Wf conftest.o 2>/dev/null \
3300     | grep 'DW_CFA_advance_loc[24]:[    ][      ]*75040[        ]' >/dev/null; then
3301    gcc_cv_as_cfi_advance_working=yes
3304 else
3305   # no objdump, err on the side of caution
3306   gcc_cv_as_cfi_advance_working=no
3308 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_DIRECTIVE)
3309 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_DIRECTIVE,
3310   [`if test $gcc_cv_as_cfi_directive = yes \
3311        && test $gcc_cv_as_cfi_advance_working = yes; then echo 1; else echo 0; fi`],
3312   [Define 0/1 if your assembler supports CFI directives.])
3314 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
3315 gcc_GAS_CHECK_FEATURE([cfi personality directive],
3316   gcc_cv_as_cfi_personality_directive,,
3317 [       .text
3318         .cfi_startproc
3319         .cfi_personality 0, symbol
3320         .cfi_endproc])
3321 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE,
3322   [`if test $gcc_cv_as_cfi_personality_directive = yes; then echo 1; else echo 0; fi`],
3323   [Define 0/1 if your assembler supports .cfi_personality.])
3325 gcc_GAS_CHECK_FEATURE([cfi sections directive],
3326   gcc_cv_as_cfi_sections_directive,,
3327 [       .text
3328         .cfi_sections .debug_frame, .eh_frame
3329         .cfi_startproc
3330         .cfi_endproc],
3331 [case $target_os in
3332   win32 | pe | cygwin* | mingw32*)
3333     # Need to check that we generated the correct relocation for the
3334     # .debug_frame section.  This was fixed for binutils 2.21.
3335     gcc_cv_as_cfi_sections_directive=no
3336     if test "x$gcc_cv_objdump" != x; then
3337      if $gcc_cv_objdump -j .debug_frame -r conftest.o 2>/dev/null | \
3338         grep secrel > /dev/null; then
3339       gcc_cv_as_cfi_sections_directive=yes
3340      fi
3341     fi
3342     ;;
3343   *)
3344     gcc_cv_as_cfi_sections_directive=yes
3345     ;;
3346 esac])
3347 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
3348 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_SECTIONS_DIRECTIVE,
3349   [`if test $gcc_cv_as_cfi_sections_directive = yes; then echo 1; else echo 0; fi`],
3350   [Define 0/1 if your assembler supports .cfi_sections.])
3352 # GAS versions up to and including 2.11.0 may mis-optimize
3353 # .eh_frame data.
3354 gcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,,
3355 [       .text
3356 .LFB1:
3357         .4byte  0
3358 .L1:
3359         .4byte  0
3360 .LFE1:
3361         .section        .eh_frame,"aw",@progbits
3362 __FRAME_BEGIN__:
3363         .4byte  .LECIE1-.LSCIE1
3364 .LSCIE1:
3365         .4byte  0x0
3366         .byte   0x1
3367         .ascii "z\0"
3368         .byte   0x1
3369         .byte   0x78
3370         .byte   0x1a
3371         .byte   0x0
3372         .byte   0x4
3373         .4byte  1
3374         .p2align 1
3375 .LECIE1:
3376 .LSFDE1:
3377         .4byte  .LEFDE1-.LASFDE1
3378 .LASFDE1:
3379         .4byte  .LASFDE1-__FRAME_BEGIN__
3380         .4byte  .LFB1
3381         .4byte  .LFE1-.LFB1
3382         .byte   0x4
3383         .4byte  .LFE1-.LFB1
3384         .byte   0x4
3385         .4byte  .L1-.LFB1
3386 .LEFDE1:],
3387 [  dnl # For autoconf 2.5x, must protect trailing spaces with @&t@.
3388 cat > conftest.lit <<EOF
3389  0000 10000000 00000000 017a0001 781a0004  .........z..x...
3390  0010 01000000 12000000 18000000 00000000  ................
3391  0020 08000000 04080000 0044               .........D      @&t@
3393 cat > conftest.big <<EOF
3394  0000 00000010 00000000 017a0001 781a0004  .........z..x...
3395  0010 00000001 00000012 00000018 00000000  ................
3396  0020 00000008 04000000 0844               .........D      @&t@
3398   # If the assembler didn't choke, and we can objdump,
3399   # and we got the correct data, then succeed.
3400   # The text in the here-document typically retains its unix-style line
3401   # endings, while the output of objdump will use host line endings.
3402   # Therefore, use diff -b for the comparisons.
3403   if test x$gcc_cv_objdump != x \
3404   && $gcc_cv_objdump -s -j .eh_frame conftest.o 2>/dev/null \
3405      | tail -3 > conftest.got \
3406   && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \
3407     || diff -b conftest.big conftest.got > /dev/null 2>&1; }
3408   then
3409     gcc_cv_as_eh_frame=yes
3410   elif AC_TRY_COMMAND($gcc_cv_as -o conftest.o --traditional-format /dev/null); then
3411     gcc_cv_as_eh_frame=buggy
3412   else
3413     # Uh oh, what do we do now?
3414     gcc_cv_as_eh_frame=no
3415   fi])
3417 if test $gcc_cv_as_eh_frame = buggy; then
3418   AC_DEFINE(USE_AS_TRADITIONAL_FORMAT, 1,
3419   [Define if your assembler mis-optimizes .eh_frame data.])
3422 # Test if the assembler supports the section flag 'e' or #exclude for
3423 # specifying an excluded section.
3424 gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_e,
3425  [--fatal-warnings],
3426  [.section foo1,"e"
3427   .byte 0,0,0,0])
3428 if test $gcc_cv_as_section_exclude_e = no; then
3429   case "${target}" in
3430     # Solaris as uses #exclude instead.
3431     *-*-solaris2*)
3432       case "${target}" in
3433         sparc*-*-solaris2*)
3434           conftest_s='.section "foo1", #exclude'
3435           ;;
3436         i?86-*-solaris2* | x86_64-*-solaris2*)
3437           conftest_s='.section foo1, #exclude'
3438           ;;      
3439       esac
3440       ;;
3441     esac
3442   gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_hash,,
3443     [$conftest_s
3444      .byte 0,0,0,0])
3446 AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_EXCLUDE,
3447   [`if test $gcc_cv_as_section_exclude_e = yes || test $gcc_cv_as_section_exclude_hash = yes; then echo 1; else echo 0; fi`],
3448 [Define if your assembler supports specifying the exclude section flag.])
3450 # Test if the assembler supports the section flag 'R' for specifying
3451 # section with SHF_GNU_RETAIN.
3452 case "${target}" in
3453   # Solaris may use GNU assembler with Solairs ld.  Even if GNU
3454   # assembler supports the section flag 'R', it doesn't mean that
3455   # Solairs ld supports it.
3456   *-*-solaris2*)
3457     gcc_cv_as_shf_gnu_retain=no
3458     ;;
3459   *)
3460     gcc_GAS_CHECK_FEATURE([section 'R' flag], gcc_cv_as_shf_gnu_retain,
3461       [--fatal-warnings],
3462       [.section .foo,"awR",%progbits
3463 .byte 0])
3464     ;;
3465 esac
3466 AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_GNU_RETAIN,
3467   [`if test $gcc_cv_as_shf_gnu_retain = yes; then echo 1; else echo 0; fi`],
3468   [Define 0/1 if your assembler supports marking sections with SHF_GNU_RETAIN flag.])
3470 # Test if the assembler supports the section flag 'o' for specifying
3471 # section with link-order.
3472 case "${target}" in
3473   # Solaris may use GNU assembler with Solairs ld.  Even if GNU
3474   # assembler supports the section flag 'o', it doesn't mean that
3475   # Solairs ld supports it.
3476   *-*-solaris2*)
3477     gcc_cv_as_section_link_order=no
3478     ;;
3479   *)
3480     gcc_GAS_CHECK_FEATURE([section 'o' flag], gcc_cv_as_section_link_order,
3481       [--fatal-warnings],
3482       [.section .foo,"a"
3483 .byte 0
3484 .section __patchable_function_entries,"awo",%progbits,.foo
3485 .byte 0])
3486     ;;
3487 esac
3488 AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_LINK_ORDER,
3489   [`if test $gcc_cv_as_section_link_order = yes; then echo 1; else echo 0; fi`],
3490   [Define 0/1 if your assembler supports 'o' flag in .section directive.])
3492 gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
3493  [--fatal-warnings],
3494  [.section .rodata.str, "aMS", @progbits, 1])
3495 if test $gcc_cv_as_shf_merge = no; then
3496   gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
3497     [--fatal-warnings],
3498     [.section .rodata.str, "aMS", %progbits, 1])
3500 AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
3501   [`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`],
3502 [Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
3504 gcc_cv_ld_aligned_shf_merge=yes
3505 case "$target" in
3506   # SHF_MERGE support is broken in Solaris ld up to Solaris 11.3/SPARC for
3507   # alignment > 1.
3508   sparc*-*-solaris2.11*)
3509     if test x"$gnu_ld" = xno \
3510        && test "$ld_vers_major" -lt 2 && test "$ld_vers_minor" -lt 3159; then
3511       gcc_cv_ld_aligned_shf_merge=no
3512     fi
3513     ;;
3514 esac
3515 AC_DEFINE_UNQUOTED(HAVE_LD_ALIGNED_SHF_MERGE,
3516   [`if test $gcc_cv_ld_aligned_shf_merge = yes; then echo 1; else echo 0; fi`],
3517 [Define 0/1 if your linker supports the SHF_MERGE flag with section alignment > 1.])
3519 gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as)],
3520  gcc_cv_as_comdat_group,
3521  [--fatal-warnings],
3522  [.section .text,"axG",@progbits,.foo,comdat])
3523 if test $gcc_cv_as_comdat_group = yes; then
3524   gcc_cv_as_comdat_group_percent=no
3525   gcc_cv_as_comdat_group_group=no
3526 else
3527  gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as, %type)],
3528    gcc_cv_as_comdat_group_percent,
3529    [--fatal-warnings],
3530    [.section .text,"axG",%progbits,.foo,comdat])
3531  if test $gcc_cv_as_comdat_group_percent = yes; then
3532    gcc_cv_as_comdat_group_group=no
3533  else
3534    case "${target}" in
3535      # Sun as uses a completely different syntax.
3536      *-*-solaris2*)
3537        case "${target}" in
3538          sparc*-*-solaris2*)
3539            conftest_s='
3540                .group foo,".text%foo",#comdat
3541                .section ".text%foo", #alloc,#execinstr,#progbits
3542                .globl foo
3543              foo:
3544              '
3545            ;;
3546          i?86-*-solaris2* | x86_64-*-solaris2*)
3547            conftest_s='
3548                .group foo,.text%foo,#comdat
3549                .section .text%foo, "ax", @progbits
3550                .globl  foo
3551              foo:
3552              '
3553            ;;
3554        esac
3555        gcc_GAS_CHECK_FEATURE([COMDAT group support (Sun as, .group)],
3556          gcc_cv_as_comdat_group_group,
3557          , [$conftest_s])
3558        ;;
3559    esac
3560    if test -z "${gcc_cv_as_comdat_group_group+set}"; then
3561      gcc_cv_as_comdat_group_group=no
3562    fi
3563  fi
3565 if test x"$ld_is_gold" = xyes; then
3566   comdat_group=yes
3567 elif test x"$ld_is_mold" = xyes; then
3568   comdat_group=yes
3569 elif test $in_tree_ld = yes ; then
3570   comdat_group=no
3571   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 \
3572      && test $in_tree_ld_is_elf = yes; then
3573      comdat_group=yes
3574   fi
3575 elif echo "$ld_ver" | grep GNU > /dev/null; then
3576   comdat_group=yes
3577   if test 0"$ld_date" -lt 20050308; then
3578     if test -n "$ld_date"; then
3579       # If there was date string, but was earlier than 2005-03-08, fail
3580       comdat_group=no
3581     elif test "$ld_vers_major" -lt 2; then
3582       comdat_group=no
3583     elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
3584       comdat_group=no
3585     fi
3586   fi
3587 else
3588 changequote(,)dnl
3589   case "${target}" in
3590     *-*-solaris2.1[1-9]*)
3591       comdat_group=no
3592       # Sun ld has COMDAT group support since Solaris 9, but it doesn't
3593       # interoperate with GNU as until Solaris 11 build 130, i.e. ld
3594       # version 1.688.
3595       #
3596       # If using Sun as for COMDAT group as emitted by GCC, one needs at
3597       # least ld version 1.2267.
3598       if test "$ld_vers_major" -gt 1; then
3599         comdat_group=yes
3600       elif test "x$gas_flag" = xyes && test "$ld_vers_minor" -ge 1688; then
3601         comdat_group=yes
3602       elif test "$ld_vers_minor" -ge 2267; then
3603         comdat_group=yes
3604       fi
3605       ;;
3606     *)
3607       # Assume linkers other than GNU ld don't support COMDAT group.
3608       comdat_group=no
3609       ;;
3610   esac
3611 changequote([,])dnl
3613 # Allow overriding the automatic COMDAT group tests above.
3614 AC_ARG_ENABLE(comdat,
3615   [AS_HELP_STRING([--enable-comdat], [enable COMDAT group support])],
3616   [comdat_group="$enable_comdat"])
3617 if test $comdat_group = no; then
3618   gcc_cv_as_comdat_group=no
3619   gcc_cv_as_comdat_group_percent=no
3620   gcc_cv_as_comdat_group_group=no
3622 AC_DEFINE_UNQUOTED(HAVE_COMDAT_GROUP,
3623   [`if test $gcc_cv_as_comdat_group = yes \
3624     || test $gcc_cv_as_comdat_group_percent = yes \
3625     || test $gcc_cv_as_comdat_group_group = yes; then echo 1; else echo 0; fi`],
3626 [Define 0/1 if your assembler and linker support COMDAT groups.])
3628 # Restrict this test to Solaris/x86: other targets define this statically.
3629 case "${target}" in
3630   i?86-*-solaris2* | x86_64-*-solaris2*)
3631     AC_MSG_CHECKING(support for hidden thunks in linkonce sections)
3632     if test $in_tree_ld = yes || echo "$ld_ver" | grep GNU > /dev/null; then
3633       hidden_linkonce=yes
3634     else
3635       case "${target}" in
3636         # Full support for hidden thunks in linkonce sections only appeared in
3637         # Solaris 11/OpenSolaris.
3638         *-*-solaris2.1[[1-9]]*)
3639           hidden_linkonce=yes
3640           ;;
3641         *)
3642           hidden_linkonce=no
3643           ;;
3644       esac
3645     fi
3646     AC_MSG_RESULT($hidden_linkonce)
3647     AC_DEFINE_UNQUOTED(USE_HIDDEN_LINKONCE,
3648       [`if test $hidden_linkonce = yes; then echo 1; else echo 0; fi`],
3649     [Define 0/1 if your linker supports hidden thunks in linkonce sections.])
3650   ;;
3651 esac
3653 gcc_GAS_CHECK_FEATURE([line table is_stmt support],
3654  gcc_cv_as_is_stmt,,
3655 [       .text
3656         .file 1 "conf.c"
3657         .loc 1 1 0 is_stmt 1],,
3658 [AC_DEFINE(HAVE_GAS_LOC_STMT, 1,
3659   [Define if your assembler supports the .loc is_stmt sub-directive.])])
3661 gcc_GAS_CHECK_FEATURE([line table discriminator support],
3662  gcc_cv_as_discriminator,,
3663 [       .text
3664         .file 1 "conf.c"
3665         .loc 1 1 0 discriminator 1],,
3666 [AC_DEFINE(HAVE_GAS_DISCRIMINATOR, 1,
3667   [Define if your assembler supports the .loc discriminator sub-directive.])])
3669 # Catch the newlib flag of the same name so we can gate GCC features on it.
3670 AC_ARG_ENABLE(newlib-nano-formatted-io,
3671 [AS_HELP_STRING([--enable-newlib-nano-formatted-io], [Use nano version
3672  formatted IO])],
3673 [case "${enableval}" in
3674   yes|no)
3675     ;;
3676   *)
3677     AC_MSG_ERROR([unknown newlib-nano-formatted-io setting $enableval])
3678     ;;
3679 esac], [])
3681 # Thread-local storage - the check is heavily parameterized.
3682 conftest_s=
3683 tls_as_opt=
3684 case "$target" in
3685 changequote(,)dnl
3686   alpha*-*-*)
3687     conftest_s='
3688         .section ".tdata","awT",@progbits
3689 foo:    .long   25
3690         .text
3691         ldq     $27,__tls_get_addr($29)         !literal!1
3692         lda     $16,foo($29)                    !tlsgd!1
3693         jsr     $26,($27),__tls_get_addr        !lituse_tlsgd!1
3694         ldq     $27,__tls_get_addr($29)         !literal!2
3695         lda     $16,foo($29)                    !tlsldm!2
3696         jsr     $26,($27),__tls_get_addr        !lituse_tlsldm!2
3697         ldq     $1,foo($29)                     !gotdtprel
3698         ldah    $2,foo($29)                     !dtprelhi
3699         lda     $3,foo($2)                      !dtprello
3700         lda     $4,foo($29)                     !dtprel
3701         ldq     $1,foo($29)                     !gottprel
3702         ldah    $2,foo($29)                     !tprelhi
3703         lda     $3,foo($2)                      !tprello
3704         lda     $4,foo($29)                     !tprel'
3705         tls_as_opt=--fatal-warnings
3706         ;;
3707   arc*-*-*)
3708     conftest_s='
3709         add_s r0,r0, @foo@tpoff'
3710         ;;
3711   cris-*-*|crisv32-*-*)
3712     conftest_s='
3713         .section ".tdata","awT",@progbits
3714 x:      .long   25
3715         .text
3716         move.d x:IE,$r10
3717         nop'
3718         tls_as_opt=--fatal-warnings
3719         ;;
3720   frv*-*-*)
3721     conftest_s='
3722         .section ".tdata","awT",@progbits
3723 x:      .long   25
3724         .text
3725         call    #gettlsoff(x)'
3726         ;;
3727   hppa*-*-linux*)
3728     conftest_s='
3729 t1:     .reg    %r20
3730 t2:     .reg    %r21
3731 gp:     .reg    %r19
3732         .section ".tdata","awT",@progbits
3733 foo:    .long   25
3734         .text
3735         .align  4
3736         addil LT%foo-$tls_gdidx$,gp
3737         ldo RT%foo-$tls_gdidx$(%r1),%arg0
3738         b __tls_get_addr
3739         nop             
3740         addil LT%foo-$tls_ldidx$,gp
3741         b __tls_get_addr
3742         ldo RT%foo-$tls_ldidx$(%r1),%arg0
3743         addil LR%foo-$tls_dtpoff$,%ret0
3744         ldo RR%foo-$tls_dtpoff$(%r1),%t1
3745         mfctl %cr27,%t1                 
3746         addil LT%foo-$tls_ieoff$,gp
3747         ldw RT%foo-$tls_ieoff$(%r1),%t2
3748         add %t1,%t2,%t3                 
3749         mfctl %cr27,%t1                 
3750         addil LR%foo-$tls_leoff$,%t1
3751         ldo RR%foo-$tls_leoff$(%r1),%t2'
3752         tls_as_opt=--fatal-warnings
3753         ;;
3754   arm*-*-*)
3755     conftest_s='
3756         .section ".tdata","awT",%progbits
3757 foo:    .long   25
3758         .text
3759 .word foo(gottpoff)
3760 .word foo(tpoff)
3761 .word foo(tlsgd)
3762 .word foo(tlsldm)
3763 .word foo(tlsldo)'
3764         ;;
3765   i[34567]86-*-* | x86_64-*-*)
3766     case "$target" in
3767       i[34567]86-*-solaris2.* | x86_64-*-solaris2.*)
3768         on_solaris=yes
3769         ;;
3770       *)
3771         on_solaris=no
3772         ;;
3773     esac
3774     if test x$on_solaris = xyes && test x$gas_flag = xno; then
3775       conftest_s='
3776         .section .tdata,"awt",@progbits'
3777       tls_section_flag=t
3778 changequote([,])dnl
3779       AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
3780 [Define to the flag used to mark TLS sections if the default (`T') doesn't work.])
3781 changequote(,)dnl
3782     else
3783       conftest_s='
3784         .section ".tdata","awT",@progbits'
3785       tls_section_flag=T
3786       tls_as_opt="--fatal-warnings"
3787     fi
3788     case "$target" in
3789       i[34567]86-*-*)
3790         if test x$on_solaris = xyes; then
3791           case $gas_flag in
3792             yes) tls_as_opt="$tls_as_opt --32" ;;
3793           esac
3794         fi
3795         conftest_s="$conftest_s
3796 foo:    .long   25
3797         .text
3798         movl    %gs:0, %eax
3799         leal    foo@tlsgd(,%ebx,1), %eax
3800         leal    foo@tlsldm(%ebx), %eax
3801         leal    foo@dtpoff(%eax), %edx
3802         movl    foo@gottpoff(%ebx), %eax
3803         subl    foo@gottpoff(%ebx), %eax
3804         addl    foo@gotntpoff(%ebx), %eax
3805         movl    foo@indntpoff, %eax
3806         movl    \$foo@tpoff, %eax
3807         subl    \$foo@tpoff, %eax
3808         leal    foo@ntpoff(%ecx), %eax"
3809         ;;
3810       x86_64-*-*)
3811         if test x$on_solaris = xyes; then
3812           case $gas_flag in
3813             yes) tls_as_opt="$tls_as_opt --64" ;;
3814             no)  tls_as_opt="$tls_as_opt -xarch=amd64" ;;
3815           esac    
3816         fi
3817         conftest_s="$conftest_s
3818 foo:    .long   25
3819         .text
3820         movq    %fs:0, %rax
3821         leaq    foo@tlsgd(%rip), %rdi
3822         leaq    foo@tlsld(%rip), %rdi
3823         leaq    foo@dtpoff(%rax), %rdx
3824         movq    foo@gottpoff(%rip), %rax
3825         movq    \$foo@tpoff, %rax"
3826         ;;
3827     esac
3828     ;;
3829   ia64-*-*)
3830     conftest_s='
3831         .section ".tdata","awT",@progbits
3832 foo:    data8   25
3833         .text
3834         addl    r16 = @ltoff(@dtpmod(foo#)), gp
3835         addl    r17 = @ltoff(@dtprel(foo#)), gp
3836         addl    r18 = @ltoff(@tprel(foo#)), gp
3837         addl    r19 = @dtprel(foo#), gp
3838         adds    r21 = @dtprel(foo#), r13
3839         movl    r23 = @dtprel(foo#)
3840         addl    r20 = @tprel(foo#), gp
3841         adds    r22 = @tprel(foo#), r13
3842         movl    r24 = @tprel(foo#)'
3843         tls_as_opt=--fatal-warnings
3844         ;;
3845   loongarch*-*-*)
3846     conftest_s='
3847         .section .tdata,"awT",@progbits
3848 x:      .word 2
3849         .text
3850         la.tls.gd $a0,x
3851         bl __tls_get_addr'
3852         tls_first_major=0
3853         tls_first_minor=0
3854         tls_as_opt='--fatal-warnings'
3855         ;;
3856   microblaze*-*-*)
3857     conftest_s='
3858         .section .tdata,"awT",@progbits
3860         .word 2
3861         .text
3862         addik r5,r20,x@TLSGD
3863         addik r5,r20,x@TLSLDM'
3864         tls_as_opt='--fatal-warnings'
3865         ;;
3866   mips*-*-*)
3867     conftest_s='
3868         .section .tdata,"awT",@progbits
3870         .word 2
3871         .text
3872         addiu $4, $28, %tlsgd(x)
3873         addiu $4, $28, %tlsldm(x)
3874         lui $4, %dtprel_hi(x)
3875         addiu $4, $4, %dtprel_lo(x)
3876         lw $4, %gottprel(x)($28)
3877         lui $4, %tprel_hi(x)
3878         addiu $4, $4, %tprel_lo(x)'
3879         tls_as_opt='-32 --fatal-warnings'
3880         ;;
3881   m68k-*-*)
3882     conftest_s='
3883         .section .tdata,"awT",@progbits
3885         .word 2
3886         .text
3887 foo:
3888         move.l x@TLSGD(%a5),%a0
3889         move.l x@TLSLDM(%a5),%a0
3890         move.l x@TLSLDO(%a5),%a0
3891         move.l x@TLSIE(%a5),%a0
3892         move.l x@TLSLE(%a5),%a0'
3893         tls_as_opt='--fatal-warnings'
3894         ;;
3895   nios2-*-*)
3896       conftest_s='
3897         .section ".tdata","awT",@progbits'
3898         tls_as_opt="--fatal-warnings"
3899         ;;
3900   aarch64*-*-*)
3901     conftest_s='
3902         .section ".tdata","awT",%progbits
3903 foo:    .long   25
3904         .text
3905         adrp  x0, :tlsgd:x
3906         add   x0, x0, #:tlsgd_lo12:x
3907         bl    __tls_get_addr
3908         nop'
3909         tls_as_opt='--fatal-warnings'
3910         ;;
3911   or1k*-*-*)
3912     conftest_s='
3913         .section ".tdata","awT",@progbits
3914 foo:    .long   25
3915         .text
3916         l.movhi r3, tpoffha(foo)
3917         l.add   r3, r3, r10
3918         l.lwz   r4, tpofflo(foo)(r3)'
3919     tls_as_opt=--fatal-warnings
3920     ;;
3921   powerpc-ibm-aix*)
3922     conftest_s='
3923         .extern __get_tpointer
3924         .toc
3925 LC..1:
3926         .tc a[TC],a[TL]@le
3927         .csect .text[PR]
3928 .tlstest:
3929         lwz 9,LC..1(2)
3930         bla __get_tpointer
3931         lwzx 3,9,3
3932         .globl a
3933         .csect a[TL],4
3935         .space 4'
3936         ;;
3937   powerpc64*-*-*)
3938     conftest_s='
3939         .section ".tdata","awT",@progbits
3940         .align 3
3941 ld0:    .space 8
3942 ld1:    .space 8
3943 x1:     .space 8
3944 x2:     .space 8
3945 x3:     .space 8
3946         .text
3947         addi 3,2,ld0@got@tlsgd
3948         bl .__tls_get_addr
3949         nop
3950         addi 3,2,ld1@toc
3951         bl .__tls_get_addr
3952         nop
3953         addi 3,2,x1@got@tlsld
3954         bl .__tls_get_addr
3955         nop
3956         addi 9,3,x1@dtprel
3957         bl .__tls_get_addr
3958         nop
3959         addis 9,3,x2@dtprel@ha
3960         addi 9,9,x2@dtprel@l
3961         bl .__tls_get_addr
3962         nop
3963         ld 9,x3@got@dtprel(2)
3964         add 9,9,3
3965         bl .__tls_get_addr
3966         nop'
3967         tls_as_opt="-a64 --fatal-warnings"
3968         ;;
3969   powerpc*-*-*)
3970     conftest_s='
3971         .section ".tdata","awT",@progbits
3972         .align 2
3973 ld0:    .space 4
3974 ld1:    .space 4
3975 x1:     .space 4
3976 x2:     .space 4
3977 x3:     .space 4
3978         .text
3979         addi 3,31,ld0@got@tlsgd
3980         bl __tls_get_addr
3981         addi 3,31,x1@got@tlsld
3982         bl __tls_get_addr
3983         addi 9,3,x1@dtprel
3984         addis 9,3,x2@dtprel@ha
3985         addi 9,9,x2@dtprel@l
3986         lwz 9,x3@got@tprel(31)
3987         add 9,9,x@tls
3988         addi 9,2,x1@tprel
3989         addis 9,2,x2@tprel@ha
3990         addi 9,9,x2@tprel@l'
3991         tls_as_opt="-a32 --fatal-warnings"
3992         ;;
3993   riscv*-*-*)
3994     conftest_s='
3995         .section .tdata,"awT",@progbits
3996 x:      .word 2
3997         .text
3998         la.tls.gd a0,x
3999         call __tls_get_addr'
4000         tls_as_opt='--fatal-warnings'
4001         ;;
4002   s390-*-*)
4003     conftest_s='
4004         .section ".tdata","awT",@progbits
4005 foo:    .long   25
4006         .text
4007         .long   foo@TLSGD
4008         .long   foo@TLSLDM
4009         .long   foo@DTPOFF
4010         .long   foo@NTPOFF
4011         .long   foo@GOTNTPOFF
4012         .long   foo@INDNTPOFF
4013         l       %r1,foo@GOTNTPOFF(%r12)
4014         l       %r1,0(%r1):tls_load:foo
4015         bas     %r14,0(%r1,%r13):tls_gdcall:foo
4016         bas     %r14,0(%r1,%r13):tls_ldcall:foo'
4017         tls_as_opt="-m31 --fatal-warnings"
4018         ;;
4019   s390x-*-*)
4020     conftest_s='
4021         .section ".tdata","awT",@progbits
4022 foo:    .long   25
4023         .text
4024         .quad   foo@TLSGD
4025         .quad   foo@TLSLDM
4026         .quad   foo@DTPOFF
4027         .quad   foo@NTPOFF
4028         .quad   foo@GOTNTPOFF
4029         lg      %r1,foo@GOTNTPOFF(%r12)
4030         larl    %r1,foo@INDNTPOFF
4031         brasl   %r14,__tls_get_offset@PLT:tls_gdcall:foo
4032         brasl   %r14,__tls_get_offset@PLT:tls_ldcall:foo'
4033         tls_as_opt="-m64 -Aesame --fatal-warnings"
4034         ;;
4035   sh-*-* | sh[123456789lbe]*-*-*)
4036     conftest_s='
4037         .section ".tdata","awT",@progbits
4038 foo:    .long   25
4039         .text
4040         .long   foo@TLSGD
4041         .long   foo@TLSLDM
4042         .long   foo@DTPOFF
4043         .long   foo@GOTTPOFF
4044         .long   foo@TPOFF'
4045         tls_as_opt=--fatal-warnings
4046         ;;
4047   sparc*-*-*)
4048     case "$target" in
4049       sparc*-sun-solaris2.*)
4050         on_solaris=yes
4051         ;;
4052       *)
4053         on_solaris=no
4054         ;;
4055     esac
4056     if test x$on_solaris = xyes && test x$gas_flag = xno; then
4057       conftest_s='
4058         .section ".tdata",#alloc,#write,#tls'
4059     else
4060       conftest_s='
4061         .section ".tdata","awT",@progbits'
4062         tls_as_opt="-32 --fatal-warnings"
4063     fi
4064     conftest_s="$conftest_s
4065 foo:    .long   25
4066         .text
4067         sethi   %tgd_hi22(foo), %o0
4068         add     %o0, %tgd_lo10(foo), %o1
4069         add     %l7, %o1, %o0, %tgd_add(foo)
4070         call    __tls_get_addr, %tgd_call(foo)
4071         sethi   %tldm_hi22(foo), %l1
4072         add     %l1, %tldm_lo10(foo), %l2
4073         add     %l7, %l2, %o0, %tldm_add(foo)
4074         call    __tls_get_addr, %tldm_call(foo)
4075         sethi   %tldo_hix22(foo), %l3
4076         xor     %l3, %tldo_lox10(foo), %l4
4077         add     %o0, %l4, %l5, %tldo_add(foo)
4078         sethi   %tie_hi22(foo), %o3
4079         add     %o3, %tie_lo10(foo), %o3
4080         ld      [%l7 + %o3], %o2, %tie_ld(foo)
4081         add     %g7, %o2, %o4, %tie_add(foo)
4082         sethi   %tle_hix22(foo), %l1
4083         xor     %l1, %tle_lox10(foo), %o5
4084         ld      [%g7 + %o5], %o1"
4085         ;;
4086   xtensa*-*-*)
4087     conftest_s='
4088         .section ".tdata","awT",@progbits
4089 foo:    .long   25
4090         .text
4091         movi    a8, foo@TLSFUNC
4092         movi    a10, foo@TLSARG
4093         callx8.tls a8, foo@TLSCALL'
4094         ;;
4095 changequote([,])dnl
4096 esac
4097 set_have_as_tls=no
4098 if test "x$enable_tls" = xno ; then
4099   : # TLS explicitly disabled.
4100 elif test "x$enable_tls" = xyes ; then
4101   set_have_as_tls=yes # TLS explicitly enabled.
4102 elif test -z "$conftest_s"; then
4103   : # If we don't have a check, assume no support.
4104 else
4105   gcc_GAS_CHECK_FEATURE(thread-local storage support, gcc_cv_as_tls,
4106   [$tls_as_opt], [$conftest_s],,
4107   [set_have_as_tls=yes])
4109 if test $set_have_as_tls = yes ; then
4110   AC_DEFINE(HAVE_AS_TLS, 1,
4111             [Define if your assembler and linker support thread-local storage.])
4114 # Target-specific assembler checks.
4116 AC_MSG_CHECKING(linker -Bstatic/-Bdynamic option)
4117 gcc_cv_ld_static_dynamic=no
4118 gcc_cv_ld_static_option='-Bstatic'
4119 gcc_cv_ld_dynamic_option='-Bdynamic'
4120 if test $in_tree_ld = yes ; then
4121   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
4122     gcc_cv_ld_static_dynamic=yes
4123   fi
4124 elif test x$gcc_cv_ld != x; then
4125   # Check if linker supports -Bstatic/-Bdynamic option
4126   if $gcc_cv_ld --help 2>&1 | grep -- -Bstatic > /dev/null \
4127      && $gcc_cv_ld --help 2>&1 | grep -- -Bdynamic > /dev/null; then
4128       gcc_cv_ld_static_dynamic=yes
4129   else
4130     case "$target" in
4131       # AIX ld uses -b flags
4132       *-*-aix4.[[23]]* | *-*-aix[[5-9]]*)
4133         gcc_cv_ld_static_dynamic=yes
4134         gcc_cv_ld_static_option="-bstatic"
4135         gcc_cv_ld_dynamic_option="-bdynamic"
4136         ;;
4137       # HP-UX ld uses -a flags to select between shared and archive.
4138       *-*-hpux*)
4139         if test x"$gnu_ld" = xno; then
4140           gcc_cv_ld_static_dynamic=yes
4141           gcc_cv_ld_static_option="-aarchive_shared"
4142           gcc_cv_ld_dynamic_option="-adefault"
4143         fi
4144         ;;
4145       # Solaris 2 ld always supports -Bstatic/-Bdynamic.
4146       *-*-solaris2*)
4147         gcc_cv_ld_static_dynamic=yes
4148         ;;
4149     esac
4150   fi
4152 if test x"$gcc_cv_ld_static_dynamic" = xyes; then
4153         AC_DEFINE(HAVE_LD_STATIC_DYNAMIC, 1,
4154 [Define if your linker supports -Bstatic/-Bdynamic or equivalent options.])
4155         AC_DEFINE_UNQUOTED(LD_STATIC_OPTION, "$gcc_cv_ld_static_option",
4156 [Define to the linker option to disable use of shared objects.])
4157         AC_DEFINE_UNQUOTED(LD_DYNAMIC_OPTION, "$gcc_cv_ld_dynamic_option",
4158 [Define to the linker option to enable use of shared objects.])
4160 AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
4162 AC_MSG_CHECKING(linker --version-script option)
4163 gcc_cv_ld_version_script=no
4164 ld_version_script_option=''
4165 if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
4166   gcc_cv_ld_version_script=yes
4167   ld_version_script_option='--version-script'
4168 elif test x$gcc_cv_ld != x; then
4169   case "$target" in
4170     # Solaris 2 ld always supports -M.  It also supports a subset of
4171     # --version-script since Solaris 11.4, but requires
4172     # -z gnu-version-script-compat to activate.
4173     *-*-solaris2*)
4174       gcc_cv_ld_version_script=yes
4175       ld_version_script_option='-M'
4176       ;;
4177   esac
4179 # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
4180 AC_MSG_RESULT($gcc_cv_ld_version_script)
4181 AC_SUBST(ld_version_script_option)
4183 AC_MSG_CHECKING(linker soname option)
4184 gcc_cv_ld_soname=no
4185 if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
4186   gcc_cv_ld_soname=yes
4187   ld_soname_option='-soname'
4188 elif test x$gcc_cv_ld != x; then
4189   case "$target" in
4190     *-*-darwin*)
4191       gcc_cv_ld_soname=yes
4192       ld_soname_option='-install_name'
4193       ;;
4194     # Solaris 2 ld always supports -h.  It also supports --soname for GNU
4195     # ld compatiblity since some Solaris 10 update.
4196     *-*-solaris2*)
4197       gcc_cv_ld_soname=yes
4198       ld_soname_option='-h'
4199       ;;
4200   esac
4202 # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
4203 AC_MSG_RESULT($gcc_cv_ld_soname)
4204 AC_SUBST(ld_soname_option)
4206 if test x"$demangler_in_ld" = xyes; then
4207   AC_MSG_CHECKING(linker --demangle support)
4208   gcc_cv_ld_demangle=no
4209   if test $in_tree_ld = yes; then
4210     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 \
4211       gcc_cv_ld_demangle=yes
4212     fi
4213   elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
4214     # Check if the GNU linker supports --demangle option
4215     if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
4216       gcc_cv_ld_demangle=yes
4217     fi
4218   fi
4219   if test x"$gcc_cv_ld_demangle" = xyes; then
4220     AC_DEFINE(HAVE_LD_DEMANGLE, 1,
4221 [Define if your linker supports --demangle option.])
4222   fi
4223   AC_MSG_RESULT($gcc_cv_ld_demangle)
4226 AC_MSG_CHECKING(linker plugin support)
4227 gcc_cv_lto_plugin=0
4228 if test -f liblto_plugin.la; then
4229   save_ld_ver="$ld_ver"
4230   save_ld_vers_major="$ld_vers_major"
4231   save_ld_vers_minor="$ld_vers_minor"
4232   save_ld_is_gold="$ld_is_gold"
4234   ld_is_gold=no
4236   if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" = x"$gcc_cv_ld"; then
4237     ld_ver="GNU ld"
4238     # FIXME: ld_is_gold?
4239     ld_vers_major="$gcc_cv_gld_major_version"
4240     ld_vers_minor="$gcc_cv_gld_minor_version"
4241   else
4242     # Determine plugin linker version.
4243     # FIXME: Partial duplicate from above, generalize.
4244 changequote(,)dnl
4245     ld_ver=`$ORIGINAL_PLUGIN_LD_FOR_TARGET --version 2>/dev/null | sed 1q`
4246     if echo "$ld_ver" | grep GNU > /dev/null; then
4247       if echo "$ld_ver" | grep "GNU gold" > /dev/null; then
4248         ld_is_gold=yes
4249         ld_vers=`echo $ld_ver | sed -n \
4250             -e 's,^[^)]*[        ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
4251       else
4252         ld_vers=`echo $ld_ver | sed -n \
4253             -e 's,^.*[   ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
4254       fi
4255       ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
4256       ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
4257     fi
4258 changequote([,])dnl
4259   fi
4261   # Determine plugin support.
4262   if echo "$ld_ver" | grep GNU > /dev/null; then
4263     # Require GNU ld or gold 2.21+ for plugin support by default.
4264     if test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 21; then
4265       gcc_cv_lto_plugin=2
4266     elif test "$ld_is_mold" = yes; then
4267       gcc_cv_lto_plugin=2
4268     # Allow -fuse-linker-plugin to enable plugin support in GNU gold 2.20.
4269     elif test "$ld_is_gold" = yes -a "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 20; then
4270       gcc_cv_lto_plugin=1
4271     fi
4272   fi
4274   ld_ver="$save_ld_ver"
4275   ld_vers_major="$save_ld_vers_major"
4276   ld_vers_minor="$save_ld_vers_minor"
4277   ld_is_gold="$save_ld_is_gold"
4279 AC_DEFINE_UNQUOTED(HAVE_LTO_PLUGIN, $gcc_cv_lto_plugin,
4280   [Define to the level of your linker's plugin support.])
4281 AC_MSG_RESULT($gcc_cv_lto_plugin)
4283 # Target OS-specific assembler checks.
4285 case "$target_os" in
4286   darwin*)
4287     gcc_GAS_CHECK_FEATURE([-mmacosx-version-min option],
4288       gcc_cv_as_mmacosx_version_min,
4289       [-mmacosx-version-min=10.1], [.text],,
4290       [AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1,
4291         [Define if your Mac OS X assembler supports the -mmacos-version-min option.])])
4292     ;;
4293 esac
4295 # Target CPU-specific assembler checks.
4297 case "$target" in
4298   aarch64*-*-*)
4299     gcc_GAS_CHECK_FEATURE([-mabi option], gcc_cv_as_aarch64_mabi,
4300                           [-mabi=lp64], [.text],,,)
4301     if test x$gcc_cv_as_aarch64_mabi = xyes; then
4302       AC_DEFINE(HAVE_AS_MABI_OPTION, 1,
4303                 [Define if your assembler supports the -mabi option.])
4304     else
4305       if test x$with_abi = xilp32; then
4306         AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4307                      Upgrade the Assembler.])
4308       fi
4309       if test x"$with_multilib_list" = xdefault; then
4310         TM_MULTILIB_CONFIG=lp64
4311       else
4312         aarch64_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
4313         for aarch64_multilib in ${aarch64_multilibs}; do
4314           case ${aarch64_multilib} in
4315             ilp32)
4316               AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4317                             Upgrade the Assembler.])
4318               ;;
4319             *)
4320               ;;
4321           esac
4322         done
4323       fi
4324     fi
4325     # Check if we have binutils support for relocations types needed by -fpic
4326     gcc_GAS_CHECK_FEATURE([-fpic relocs], gcc_cv_as_aarch64_picreloc,,
4327     [
4328         .text
4329         ldr     x0, [[x2, #:gotpage_lo15:globalsym]]
4330     ],,[AC_DEFINE(HAVE_AS_SMALL_PIC_RELOCS, 1,
4331         [Define if your assembler supports relocs needed by -fpic.])])
4332     # Enable Branch Target Identification Mechanism and Return Address
4333     # Signing by default.
4334     AC_ARG_ENABLE(standard-branch-protection,
4335     [
4336 AS_HELP_STRING([--enable-standard-branch-protection],
4337         [enable Branch Target Identification Mechanism and Return Address Signing by default for AArch64])
4338 AS_HELP_STRING([--disable-standard-branch-protection],
4339         [disable Branch Target Identification Mechanism and Return Address Signing by default for AArch64])
4340     ],
4341       [
4342         case $enableval in
4343           yes)
4344             tm_defines="${tm_defines} TARGET_ENABLE_BTI=1 TARGET_ENABLE_PAC_RET=1"
4345             ;;
4346           no)
4347             ;;
4348           *)
4349             AC_MSG_ERROR(['$enableval' is an invalid value for --enable-standard-branch-protection.\
4350   Valid choices are 'yes' and 'no'.])
4351             ;;
4352         esac
4353       ],
4354     [])
4355     # Enable default workaround for AArch64 Cortex-A53 erratum 835769.
4356     AC_ARG_ENABLE(fix-cortex-a53-835769,
4357     [
4358 AS_HELP_STRING([--enable-fix-cortex-a53-835769],
4359         [enable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4360 AS_HELP_STRING([--disable-fix-cortex-a53-835769],
4361         [disable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4362     ],
4363       [
4364         case $enableval in
4365           yes)
4366             tm_defines="${tm_defines} TARGET_FIX_ERR_A53_835769_DEFAULT=1"
4367             ;;
4368           no)
4369             ;;
4370           *)
4371             AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-835769.\
4372   Valid choices are 'yes' and 'no'.])
4373             ;;
4375         esac
4376       ],
4377     [])
4378     # Enable default workaround for AArch64 Cortex-A53 erratum 843419.
4379     AC_ARG_ENABLE(fix-cortex-a53-843419,
4380     [
4381 AS_HELP_STRING([--enable-fix-cortex-a53-843419],
4382         [enable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4383 AS_HELP_STRING([--disable-fix-cortex-a53-843419],
4384         [disable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4385     ],
4386       [
4387         case $enableval in
4388           yes)
4389             tm_defines="${tm_defines} TARGET_FIX_ERR_A53_843419_DEFAULT=1"
4390             ;;
4391           no)
4392             ;;
4393           *)
4394             AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-843419.\
4395   Valid choices are 'yes' and 'no'.])
4396             ;;
4398         esac
4399       ],
4400     [])
4401     ;;
4403   # All TARGET_ABI_OSF targets.
4404   alpha*-*-linux* | alpha*-*-*bsd*)
4405     gcc_GAS_CHECK_FEATURE([explicit relocation support],
4406         gcc_cv_as_alpha_explicit_relocs,,
4407 [       .set nomacro
4408         .text
4409         extbl   $3, $2, $3      !lituse_bytoff!1
4410         ldq     $2, a($29)      !literal!1
4411         ldq     $4, b($29)      !literal!2
4412         ldq_u   $3, 0($2)       !lituse_base!1
4413         ldq     $27, f($29)     !literal!5
4414         jsr     $26, ($27), f   !lituse_jsr!5
4415         ldah    $29, 0($26)     !gpdisp!3
4416         lda     $0, c($29)      !gprel
4417         ldah    $1, d($29)      !gprelhigh
4418         lda     $1, d($1)       !gprellow
4419         lda     $29, 0($29)     !gpdisp!3],,
4420     [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
4421   [Define if your assembler supports explicit relocations.])])
4422     gcc_GAS_CHECK_FEATURE([jsrdirect relocation support],
4423         gcc_cv_as_alpha_jsrdirect_relocs,,
4424 [       .set nomacro
4425         .text
4426         ldq     $27, a($29)     !literal!1
4427         jsr     $26, ($27), a   !lituse_jsrdirect!1],,
4428     [AC_DEFINE(HAVE_AS_JSRDIRECT_RELOCS, 1,
4429   [Define if your assembler supports the lituse_jsrdirect relocation.])])
4430     ;;
4432   avr-*-*)
4433     gcc_GAS_CHECK_FEATURE([--mlink-relax option], gcc_cv_as_avr_mlink_relax,
4434       [--mlink-relax], [.text],,
4435       [AC_DEFINE(HAVE_AS_AVR_MLINK_RELAX_OPTION, 1,
4436                 [Define if your avr assembler supports --mlink-relax option.])])
4438     gcc_GAS_CHECK_FEATURE([-mrmw option], gcc_cv_as_avr_mrmw,
4439       [-mrmw], [.text],,
4440       [AC_DEFINE(HAVE_AS_AVR_MRMW_OPTION, 1,
4441                 [Define if your avr assembler supports -mrmw option.])])
4443     gcc_GAS_CHECK_FEATURE([__gcc_isr pseudo instruction],
4444       gcc_cv_as_avr_mgccisr,
4445       [-mgcc-isr], [.text
4446                     __gcc_isr 1
4447                     __gcc_isr 2
4448                     __gcc_isr 0,r24
4449                    ],,
4450       [AC_DEFINE(HAVE_AS_AVR_MGCCISR_OPTION, 1,
4451                 [Define if your avr assembler supports -mgcc-isr option.])])
4453     # Check how default linker description file implements .rodata for
4454     # avrxmega3 (PR21472).  avr-gcc assumes .rodata is *not* loaded to
4455     # RAM so avr-gcc skips __do_copy_data for .rodata objects.
4456     AC_MSG_CHECKING(binutils for avrxmega3 .rodata support)
4457     cat > conftest.s <<EOF
4458         .section .rodata,"a",@progbits
4459         .global xxvaryy
4460     ;; avr-nm should print "... R xxvaryy", not "... D xxvaryy".
4461     xxvaryy:
4462         .word 1
4464     rm -f conftest.nm
4465     AC_TRY_COMMAND([$gcc_cv_as -mmcu=avrxmega3 conftest.s -o conftest.o])
4466     AC_TRY_COMMAND([$gcc_cv_ld -mavrxmega3 conftest.o -o conftest.elf])
4467     AC_TRY_COMMAND([$gcc_cv_nm conftest.elf > conftest.nm])
4468     if test -s conftest.nm
4469     then
4470         if grep ' R xxvaryy' conftest.nm > /dev/null; then
4471             AC_MSG_RESULT(yes)
4472             AC_DEFINE(HAVE_LD_AVR_AVRXMEGA3_RODATA_IN_FLASH, 1,
4473                 [Define if your default avr linker script for avrxmega3 leaves .rodata in flash.])
4474         else
4475             AC_MSG_RESULT(no: avrxmega3 .rodata located in RAM)
4476             echo "$as_me: nm output was" >&AS_MESSAGE_LOG_FD
4477             cat conftest.nm >&AS_MESSAGE_LOG_FD
4478             avr_ld_ver="`$gcc_cv_ld -v | sed -e 's:^.* ::'`"
4479             AC_MSG_WARN([[support for avrxmega3 .rodata in flash needs Binutils 2.29 or higher (have $avr_ld_ver)]])
4480         fi
4481     else
4482         AC_MSG_RESULT(test failed)
4483         echo "$as_me: failed program was" >&AS_MESSAGE_LOG_FD
4484         cat conftest.s >&AS_MESSAGE_LOG_FD
4485         AC_MSG_WARN([[see `config.log' for details]])
4486     fi
4487     rm -f conftest.s conftest.o conftest.elf conftest.nm
4488     ;;
4490   cris-*-*)
4491     gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
4492       gcc_cv_as_cris_no_mul_bug,
4493       [-no-mul-bug-abort], [.text],,
4494       [AC_DEFINE(HAVE_AS_NO_MUL_BUG_ABORT_OPTION, 1,
4495                 [Define if your assembler supports the -no-mul-bug-abort option.])])
4496     ;;
4498   sparc*-*-*)
4499     gcc_GAS_CHECK_FEATURE([-relax option], gcc_cv_as_sparc_relax,
4500       [-relax], [.text],,
4501       [AC_DEFINE(HAVE_AS_RELAX_OPTION, 1,
4502                 [Define if your assembler supports -relax option.])])
4504     gcc_GAS_CHECK_FEATURE([GOTDATA_OP relocs],
4505       gcc_cv_as_sparc_gotdata_op,
4506       [-K PIC],
4507 [.text
4508 .align 4
4509 foo:
4510         nop
4511 bar:
4512         sethi %gdop_hix22(foo), %g1
4513         xor    %g1, %gdop_lox10(foo), %g1
4514         ld    [[%l7 + %g1]], %g2, %gdop(foo)],
4515       [if test x$gcc_cv_ld != x \
4516        && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
4517          if test x$gcc_cv_objdump != x; then
4518            if $gcc_cv_objdump -s -j .text conftest 2> /dev/null \
4519               | grep ' 03000004 82186004 c405c001'> /dev/null 2>&1; then
4520                gcc_cv_as_sparc_gotdata_op=no
4521            else
4522                gcc_cv_as_sparc_gotdata_op=yes
4523            fi
4524          fi
4525        fi
4526        rm -f conftest],
4527       [AC_DEFINE(HAVE_AS_SPARC_GOTDATA_OP, 1,
4528                 [Define if your assembler and linker support GOTDATA_OP relocs.])])
4530     gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs],
4531       gcc_cv_as_sparc_ua_pcrel,
4532       [-K PIC],
4533 [.text
4534 foo:
4535         nop
4536 .data
4537 .align 4
4538 .byte 0
4539 .uaword %r_disp32(foo)],
4540       [if test x$gcc_cv_ld != x \
4541        && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
4542          gcc_cv_as_sparc_ua_pcrel=yes
4543        fi
4544        rm -f conftest],
4545       [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
4546                 [Define if your assembler and linker support unaligned PC relative relocs.])
4548       gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs against hidden symbols],
4549         gcc_cv_as_sparc_ua_pcrel_hidden,
4550         [-K PIC],
4551 [.data
4552 .align 4
4553 .byte 0x31
4554 .uaword %r_disp32(foo)
4555 .byte 0x32, 0x33, 0x34
4556 .global foo
4557 .hidden foo
4558 foo:
4559 .skip 4],
4560         [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4561          && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
4562          && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
4563             | grep ' 31000000 07323334' > /dev/null 2>&1; then
4564             if $gcc_cv_objdump -R conftest 2> /dev/null \
4565                | grep 'DISP32' > /dev/null 2>&1; then
4566                 :
4567             else
4568                 gcc_cv_as_sparc_ua_pcrel_hidden=yes
4569             fi
4570          fi
4571          rm -f conftest],
4572          [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL_HIDDEN, 1,
4573                    [Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])])
4574     ]) # unaligned pcrel relocs
4576     gcc_GAS_CHECK_FEATURE([offsetable %lo()],
4577       gcc_cv_as_sparc_offsetable_lo10,
4578       [-xarch=v9],
4579 [.text
4580         or %g1, %lo(ab) + 12, %g1
4581         or %g1, %lo(ab + 12), %g1],
4582       [if test x$gcc_cv_objdump != x \
4583        && $gcc_cv_objdump -s -j .text conftest.o 2> /dev/null \
4584           | grep ' 82106000 82106000' > /dev/null 2>&1; then
4585          gcc_cv_as_sparc_offsetable_lo10=yes
4586        fi],
4587        [AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
4588                  [Define if your assembler supports offsetable %lo().])])
4590     gcc_GAS_CHECK_FEATURE([FMAF, HPC, and VIS 3.0 instructions],
4591       gcc_cv_as_sparc_fmaf,
4592       [-xarch=v9d],
4593       [.text
4594        .register %g2, #scratch
4595        .register %g3, #scratch
4596        .align 4
4597        fmaddd %f0, %f2, %f4, %f6
4598        addxccc %g1, %g2, %g3
4599        fsrl32 %f2, %f4, %f8
4600        fnaddd %f10, %f12, %f14],,
4601       [AC_DEFINE(HAVE_AS_FMAF_HPC_VIS3, 1,
4602                 [Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions.])])
4604     gcc_GAS_CHECK_FEATURE([SPARC4 instructions],
4605       gcc_cv_as_sparc_sparc4,
4606       [-xarch=sparc4],
4607       [.text
4608        .register %g2, #scratch
4609        .register %g3, #scratch
4610        .align 4
4611        cxbe %g2, %g3, 1f
4612 1:     cwbneg %g2, %g3, 1f
4613 1:     sha1
4614        md5
4615        aes_kexpand0 %f4, %f6, %f8
4616        des_round %f38, %f40, %f42, %f44
4617        camellia_f %f54, %f56, %f58, %f60
4618        kasumi_fi_xor %f46, %f48, %f50, %f52],,
4619       [AC_DEFINE(HAVE_AS_SPARC4, 1,
4620                 [Define if your assembler supports SPARC4 instructions.])])
4622     gcc_GAS_CHECK_FEATURE([SPARC5 and VIS 4.0 instructions],
4623       gcc_cv_as_sparc_sparc5,
4624       [-xarch=sparc5],
4625       [.text
4626        .register %g2, #scratch
4627        .register %g3, #scratch
4628        .align 4
4629        subxc %g1, %g2, %g3
4630        fpadd8 %f0, %f2, %f4],,
4631       [AC_DEFINE(HAVE_AS_SPARC5_VIS4, 1,
4632                 [Define if your assembler supports SPARC5 and VIS 4.0 instructions.])])
4634     gcc_GAS_CHECK_FEATURE([SPARC6 instructions],
4635       gcc_cv_as_sparc_sparc6,
4636       [-xarch=sparc6],
4637       [.text
4638        .register %g2, #scratch
4639        .register %g3, #scratch
4640        .align 4
4641        rd %entropy, %g1
4642        fpsll64x %f0, %f2, %f4],,
4643       [AC_DEFINE(HAVE_AS_SPARC6, 1,
4644                 [Define if your assembler supports SPARC6 instructions.])])
4646     gcc_GAS_CHECK_FEATURE([LEON instructions],
4647       gcc_cv_as_sparc_leon,
4648       [-Aleon],
4649       [.text
4650        .register %g2, #scratch
4651        .register %g3, #scratch
4652        .align 4
4653        smac %g2, %g3, %g1
4654        umac %g2, %g3, %g1
4655        casa [[%g2]] 0xb, %g3, %g1],,
4656       [AC_DEFINE(HAVE_AS_LEON, 1,
4657                 [Define if your assembler supports LEON instructions.])])
4658     ;;
4660 changequote(,)dnl
4661   i[34567]86-*-* | x86_64-*-*)
4662 changequote([,])dnl
4663     case $target_os in
4664       cygwin*)
4665         # Full C++ conformance when using a shared libstdc++-v3 requires some
4666         # support from the Cygwin DLL, which in more recent versions exports
4667         # wrappers to aid in interposing and redirecting operators new, delete,
4668         # etc., as per n2800 #17.6.4.6 [replacement.functions].  Check if we
4669         # are configuring for a version of Cygwin that exports the wrappers.
4670         if test x$host = x$target && test x$host_cpu = xi686; then
4671           AC_CHECK_FUNC([__wrap__Znaj],[gcc_ac_cygwin_dll_wrappers=yes],[gcc_ac_cygwin_dll_wrappers=no])
4672         else
4673           # Can't check presence of libc functions during cross-compile, so
4674           # we just have to assume we're building for an up-to-date target.
4675           gcc_ac_cygwin_dll_wrappers=yes
4676         fi
4677         AC_DEFINE_UNQUOTED(USE_CYGWIN_LIBSTDCXX_WRAPPERS,
4678           [`if test $gcc_ac_cygwin_dll_wrappers = yes; then echo 1; else echo 0; fi`],
4679           [Define if you want to generate code by default that assumes that the
4680            Cygwin DLL exports wrappers to support libstdc++ function replacement.])
4681     esac
4682     case $target_os in
4683       cygwin* | pe | mingw32*)
4684         # Recent binutils allows the three-operand form of ".comm" on PE.  This
4685         # definition is used unconditionally to initialise the default state of
4686         # the target option variable that governs usage of the feature.
4687         gcc_GAS_CHECK_FEATURE([.comm with alignment], gcc_cv_as_comm_has_align,,
4688           [.comm foo,1,32])
4689         AC_DEFINE_UNQUOTED(HAVE_GAS_ALIGNED_COMM,
4690           [`if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi`],
4691           [Define if your assembler supports specifying the alignment
4692            of objects allocated using the GAS .comm command.])
4693         # Used for DWARF 2 in PE
4694         gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
4695           gcc_cv_as_ix86_pe_secrel32,,
4696 [.text
4697 foo:    nop
4698 .data
4699         .secrel32 foo],
4700           [if test x$gcc_cv_ld != x \
4701            && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
4702              gcc_cv_as_ix86_pe_secrel32=yes
4703            fi
4704            rm -f conftest],
4705           [AC_DEFINE(HAVE_GAS_PE_SECREL32_RELOC, 1,
4706             [Define if your assembler and linker support 32-bit section relative relocs via '.secrel32 label'.])])
4707         # Test if the assembler supports the extended form of the .section
4708         # directive that specifies section alignment.  LTO support uses this,
4709         # but normally only after installation, so we warn but don't fail the
4710         # configure if LTO is enabled but the assembler does not support it.
4711         gcc_GAS_CHECK_FEATURE([.section with alignment], gcc_cv_as_section_has_align,
4712           -fatal-warnings,[.section lto_test,"dr0"])
4713         if test x$gcc_cv_as_section_has_align != xyes; then
4714           case ",$enable_languages," in
4715             *,lto,*)
4716               AC_MSG_WARN([LTO for $target requires binutils >= 2.20.1, but version found appears insufficient; LTO will not work until binutils is upgraded.])
4717               ;;
4718           esac
4719         fi
4720         ;;
4721     esac
4722     case $target_os in
4723        darwin2* | darwin19*)
4724         gcc_GAS_CHECK_FEATURE([llvm assembler x86-pad-for-align option],
4725           gcc_cv_as_mllvm_x86_pad_for_align,
4726           [-mllvm -x86-pad-for-align=false], [.text],,
4727           [AC_DEFINE(HAVE_AS_MLLVM_X86_PAD_FOR_ALIGN, 1,
4728             [Define if your Mac OS X assembler supports -mllvm -x86-pad-for-align=false.])])
4729        ;;
4730     esac
4732     gcc_GAS_CHECK_FEATURE([-xbrace_comment], gcc_cv_as_ix86_xbrace_comment,
4733       [-xbrace_comment=no], [.text],,
4734       [AC_DEFINE(HAVE_AS_XBRACE_COMMENT_OPTION, 1,
4735                 [Define if your assembler supports -xbrace_comment option.])])
4737     gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
4738        gcc_cv_as_ix86_filds,,
4739        [filds (%ebp); fists (%ebp)],,
4740        [AC_DEFINE(HAVE_AS_IX86_FILDS, 1,
4741          [Define if your assembler uses filds and fists mnemonics.])])
4743     gcc_GAS_CHECK_FEATURE([fildq and fistpq mnemonics],
4744        gcc_cv_as_ix86_fildq,,
4745        [fildq (%ebp); fistpq (%ebp)],,
4746        [AC_DEFINE(HAVE_AS_IX86_FILDQ, 1,
4747          [Define if your assembler uses fildq and fistq mnemonics.])])
4749     gcc_GAS_CHECK_FEATURE([cmov syntax],
4750       gcc_cv_as_ix86_cmov_sun_syntax,,
4751       [cmovl.l %edx, %eax],,
4752       [AC_DEFINE(HAVE_AS_IX86_CMOV_SUN_SYNTAX, 1,
4753         [Define if your assembler supports the Sun syntax for cmov.])])
4755     gcc_GAS_CHECK_FEATURE([ffreep mnemonic],
4756       gcc_cv_as_ix86_ffreep,,
4757       [ffreep %st(1)],,
4758       [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
4759         [Define if your assembler supports the ffreep mnemonic.])])
4761     gcc_GAS_CHECK_FEATURE([.quad directive],
4762       gcc_cv_as_ix86_quad,,
4763       [.quad 0],,
4764       [AC_DEFINE(HAVE_AS_IX86_QUAD, 1,
4765         [Define if your assembler supports the .quad directive.])])
4767     gcc_GAS_CHECK_FEATURE([sahf mnemonic],
4768       gcc_cv_as_ix86_sahf,,
4769       [.code64
4770        sahf],,
4771       [AC_DEFINE(HAVE_AS_IX86_SAHF, 1,
4772         [Define if your assembler supports the sahf mnemonic in 64bit mode.])])
4774     gcc_GAS_CHECK_FEATURE([interunit movq mnemonic],
4775       gcc_cv_as_ix86_interunit_movq,,
4776       [.code64
4777        movq %mm0, %rax
4778        movq %rax, %xmm0])
4779     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_INTERUNIT_MOVQ,
4780       [`if test $gcc_cv_as_ix86_interunit_movq = yes; then echo 1; else echo 0; fi`],
4781       [Define if your assembler supports interunit movq mnemonic.])
4783     gcc_GAS_CHECK_FEATURE([hle prefixes],
4784       gcc_cv_as_ix86_hle,,
4785       [lock xacquire cmpxchg %esi, (%ecx)],,
4786       [AC_DEFINE(HAVE_AS_IX86_HLE, 1,
4787         [Define if your assembler supports HLE prefixes.])])
4789     gcc_GAS_CHECK_FEATURE([swap suffix],
4790       gcc_cv_as_ix86_swap,,
4791       [movl.s %esp, %ebp],,
4792       [AC_DEFINE(HAVE_AS_IX86_SWAP, 1,
4793         [Define if your assembler supports the swap suffix.])])
4795     gcc_GAS_CHECK_FEATURE([different section symbol subtraction],
4796       gcc_cv_as_ix86_diff_sect_delta,,
4797       [.section .rodata
4798 .L1:
4799         .long .L2-.L1
4800         .long .L3-.L1
4801         .text
4802 .L3:    nop
4803 .L2:    nop],,
4804       [AC_DEFINE(HAVE_AS_IX86_DIFF_SECT_DELTA, 1,
4805         [Define if your assembler supports the subtraction of symbols in different sections.])])
4807     gcc_GAS_CHECK_FEATURE([rep and lock prefix],
4808         gcc_cv_as_ix86_rep_lock_prefix,,
4809         [rep movsl
4810          rep ret
4811          rep nop
4812          rep bsf %ecx, %eax
4813          rep bsr %ecx, %eax
4814          lock addl %edi, (%eax,%esi)
4815          lock orl $0, (%esp)],,
4816         [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
4817           [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
4819     gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
4820         gcc_cv_as_ix86_ud2,,
4821         [ud2],,
4822       [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
4823         [Define if your assembler supports the 'ud2' mnemonic.])])
4825     # Enforce 32-bit output with gas and gld.
4826     if test x$gas = xyes; then
4827       as_ix86_gas_32_opt="--32"
4828     fi
4829     if echo "$ld_ver" | grep GNU > /dev/null; then
4830       if $gcc_cv_ld -V 2>/dev/null | grep elf_i386_sol2 > /dev/null; then
4831         ld_ix86_gld_32_opt="-melf_i386_sol2"
4832       else
4833         ld_ix86_gld_32_opt="-melf_i386"
4834       fi
4835     fi
4837     gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
4838         gcc_cv_as_ix86_tlsgdplt,
4839         [$as_ix86_gas_32_opt],
4840         [call    tls_gd@tlsgdplt],
4841         [if test x$gcc_cv_ld != x \
4842          && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
4843            gcc_cv_as_ix86_tlsgdplt=yes
4844          fi
4845          rm -f conftest],
4846       [AC_DEFINE(HAVE_AS_IX86_TLSGDPLT, 1,
4847         [Define if your assembler and linker support @tlsgdplt.])])
4849     conftest_s='
4850         .section .tdata,"aw'$tls_section_flag'",@progbits
4851 tls_ld:
4852         .section .text,"ax",@progbits
4853          call    tls_ld@tlsldmplt'
4855     gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM_PLT reloc],
4856         gcc_cv_as_ix86_tlsldmplt,
4857         [$as_ix86_gas_32_opt],
4858         [$conftest_s],
4859         [if test x$gcc_cv_ld != x \
4860          && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
4861            gcc_cv_as_ix86_tlsldmplt=yes
4862          fi
4863          rm -f conftest])
4864     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDMPLT,
4865       [`if test $gcc_cv_as_ix86_tlsldmplt = yes; then echo 1; else echo 0; fi`],
4866       [Define to 1 if your assembler and linker support @tlsldmplt.])
4868     conftest_s='
4869         .section .text,"ax",@progbits
4870         .globl  _start
4871         .type   _start, @function
4872 _start:      
4873         leal    value@tlsldm(%ebx), %eax
4874         call    ___tls_get_addr@plt
4876         .section .tdata,"aw'$tls_section_flag'",@progbits
4877         .type   value, @object
4878 value:'
4879     gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM reloc],
4880         gcc_cv_as_ix86_tlsldm,
4881         [$as_ix86_gas_32_opt],
4882         [$conftest_s],
4883         [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4884             && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o $ld_tls_libs -lc > /dev/null 2>&1; then
4885            if $gcc_cv_objdump -d conftest 2>/dev/null | grep nop > /dev/null \
4886               || dis conftest 2>/dev/null | grep nop > /dev/null; then
4887              gcc_cv_as_ix86_tlsldm=yes
4888            fi
4889          fi
4890          rm -f conftest])
4891     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDM,
4892       [`if test $gcc_cv_as_ix86_tlsldm = yes; then echo 1; else echo 0; fi`],
4893       [Define to 1 if your assembler and linker support @tlsldm.])
4895     conftest_s='
4896         .data
4897 bar:
4898         .byte 1
4899         .text
4900         .global _start
4901 _start:
4902          cmpl $0, bar@GOT
4903          jmp *_start@GOT'
4904     gcc_GAS_CHECK_FEATURE([R_386_GOT32X reloc],
4905         gcc_cv_as_ix86_got32x,
4906         [$as_ix86_gas_32_opt],
4907         [$conftest_s],
4908         [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4909             && test x$gcc_cv_readelf != x \
4910             && $gcc_cv_readelf --relocs --wide conftest.o 2>&1 \
4911                | grep R_386_GOT32X > /dev/null 2>&1 \
4912             && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
4913            if $gcc_cv_objdump -dw conftest 2>&1 \
4914               | grep 0xffffff > /dev/null 2>&1; then
4915              gcc_cv_as_ix86_got32x=no
4916            else
4917              gcc_cv_as_ix86_got32x=yes
4918            fi
4919          fi
4920          rm -f conftest])
4921     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_GOT32X,
4922       [`if test x"$gcc_cv_as_ix86_got32x" = xyes; then echo 1; else echo 0; fi`],
4923       [Define 0/1 if your assembler and linker support @GOT.])
4925     gcc_GAS_CHECK_FEATURE([GOTOFF in data],
4926       gcc_cv_as_ix86_gotoff_in_data,
4927       [$as_ix86_gas_32_opt],
4928 [       .text
4929 .L0:
4930         nop
4931         .data
4932         .long .L0@GOTOFF])
4933     AC_DEFINE_UNQUOTED(HAVE_AS_GOTOFF_IN_DATA,
4934       [`if test $gcc_cv_as_ix86_gotoff_in_data = yes; then echo 1; else echo 0; fi`],
4935       [Define true if the assembler supports '.long foo@GOTOFF'.])
4937     conftest_s='
4938         .section .text,"ax",@progbits
4939         .globl  _start
4940         .type   _start, @function
4941 _start:
4942         leal    ld@tlsldm(%ecx), %eax
4943         call    *___tls_get_addr@GOT(%ecx)
4944         leal    gd@tlsgd(%ecx), %eax
4945         call    *___tls_get_addr@GOT(%ecx)
4947         .section .tdata,"aw'$tls_section_flag'",@progbits
4948         .type   ld, @object
4950         .byte 0
4951         .globl  gd
4952         .type   gd, @object
4954         .byte 0'
4955     gcc_GAS_CHECK_FEATURE([calling ___tls_get_addr via GOT],
4956         gcc_cv_as_ix86_tls_get_addr_via_got,
4957         [$as_ix86_gas_32_opt],
4958         [$conftest_s],
4959         [if test x$gcc_cv_ld != x \
4960             && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
4961            gcc_cv_as_ix86_tls_get_addr_via_got=yes
4962          fi
4963          rm -f conftest])
4964     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLS_GET_ADDR_GOT,
4965       [`if test x"$gcc_cv_as_ix86_tls_get_addr_via_got" = xyes; then echo 1; else echo 0; fi`],
4966       [Define 0/1 if your assembler and linker support calling ___tls_get_addr via GOT.])
4967     ;;
4969   ia64*-*-*)
4970     gcc_GAS_CHECK_FEATURE([ltoffx and ldxmov relocs],
4971         gcc_cv_as_ia64_ltoffx_ldxmov_relocs,,
4972 [       .text
4973         addl r15 = @ltoffx(x#), gp
4974         ;;
4975         ld8.mov r16 = [[r15]], x#
4977     [AC_DEFINE(HAVE_AS_LTOFFX_LDXMOV_RELOCS, 1,
4978           [Define if your assembler supports ltoffx and ldxmov relocations.])])
4980     ;;
4982   powerpc*-*-*)
4984     case $target in
4985       *-*-darwin*)
4986         gcc_GAS_CHECK_FEATURE([.machine directive support],
4987           gcc_cv_as_machine_directive,,
4988           [     .machine ppc7400])
4989         if test x$gcc_cv_as_machine_directive != xyes; then
4990           echo "*** This target requires an assembler supporting \".machine\"" >&2
4991           echo you can get it from: https://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg >&2
4992           test x$build = x$target && exit 1
4993         fi
4994         ;;
4995     esac
4997     case $target in
4998       *-*-aix*) conftest_s='    .machine "pwr5"
4999         .csect .text[[PR]]
5000         mfcr 3,128';;
5001       *-*-darwin*) conftest_s=' .text
5002         mfcr r3,128';;
5003       *) conftest_s='   .machine power4
5004         .text
5005         mfcr 3,128';;
5006     esac
5008     gcc_GAS_CHECK_FEATURE([mfcr field support],
5009       gcc_cv_as_powerpc_mfcrf,,
5010       [$conftest_s],,
5011       [AC_DEFINE(HAVE_AS_MFCRF, 1,
5012           [Define if your assembler supports mfcr field.])])
5014     case $target in
5015       *-*-aix*) conftest_s='    .csect .text[[PR]]
5016 LCF..0:
5017         addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';;
5018       *-*-darwin*)
5019         conftest_s='    .text
5020 LCF0:
5021         addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';;
5022       *) conftest_s='   .text
5023 .LCF0:
5024         addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
5025     esac
5027     gcc_GAS_CHECK_FEATURE([rel16 relocs],
5028       gcc_cv_as_powerpc_rel16, -a32,
5029       [$conftest_s],,
5030       [AC_DEFINE(HAVE_AS_REL16, 1,
5031           [Define if your assembler supports R_PPC_REL16 relocs.])])
5033     case $target in
5034       *-*-aix*) conftest_s='    .machine "pwr7"
5035         .csect .text[[PR]]
5036         lxvd2x 1,2,3';;
5037       *) conftest_s='   .machine power7
5038         .text
5039         lxvd2x 1,2,3';;
5040     esac
5042     gcc_GAS_CHECK_FEATURE([vector-scalar support],
5043       gcc_cv_as_powerpc_vsx, -a32,
5044       [$conftest_s],,
5045       [AC_DEFINE(HAVE_AS_VSX, 1,
5046           [Define if your assembler supports VSX instructions.])])
5048     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5049       gcc_cv_as_powerpc_gnu_attribute,,
5050       [.gnu_attribute 4,1],,
5051       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5052           [Define if your assembler supports .gnu_attribute.])])
5054     gcc_GAS_CHECK_FEATURE([prologue entry point marker support],
5055       gcc_cv_as_powerpc_entry_markers,-a64 --fatal-warnings,
5056       [ .reloc .,R_PPC64_ENTRY; nop],,
5057       [AC_DEFINE(HAVE_AS_ENTRY_MARKERS, 1,
5058           [Define if your assembler supports the R_PPC64_ENTRY relocation.])])
5060     gcc_GAS_CHECK_FEATURE([plt sequence marker support],
5061       gcc_cv_as_powerpc_pltseq_markers,-a32 --fatal-warnings,
5062       [ .reloc .,R_PPC_PLTSEQ; nop],,
5063       [AC_DEFINE(HAVE_AS_PLTSEQ, 1,
5064           [Define if your assembler supports R_PPC*_PLTSEQ relocations.])])
5066     case $target in
5067       *-*-aix*)
5068         gcc_GAS_CHECK_FEATURE([AIX .ref support],
5069           gcc_cv_as_aix_ref,,
5070           [     .csect stuff[[rw]]
5071              stuff:
5072                 .long 1
5073                 .extern sym
5074                 .ref sym
5075           ],,
5076           [AC_DEFINE(HAVE_AS_REF, 1,
5077             [Define if your assembler supports .ref])])
5079         gcc_GAS_CHECK_FEATURE([AIX DWARF location lists section support],
5080           gcc_cv_as_aix_dwloc,,
5081           [     .dwsect 0xA0000
5082         Lframe..0:
5083                 .vbyte 4,Lframe..0
5084           ],,
5085           [AC_DEFINE(HAVE_XCOFF_DWARF_EXTRAS, 1,
5086             [Define if your assembler supports AIX debug frame section label reference.])])
5087         ;;
5088     esac
5089     ;;
5091   mips*-*-*)
5092     gcc_GAS_CHECK_FEATURE([explicit relocation support],
5093       gcc_cv_as_mips_explicit_relocs,,
5094 [       lw $4,%gp_rel(foo)($4)],,
5095       [if test x$target_cpu_default = x
5096        then target_cpu_default=MASK_EXPLICIT_RELOCS
5097        else target_cpu_default="($target_cpu_default)|MASK_EXPLICIT_RELOCS"
5098        fi])
5100     gcc_GAS_CHECK_FEATURE([-mno-shared support],
5101       gcc_cv_as_mips_no_shared,[-mno-shared], [nop],,
5102       [AC_DEFINE(HAVE_AS_NO_SHARED, 1,
5103                  [Define if the assembler understands -mno-shared.])])
5105     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5106       gcc_cv_as_mips_gnu_attribute,,
5107       [.gnu_attribute 4,1],,
5108       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5109           [Define if your assembler supports .gnu_attribute.])])
5111     gcc_GAS_CHECK_FEATURE([.module support],
5112       gcc_cv_as_mips_dot_module,[-32],
5113       [.module mips2
5114        .module fp=xx],,
5115       [AC_DEFINE(HAVE_AS_DOT_MODULE, 1,
5116           [Define if your assembler supports .module.])])
5117     if test x$gcc_cv_as_mips_dot_module = xno \
5118        && test x$with_fp_32 != x; then
5119       AC_MSG_ERROR(
5120         [Requesting --with-fp-32= requires assembler support for .module.])
5121     fi
5123     gcc_GAS_CHECK_FEATURE([.micromips support],
5124       gcc_cv_as_micromips_support,[--fatal-warnings],
5125       [.set micromips],,
5126       [AC_DEFINE(HAVE_GAS_MICROMIPS, 1,
5127           [Define if your assembler supports the .set micromips directive])])
5129     gcc_GAS_CHECK_FEATURE([.dtprelword support],
5130       gcc_cv_as_mips_dtprelword,,
5131       [.section .tdata,"awT",@progbits
5133         .word 2
5134         .text
5135         .dtprelword x+0x8000],,
5136       [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
5137           [Define if your assembler supports .dtprelword.])])
5139     gcc_GAS_CHECK_FEATURE([DSPR1 mult with four accumulators support],
5140       gcc_cv_as_mips_dspr1_mult,,
5141 [       .set    mips32r2
5142         .set    nodspr2
5143         .set    dsp
5144         madd    $ac3,$4,$5
5145         maddu   $ac3,$4,$5
5146         msub    $ac3,$4,$5
5147         msubu   $ac3,$4,$5
5148         mult    $ac3,$4,$5
5149         multu   $ac3,$4,$5],,
5150       [AC_DEFINE(HAVE_AS_DSPR1_MULT, 1,
5151           [Define if your assembler supports DSPR1 mult.])])
5153     AC_MSG_CHECKING(assembler and linker for explicit JALR relocation)
5154     gcc_cv_as_ld_jalr_reloc=no
5155     if test $gcc_cv_as_mips_explicit_relocs = yes; then
5156       if test $in_tree_ld = yes ; then
5157         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 \
5158            && test $in_tree_ld_is_elf = yes; then
5159           gcc_cv_as_ld_jalr_reloc=yes
5160         fi
5161       elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
5162         echo '  .ent x' > conftest.s
5163         echo 'x:        lw $2,%got_disp(y)($3)' >> conftest.s
5164         echo '  lw $25,%call16(y)($28)' >> conftest.s
5165         echo '  .reloc  1f,R_MIPS_JALR,y' >> conftest.s
5166         echo '1:        jalr $25' >> conftest.s
5167         echo '  .reloc  1f,R_MIPS_JALR,x' >> conftest.s
5168         echo '1:        jalr $25' >> conftest.s
5169         echo '  .end x' >> conftest.s
5170         if $gcc_cv_as -o conftest.o conftest.s >/dev/null 2>&AS_MESSAGE_LOG_FD \
5171            && $gcc_cv_ld -shared -o conftest.so conftest.o >/dev/null 2>&AS_MESSAGE_LOG_FD; then
5172           if $gcc_cv_objdump -d conftest.so | grep jalr >/dev/null 2>&1 \
5173              && $gcc_cv_objdump -d conftest.so | grep "bal.*<x>" >/dev/null 2>&1; then
5174             gcc_cv_as_ld_jalr_reloc=yes
5175           fi
5176         fi
5177         rm -f conftest.*
5178       fi
5179     fi
5180     if test $gcc_cv_as_ld_jalr_reloc = yes; then
5181       if test x$target_cpu_default = x; then
5182         target_cpu_default=MASK_RELAX_PIC_CALLS
5183       else
5184         target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
5185       fi
5186     fi
5187     AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
5189     AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
5190       [gcc_cv_ld_mips_personality_relaxation],
5191       [gcc_cv_ld_mips_personality_relaxation=no
5192        if test $in_tree_ld = yes ; then
5193          if test "$gcc_cv_gld_major_version" -eq 2 \
5194                  -a "$gcc_cv_gld_minor_version" -ge 21 \
5195                  -o "$gcc_cv_gld_major_version" -gt 2; then
5196            gcc_cv_ld_mips_personality_relaxation=yes
5197          fi
5198        elif test x$gcc_cv_as != x \
5199                  -a x$gcc_cv_ld != x \
5200                  -a x$gcc_cv_readelf != x ; then
5201          cat > conftest.s <<EOF
5202         .cfi_startproc
5203         .cfi_personality 0x80,indirect_ptr
5204         .ent test
5205 test:
5206         nop
5207         .end test
5208         .cfi_endproc
5210         .section .data,"aw",@progbits
5211 indirect_ptr:
5212         .dc.a personality
5214          if $gcc_cv_as -KPIC -o conftest.o conftest.s > /dev/null 2>&1 \
5215             && $gcc_cv_ld -o conftest conftest.o -shared > /dev/null 2>&1; then
5216            if $gcc_cv_readelf -d conftest 2>&1 \
5217               | grep TEXTREL > /dev/null 2>&1; then
5218              :
5219            elif $gcc_cv_readelf --relocs conftest 2>&1 \
5220                 | grep 'R_MIPS_REL32 *$' > /dev/null 2>&1; then
5221              :
5222            else
5223              gcc_cv_ld_mips_personality_relaxation=yes
5224            fi
5225          fi
5226        fi
5227        rm -f conftest.s conftest.o conftest])
5228     if test x$gcc_cv_ld_mips_personality_relaxation = xyes; then
5229             AC_DEFINE(HAVE_LD_PERSONALITY_RELAXATION, 1,
5230       [Define if your linker can relax absolute .eh_frame personality
5231 pointers into PC-relative form.])
5232     fi
5234     gcc_GAS_CHECK_FEATURE([-mnan= support],
5235       gcc_cv_as_mips_nan,
5236       [-mnan=2008],,,
5237       [AC_DEFINE(HAVE_AS_NAN, 1,
5238                  [Define if the assembler understands -mnan=.])])
5239     if test x$gcc_cv_as_mips_nan = xno \
5240        && test x$with_nan != x; then
5241       AC_MSG_ERROR(
5242         [Requesting --with-nan= requires assembler support for -mnan=])
5243     fi
5244     ;;
5245     msp430-*-*)
5246     # Earlier GAS versions generically support .gnu_attribute, but the
5247     # msp430 assembler will not do anything with it.
5248     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5249       gcc_cv_as_msp430_gnu_attribute,,
5250       [.gnu_attribute 4,1],,
5251       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5252           [Define if your assembler supports .gnu_attribute.])])
5253     gcc_GAS_CHECK_FEATURE([.mspabi_attribute support],
5254       gcc_cv_as_msp430_mspabi_attribute,,
5255       [.mspabi_attribute 4,2],,
5256       [AC_DEFINE(HAVE_AS_MSPABI_ATTRIBUTE, 1,
5257           [Define if your assembler supports .mspabi_attribute.])])
5258     if test x$enable_newlib_nano_formatted_io = xyes; then
5259       AC_DEFINE(HAVE_NEWLIB_NANO_FORMATTED_IO, 1, [Define if GCC has been
5260 configured with --enable-newlib-nano-formatted-io.])
5261       fi
5262     ;;
5263     nios2-*-*)
5264     # Versions 2.33 and earlier lacked support for the %gotoff relocation
5265     # syntax that is documented in the ABI specification.
5266     gcc_GAS_CHECK_FEATURE([support for %gotoff relocations in constant data],
5267       gcc_cv_as_nios2_gotoff_relocation,,
5268 [       .extern foo
5269         .data
5270         .long %gotoff(foo)],,
5271       [AC_DEFINE(HAVE_AS_NIOS2_GOTOFF_RELOCATION, 1,
5272           [Define if your assembler supports %gotoff relocation syntax.])])
5273     ;;
5274     riscv*-*-*)
5275     gcc_GAS_CHECK_FEATURE([.attribute support],
5276       gcc_cv_as_riscv_attribute,,
5277       [.attribute stack_align,4],,
5278       [AC_DEFINE(HAVE_AS_RISCV_ATTRIBUTE, 1,
5279           [Define if your assembler supports .attribute.])])
5280     gcc_GAS_CHECK_FEATURE([-misa-spec= support],
5281       gcc_cv_as_riscv_isa_spec,
5282       [-misa-spec=2.2],,,
5283       [AC_DEFINE(HAVE_AS_MISA_SPEC, 1,
5284                  [Define if the assembler understands -misa-spec=.])])
5285     gcc_GAS_CHECK_FEATURE([-march=rv32i_zifencei support],
5286       gcc_cv_as_riscv_march_zifencei,
5287       [-march=rv32i_zifencei2p0],,,
5288       [AC_DEFINE(HAVE_AS_MARCH_ZIFENCEI, 1,
5289                  [Define if the assembler understands -march=rv*_zifencei.])])
5290     ;;
5291     loongarch*-*-*)
5292     gcc_GAS_CHECK_FEATURE([.dtprelword support],
5293       gcc_cv_as_loongarch_dtprelword, [2,18,0],,
5294       [.section .tdata,"awT",@progbits
5296         .word 2
5297         .text
5298         .dtprelword x+0x8000],,
5299       [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
5300           [Define if your assembler supports .dtprelword.])])
5301     gcc_GAS_CHECK_FEATURE([explicit relocation support],
5302       gcc_cv_as_loongarch_explicit_relocs,,
5303       [a:pcalau12i $t0,%pc_hi20(a)],,
5304       [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
5305           [Define if your assembler supports explicit relocation.])])
5306     gcc_GAS_CHECK_FEATURE([eh_frame pcrel encoding support],
5307       gcc_cv_as_loongarch_eh_frame_pcrel_encoding_support,,
5308       [.cfi_startproc
5309        .cfi_personality 0x9b,a
5310        .cfi_lsda 0x1b,b
5311        .cfi_endproc],,
5312       [AC_DEFINE(HAVE_AS_EH_FRAME_PCREL_ENCODING_SUPPORT, 1,
5313           [Define if your assembler supports eh_frame pcrel encoding.])])
5314     ;;
5315     s390*-*-*)
5316     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5317       gcc_cv_as_s390_gnu_attribute,,
5318       [.gnu_attribute 8,1],,
5319       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5320           [Define if your assembler supports .gnu_attribute.])])
5321     gcc_GAS_CHECK_FEATURE([.machine and .machinemode support],
5322       gcc_cv_as_s390_machine_machinemode,,
5323       [ .machinemode push
5324         .machinemode pop
5325         .machine push
5326         .machine pop],,
5327       [AC_DEFINE(HAVE_AS_MACHINE_MACHINEMODE, 1,
5328           [Define if your assembler supports .machine and .machinemode.])])
5329     gcc_GAS_CHECK_FEATURE([architecture modifiers support],
5330       gcc_cv_as_s390_architecture_modifiers,,
5331       [ .machine z13+vx ],,
5332       [AC_DEFINE(HAVE_AS_ARCHITECTURE_MODIFIERS, 1,
5333           [Define if your assembler supports architecture modifiers.])])
5334     gcc_GAS_CHECK_FEATURE([vector load/store alignment hints],
5335       gcc_cv_as_s390_vector_loadstore_alignment_hints,,
5336       [ vl %v24,0(%r15),3 ],,
5337       [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS, 1,
5338           [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument.])])
5339     gcc_GAS_CHECK_FEATURE([vector load/store alignment hints on z13],
5340       gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13, [-mzarch -march=z13],
5341       [ vl %v24,0(%r15),3 ],,
5342       [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13, 1,
5343           [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument on z13.])])
5345     ;;
5346 esac
5348 # Mips, LoongArch and HP-UX need the GNU assembler.
5349 # Linux on IA64 might be able to use the Intel assembler.
5351 case "$target" in
5352   mips*-*-* | loongarch*-*-* | *-*-hpux* )
5353     if test x$gas_flag = xyes \
5354        || test x"$host" != x"$build" \
5355        || test ! -x "$gcc_cv_as" \
5356        || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
5357       :
5358     else
5359       echo "*** This configuration requires the GNU assembler" >&2
5360       exit 1
5361     fi
5362     ;;
5363 esac
5365 # AMD GCN needs the LLVM assembler and linker.
5366 # Test that LLVM is at least 13.0.1.
5367 case "$target" in
5368   amdgcn-* | gcn-*)
5369     AC_MSG_CHECKING(llvm assembler version)
5370     gcc_cv_as_version="unknown"
5371     if test x$gcc_cv_as != x; then
5372       gcc_cv_as_version=`$gcc_cv_as --version 2>&1 | sed -ne '/version/s/.* \([[0-9]]\)/\1/p' || echo error`
5373       case "$gcc_cv_as_version" in
5374         13.0.[[1-9]]*) ;;          # 13.0.1+
5375         13.[[1-9]]*) ;;            # 13.1+
5376         1[[4-9]]*) ;;              # 14..19
5377         [[2-9]][[0-9]]*) ;;        # 20..99
5378         [[1-9]][[0-9]][[0-9]]*) ;; # 100+
5379         error) AC_MSG_ERROR([cannot determine LLVM version]) ;;
5380         *) AC_MSG_ERROR([LLVM 13.0.1 or later is required (found LLVM $gcc_cv_as_version)]) ;;
5381       esac
5382     fi
5383     AC_MSG_RESULT([$gcc_cv_as_version, ok])
5384     ;;
5385 esac
5387 case "$target" in
5388   arm*)
5389     gcc_GAS_CHECK_FEATURE([assembler for arm accepts context-specific architecture extensions],
5390       gcc_cv_as_arm_option_extensions,
5391       [-march=armv8.1-m.main+mve],
5392       [.text
5393         .thumb
5394         .syntax unified
5395         vmov.f32 s0, s1],,
5396       [AC_DEFINE(HAVE_GAS_ARM_EXTENDED_ARCH, 1,
5397        [Define if your Arm assembler permits context-specific feature extensions.])])
5398 esac
5400 # ??? Not all targets support dwarf2 debug_line, even within a version
5401 # of gas.  Moreover, we need to emit a valid instruction to trigger any
5402 # info to the output file.  So, as supported targets are added to gas 2.11,
5403 # add some instruction here to (also) show we expect this might work.
5404 # ??? Once 2.11 is released, probably need to add first known working
5405 # version to the per-target configury.
5406 case "$cpu_type" in
5407   aarch64 | alpha | arc | arm | avr | bfin | cris | csky | i386 | loongarch | m32c \
5408   | m68k | microblaze | mips | nds32 | nios2 | pa | riscv | rs6000 | score | sparc \
5409   | visium | xstormy16 | xtensa)
5410     insn="nop"
5411     ;;
5412   ia64 | s390)
5413     insn="nop 0"
5414     ;;
5415   mmix)
5416     insn="swym 0"
5417     ;;
5418 esac
5419 if test x"$insn" != x; then
5420  conftest_s="\
5421         .file 1 \"conftest.s\"
5422         .loc 1 3 0
5423         $insn"
5424  gcc_GAS_CHECK_FEATURE([dwarf2 debug_line support],
5425   gcc_cv_as_dwarf2_debug_line,,
5426   [$conftest_s],
5427   [if test x$gcc_cv_objdump != x \
5428    && $gcc_cv_objdump -h conftest.o 2> /dev/null \
5429       | grep debug_line > /dev/null 2>&1; then
5430      gcc_cv_as_dwarf2_debug_line=yes
5431    elif test x$gcc_cv_otool != x \
5432    && $gcc_cv_otool -l conftest.o 2> /dev/null \
5433       | grep debug_line > /dev/null 2>&1; then
5434      gcc_cv_as_dwarf2_debug_line=yes
5435    fi])
5437 # The .debug_line file table must be in the exact order that
5438 # we specified the files, since these indices are also used
5439 # by DW_AT_decl_file.  Approximate this test by testing if
5440 # the assembler bitches if the same index is assigned twice.
5441  gcc_GAS_CHECK_FEATURE([buggy dwarf2 .file directive],
5442   gcc_cv_as_dwarf2_file_buggy,,
5443 [       .file 1 "foo.s"
5444         .file 1 "bar.s"])
5446  if test $gcc_cv_as_dwarf2_debug_line = yes \
5447  && test $gcc_cv_as_dwarf2_file_buggy = no; then
5448     AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1,
5449   [Define if your assembler supports dwarf2 .file/.loc directives,
5450    and preserves file table indices exactly as given.])
5452     if test $gcc_cv_as_leb128 = yes; then
5453         conftest_s="\
5454         .file 1 \"conftest.s\"
5455         .loc 1 3 0 view .LVU1
5456         $insn
5457         .data
5458         .uleb128 .LVU1
5459         .uleb128 .LVU1
5461         gcc_GAS_CHECK_FEATURE([dwarf2 debug_view support],
5462           gcc_cv_as_dwarf2_debug_view,,
5463           [$conftest_s],,
5464           [AC_DEFINE(HAVE_AS_DWARF2_DEBUG_VIEW, 1,
5465   [Define if your assembler supports views in dwarf2 .loc directives.])])
5466     fi
5467  fi
5469  gcc_GAS_CHECK_FEATURE([--gdwarf2 option],
5470   gcc_cv_as_gdwarf2_flag,
5471   [--gdwarf2], [$insn],,
5472   [AC_DEFINE(HAVE_AS_GDWARF2_DEBUG_FLAG, 1,
5473 [Define if your assembler supports the --gdwarf2 option.])])
5475  gcc_GAS_CHECK_FEATURE([--gdwarf-5 option],
5476   gcc_cv_as_gdwarf_5_flag,
5477   [--gdwarf-5], [$insn],
5478   [if test x$gcc_cv_objdump != x \
5479       && $gcc_cv_objdump -Wi conftest.o 2>&1 \
5480          | grep DW_TAG_compile_unit > /dev/null 2>&1; then
5481      gcc_cv_as_gdwarf_5_flag=yes;
5482    fi],[AC_DEFINE(HAVE_AS_GDWARF_5_DEBUG_FLAG, 1,
5483 [Define if your assembler supports the --gdwarf-5 option.])])
5485  case $target_os in
5486    win32 | pe | cygwin* | mingw32*)
5487      section_flags=\"dr\"
5488      function_type=".def foo; .scl 2; .type 32; .endef"
5489      function_size="";;
5490    *)
5491      section_flags=\"\",%progbits
5492      function_type=".type foo, %function"
5493      function_size=".size foo, .-foo";;
5494  esac
5495  dwarf4_debug_info_size=0x46
5496  dwarf4_high_pc_form=7
5497  dwarf4_debug_aranges_size=0x2c
5498  dwarf4_line_sz=9
5499  for dwarf4_addr_size in 8 4; do
5500    conftest_s="\
5501         .file   \"a.c\"
5502         .text
5503 .Ltext0:
5504         .p2align 4
5505         .globl  foo
5506         $function_type
5507 foo:
5508 .LFB0:
5509 .LM1:
5510         $insn
5511 .LM2:
5512 .LFE0:
5513         $function_size
5514 .Letext0:
5515         .section        .debug_info,$section_flags
5516 .Ldebug_info0:
5517         .4byte  $dwarf4_debug_info_size
5518         .2byte  0x4
5519         .4byte  .Ldebug_abbrev0
5520         .byte   0x$dwarf4_addr_size
5521         .byte   0x1
5522         .ascii \"GNU C17\\0\"
5523         .byte   0xc
5524         .ascii \"a.c\\0\"
5525         .ascii \"/\\0\"
5526         .${dwarf4_addr_size}byte        .Ltext0
5527         .${dwarf4_addr_size}byte        .Letext0-.Ltext0
5528         .4byte  .Ldebug_line0
5529         .byte   0x2
5530         .ascii \"foo\\0\"
5531         .byte   0x1
5532         .byte   0x2
5533         .byte   0x1
5534         .${dwarf4_addr_size}byte        .LFB0
5535         .${dwarf4_addr_size}byte        .LFE0-.LFB0
5536         .byte   0x1
5537         .byte   0x9c
5538         .byte   0
5539         .section        .debug_abbrev,$section_flags
5540 .Ldebug_abbrev0:
5541         .byte   0x1
5542         .byte   0x11
5543         .byte   0x1
5544         .byte   0x25
5545         .byte   0x8
5546         .byte   0x13
5547         .byte   0xb
5548         .byte   0x3
5549         .byte   0x8
5550         .byte   0x1b
5551         .byte   0x8
5552         .byte   0x11
5553         .byte   0x1
5554         .byte   0x12
5555         .byte   0x$dwarf4_high_pc_form
5556         .byte   0x10
5557         .byte   0x17
5558         .byte   0
5559         .byte   0
5560         .byte   0x2
5561         .byte   0x2e
5562         .byte   0
5563         .byte   0x3f
5564         .byte   0x19
5565         .byte   0x3
5566         .byte   0x8
5567         .byte   0x3a
5568         .byte   0xb
5569         .byte   0x3b
5570         .byte   0xb
5571         .byte   0x39
5572         .byte   0xb
5573         .byte   0x11
5574         .byte   0x1
5575         .byte   0x12
5576         .byte   0x$dwarf4_high_pc_form
5577         .byte   0x40
5578         .byte   0x18
5579         .byte   0
5580         .byte   0
5581         .byte   0
5582         .section        .debug_aranges,$section_flags
5583         .4byte  $dwarf4_debug_aranges_size
5584         .2byte  0x2
5585         .4byte  .Ldebug_info0
5586         .byte   0x8
5587         .byte   0
5588         .2byte  0
5589         .2byte  0
5590         .${dwarf4_addr_size}byte        .Ltext0
5591         .${dwarf4_addr_size}byte        .Letext0-.Ltext0
5592         .${dwarf4_addr_size}byte        0
5593         .${dwarf4_addr_size}byte        0
5594         .section        .debug_line,$section_flags
5595 .Ldebug_line0:
5596         .4byte  .LELT0-.LSLT0
5597 .LSLT0:
5598         .2byte  0x4
5599         .4byte  .LELTP0-.LASLTP0
5600 .LASLTP0:
5601         .byte   0x1
5602         .byte   0x1
5603         .byte   0x1
5604         .byte   0xf6
5605         .byte   0xf2
5606         .byte   0xd
5607         .byte   0
5608         .byte   0x1
5609         .byte   0x1
5610         .byte   0x1
5611         .byte   0x1
5612         .byte   0
5613         .byte   0
5614         .byte   0
5615         .byte   0x1
5616         .byte   0
5617         .byte   0
5618         .byte   0x1
5619         .byte   0
5620         .ascii \"a.c\\0\"
5621         .byte   0
5622         .byte   0
5623         .byte   0
5624         .byte   0
5625 .LELTP0:
5626         .byte   0
5627         .byte   0x$dwarf4_line_sz
5628         .byte   0x2
5629         .${dwarf4_addr_size}byte        .LM1
5630         .byte   0x18
5631         .byte   0x5
5632         .byte   0x1
5633         .byte   0
5634         .byte   0x$dwarf4_line_sz
5635         .byte   0x2
5636         .${dwarf4_addr_size}byte        .LM2
5637         .byte   0x1
5638         .byte   0x5
5639         .byte   0x1
5640         .byte   0
5641         .byte   0x$dwarf4_line_sz
5642         .byte   0x2
5643         .${dwarf4_addr_size}byte        .Letext0
5644         .byte   0
5645         .byte   0x1
5646         .byte   0x1
5647 .LELT0:
5648         .section        .debug_str,$section_flags
5649         .ident  \"GCC\"
5651    dwarf4_success=no
5652    if test $dwarf4_addr_size = 4; then
5653      gcc_GAS_CHECK_FEATURE([assembly of compiler generated 32-bit .debug_line],
5654       gcc_cv_as_debug_line_32_flag,,
5655       [$conftest_s],,
5656       [dwarf4_success=yes])
5657    else
5658      gcc_GAS_CHECK_FEATURE([assembly of compiler generated 64-bit .debug_line],
5659       gcc_cv_as_debug_line_64_flag,,
5660       [$conftest_s],,
5661       [dwarf4_success=yes])
5662    fi
5663    if test $dwarf4_success = yes; then
5664      dwarf4_success=no
5665      gcc_GAS_CHECK_FEATURE([--gdwarf-4 not refusing compiler generated .debug_line],
5666       gcc_cv_as_dwarf_4_debug_line_flag,
5667       [--gdwarf-4], [$conftest_s],,
5668       [dwarf4_success=yes])
5669      break
5670    fi
5671    dwarf4_debug_info_size=0x36
5672    dwarf4_high_pc_form=6
5673    dwarf4_debug_aranges_size=0x1c
5674    dwarf4_line_sz=5
5675  done
5677  if test $dwarf4_success = yes; then
5678    conftest_s="\
5679         .file   \"foo.c\"
5680         .text
5681 bar:
5682 #APP
5683 # 82 \"xxx.h\" 1
5684         $insn
5685 # 0 \"\" 2
5686 #NO_APP
5687         $insn
5688 foo:
5689         .file 1 \"foo.c\"
5690         $insn
5691         .file 2 \"foo.h\"
5692         ret
5694    dwarf4_success=no
5695    gcc_GAS_CHECK_FEATURE([--gdwarf-4 with the APP marker],
5696      gcc_cv_as_dwarf_4_app_flag,
5697      [--gdwarf-4], [$conftest_s],, [dwarf4_success=yes])
5698  fi
5700  if test $dwarf4_success = yes; then
5701    conftest_s="\
5702         .text
5703         .globl  foo
5704         $function_type
5705 foo:
5706         $insn
5707         $function_size
5708         .file   1 \"foo.c\"
5710    gcc_GAS_CHECK_FEATURE([working --gdwarf-4/--gdwarf-5 for all sources],
5711      gcc_cv_as_working_gdwarf_n_flag,
5712      [--gdwarf-4],
5713      [$conftest_s],
5714      [changequote(,)dnl
5715       if test x$gcc_cv_objdump != x \
5716          && $gcc_cv_objdump -W conftest.o 2>&1 \
5717                 | grep conftest.s > /dev/null 2>&1; then
5718         gcc_cv_as_working_gdwarf_n_flag=no
5719       else
5720         gcc_cv_as_working_gdwarf_n_flag=yes
5721       fi
5722       changequote([,])dnl])
5723    if test $gcc_cv_as_working_gdwarf_n_flag = yes; then
5724      AC_DEFINE(HAVE_AS_WORKING_DWARF_N_FLAG, 1,
5725 [Define if your assembler supports --gdwarf-4/--gdwarf-5 even with
5726  compiler generated .debug_line.])
5727    fi
5728  fi
5730  gcc_GAS_CHECK_FEATURE([--debug-prefix-map option],
5731   gcc_cv_as_debug_prefix_map_flag,
5732   [--debug-prefix-map /a=/b], [$insn],,
5733   [AC_DEFINE(HAVE_AS_DEBUG_PREFIX_MAP, 1,
5734 [Define if your assembler supports the --debug-prefix-map option.])])
5737 gcc_GAS_CHECK_FEATURE([compressed debug sections],
5738   gcc_cv_as_compress_debug,,,
5739   [# gas compiled without zlib cannot compress debug sections and warns
5740    # about it, but still exits successfully.  So check for this, too.
5741    if $gcc_cv_as --compress-debug-sections -o conftest.o conftest.s 2>&1 | grep -i warning > /dev/null
5742    then
5743      gcc_cv_as_compress_debug=0
5744    elif $gcc_cv_as --compress-debug-sections=zlib -o conftest.o conftest.s > /dev/null 2>&1
5745    then
5746      gcc_cv_as_compress_debug=1
5747      gcc_cv_as_compress_debug_option="--compress-debug-sections"
5748      gcc_cv_as_no_compress_debug_option="--nocompress-debug-sections"
5749      # Since binutils 2.40, gas supports --compress-debug-sections=zstd.
5750      if $gcc_cv_as --compress-debug-sections=zstd -o conftest.o conftest.s > /dev/null 2>&1
5751      then
5752        gcc_cv_as_compress_debug=2
5753      fi
5754    else
5755      gcc_cv_as_compress_debug=0
5756    fi])
5757 AC_DEFINE_UNQUOTED(HAVE_AS_COMPRESS_DEBUG, $gcc_cv_as_compress_debug,
5758 [Define to the level of your assembler's compressed debug section support.])
5759 AC_DEFINE_UNQUOTED(AS_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_compress_debug_option",
5760 [Define to the assembler option to enable compressed debug sections.])
5761 AC_DEFINE_UNQUOTED(AS_NO_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_no_compress_debug_option",
5762 [Define to the assembler option to disable compressed debug sections.])
5764 gcc_GAS_CHECK_FEATURE([.lcomm with alignment], gcc_cv_as_lcomm_with_alignment,,
5765 [.lcomm bar,4,16],,
5766 [AC_DEFINE(HAVE_GAS_LCOMM_WITH_ALIGNMENT, 1,
5767   [Define if your assembler supports .lcomm with an alignment field.])])
5769 if test x$with_sysroot = x && test x$host = x$target \
5770    && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" \
5771    && test "$prefix" != "NONE"; then
5772   AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
5773 [Define to PREFIX/include if cpp should also search that directory.])
5776 # Determine the version of glibc, if any, used on the target.
5777 AC_MSG_CHECKING([for target glibc version])
5778 AC_ARG_WITH([glibc-version],
5779   [AS_HELP_STRING([--with-glibc-version=M.N],
5780     [assume GCC used with glibc version M.N or later])], [
5781 if [echo "$with_glibc_version" | grep '^[0-9][0-9]*\.[0-9][0-9]*$']; then
5782   glibc_version_major=`echo "$with_glibc_version" | sed -e 's/\..*//'`
5783   glibc_version_minor=`echo "$with_glibc_version" | sed -e 's/.*\.//'`
5784 else
5785   AC_MSG_ERROR([option --with-glibc-version requires a version number M.N])
5786 fi], [
5787 glibc_version_major=0
5788 glibc_version_minor=0
5789 [if test -f $target_header_dir/features.h \
5790   && glibc_version_major_define=`$EGREP '^[     ]*#[    ]*define[       ]+__GLIBC__[    ]+[0-9]' $target_header_dir/features.h` \
5791   && glibc_version_minor_define=`$EGREP '^[     ]*#[    ]*define[       ]+__GLIBC_MINOR__[      ]+[0-9]' $target_header_dir/features.h`; then
5792   glibc_version_major=`echo "$glibc_version_major_define" | sed -e 's/.*__GLIBC__[      ]*//'`
5793   glibc_version_minor=`echo "$glibc_version_minor_define" | sed -e 's/.*__GLIBC_MINOR__[        ]*//'`
5794 fi]])
5795 AC_MSG_RESULT([$glibc_version_major.$glibc_version_minor])
5796 AC_DEFINE_UNQUOTED([TARGET_GLIBC_MAJOR], [$glibc_version_major],
5797 [GNU C Library major version number used on the target, or 0.])
5798 AC_DEFINE_UNQUOTED([TARGET_GLIBC_MINOR], [$glibc_version_minor],
5799 [GNU C Library minor version number used on the target, or 0.])
5801 AC_ARG_ENABLE(gnu-unique-object,
5802  [AS_HELP_STRING([--enable-gnu-unique-object],
5803    [enable the use of the @gnu_unique_object ELF extension on glibc systems])],
5804  [case $enable_gnu_unique_object in
5805     yes | no) ;;
5806     *) AC_MSG_ERROR(['$enable_gnu_unique_object' is an invalid value for --enable-gnu-unique-object.
5807 Valid choices are 'yes' and 'no'.]) ;;
5808   esac],
5809  [gcc_GAS_CHECK_FEATURE([gnu_unique_object], gcc_cv_as_gnu_unique_object,,
5810    [.type foo, '$target_type_format_char'gnu_unique_object],,
5811 # We need to unquote above to to use the definition from config.gcc.
5812 # Also check for ld.so support, i.e. glibc 2.11 or higher.
5813    [GCC_GLIBC_VERSION_GTE_IFELSE([2], [11], [enable_gnu_unique_object=yes], )]
5814    )])
5815 if test x$enable_gnu_unique_object = xyes; then
5816   AC_DEFINE(HAVE_GAS_GNU_UNIQUE_OBJECT, 1,
5817    [Define if your assembler supports @gnu_unique_object.])
5820 AC_CACHE_CHECK([assembler for tolerance to line number 0],
5821  [gcc_cv_as_line_zero],
5822  [gcc_cv_as_line_zero=no
5823   if test "x$gcc_cv_as" != x; then
5824     { echo '# 1 "test.s" 1'; echo '# 0 "" 2'; } > conftest.s
5825     if AC_TRY_COMMAND([$gcc_cv_as -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD 2>conftest.out]) &&
5826        test "x`cat conftest.out`" = x
5827     then
5828       gcc_cv_as_line_zero=yes
5829     else
5830       echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
5831       cat conftest.s >&AS_MESSAGE_LOG_FD
5832       echo "configure: error output was" >&AS_MESSAGE_LOG_FD
5833       cat conftest.out >&AS_MESSAGE_LOG_FD
5834     fi
5835     rm -f conftest.o conftest.s conftest.out
5836   fi])
5837 if test "x$gcc_cv_as_line_zero" = xyes; then
5838   AC_DEFINE([HAVE_AS_LINE_ZERO], 1,
5839 [Define if the assembler won't complain about a line such as # 0 "" 2.])
5842 AC_MSG_CHECKING(support for thin archives)
5843 thin_archive_support=no
5844 echo 'int main (void) { return 0; }' > conftest.c
5845 if ($AR --version | sed 1q | grep "GNU ar" \
5846     && $CC $CFLAGS -c conftest.c \
5847     && $AR rcT conftest.a conftest.o \
5848     && $CC $CFLAGS $LDFLAGS -o conftest conftest.a) >/dev/null 2>&1; then
5849   thin_archive_support=yes
5851 rm -f conftest.c conftest.o conftest.a conftest
5852 AC_MSG_RESULT($thin_archive_support)
5853 AC_SUBST(thin_archive_support)
5855 AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
5856 gcc_cv_ld_eh_frame_hdr=no
5857 if test $in_tree_ld = yes ; then
5858   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 \
5859      && test $in_tree_ld_is_elf = yes; then
5860     gcc_cv_ld_eh_frame_hdr=yes
5861   fi
5862 elif test x$gcc_cv_ld != x; then
5863   if echo "$ld_ver" | grep GNU > /dev/null; then
5864     # Check if linker supports --eh-frame-hdr option
5865     if $gcc_cv_ld --help 2>&1 | grep eh-frame-hdr > /dev/null; then
5866       gcc_cv_ld_eh_frame_hdr=yes
5867     fi
5868   else
5869     case "$target" in
5870       *-*-solaris2*)
5871         # Sun ld has various bugs in .eh_frame_hdr support before version 1.2251.
5872         if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2251; then
5873           gcc_cv_ld_eh_frame_hdr=yes
5874         fi
5875         ;;
5876     esac
5877   fi
5879 GCC_TARGET_TEMPLATE([HAVE_LD_EH_FRAME_HDR])
5880 if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then
5881         AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1,
5882 [Define if your linker supports .eh_frame_hdr.])
5884 AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr)
5886 AC_MSG_CHECKING(linker CIEv3 in .eh_frame support)
5887 gcc_cv_ld_eh_frame_ciev3=no
5888 if test $in_tree_ld = yes ; then
5889   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 \
5890      && test $in_tree_ld_is_elf = yes; then
5891     gcc_cv_ld_eh_frame_ciev3=yes
5892   fi
5893 elif test x$gcc_cv_ld != x; then
5894   if echo "$ld_ver" | grep GNU > /dev/null; then
5895     gcc_cv_ld_eh_frame_ciev3=yes
5896     if test 0"$ld_date" -lt 20040513; then
5897       if test -n "$ld_date"; then
5898         # If there was date string, but was earlier than 2004-05-13, fail
5899         gcc_cv_ld_eh_frame_ciev3=no
5900       elif test "$ld_vers_major" -lt 2; then
5901         gcc_cv_ld_eh_frame_ciev3=no
5902       elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
5903         gcc_cv_ld_eh_frame_ciev3=no
5904       fi
5905     fi
5906   else
5907     case "$target" in
5908       *-*-solaris2*)
5909         # Sun ld added support for CIE v3 in .eh_frame in Solaris 11.1.
5910         if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2324; then
5911           gcc_cv_ld_eh_frame_ciev3=yes
5912         fi
5913         ;;
5914     esac
5915   fi
5917 AC_DEFINE_UNQUOTED(HAVE_LD_EH_FRAME_CIEV3,
5918   [`if test x"$gcc_cv_ld_eh_frame_ciev3" = xyes; then echo 1; else echo 0; fi`],
5919   [Define 0/1 if your linker supports CIE v3 in .eh_frame.])
5920 AC_MSG_RESULT($gcc_cv_ld_eh_frame_ciev3)
5922 AC_MSG_CHECKING(linker position independent executable support)
5923 gcc_cv_ld_pie=no
5924 if test $in_tree_ld = yes ; then
5925   case "$target" in
5926     # Full PIE support on Solaris was only introduced in gld 2.26.
5927     *-*-solaris2*)  gcc_gld_pie_min_version=26 ;;
5928     *)              gcc_gld_pie_min_version=15 ;;
5929   esac
5930   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 \
5931      && test $in_tree_ld_is_elf = yes; then
5932     gcc_cv_ld_pie=yes
5933   fi
5934 elif test x$gcc_cv_ld != x; then
5935   # Check if linker supports -pie option
5936   if $gcc_cv_ld --help 2>&1 | grep -- -pie > /dev/null; then
5937     gcc_cv_ld_pie=yes
5938     case "$target" in
5939       *-*-solaris2*)
5940         if echo "$ld_ver" | grep GNU > /dev/null \
5941           && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 26; then
5942           gcc_cv_ld_pie=no
5943         fi
5944         ;;
5945     esac
5946   else
5947     case "$target" in
5948       *-*-solaris2.1[[1-9]]*)
5949         # Solaris 11.3 added PIE support.
5950         if $gcc_cv_ld -z help 2>&1 | grep -- type.*pie > /dev/null; then
5951           gcc_cv_ld_pie=yes
5952         fi
5953         ;;
5954     esac
5955   fi
5957 if test x"$gcc_cv_ld_pie" = xyes; then
5958         AC_DEFINE(HAVE_LD_PIE, 1,
5959 [Define if your linker supports PIE option.])
5961 AC_MSG_RESULT($gcc_cv_ld_pie)
5963 AC_MSG_CHECKING(linker PIE support with copy reloc)
5964 gcc_cv_ld_pie_copyreloc=no
5965 if test $gcc_cv_ld_pie = yes ; then
5966   if test $in_tree_ld = yes ; then
5967     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
5968       gcc_cv_ld_pie_copyreloc=yes
5969     fi
5970   elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
5971     # Check if linker supports -pie option with copy reloc
5972     case "$target" in
5973     i?86-*-linux* | x86_64-*-linux*)
5974       cat > conftest1.s <<EOF
5975         .globl  a_glob
5976         .data
5977         .type   a_glob, @object
5978         .size   a_glob, 4
5979 a_glob:
5980         .long   2
5982       cat > conftest2.s <<EOF
5983         .text
5984         .globl  main
5985         .type   main, @function
5986 main:
5987         movl    %eax, a_glob(%rip)
5988         .size   main, .-main
5989         .globl  ptr
5990         .section        .data.rel,"aw",@progbits
5991         .type   ptr, @object
5992 ptr:
5993         .quad   a_glob
5995       if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
5996          && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
5997          && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
5998          && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
5999         gcc_cv_ld_pie_copyreloc=yes
6000       fi
6001       rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
6002       ;;
6003     esac
6004   fi
6006 AC_DEFINE_UNQUOTED(HAVE_LD_PIE_COPYRELOC,
6007   [`if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`],
6008   [Define 0/1 if your linker supports -pie option with copy reloc.])
6009 AC_MSG_RESULT($gcc_cv_ld_pie_copyreloc)
6011 AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
6012 gcc_cv_ld_eh_gc_sections=no
6013 if test $in_tree_ld = yes ; then
6014   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 \
6015      && test $in_tree_ld_is_elf = yes; then
6016     gcc_cv_ld_eh_gc_sections=yes
6017   fi
6018 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
6019   cat > conftest.s <<EOF
6020         .section        .text
6021 .globl _start
6022         .type _start, @function
6023 _start:
6024         .long foo
6025         .size _start, .-_start
6026         .section        .text.foo,"ax",@progbits
6027         .type foo, @function
6028 foo:
6029         .long 0
6030         .size foo, .-foo
6031         .section        .gcc_except_table.foo,"a",@progbits
6032 .L0:
6033         .long 0
6034         .section        .eh_frame,"a",@progbits
6035         .long .L0
6037   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6038     if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6039          | grep "gc-sections option ignored" > /dev/null; then
6040       gcc_cv_ld_eh_gc_sections=no
6041     elif $gcc_cv_objdump -h conftest 2> /dev/null \
6042          | grep gcc_except_table > /dev/null; then
6043       gcc_cv_ld_eh_gc_sections=yes
6044       # If no COMDAT groups, the compiler will emit .gnu.linkonce.t. sections.
6045       if test x$gcc_cv_as_comdat_group != xyes; then
6046         gcc_cv_ld_eh_gc_sections=no
6047         cat > conftest.s <<EOF
6048         .section        .text
6049 .globl _start
6050         .type _start, @function
6051 _start:
6052         .long foo
6053         .size _start, .-_start
6054         .section        .gnu.linkonce.t.foo,"ax",@progbits
6055         .type foo, @function
6056 foo:
6057         .long 0
6058         .size foo, .-foo
6059         .section        .gcc_except_table.foo,"a",@progbits
6060 .L0:
6061         .long 0
6062         .section        .eh_frame,"a",@progbits
6063         .long .L0
6065         if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6066           if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6067                | grep "gc-sections option ignored" > /dev/null; then
6068             gcc_cv_ld_eh_gc_sections=no
6069           elif $gcc_cv_objdump -h conftest 2> /dev/null \
6070                | grep gcc_except_table > /dev/null; then
6071             gcc_cv_ld_eh_gc_sections=yes
6072           fi
6073         fi
6074       fi
6075     fi
6076   fi
6077   rm -f conftest.s conftest.o conftest
6079 case "$target" in
6080   hppa*-*-linux*)
6081     # ??? This apparently exposes a binutils bug with PC-relative relocations.
6082     gcc_cv_ld_eh_gc_sections=no
6083     ;;
6084 esac
6085 if test x$gcc_cv_ld_eh_gc_sections = xyes; then
6086         AC_DEFINE(HAVE_LD_EH_GC_SECTIONS, 1,
6087   [Define if your linker supports garbage collection of
6088    sections in presence of EH frames.])
6090 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections)
6092 AC_MSG_CHECKING(linker EH garbage collection of sections bug)
6093 gcc_cv_ld_eh_gc_sections_bug=no
6094 if test $in_tree_ld = yes ; then
6095   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 \
6096      && test $in_tree_ld_is_elf = yes; then
6097     gcc_cv_ld_eh_gc_sections_bug=yes
6098   fi
6099 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
6100   gcc_cv_ld_eh_gc_sections_bug=yes
6101   cat > conftest.s <<EOF
6102         .section        .text
6103 .globl _start
6104         .type _start, @function
6105 _start:
6106         .long foo
6107         .size _start, .-_start
6108         .section        .text.startup.foo,"ax",@progbits
6109         .type foo, @function
6110 foo:
6111         .long 0
6112         .size foo, .-foo
6113         .section        .gcc_except_table.foo,"a",@progbits
6114 .L0:
6115         .long 0
6116         .section        .eh_frame,"a",@progbits
6117         .long .L0
6119   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6120     if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6121          | grep "gc-sections option ignored" > /dev/null; then
6122       :
6123     elif $gcc_cv_objdump -h conftest 2> /dev/null \
6124          | grep gcc_except_table > /dev/null; then
6125       gcc_cv_ld_eh_gc_sections_bug=no
6126     fi
6127   fi
6128   rm -f conftest.s conftest.o conftest
6130 if test x$gcc_cv_ld_eh_gc_sections_bug = xyes; then
6131         AC_DEFINE(HAVE_LD_EH_GC_SECTIONS_BUG, 1,
6132   [Define if your linker has buggy garbage collection of
6133    sections support when .text.startup.foo like sections are used.])
6135 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections_bug)
6137 AC_MSG_CHECKING(linker for compressed debug sections)
6138 # GNU ld/gold support --compressed-debug-sections=zlib since binutils 2.26.
6139 if $gcc_cv_ld --help 2>&1 | grep -- '--compress-debug-sections.*\<zlib-gabi\>' > /dev/null; then
6140     gcc_cv_ld_compress_debug=1
6141     gcc_cv_ld_compress_debug_option="--compress-debug-sections"
6142     # Detect zstd debug section compression support
6143     if $gcc_cv_ld --help 2>&1 | grep -- '--compress-debug-sections.*\<zstd\>' > /dev/null; then
6144       gcc_cv_ld_compress_debug=2
6145     fi
6146 else
6147 changequote(,)dnl
6148   case "${target}" in
6149     *-*-solaris2*)
6150       # Introduced in Solaris 11.2.
6151       if $gcc_cv_ld --help 2>&1 | grep -- '-z compress-sections' > /dev/null; then
6152         gcc_cv_ld_compress_debug=1
6153         gcc_cv_ld_compress_debug_option="-z compress-sections"
6154       else
6155         gcc_cv_ld_compress_debug=0
6156       fi
6157       ;;
6158     *)
6159       # Assume linkers other than GNU ld don't support compessed debug
6160       # sections.
6161       gcc_cv_ld_compress_debug=0
6162       ;;
6163   esac
6164 changequote([,])dnl
6166 AC_DEFINE_UNQUOTED(HAVE_LD_COMPRESS_DEBUG, $gcc_cv_ld_compress_debug,
6167 [Define to the level of your linker's compressed debug section support.])
6168 AC_DEFINE_UNQUOTED(LD_COMPRESS_DEBUG_OPTION, "$gcc_cv_ld_compress_debug_option",
6169 [Define to the linker option to enable compressed debug sections.])
6170 AC_MSG_RESULT($gcc_cv_ld_compress_debug)
6172 if test x"$ld64_flag" = x"yes"; then
6174   # Set defaults for possibly untestable items.
6175   gcc_cv_ld64_export_dynamic=0
6176   gcc_cv_ld64_platform_version=0
6178   if test "$build" = "$host"; then
6179     darwin_try_test=1
6180   else
6181     darwin_try_test=0
6182   fi
6184   # On Darwin, because of FAT library support, it is often possible to execute
6185   # exes from compatible archs even when the host differs from the build system.
6186   case "$build","$host" in
6187     x86_64-*-darwin*,i?86-*-darwin* | powerpc64*-*-darwin*,powerpc*-*-darwin*)
6188         darwin_try_test=1;;
6189     *) ;;
6190   esac
6192   # If the configurer specified a minimum ld64 version to be supported, then use
6193   # that to determine feature support.
6194   if test x"${gcc_cv_ld64_version}" != x; then
6195     AC_MSG_CHECKING(ld64 specified version)
6196     gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'`
6197     AC_MSG_RESULT($gcc_cv_ld64_major)
6198     if test "$gcc_cv_ld64_major" -ge 236; then
6199       gcc_cv_ld64_export_dynamic=1
6200     fi
6201     if test "$gcc_cv_ld64_major" -ge 512; then
6202       gcc_cv_ld64_platform_version=1
6203     fi
6204   elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
6205     # If the version was not specified, try to find it.
6206     AC_MSG_CHECKING(linker version)
6207     if test x"${gcc_cv_ld64_version}" = x; then
6208       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | grep ld64 | sed s/.*ld64-// | awk '{print $1}'`
6209     fi
6210     AC_MSG_RESULT($gcc_cv_ld64_version)
6212     AC_MSG_CHECKING(linker for -export_dynamic support)
6213     gcc_cv_ld64_export_dynamic=1
6214     if $gcc_cv_ld -export_dynamic < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6215       gcc_cv_ld64_export_dynamic=0
6216     fi
6217     AC_MSG_RESULT($gcc_cv_ld64_export_dynamic)
6219     AC_MSG_CHECKING(linker for -platform_version support)
6220     gcc_cv_ld64_platform_version=1
6221     if $gcc_cv_ld -platform_version macos 10.5 0.0 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6222       gcc_cv_ld64_platform_version=0
6223     fi
6224     AC_MSG_RESULT($gcc_cv_ld64_platform_version)
6225   fi
6227   if test x"${gcc_cv_ld64_version}" != x; then
6228     AC_DEFINE_UNQUOTED(LD64_VERSION, "${gcc_cv_ld64_version}",
6229       [Define to ld64 version.])
6230   fi
6232   AC_DEFINE_UNQUOTED(LD64_HAS_EXPORT_DYNAMIC, $gcc_cv_ld64_export_dynamic,
6233   [Define to 1 if ld64 supports '-export_dynamic'.])
6235   AC_DEFINE_UNQUOTED(LD64_HAS_PLATFORM_VERSION, $gcc_cv_ld64_platform_version,
6236   [Define to 1 if ld64 supports '-platform_version'.])
6239 if test x"$dsymutil_flag" = x"yes"; then
6241     # If the user specified a dsymutil path, then we will already have the
6242     # version string, otherwise, pick it up.
6243     if test x"$gcc_cv_dsymutil" = x; then
6244         AC_MSG_WARN([dsymutil is a required tool for this system, but not found])
6245         dsymutil_vers="tool unspecified"
6246     elif test x"$dsymutil_vers" = x; then
6247         dsymutil_vers=`$gcc_cv_dsymutil -v /dev/null 2>&1`
6248     fi
6250     dsymutil_temp=`echo $dsymutil_vers | sed 1q`
6251     AC_MSG_CHECKING(dsymutil version "$dsymutil_temp")
6252     if echo $dsymutil_temp | grep dwarfutils- > /dev/null; then
6253       dsymutil_kind=DWARFUTILS
6254       dsymutil_vers=`echo $dsymutil_temp | sed 's/.*dwarfutils-\([[0-9\.]]*\).*/\1/'`
6255     elif echo $dsymutil_temp | grep clang- > /dev/null; then
6256       dsymutil_kind=CLANG
6257       dsymutil_vers=`echo $dsymutil_temp | sed 's/.*clang-\([[0-9\.]]*\).*/\1/'`
6258     elif echo $dsymutil_temp | grep 'LLVM version ' > /dev/null; then
6259       dsymutil_kind=LLVM
6260       dsymutil_vers=`echo $dsymutil_temp | sed 's/.*LLVM\ version\ \([[0-9\.]]*\).*/\1/'`
6261     else
6262       dsymutil_kind=UNKNOWN
6263       dsymutil_vers="0.0"
6264     fi
6265     dsymutil_major=`expr "$dsymutil_vers" : '\([[0-9]]*\)'`
6266     dsymutil_minor=`expr "$dsymutil_vers" : '[[0-9]]*\.\([[0-9]]*\)'`
6267     dsymutil_tiny=`expr "$dsymutil_vers" : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
6268     if test x"${dsymutil_minor}" = x; then
6269       dsymutil_minor=0
6270     fi
6271     if test x"${dsymutil_tiny}" = x; then
6272       dsymutil_tiny=0
6273     fi
6274     AC_DEFINE_UNQUOTED(DSYMUTIL_VERSION, [$dsymutil_kind,${dsymutil_major},${dsymutil_minor},${dsymutil_tiny}],
6275         [Define to the dsymutil version.])
6276     AC_MSG_RESULT($dsymutil_vers : $dsymutil_kind ${dsymutil_major} ${dsymutil_minor} ${dsymutil_tiny} )
6279 case $target_os in
6280   win32 | pe | cygwin* | mingw32*)
6281     AC_MSG_CHECKING(broken PE linker dwarf5 support)
6282     gcc_cv_ld_broken_pe_dwarf5=yes
6283     if test $in_tree_ld = yes ; then
6284       if grep -q '\.debug_loclists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6285            $gcc_cv_ld_gld_srcdir/scripttempl/pe*.sc \
6286          && grep -q '\.debug_rnglists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6287               $gcc_cv_ld_gld_srcdir/scripttempl/pe*.sc; then
6288         gcc_cv_ld_broken_pe_dwarf5=no
6289       fi
6290     else
6291       if $gcc_cv_ld --verbose 2>&1 | grep -q '\.debug_loclists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6292          && $gcc_cv_ld --verbose 2>&1 | grep -q '\.debug_rnglists.*BLOCK.*__section_alignment__.*NOLOAD.*:'; then
6293         gcc_cv_ld_broken_pe_dwarf5=no
6294       fi
6295     fi
6296     if test x$gcc_cv_ld_broken_pe_dwarf5 = xyes; then
6297       AC_DEFINE(HAVE_LD_BROKEN_PE_DWARF5, 1,
6298                 [Define if the PE linker has broken DWARF 5 support.])
6299     fi
6300     AC_MSG_RESULT($gcc_cv_ld_broken_pe_dwarf5)
6302     AC_MSG_CHECKING(PE linker --disable-dynamicbase support)
6303     gcc_cv_ld_disable_dynamicbase=no
6304     if test $in_tree_ld = yes; then
6305       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 \
6306         gcc_cv_ld_disable_dynamicbase=yes
6307       fi
6308     else
6309       if $gcc_cv_ld --help 2>&1 | grep -q 'disable\-]dynamicbase' > /dev/null; then
6310         gcc_cv_ld_disable_dynamicbase=yes
6311       fi
6312     fi
6313     if test x"$gcc_cv_ld_disable_dynamicbase" = xyes; then
6314       AC_DEFINE(HAVE_LD_PE_DISABLE_DYNAMICBASE, 1,
6315                 [Define if the PE linker supports --disable-dynamicbase option.])
6316     fi
6317     AC_MSG_RESULT($gcc_cv_ld_disable_dynamicbase)
6318     ;;
6319 esac
6321 # --------
6322 # UNSORTED
6323 # --------
6325 AC_CACHE_CHECK(linker --as-needed support,
6326 gcc_cv_ld_as_needed,
6327 [gcc_cv_ld_as_needed=no
6328 gcc_cv_ld_as_needed_option='--as-needed'
6329 gcc_cv_ld_no_as_needed_option='--no-as-needed'
6330 if test $in_tree_ld = yes ; then
6331   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 \
6332      && test $in_tree_ld_is_elf = yes; then
6333     gcc_cv_ld_as_needed=yes
6334     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 28; then
6335       gcc_cv_ld_as_needed_option='--push-state --as-needed'
6336       gcc_cv_ld_no_as_needed_option='--pop-state'
6337     fi
6338   fi
6339 elif test x$gcc_cv_ld != x; then
6340   # Check if linker supports --as-needed and --no-as-needed options
6341   if $gcc_cv_ld --help 2>&1 | grep as-needed > /dev/null; then
6342     gcc_cv_ld_as_needed=yes
6343     if $gcc_cv_ld --help 2>&1 | grep push-state > /dev/null \
6344        && $gcc_cv_ld --help 2>&1 | grep pop-state > /dev/null \
6345        && echo "$ld_ver" | grep GNU > /dev/null \
6346        && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 28; then
6347       # Use these options only when both ld.bfd and ld.gold support
6348       # --push-state/--pop-state, which unfortunately wasn't added
6349       # at the same time.
6350       gcc_cv_ld_as_needed_option='--push-state --as-needed'
6351       gcc_cv_ld_no_as_needed_option='--pop-state'
6352     fi
6353   fi
6354   case "$target:$gnu_ld" in
6355     *-*-solaris2*:no)
6356       # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
6357       # forms.
6358       gcc_cv_ld_as_needed=yes
6359       gcc_cv_ld_as_needed_option="-z ignore"
6360       gcc_cv_ld_no_as_needed_option="-z record"
6361       ;;
6362   esac
6364 # --as-needed/-z ignore can only be used if libgcc_s.so.1 uses
6365 # dl_iterate_phdr, i.e. since Solaris 11.
6366 case "$target" in
6367   *-*-solaris2.1[[1-9]]*)
6368     case "$target" in
6369     i?86-*-* | x86_64-*-*)
6370       if echo "$ld_ver" | grep GNU > /dev/null; then
6371         # Doesn't work with gld on Solaris/x86 due to PR ld/12320.
6372         gcc_cv_ld_as_needed=no
6373       fi
6374       ;;
6375     esac
6376     ;;
6377   *-*-solaris2*)
6378     gcc_cv_ld_as_needed=no
6379     ;;
6380 esac
6382 if test x"$gcc_cv_ld_as_needed" = xyes; then
6383         AC_DEFINE(HAVE_LD_AS_NEEDED, 1,
6384 [Define if your linker supports --as-needed/--no-as-needed or equivalent options.])
6385         AC_DEFINE_UNQUOTED(LD_AS_NEEDED_OPTION, "$gcc_cv_ld_as_needed_option",
6386 [Define to the linker option to ignore unused dependencies.])
6387         AC_DEFINE_UNQUOTED(LD_NO_AS_NEEDED_OPTION, "$gcc_cv_ld_no_as_needed_option",
6388 [Define to the linker option to keep unused dependencies.])
6391 AC_MSG_CHECKING(linker mapfile support for clearing hardware capabilities)
6392 saved_LDFLAGS="$LDFLAGS"
6393 for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
6394   LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
6395   AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
6396     [gcc_cv_ld_clearcap=yes; break], [gcc_cv_ld_clearcap=no])
6397 done
6398 LDFLAGS="$saved_LDFLAGS"
6399 if test "x$gcc_cv_ld_clearcap" = xyes; then
6400   AC_DEFINE([HAVE_LD_CLEARCAP], 1,
6401 [Define if the linker supports clearing hardware capabilities via mapfile.])
6402   AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/$clearcap_map])
6404 AC_MSG_RESULT($gcc_cv_ld_clearcap)
6406 case "$target" in
6407   powerpc*-*-*)
6408     case "$target" in
6409       *le-*-linux*)
6410         emul_name="-melf32lppc"
6411         ;;
6412       *)
6413         emul_name="-melf32ppc"
6414         ;;
6415     esac
6416     AC_CACHE_CHECK(linker .gnu.attributes long double support,
6417     gcc_cv_ld_ppc_attr,
6418     [gcc_cv_ld_ppc_attr=no
6419     if test x"$ld_is_gold" = xyes; then
6420       gcc_cv_ld_ppc_attr=yes
6421     elif test $in_tree_ld = yes ; then
6422       if test "$gcc_cv_gld_major_version" -eq 2 \
6423                 -a "$gcc_cv_gld_minor_version" -ge 28 \
6424                 -o "$gcc_cv_gld_major_version" -gt 2; then
6425         gcc_cv_ld_ppc_attr=yes
6426       fi
6427     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6428       # check that merging the long double .gnu_attribute doesn't warn
6429       cat > conftest1.s <<EOF
6430         .gnu_attribute 4,1
6432       cat > conftest2.s <<EOF
6433         .gnu_attribute 4,9
6435       if $gcc_cv_as -a32 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6436          && $gcc_cv_as -a32 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6437          && $gcc_cv_ld $emul_name -r -o conftest.o conftest1.o conftest2.o > /dev/null 2> conftest.err \
6438          && test ! -s conftest.err; then
6439         gcc_cv_ld_ppc_attr=yes
6440       fi
6441       rm -f conftest.err conftest.o conftest1.o conftest2.o conftest1.s conftest2.s
6442     fi
6443     ])
6444     if test x$gcc_cv_ld_ppc_attr = xyes; then
6445       AC_DEFINE(HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE, 1,
6446     [Define if your PowerPC linker has .gnu.attributes long double support.])
6447     fi
6448     ;;
6449 esac
6451 case "$target:$tm_file" in
6452   powerpc64*-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
6453   case "$target" in
6454      *le-*-linux*)
6455      emul_name="-melf64lppc"
6456       ;;
6457      *-*-linux*)
6458      emul_name="-melf64ppc"
6459       ;;
6460      *le-*-freebsd*)
6461      emul_name="-melf64lppc_fbsd"
6462       ;;
6463      *-*-freebsd*)
6464      emul_name="-melf64ppc_fbsd"
6465       ;;
6466   esac
6467     AC_CACHE_CHECK(linker support for omitting dot symbols,
6468     gcc_cv_ld_no_dot_syms,
6469     [gcc_cv_ld_no_dot_syms=no
6470     if test x"$ld_is_gold" = xyes; then
6471       gcc_cv_ld_no_dot_syms=yes
6472     elif test $in_tree_ld = yes ; then
6473       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
6474         gcc_cv_ld_no_dot_syms=yes
6475       fi
6476     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6477       cat > conftest1.s <<EOF
6478         .text
6479         bl .foo
6481       cat > conftest2.s <<EOF
6482         .section ".opd","aw"
6483         .align 3
6484         .globl foo
6485         .type foo,@function
6486 foo:
6487         .quad .LEfoo,.TOC.@tocbase,0
6488         .text
6489 .LEfoo:
6490         blr
6491         .size foo,.-.LEfoo
6493       if $gcc_cv_as -a64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6494          && $gcc_cv_as -a64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6495          && $gcc_cv_ld $emul_name -o conftest conftest1.o conftest2.o > /dev/null 2>&1; then
6496         gcc_cv_ld_no_dot_syms=yes
6497       fi
6498       rm -f conftest conftest1.o conftest2.o conftest1.s conftest2.s
6499     fi
6500     ])
6501     if test x"$gcc_cv_ld_no_dot_syms" = xyes; then
6502       AC_DEFINE(HAVE_LD_NO_DOT_SYMS, 1,
6503     [Define if your PowerPC64 linker only needs function descriptor syms.])
6504     fi
6506     AC_CACHE_CHECK(linker large toc support,
6507     gcc_cv_ld_large_toc,
6508     [gcc_cv_ld_large_toc=no
6509     if test x"$ld_is_gold" = xyes; then
6510       gcc_cv_ld_large_toc=yes
6511     elif test $in_tree_ld = yes ; then
6512       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
6513         gcc_cv_ld_large_toc=yes
6514       fi
6515     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6516       cat > conftest.s <<EOF
6517         .section ".tbss","awT",@nobits
6518         .align 3
6519 ie0:    .space 8
6520         .global _start
6521         .text
6522 _start:
6523         addis 9,13,ie0@got@tprel@ha
6524         ld 9,ie0@got@tprel@l(9)
6526       if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
6527          && $gcc_cv_ld $emul_name --no-toc-sort -o conftest conftest.o > /dev/null 2>&1; then
6528         gcc_cv_ld_large_toc=yes
6529       fi
6530       rm -f conftest conftest.o conftest.s
6531     fi
6532     ])
6533     if test x"$gcc_cv_ld_large_toc" = xyes; then
6534       AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
6535     [Define if your PowerPC64 linker supports a large TOC.])
6536     fi
6538     AC_CACHE_CHECK(linker toc pointer alignment,
6539     gcc_cv_ld_toc_align,
6540     [if test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_nm != x; then
6541       cat > conftest.s <<EOF
6542         .global _start
6543         .text
6544 _start:
6545         addis 9,2,x@got@ha
6546         .section .data.rel.ro,"aw",@progbits
6547         .p2align 16
6548         .space 32768
6549 x:      .quad .TOC.
6551       if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
6552          && $gcc_cv_ld $emul_name -z norelro -o conftest conftest.o > /dev/null 2>&1; then
6553         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)) }'`
6554       fi
6555       rm -f conftest conftest.o conftest.s
6556     fi
6557     ])
6558     if test -n "$gcc_cv_ld_toc_align" && test $gcc_cv_ld_toc_align -gt 8; then
6559       AC_DEFINE_UNQUOTED(POWERPC64_TOC_POINTER_ALIGNMENT, $gcc_cv_ld_toc_align,
6560     [Define to .TOC. alignment forced by your linker.])
6561     fi
6562     ;;
6563 esac
6565 case "$target" in
6566   *-*-aix*)
6567     AC_CACHE_CHECK(linker large toc support,
6568     gcc_cv_ld_large_toc,
6569     [gcc_cv_ld_large_toc=no
6570     if test x$gcc_cv_as != x ; then
6571       cat > conftest.s <<EOF
6572         .toc
6573 LC..1:
6574         .tc a[[TC]],a[[RW]]
6575         .extern a[[RW]]
6576         .csect .text[[PR]]
6577 .largetoctest:
6578         addis 9,LC..1@u(2)
6579         ld 3,LC..1@l(9)
6581       if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1; then
6582         gcc_cv_ld_large_toc=yes
6583       fi
6584       rm -f conftest conftest.o conftest.s
6585     fi
6586     ])
6587     if test x"$gcc_cv_ld_large_toc" = xyes; then
6588       AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
6589     [Define if your PowerPC64 linker supports a large TOC.])
6590     fi
6591     ;;
6592 esac
6594 AC_CACHE_CHECK(linker --build-id support,
6595   gcc_cv_ld_buildid,
6596   [gcc_cv_ld_buildid=no
6597   if test $in_tree_ld = yes ; then
6598     if test "$gcc_cv_gld_major_version" -eq 2 -a \
6599        "$gcc_cv_gld_minor_version" -ge 18 -o \
6600        "$gcc_cv_gld_major_version" -gt 2 \
6601        && test $in_tree_ld_is_elf = yes; then
6602       gcc_cv_ld_buildid=yes
6603     fi
6604   elif test x$gcc_cv_ld != x; then
6605     if $gcc_cv_ld --help 2>&1 | grep build-id > /dev/null; then
6606       gcc_cv_ld_buildid=yes
6607     fi
6608   fi])
6609 if test x"$gcc_cv_ld_buildid" = xyes; then
6610   AC_DEFINE(HAVE_LD_BUILDID, 1,
6611   [Define if your linker supports --build-id.])
6614 AC_ARG_ENABLE(linker-build-id,
6615 [AS_HELP_STRING([--enable-linker-build-id],
6616                 [compiler will always pass --build-id to linker])],
6618 enable_linker_build_id=no)
6620 if test x"$enable_linker_build_id" = xyes; then
6621   if test x"$gcc_cv_ld_buildid" = xyes; then
6622     AC_DEFINE(ENABLE_LD_BUILDID, 1,
6623     [Define if gcc should always pass --build-id to linker.])
6624   else
6625     AC_MSG_WARN(--build-id is not supported by your linker; --enable-linker-build-id ignored)
6626   fi
6629 # In binutils 2.21, GNU ld gained support for new emulations fully
6630 # supporting the Solaris 2 ABI.  Detect their presence in the linker used.
6631 AC_CACHE_CHECK(linker *_sol2 emulation support,
6632   gcc_cv_ld_sol2_emulation,
6633   [gcc_cv_ld_sol2_emulation=no
6634   if test $in_tree_ld = yes ; then
6635     if test "$gcc_cv_gld_major_version" -eq 2 -a \
6636        "$gcc_cv_gld_minor_version" -ge 21 -o \
6637        "$gcc_cv_gld_major_version" -gt 2 \
6638        && test $in_tree_ld_is_elf = yes; then
6639       gcc_cv_ld_sol2_emulation=yes
6640     fi
6641   elif test x$gcc_cv_ld != x; then
6642     if $gcc_cv_ld -V 2>/dev/null | sed -e '1,/Supported emulations/d;q' | \
6643        grep _sol2 > /dev/null; then
6644       gcc_cv_ld_sol2_emulation=yes
6645     fi
6646   fi])
6647 if test x"$gcc_cv_ld_sol2_emulation" = xyes; then
6648   AC_DEFINE(HAVE_LD_SOL2_EMULATION, 1,
6649   [Define if your linker supports the *_sol2 emulations.])
6652 AC_CACHE_CHECK(linker --sysroot support,
6653   gcc_cv_ld_sysroot,
6654   [gcc_cv_ld_sysroot=no
6655   if test $in_tree_ld = yes ; then
6656       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
6657         gcc_cv_ld_sysroot=yes
6658       fi
6659   elif test x$gcc_cv_ld != x; then 
6660     if $gcc_cv_ld --help 2>&1 | grep sysroot > /dev/null; then
6661       gcc_cv_ld_sysroot=yes
6662     fi
6663   fi])
6664 if test x"$gcc_cv_ld_sysroot" = xyes; then
6665   AC_DEFINE(HAVE_LD_SYSROOT, 1,
6666   [Define if your linker supports --sysroot.])
6667 fi        
6669 case $target in
6670 *-*-solaris2*)
6671   # Check for system-provided CRTs on Solaris 11.x and Solaris 12.
6672   AC_CACHE_CHECK([system-provided CRTs on Solaris],
6673     gcc_cv_solaris_crts,
6674     [gcc_cv_solaris_crts=no
6675      if test x$host != x$target; then
6676        if test "x$with_sysroot" = xyes; then
6677          target_sysroot="${test_exec_prefix}/${target_noncanonical}/sys-root"
6678        else
6679          target_sysroot="${with_sysroot}"
6680        fi
6681      fi
6682      target_libdir="$target_sysroot/usr/lib"
6683      # At the time they were added, gcrt1.o became a symlink for backwards
6684      # compatibility on x86, while crt1.o was added on sparc, so check for that.
6685      case $target in
6686        i?86-*-solaris2* | x86_64-*-solaris2*)
6687          if test -h "$target_libdir/gcrt1.o"; then gcc_cv_solaris_crts=yes; fi
6688          ;;
6689        sparc*-*-solaris2*)
6690          if test -f "$target_libdir/crt1.o"; then gcc_cv_solaris_crts=yes; fi
6691          ;;
6692      esac])
6693   ;;
6694 esac
6695 if test x$gcc_cv_solaris_crts = xyes; then
6696   AC_DEFINE(HAVE_SOLARIS_CRTS, 1,
6697             [Define if the system-provided CRTs are present on Solaris.])
6700 AC_ARG_ENABLE(libssp,
6701 [AS_HELP_STRING([--enable-libssp], [enable linking against libssp])],
6702 [case "${enableval}" in
6703   yes|no)
6704     ;;
6705   *)
6706     AC_MSG_ERROR([unknown libssp setting $enableval])
6707     ;;
6708 esac], [])
6710 # Test for stack protector support in target C library.
6711 AC_CACHE_CHECK(__stack_chk_fail in target C library,
6712   gcc_cv_libc_provides_ssp,
6713   [gcc_cv_libc_provides_ssp=no
6714   if test "x$enable_libssp" = "xno"; then
6715     gcc_cv_libc_provides_ssp=yes
6716   elif test "x$enable_libssp" = "xyes"; then
6717     gcc_cv_libc_provides_ssp=no
6718   else
6719     case "$target" in
6720        *-*-musl*)
6721          # All versions of musl provide stack protector
6722          gcc_cv_libc_provides_ssp=yes;;
6723        *-*-linux* | *-*-kfreebsd*-gnu)
6724       # glibc 2.4 and later provides __stack_chk_fail and
6725       # either __stack_chk_guard, or TLS access to stack guard canary.
6726       GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_libc_provides_ssp=yes], [
6727       [if test -f $target_header_dir/features.h \
6728          && $EGREP '^[  ]*#[    ]*define[       ]+__GNU_LIBRARY__[      ]+([1-9][0-9]|[6-9])' \
6729             $target_header_dir/features.h > /dev/null; then
6730         if $EGREP '^[   ]*#[    ]*define[       ]+__UCLIBC__[   ]+1' \
6731              $target_header_dir/features.h > /dev/null && \
6732              test -f $target_header_dir/bits/uClibc_config.h && \
6733              $EGREP '^[         ]*#[    ]*define[       ]+__UCLIBC_HAS_SSP__[   ]+1' \
6734              $target_header_dir/bits/uClibc_config.h > /dev/null; then
6735           gcc_cv_libc_provides_ssp=yes
6736         fi
6737       # all versions of Bionic support stack protector
6738       elif test -f $target_header_dir/sys/cdefs.h \
6739         && $EGREP '^[  ]*#[    ]*define[       ]+__BIONIC__[   ]+1' \
6740            $target_header_dir/sys/cdefs.h > /dev/null; then
6741          gcc_cv_libc_provides_ssp=yes
6742       fi]])
6743         ;;
6744        *-*-gnu*)
6745          # Avoid complicated tests (see
6746          # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
6747          # simply assert that glibc does provide this, which is true for all
6748          # realistically usable GNU/Hurd configurations.
6749          # All supported versions of musl provide it as well
6750          gcc_cv_libc_provides_ssp=yes;;
6751        *-*-darwin* | *-*-freebsd* | *-*-netbsd*)
6752          AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
6753            [echo "no __stack_chk_fail on this target"])
6754         ;;
6755        *) gcc_cv_libc_provides_ssp=no ;;
6756     esac
6757   fi])
6759 if test x$gcc_cv_libc_provides_ssp = xyes; then
6760   AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
6761             [Define if your target C library provides stack protector support])
6764 # Check whether --enable-default-ssp was given.
6765 AC_ARG_ENABLE(default-ssp,
6766 [AS_HELP_STRING([--enable-default-ssp],
6767   [enable Stack Smashing Protection as default])],[
6768 if test x$gcc_cv_libc_provides_ssp = xyes; then
6769   case "$target" in
6770     ia64*-*-*) enable_default_ssp=no ;;
6771     *) enable_default_ssp=$enableval ;;
6772   esac
6773 else
6774   enable_default_ssp=no
6775 fi],
6776 enable_default_ssp=no)
6777 if test x$enable_default_ssp = xyes ; then
6778   AC_DEFINE(ENABLE_DEFAULT_SSP, 1,
6779       [Define if your target supports default stack protector and it is enabled.])
6781 AC_SUBST([enable_default_ssp])
6783 # Test for <sys/sdt.h> on the target.
6784 GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H])
6785 AC_CACHE_CHECK([sys/sdt.h in the target C library], [gcc_cv_sys_sdt_h], [
6786   gcc_cv_sys_sdt_h=no
6787   if test -f $target_header_dir/sys/sdt.h; then
6788     gcc_cv_sys_sdt_h=yes
6789   fi
6791 AS_IF([test x$gcc_cv_sys_sdt_h = xyes], [
6792   AC_DEFINE([HAVE_SYS_SDT_H], [1],
6793             [Define if your target C library provides sys/sdt.h])
6796 # Check if TFmode long double should be used by default or not.
6797 # Some glibc targets used DFmode long double, but with glibc 2.4
6798 # and later they can use TFmode.
6799 case "$target" in
6800   powerpc*-*-linux* | \
6801   sparc*-*-linux* | \
6802   s390*-*-linux* | \
6803   alpha*-*-linux*)
6804     AC_ARG_WITH(long-double-128,
6805       [AS_HELP_STRING([--with-long-double-128],
6806                       [use 128-bit long double by default])],
6807       gcc_cv_target_ldbl128="$with_long_double_128", [
6808       case "$target" in
6809         s390*-*-linux-musl*)
6810           gcc_cv_target_ldbl128=yes
6811           ;;
6812         powerpc*-*-linux-musl*)
6813           gcc_cv_target_ldbl128=no
6814           ;;
6815         *)]
6816       [GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_target_ldbl128=yes], [
6817       [gcc_cv_target_ldbl128=no
6818       grep '^[  ]*#[    ]*define[       ][      ]*__LONG_DOUBLE_MATH_OPTIONAL' \
6819         $target_header_dir/bits/wordsize.h > /dev/null 2>&1 \
6820       && gcc_cv_target_ldbl128=yes
6821       ]])]
6822       [
6823           ;;
6824       esac
6825       ])
6826     ;;
6827 esac
6828 if test x$gcc_cv_target_ldbl128 = xyes; then
6829   AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
6830             [Define if TFmode long double should be the default])
6833 # Check if TFmode long double target should use the IBM extended double or IEEE
6834 # 128-bit floating point formats if long doubles are 128-bits long.  The long
6835 # double type can only be switched on powerpc64 bit Linux systems where VSX is
6836 # supported.  Other PowerPC systems do not build the IEEE 128-bit emulator in
6837 # libgcc.
6838 AC_ARG_WITH([long-double-format],
6839   [AS_HELP_STRING([--with-long-double-format={ieee,ibm}]
6840                   [Specify whether PowerPC long double uses IEEE or IBM format])],[
6841 case "$target:$with_long_double_format" in
6842   powerpc64le-*-linux*:ieee | powerpc64le-*-linux*:ibm)
6843     :
6844     ;;
6845   powerpc64-*-linux*:ieee | powerpc64-*-linux*:ibm)
6846     # IEEE 128-bit emulation is only built on 64-bit VSX Linux systems
6847     case "$with_cpu" in
6848       power7 | power8 | power9 | power1*)
6849         :
6850         ;;
6851       *)
6852         AC_MSG_ERROR([Configuration option --with-long-double-format is only \
6853 supported if the default cpu is power7 or newer])
6854         with_long_double_format=""
6855         ;;
6856       esac
6857       ;;
6858   powerpc64*-*-linux*:*)
6859     AC_MSG_ERROR([--with-long-double-format argument should be ibm or ieee])
6860     with_long_double_format=""
6861     ;;
6862   *)
6863     AC_MSG_ERROR([Configure option --with-long-double-format is only supported \
6864 on 64-bit PowerPC VSX Linux systems])
6865     with_long_double_format=""
6866     ;;
6867 esac],
6868   [])
6870 # Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP
6871 # values in the TCB.  Currently, only GLIBC 2.23 and later support this.
6872 gcc_cv_libc_provides_hwcap_in_tcb=no
6873 case "$target" in
6874   powerpc*-*-linux*)
6875     GCC_GLIBC_VERSION_GTE_IFELSE([2], [23], [gcc_cv_libc_provides_hwcap_in_tcb=yes], )
6876     ;;
6877 esac
6878 if test x$gcc_cv_libc_provides_hwcap_in_tcb = xyes; then
6879   AC_DEFINE(TARGET_LIBC_PROVIDES_HWCAP_IN_TCB, 1,
6880             [Define if your target C Library provides the AT_HWCAP value in the TCB])
6883 # Check if the target LIBC handles PT_GNU_STACK.
6884 gcc_cv_libc_gnustack=unknown
6885 case "$target" in
6886   mips*-*-linux-musl*)
6887     gcc_cv_libc_gnustack=yes
6888     ;;
6889   mips*-*-linux*)
6890     GCC_GLIBC_VERSION_GTE_IFELSE([2], [31], [gcc_cv_libc_gnustack=yes], )
6891     ;;
6892 esac
6893 if test x$gcc_cv_libc_gnustack = xyes; then
6894   AC_DEFINE(TARGET_LIBC_GNUSTACK, 1,
6895             [Define if your target C Library properly handles PT_GNU_STACK])
6898 AC_MSG_CHECKING(dl_iterate_phdr in target C library)
6899 gcc_cv_target_dl_iterate_phdr=unknown
6900 case "$target" in
6901   *-*-solaris2*)
6902     # <link.h> needs both a dl_iterate_phdr declaration and support for
6903     # compilation with largefile support.
6904     if grep dl_iterate_phdr $target_header_dir/link.h > /dev/null 2>&1 \
6905       && grep 'large file capable' $target_header_dir/link.h > /dev/null 2>&1; then
6906       gcc_cv_target_dl_iterate_phdr=yes
6907     else
6908       gcc_cv_target_dl_iterate_phdr=no
6909     fi
6910     ;;
6911   *-*-dragonfly* | *-*-freebsd*)
6912     if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
6913       gcc_cv_target_dl_iterate_phdr=yes
6914     else
6915       gcc_cv_target_dl_iterate_phdr=no
6916     fi
6917     ;;
6918   *-linux-musl*)
6919     gcc_cv_target_dl_iterate_phdr=yes
6920     ;;
6921 esac
6922 GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
6923 if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
6924    AC_DEFINE(TARGET_DL_ITERATE_PHDR, 1,
6925 [Define if your target C library provides the `dl_iterate_phdr' function.])
6927 AC_MSG_RESULT($gcc_cv_target_dl_iterate_phdr)
6929 # We no longer support different GC mechanisms.  Emit an error if
6930 # the user configures with --with-gc.
6931 AC_ARG_WITH(gc,
6932 [AS_HELP_STRING([--with-gc={page,zone}],
6933                 [this option is not supported anymore.  It used to choose
6934                  the garbage collection mechanism to use with the compiler])],
6935 [AC_MSG_ERROR([Configure option --with-gc is only supported up to GCC 4.7.x])],
6938 # Libraries to use on the host.  This will normally be set by the top
6939 # level Makefile.  Here we simply capture the value for our Makefile.
6940 if test -z "${HOST_LIBS+set}"; then
6941   HOST_LIBS=
6943 AC_SUBST(HOST_LIBS)
6945 # Use the system's zlib library.
6946 AM_ZLIB
6948 dnl Very limited version of automake's enable-maintainer-mode
6950 AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
6951   dnl maintainer-mode is disabled by default
6952   AC_ARG_ENABLE(maintainer-mode,
6953 [AS_HELP_STRING([--enable-maintainer-mode],
6954                 [enable make rules and dependencies not useful
6955                  (and sometimes confusing) to the casual installer])],
6956       maintainer_mode=$enableval,
6957       maintainer_mode=no)
6959 AC_MSG_RESULT($maintainer_mode)
6961 if test "$maintainer_mode" = "yes"; then
6962   MAINT=''
6963 else
6964   MAINT='#'
6966 AC_SUBST(MAINT)dnl
6968 dnl Variables for tags utilities; copied from automake 1.16.4+'s init.m4
6969 if test -z "$CTAGS"; then
6970   CTAGS=ctags
6972 AC_SUBST([CTAGS])
6973 if test -z "$ETAGS"; then
6974   ETAGS=etags
6976 AC_SUBST([ETAGS])
6977 if test -z "$CSCOPE"; then
6978   CSCOPE=cscope
6980 AC_SUBST([CSCOPE])
6982 dnl Whether to prevent multiple front-ends from linking at the same time
6984 AC_MSG_CHECKING([whether to avoid linking multiple front-ends at once])
6985   AC_ARG_ENABLE(link-mutex,
6986 [AS_HELP_STRING([--enable-link-mutex],
6987                 [avoid linking multiple front-ends at once to avoid thrashing
6988                  on the build machine])],
6989       do_link_mutex=$enableval,
6990       do_link_mutex=no)
6991 AC_MSG_RESULT($do_link_mutex)
6993 if test "$do_link_mutex" = "yes"; then
6994    DO_LINK_MUTEX=true
6995 else
6996    DO_LINK_MUTEX=false
6998 AC_SUBST(DO_LINK_MUTEX)
7000 dnl Whether to prevent multiple GCC front-ends from linking at the same time
7002 AC_MSG_CHECKING([whether to serialize linking of multiple front-ends])
7003   AC_ARG_ENABLE(link-serialization,
7004 [AS_HELP_STRING([--enable-link-serialization],
7005                 [avoid linking multiple GCC front-ends at once using make
7006                  dependencies to avoid thrashing on the build machine])],
7007       do_link_serialization=$enableval,
7008       do_link_serialization=no)
7009 AC_MSG_RESULT($do_link_serialization)
7011 case "$do_link_serialization" in
7012   yes)
7013     DO_LINK_SERIALIZATION=1;;
7014   [[1-9]] | [[1-9]][[0-9]] | [[1-9]][[0-9]][[0-9]])
7015     DO_LINK_SERIALIZATION=$do_link_serialization;;
7016   no)
7017     DO_LINK_SERIALIZATION=;;
7018   *)
7019     AC_MSG_ERROR(bad value ${do_link_serialization} given for --enable-link-serialization) ;;
7020 esac
7021 AC_SUBST(DO_LINK_SERIALIZATION)
7023 # --------------
7024 # Language hooks
7025 # --------------
7027 # Make empty files to contain the specs and options for each language.
7028 # Then add #include lines to for a compiler that has specs and/or options.
7030 subdirs=
7031 lang_opt_files=
7032 lang_specs_files=
7033 lang_tree_files=
7034 # These (without "all_") are set in each config-lang.in.
7035 # `language' must be a single word so is spelled singularly.
7036 all_languages=
7037 all_compilers=
7038 all_outputs='Makefile'
7039 # List of language configure and makefile fragments.
7040 all_lang_configurefrags=
7041 all_lang_makefrags=
7042 # Additional files for gengtype
7043 all_gtfiles="$target_gtfiles"
7045 # These are the languages that are set in --enable-languages,
7046 # and are available in the GCC tree.
7047 all_selected_languages=
7049 # Add the language fragments.
7050 # Languages are added via two mechanisms.  Some information must be
7051 # recorded in makefile variables, these are defined in config-lang.in.
7052 # We accumulate them and plug them into the main Makefile.
7053 # The other mechanism is a set of hooks for each of the main targets
7054 # like `clean', `install', etc.
7056 language_hooks="Make-hooks"
7058 for lang in ${srcdir}/*/config-lang.in
7060 changequote(,)dnl
7061         test "$lang" = "${srcdir}/*/config-lang.in" && continue
7063         lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^   ]*\).*$,\1,p' $lang`
7064         if test "x$lang_alias" = x
7065         then
7066               echo "$lang doesn't set \$language." 1>&2
7067               exit 1
7068         fi
7069         subdir="`echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`"
7070         subdirs="$subdirs $subdir"
7072         # $gcc_subdir is where the gcc integration files are to be found
7073         # for a language, both for internal compiler purposes (compiler
7074         # sources implementing front-end to GCC tree converters), and for
7075         # build infrastructure purposes (Make-lang.in, etc.)
7076         #
7077         # This will be <subdir> (relative to $srcdir) if a line like 
7078         # gcc_subdir="<subdir>" or gcc_subdir=<subdir>
7079         # is found in <langdir>/config-lang.in, and will remain <langdir>
7080         # otherwise.
7081         #
7082         # Except for the language alias (fetched above), the regular
7083         # "config-lang.in" contents are always retrieved from $gcc_subdir,
7084         # so a <langdir>/config-lang.in setting gcc_subdir typically sets
7085         # only this and the language alias.
7087         gcc_subdir=`sed -n -e 's,^gcc_subdir=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^gcc_subdir=\([^   ]*\).*$,\1,p' $lang`
7088         if [ "$gcc_subdir" = "" ]; then
7089            gcc_subdir="$subdir"
7090         fi
7092         case ",$enable_languages," in
7093         *,$lang_alias,*)
7094             all_selected_languages="$all_selected_languages $lang_alias"
7095             if test -f $srcdir/$gcc_subdir/lang-specs.h; then
7096                 lang_specs_files="$lang_specs_files $srcdir/$gcc_subdir/lang-specs.h"
7097             fi
7098             ;;
7099         esac
7100 changequote([,])dnl
7102         language=
7103         boot_language=
7104         compilers=
7105         outputs=
7106         gtfiles=
7107         subdir_requires=
7108         . ${srcdir}/$gcc_subdir/config-lang.in
7109         if test "x$language" = x
7110         then
7111                 echo "${srcdir}/$gcc_subdir/config-lang.in doesn't set \$language." 1>&2
7112                 exit 1
7113         fi
7115         ok=:
7116         case ",$enable_languages," in
7117                 *,$lang_alias,*) ;;
7118                 *)
7119                         for i in $subdir_requires; do
7120                                 test -f "${srcdir}/$i/config-lang.in" && continue
7121                                 ok=false
7122                                 break
7123                         done
7124                 ;;
7125         esac
7126         $ok || continue
7128         all_lang_configurefrags="$all_lang_configurefrags \$(srcdir)/$gcc_subdir/config-lang.in"
7129         if test "x$language" = xc && test -n "$all_lang_makefrags"; then
7130             # Put c/Make-lang.in fragment first to match serialization languages order.
7131             all_lang_makefrags="\$(srcdir)/$gcc_subdir/Make-lang.in $all_lang_makefrags"
7132         else
7133             all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$gcc_subdir/Make-lang.in"
7134         fi
7135         if test -f $srcdir/$gcc_subdir/lang.opt; then
7136             lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt"
7137             all_opt_files="$all_opt_files $srcdir/$gcc_subdir/lang.opt"
7138         fi
7139         if test -f $srcdir/$gcc_subdir/$subdir-tree.def; then
7140             lang_tree_files="$lang_tree_files $srcdir/$gcc_subdir/$subdir-tree.def"
7141         fi
7142         all_languages="$all_languages $language"
7143         all_compilers="$all_compilers $compilers"
7144         all_outputs="$all_outputs $outputs"
7145         all_gtfiles="$all_gtfiles [[$subdir]] $gtfiles"
7146         case ",$enable_languages," in
7147                 *,lto,*)
7148                     AC_DEFINE(ENABLE_LTO, 1, [Define to enable LTO support.])
7149                     enable_lto=yes
7150                     AC_SUBST(enable_lto)
7151                     ;;
7152                 *) ;;
7153         esac
7154 done
7156 check_languages=
7157 for language in $all_selected_languages
7159         check_languages="$check_languages check-$language"
7160 done
7162 selftest_languages=
7163 for language in $all_selected_languages
7165         selftest_languages="$selftest_languages selftest-$language"
7166 done
7168 # We link each language in with a set of hooks, reached indirectly via
7169 # lang.${target}.  Only do so for selected languages.
7171 rm -f Make-hooks
7172 touch Make-hooks
7173 target_list="all.cross start.encap rest.encap tags \
7174         install-common install-man install-info install-dvi install-pdf \
7175         install-html dvi pdf html uninstall info man srcextra srcman srcinfo \
7176         mostlyclean clean distclean maintainer-clean install-plugin"
7178 for t in $target_list
7180         x=
7181         for lang in $all_selected_languages
7182         do
7183                 x="$x $lang.$t"
7184         done
7185         echo "lang.$t: $x" >> Make-hooks
7186 done
7188 echo "ifeq (\$(DO_LINK_SERIALIZATION),)" >> Make-hooks
7189 echo "SERIAL_LIST =" >> Make-hooks
7190 echo else >> Make-hooks
7191 lang_cnt=0
7192 lang_list=
7193 prev=c
7194 serialization_languages=c
7195 for lang in $all_selected_languages
7197         test $lang = c && continue
7198         if test $lang = lto; then
7199                 serialization_languages="$serialization_languages lto1 lto2"
7200         else
7201                 serialization_languages="$serialization_languages $lang"
7202         fi
7203 done
7204 for lang in $serialization_languages
7206         test $lang = c && continue
7207         lang_cnt=`expr $lang_cnt + 1`
7208         lang_list=" $prev$lang_list"
7209         prev=${lang}
7210 done
7211 echo "SERIAL_LIST = \$(wordlist \$(DO_LINK_SERIALIZATION),$lang_cnt,$lang_list)" >> Make-hooks
7212 echo endif >> Make-hooks
7213 echo "SERIAL_COUNT = `expr $lang_cnt + 1`" >> Make-hooks
7214 echo "INDEX.c = 0" >> Make-hooks
7215 lang_idx=1
7216 for lang in $serialization_languages
7218         test $lang = c && continue
7219         echo "$lang.prev = \$(if \$(word $lang_cnt,\$(SERIAL_LIST)),\$(\$(word $lang_cnt,\$(SERIAL_LIST)).serial))" >> Make-hooks
7220         echo "INDEX.$lang = $lang_idx" >> Make-hooks
7221         lang_cnt=`expr $lang_cnt - 1`
7222         lang_idx=`expr $lang_idx + 1`
7223 done
7225 # --------
7226 # Option include files
7227 # --------
7229 ${AWK} -f $srcdir/opt-include.awk $all_opt_files > option-includes.mk
7230 option_includes="option-includes.mk"
7231 AC_SUBST_FILE(option_includes)
7233 # --------
7234 # UNSORTED
7235 # --------
7237 # Create .gdbinit.
7239 echo "dir ." > .gdbinit
7240 echo "dir ${srcdir}" >> .gdbinit
7241 if test x$gdb_needs_out_file_path = xyes
7242 then
7243         echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
7245 if test "x$subdirs" != x; then
7246         for s in $subdirs
7247         do
7248                 echo "dir ${srcdir}/$s" >> .gdbinit
7249         done
7251 echo "source ${srcdir}/gdbinit.in" >> .gdbinit
7252 echo "python import sys; sys.path.append('${srcdir}'); import gdbhooks" >> .gdbinit
7254 # Put a breakpoint on __asan_report_error to help with debugging buffer
7255 # overflow.
7256 case "$CFLAGS" in
7257 *-fsanitize=address*)
7258   echo "source ${srcdir}/gdbasan.in" >> .gdbinit
7259   ;;
7260 esac
7262 gcc_tooldir='$(libsubdir)/$(libsubdir_to_prefix)$(target_noncanonical)'
7263 AC_SUBST(gcc_tooldir)
7264 AC_SUBST(dollar)
7266 # Find a directory in which to install a shared libgcc.
7268 AC_ARG_ENABLE(version-specific-runtime-libs,
7269 [AS_HELP_STRING([--enable-version-specific-runtime-libs],
7270                 [specify that runtime libraries should be
7271                  installed in a compiler-specific directory])])
7273 # Substitute configuration variables
7274 AC_SUBST(subdirs)
7275 AC_SUBST(srcdir)
7276 AC_SUBST(all_compilers)
7277 AC_SUBST(all_gtfiles)
7278 AC_SUBST(all_lang_configurefrags)
7279 AC_SUBST(all_lang_makefrags)
7280 AC_SUBST(all_languages)
7281 AC_SUBST(all_selected_languages)
7282 AC_SUBST(build_exeext)
7283 AC_SUBST(build_install_headers_dir)
7284 AC_SUBST(build_xm_file_list)
7285 AC_SUBST(build_xm_include_list)
7286 AC_SUBST(build_xm_defines)
7287 AC_SUBST(build_file_translate)
7288 AC_SUBST(check_languages)
7289 AC_SUBST(selftest_languages)
7290 AC_SUBST(cpp_install_dir)
7291 AC_SUBST(xmake_file)
7292 AC_SUBST(tmake_file)
7293 AC_SUBST(TM_ENDIAN_CONFIG)
7294 AC_SUBST(TM_MULTILIB_CONFIG)
7295 AC_SUBST(TM_MULTILIB_EXCEPTIONS_CONFIG)
7296 AC_SUBST(extra_gcc_objs)
7297 AC_SUBST(user_headers_inc_next_pre)
7298 AC_SUBST(user_headers_inc_next_post)
7299 AC_SUBST(extra_headers_list)
7300 AC_SUBST(extra_objs)
7301 AC_SUBST(extra_programs)
7302 AC_SUBST(float_h_file)
7303 AC_SUBST(gcc_config_arguments)
7304 AC_SUBST(gcc_gxx_include_dir)
7305 AC_SUBST(gcc_gxx_include_dir_add_sysroot)
7306 AC_SUBST(gcc_gxx_libcxx_include_dir)
7307 AC_SUBST(gcc_gxx_libcxx_include_dir_add_sysroot)
7308 AC_SUBST(host_exeext)
7309 AC_SUBST(host_xm_file_list)
7310 AC_SUBST(host_xm_include_list)
7311 AC_SUBST(host_xm_defines)
7312 AC_SUBST(out_host_hook_obj)
7313 AC_SUBST(install)
7314 AC_SUBST(lang_opt_files)
7315 AC_SUBST(lang_specs_files)
7316 AC_SUBST(lang_tree_files)
7317 AC_SUBST(local_prefix)
7318 AC_SUBST(md_file)
7319 AC_SUBST(objc_boehm_gc)
7320 AC_SUBST(out_file)
7321 AC_SUBST(out_object_file)
7322 AC_SUBST(common_out_file)
7323 AC_SUBST(common_out_object_file)
7324 AC_SUBST(tm_file_list)
7325 AC_SUBST(tm_include_list)
7326 AC_SUBST(tm_defines)
7327 AC_SUBST(tm_p_file_list)
7328 AC_SUBST(tm_p_include_list)
7329 AC_SUBST(tm_d_file_list)
7330 AC_SUBST(tm_d_include_list)
7331 AC_SUBST(xm_file_list)
7332 AC_SUBST(xm_include_list)
7333 AC_SUBST(xm_defines)
7334 AC_SUBST(use_gcc_stdint)
7335 AC_SUBST(c_target_objs)
7336 AC_SUBST(cxx_target_objs)
7337 AC_SUBST(fortran_target_objs)
7338 AC_SUBST(d_target_objs)
7339 AC_SUBST(target_cpu_default)
7341 AC_SUBST_FILE(language_hooks)
7343 # Echo link setup.
7344 if test x${build} = x${host} ; then
7345   if test x${host} = x${target} ; then
7346     echo "Links are now set up to build a native compiler for ${target}." 1>&2
7347   else
7348     echo "Links are now set up to build a cross-compiler" 1>&2
7349     echo " from ${host} to ${target}." 1>&2
7350   fi
7351 else
7352   if test x${host} = x${target} ; then
7353     echo "Links are now set up to build (on ${build}) a native compiler" 1>&2
7354     echo " for ${target}." 1>&2
7355   else
7356     echo "Links are now set up to build (on ${build}) a cross-compiler" 1>&2
7357     echo " from ${host} to ${target}." 1>&2
7358   fi
7361 AC_ARG_VAR(GMPLIBS,[How to link GMP])
7362 AC_ARG_VAR(GMPINC,[How to find GMP include files])
7364 AC_ARG_VAR(ISLLIBS,[How to link isl])
7365 AC_ARG_VAR(ISLINC,[How to find isl include files])
7366 if test "x${ISLLIBS}" != "x" ; then 
7367    AC_DEFINE(HAVE_isl, 1, [Define if isl is in use.])
7370 GCC_ENABLE_PLUGINS
7371 AC_SUBST(pluginlibs)
7372 AC_SUBST(enable_plugin)
7373 if test x"$enable_plugin" = x"yes"; then
7374   AC_DEFINE(ENABLE_PLUGIN, 1, [Define to enable plugin support.])
7378 # Enable --enable-host-shared
7379 AC_ARG_ENABLE(host-shared,
7380 [AS_HELP_STRING([--enable-host-shared],
7381                 [build host code as shared libraries])],
7382 [PICFLAG=-fPIC], [PICFLAG=])
7383 AC_SUBST(enable_host_shared)
7384 AC_SUBST(PICFLAG)
7387 AC_ARG_ENABLE(libquadmath-support,
7388 [AS_HELP_STRING([--disable-libquadmath-support],
7389   [disable libquadmath support for Fortran])],
7390 ENABLE_LIBQUADMATH_SUPPORT=$enableval,
7391 ENABLE_LIBQUADMATH_SUPPORT=yes)
7392 if test "${ENABLE_LIBQUADMATH_SUPPORT}" != "no" ; then
7393   AC_DEFINE(ENABLE_LIBQUADMATH_SUPPORT, 1,
7394             [Define to 1 to enable libquadmath support])
7398 # Specify what hash style to use by default.
7399 AC_ARG_WITH([linker-hash-style],
7400 [AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
7401                 [specify the linker hash style])],
7402 [case x"$withval" in
7403    xsysv)
7404      LINKER_HASH_STYLE=sysv
7405      ;;
7406    xgnu)
7407      LINKER_HASH_STYLE=gnu
7408      ;;
7409    xboth)
7410      LINKER_HASH_STYLE=both
7411      ;;
7412    *)
7413      AC_MSG_ERROR([$withval is an invalid option to --with-linker-hash-style])
7414      ;;
7415  esac],
7416 [LINKER_HASH_STYLE=''])
7417 if test x"${LINKER_HASH_STYLE}" != x; then
7418   AC_DEFINE_UNQUOTED(LINKER_HASH_STYLE, "$LINKER_HASH_STYLE",
7419                                          [The linker hash style])
7422 # Specify what should be the default of -fdiagnostics-color option.
7423 AC_ARG_WITH([diagnostics-color],
7424 [AC_HELP_STRING([--with-diagnostics-color={never,auto,auto-if-env,always}],
7425                 [specify the default of -fdiagnostics-color option
7426                  auto-if-env stands for -fdiagnostics-color=auto if
7427                  GCC_COLOR environment variable is present and
7428                  -fdiagnostics-color=never otherwise])],
7429 [case x"$withval" in
7430    xnever)
7431      DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_NO
7432      ;;
7433    xauto)
7434      DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO
7435      ;;
7436    xauto-if-env)
7437      DIAGNOSTICS_COLOR_DEFAULT=-1
7438      ;;
7439    xalways)
7440      DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_YES
7441      ;;
7442    *)
7443      AC_MSG_ERROR([$withval is an invalid option to --with-diagnostics-color])
7444      ;;
7445  esac],
7446 [DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO])
7447 AC_DEFINE_UNQUOTED(DIAGNOSTICS_COLOR_DEFAULT, $DIAGNOSTICS_COLOR_DEFAULT,
7448                    [The default for -fdiagnostics-color option])
7450 # Specify what should be the default of -fdiagnostics-urls option.
7451 AC_ARG_WITH([diagnostics-urls],
7452 [AC_HELP_STRING([--with-diagnostics-urls={never,auto,auto-if-env,always}],
7453                 [specify the default of -fdiagnostics-urls option
7454                  auto-if-env stands for -fdiagnostics-urls=auto if
7455                  GCC_URLS or TERM_URLS environment variable is present and
7456                  -fdiagnostics-urls=never otherwise])],
7457 [case x"$withval" in
7458    xnever)
7459      DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_NO
7460      ;;
7461    xauto)
7462      DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_AUTO
7463      ;;
7464    xauto-if-env)
7465      DIAGNOSTICS_URLS_DEFAULT=-1
7466      ;;
7467    xalways)
7468      DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_YES
7469      ;;
7470    *)
7471      AC_MSG_ERROR([$withval is an invalid option to --with-diagnostics-urls])
7472      ;;
7473  esac],
7474 [DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_AUTO])
7475 AC_DEFINE_UNQUOTED(DIAGNOSTICS_URLS_DEFAULT, $DIAGNOSTICS_URLS_DEFAULT,
7476                    [The default for -fdiagnostics-urls option])
7478 # Generate gcc-driver-name.h containing GCC_DRIVER_NAME for the benefit
7479 # of jit/jit-playback.cc.
7480 gcc_driver_version=`eval "${get_gcc_base_ver} $srcdir/BASE-VER"`
7481 echo "gcc_driver_version: ${gcc_driver_version}"
7482 cat > gcc-driver-name.h <<EOF
7483 #define GCC_DRIVER_NAME "${target_noncanonical}-gcc-${gcc_driver_version}${exeext}"
7486 # Check whether --enable-default-pie was given.
7487 AC_ARG_ENABLE(default-pie,
7488 [AS_HELP_STRING([--enable-default-pie],
7489   [enable Position Independent Executable as default])],
7490 enable_default_pie=$enableval,
7491 enable_default_pie=no)
7492 if test x$enable_default_pie = xyes ; then
7493   AC_DEFINE(ENABLE_DEFAULT_PIE, 1,
7494       [Define if your target supports default PIE and it is enabled.])
7496 AC_SUBST([enable_default_pie])
7498 # Check if -fno-PIE works.
7499 AC_CACHE_CHECK([for -fno-PIE option],
7500   [gcc_cv_c_no_fpie],
7501   [saved_CXXFLAGS="$CXXFLAGS"
7502    CXXFLAGS="$CXXFLAGS -fno-PIE"
7503    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
7504      [gcc_cv_c_no_fpie=yes],
7505      [gcc_cv_c_no_fpie=no])
7506    CXXFLAGS="$saved_CXXFLAGS"])
7507 if test "$gcc_cv_c_no_fpie" = "yes"; then
7508   NO_PIE_CFLAGS="-fno-PIE"
7510 AC_SUBST([NO_PIE_CFLAGS])
7512 # Check if -no-pie works.
7513 AC_CACHE_CHECK([for -no-pie option],
7514   [gcc_cv_no_pie],
7515   [saved_LDFLAGS="$LDFLAGS"
7516    LDFLAGS="$LDFLAGS -no-pie"
7517    AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
7518      [gcc_cv_no_pie=yes],
7519      [gcc_cv_no_pie=no])
7520    LDFLAGS="$saved_LDFLAGS"])
7521 if test "$gcc_cv_no_pie" = "yes"; then
7522   NO_PIE_FLAG="-no-pie"
7524 AC_SUBST([NO_PIE_FLAG])
7526 # Enable Intel CET on Intel CET enabled host if jit is enabled.
7527 GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
7528 case x$enable_languages in
7529 *jit*)
7530   ;;
7532   CET_HOST_FLAGS=
7533   ;;
7534 esac
7535 AC_SUBST(CET_HOST_FLAGS)
7537 # Check linker supports '-z bndplt'
7538 ld_bndplt_support=no
7539 AC_MSG_CHECKING(linker -z bndplt option)
7540 if test x"$ld_is_gold" = xno; then
7541   if test $in_tree_ld = yes ; then
7542     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
7543       ld_bndplt_support=yes
7544     fi
7545   elif test x$gcc_cv_ld != x; then
7546     # Check if linker supports -a bndplt option
7547     if $gcc_cv_ld --help 2>&1 | grep -- '-z bndplt' > /dev/null; then
7548       ld_bndplt_support=yes
7549     fi
7550   fi
7552 if test x"$ld_bndplt_support" = xyes; then
7553   AC_DEFINE(HAVE_LD_BNDPLT_SUPPORT, 1,
7554         [Define if your linker supports -z bndplt])
7556 AC_MSG_RESULT($ld_bndplt_support)
7558 # Check linker supports '--push-state'/'--pop-state'
7559 ld_pushpopstate_support=no
7560 AC_MSG_CHECKING(linker --push-state/--pop-state options)
7561 if test x"$ld_is_gold" = xno; then
7562   if test $in_tree_ld = yes ; then
7563     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
7564       ld_pushpopstate_support=yes
7565     fi
7566   elif test x$gcc_cv_ld != x; then
7567     # Check if linker supports --push-state/--pop-state options
7568     if $gcc_cv_ld --help 2>&1 | grep -- '--push-state' > /dev/null; then
7569       ld_pushpopstate_support=yes
7570     fi
7571   fi
7573 if test x"$ld_pushpopstate_support" = xyes; then
7574   AC_DEFINE(HAVE_LD_PUSHPOPSTATE_SUPPORT, 1,
7575         [Define if your linker supports --push-state/--pop-state])
7577 AC_MSG_RESULT($ld_pushpopstate_support)
7579 # On s390, float_t has historically been statically defined as double for no
7580 # good reason. To comply with the C standard in the light of this definition,
7581 # gcc has evaluated float expressions in double precision when in
7582 # standards-compatible mode or when given -fexcess-precision=standard. To enable
7583 # a smooth transition towards the new model used by most architectures, where
7584 # gcc describes its behavior via the macro __FLT_EVAL_METHOD__ and glibc derives
7585 # float_t from that, this behavior can be configured with
7586 # --enable-s390-excess-float-precision. When given as enabled, that flag selects
7587 # the old model. When omitted, native builds and cross compiles that have target
7588 # libc headers will detect whether libc clamps float_t to double and in that
7589 # case maintain the old model. Otherwise, they will default to the new model.
7590 AC_ARG_ENABLE(s390-excess-float-precision,
7591   [AS_HELP_STRING([--enable-s390-excess-float-precision],
7592                   [on s390 targets, evaluate float with double precision
7593                    when in standards-conforming mode])],
7594   [],[enable_s390_excess_float_precision=auto])
7596 case $target in
7597   s390*-linux*)
7598   if test x"$enable_s390_excess_float_precision" = xauto; then
7599     # Can we autodetect the behavior of the target libc?
7600     if test "$target" = "$host" -a "$host" = "$build"; then
7601       enable_s390_excess_float_precision=autodetect
7602     elif test "x$with_headers" != xno; then
7603       # cross build. are target headers available?
7604       # carefully coerce the build-system compiler to use target headers
7605       saved_CXXFLAGS="$CXXFLAGS"
7606       fixed_XGCC_FLAGS_FOR_TARGET=`echo "$XGCC_FLAGS_FOR_TARGET" | sed 's/-B/-idirafter/g'`
7607       CROSS_TEST_CXXFLAGS="-nostdinc $fixed_XGCC_FLAGS_FOR_TARGET"
7608       CXXFLAGS="$CROSS_TEST_CXXFLAGS"
7609       AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7610 #include <math.h>
7611 ]])], [enable_s390_excess_float_precision=autodetect], [])
7612       CXXFLAGS="$saved_CXXFLAGS"
7613     fi
7615     if test x"$enable_s390_excess_float_precision" = xautodetect; then
7616       saved_CXXFLAGS="$CXXFLAGS"
7617       if ! test "$target" = "$host" -a "$host" = "$build"; then
7618         CXXFLAGS="$CROSS_TEST_CXXFLAGS"
7619         unset CROSS_TEST_CXXFLAGS
7620       fi
7621       AC_CACHE_CHECK([for glibc clamping float_t to double],
7622         gcc_cv_float_t_clamped_to_double, [
7623         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7624 #define __FLT_EVAL_METHOD__ 0
7625 #include <math.h>
7626 int dummy[sizeof(float_t) == sizeof(double) ? 1 : -1];
7627 ]])],
7628           [gcc_cv_float_t_clamped_to_double=yes],
7629           [gcc_cv_float_t_clamped_to_double=no])])
7630       CXXFLAGS="$saved_CXXFLAGS"
7631       enable_s390_excess_float_precision="$gcc_cv_float_t_clamped_to_double"
7632     else
7633       # no way to detect behavior of target libc, default to new model
7634       enable_s390_excess_float_precision=no
7635     fi
7636   fi
7638   GCC_TARGET_TEMPLATE(ENABLE_S390_EXCESS_FLOAT_PRECISION)
7639   if test x"$enable_s390_excess_float_precision" = xyes; then
7640     AC_DEFINE(ENABLE_S390_EXCESS_FLOAT_PRECISION, 1,
7641 [Define to enable evaluating float expressions with double precision in
7642 standards-compatible mode on s390 targets.])
7643   fi
7644   ;;
7645 esac
7647 # Configure the subdirectories
7648 # AC_CONFIG_SUBDIRS($subdirs)
7650 # Create the Makefile
7651 # and configure language subdirectories
7652 AC_CONFIG_FILES($all_outputs)
7654 AC_CONFIG_COMMANDS([default],
7656 case ${CONFIG_HEADERS} in
7657   *auto-host.h:config.in*)
7658   echo > cstamp-h ;;
7659 esac
7660 # Make sure all the subdirs exist.
7661 for d in $subdirs doc build common c-family
7663     test -d $d || mkdir $d
7664 done
7665 ], 
7666 [subdirs='$subdirs'])
7667 AC_OUTPUT