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