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