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