ubsan: ubsan_maybe_instrument_array_ref tweak
[official-gcc.git] / gcc / configure.ac
blob73ff7c23c63616b5c187fc285849f502c4465312
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; then
3191     if $gcc_cv_ld -shared -o conftest1.so conftest1.o \
3192        conftest2.o conftest3.o > /dev/null 2>&1 \
3193        || $gcc_cv_ld -r -o conftest1.so conftest1.o \
3194           conftest2.o conftest3.o > /dev/null 2>&1; then
3195       gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest1.so \
3196                            | sed -e '/myfoosect/!d' -e N`
3197       if echo "$gcc_cv_ld_ro_rw_mix" | grep CONTENTS > /dev/null; then
3198         if echo "$gcc_cv_ld_ro_rw_mix" | grep READONLY > /dev/null; then
3199           gcc_cv_ld_ro_rw_mix=read-only
3200         else
3201           gcc_cv_ld_ro_rw_mix=read-write
3202         fi
3203       fi
3204     fi
3205   fi
3206 changequote(,)dnl
3207   rm -f conftest.* conftest[123].*
3208 changequote([,])dnl
3210 if test x$gcc_cv_ld_ro_rw_mix = xread-write; then
3211         AC_DEFINE(HAVE_LD_RO_RW_SECTION_MIXING, 1,
3212   [Define if your linker links a mix of read-only
3213    and read-write sections into a read-write section.])
3215 AC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)
3217 gcc_AC_INITFINI_ARRAY
3219 # Check if we have .[us]leb128, and support symbol arithmetic with it.
3220 # Older versions of GAS and some non-GNU assemblers, have a bugs handling
3221 # these directives, even when they appear to accept them.
3222 gcc_GAS_CHECK_FEATURE([.sleb128 and .uleb128], gcc_cv_as_leb128,,
3223 [       .data
3224         .uleb128 L2 - L1
3226         .uleb128 1280
3227         .sleb128 -1010
3229         .uleb128 0x8000000000000000
3232 if test "x$gcc_cv_objdump" != x; then
3233   if $gcc_cv_objdump -s conftest.o 2>/dev/null \
3234      | grep '04800a8e 78808080 80808080 808001' >/dev/null; then
3235     gcc_cv_as_leb128=yes
3236   fi
3237 elif test "x$gcc_cv_otool" != x; then
3238   if $gcc_cv_otool -d conftest.o 2>/dev/null \
3239      | grep '04 80 0a 8e 78 80 80 80 80 80 80 80 80 80 01' >/dev/null; then
3240     gcc_cv_as_leb128=yes
3241   fi
3242 else
3243   # play safe, assume the assembler is broken.
3244   :
3247  [AC_DEFINE(HAVE_AS_LEB128, 1,
3248    [Define if your assembler supports .sleb128 and .uleb128.])],
3249  [AC_DEFINE(HAVE_AS_LEB128, 0,
3250    [Define if your assembler supports .sleb128 and .uleb128.])])
3252 # Determine if an .eh_frame section is read-only.
3253 gcc_fn_eh_frame_ro () {
3254   $gcc_cv_as $1 -o conftest.o conftest.s > /dev/null 2>&1 && \
3255     $gcc_cv_objdump -h conftest.o 2>/dev/null | \
3256     sed -e '/.eh_frame/!d' -e N | grep READONLY > /dev/null
3259 # Check if we have assembler support for unwind directives.
3260 gcc_GAS_CHECK_FEATURE([cfi directives], gcc_cv_as_cfi_directive,,
3261 [       .text
3262         .cfi_startproc
3263         .cfi_offset 0, 0
3264         .cfi_same_value 1
3265         .cfi_def_cfa 1, 2
3266         .cfi_escape 1, 2, 3, 4, 5
3267         .cfi_endproc],
3268 [case "$target" in
3269   *-*-solaris*)
3270     # If the linker used on Solaris (like Sun ld) isn't capable of merging
3271     # read-only and read-write sections, we need to make sure that the
3272     # assembler used emits read-write .eh_frame sections.
3273     if test "x$gcc_cv_ld_ro_rw_mix" = xread-write; then
3274       gcc_cv_as_cfi_directive=yes
3275     elif test "x$gcc_cv_objdump" = x; then
3276       # No objdump, err on the side of caution.
3277       gcc_cv_as_cfi_directive=no
3278     else
3279       if test x$gas = xyes; then
3280         as_32_opt="--32"
3281         as_64_opt="--64"
3282       else
3283         as_32_opt="-m32"
3284         as_64_opt="-m64"
3285       fi
3286       case "$target" in
3287         sparc*-*-solaris2.*)
3288           # On Solaris/SPARC, .eh_frame sections should always be read-write.
3289           if gcc_fn_eh_frame_ro $as_32_opt \
3290              || gcc_fn_eh_frame_ro $as_64_opt; then
3291             gcc_cv_as_cfi_directive=no
3292           else
3293             gcc_cv_as_cfi_directive=yes
3294           fi
3295           ;;
3296         i?86-*-solaris2.* | x86_64-*-solaris2.*)
3297           # On Solaris/x86, make sure that GCC and assembler agree on using
3298           # read-only .eh_frame sections for 64-bit.
3299           if gcc_fn_eh_frame_ro $as_32_opt; then
3300             gcc_cv_as_cfi_directive=no
3301           elif gcc_fn_eh_frame_ro $as_64_opt; then
3302             gcc_cv_as_cfi_directive=yes
3303           else
3304             gcc_cv_as_cfi_directive=no
3305           fi
3306           ;;
3307       esac
3308     fi
3309     ;;
3310   *-*-*)
3311     gcc_cv_as_cfi_directive=yes
3312     ;;
3313 esac])
3314 if test $gcc_cv_as_cfi_directive = yes && test x$gcc_cv_objdump != x; then
3315 gcc_GAS_CHECK_FEATURE([working cfi advance], gcc_cv_as_cfi_advance_working,,
3316 [       .text
3317         .cfi_startproc
3318         .cfi_adjust_cfa_offset 64
3319         .skip 75040, 0
3320         .cfi_adjust_cfa_offset 128
3321         .cfi_endproc],
3323 if $gcc_cv_objdump -Wf conftest.o 2>/dev/null \
3324     | grep 'DW_CFA_advance_loc[24]:[    ][      ]*75040[        ]' >/dev/null; then
3325    gcc_cv_as_cfi_advance_working=yes
3328 else
3329   # no objdump, err on the side of caution
3330   gcc_cv_as_cfi_advance_working=no
3332 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_DIRECTIVE)
3333 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_DIRECTIVE,
3334   [`if test $gcc_cv_as_cfi_directive = yes \
3335        && test $gcc_cv_as_cfi_advance_working = yes; then echo 1; else echo 0; fi`],
3336   [Define 0/1 if your assembler supports CFI directives.])
3338 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
3339 gcc_GAS_CHECK_FEATURE([cfi personality directive],
3340   gcc_cv_as_cfi_personality_directive,,
3341 [       .text
3342         .cfi_startproc
3343         .cfi_personality 0, symbol
3344         .cfi_endproc])
3345 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE,
3346   [`if test $gcc_cv_as_cfi_personality_directive = yes; then echo 1; else echo 0; fi`],
3347   [Define 0/1 if your assembler supports .cfi_personality.])
3349 gcc_GAS_CHECK_FEATURE([cfi sections directive],
3350   gcc_cv_as_cfi_sections_directive,,
3351 [       .text
3352         .cfi_sections .debug_frame, .eh_frame
3353         .cfi_startproc
3354         .cfi_endproc],
3355 [case $target_os in
3356   win32 | pe | cygwin* | mingw32*)
3357     # Need to check that we generated the correct relocation for the
3358     # .debug_frame section.  This was fixed for binutils 2.21.
3359     gcc_cv_as_cfi_sections_directive=no
3360     if test "x$gcc_cv_objdump" != x; then
3361      if $gcc_cv_objdump -j .debug_frame -r conftest.o 2>/dev/null | \
3362         grep -i secrel > /dev/null; then
3363       gcc_cv_as_cfi_sections_directive=yes
3364      fi
3365     fi
3366     ;;
3367   *)
3368     gcc_cv_as_cfi_sections_directive=yes
3369     ;;
3370 esac])
3371 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
3372 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_SECTIONS_DIRECTIVE,
3373   [`if test $gcc_cv_as_cfi_sections_directive = yes; then echo 1; else echo 0; fi`],
3374   [Define 0/1 if your assembler supports .cfi_sections.])
3376 # GAS versions up to and including 2.11.0 may mis-optimize
3377 # .eh_frame data.
3378 gcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,,
3379 [       .text
3380 .LFB1:
3381         .4byte  0
3382 .L1:
3383         .4byte  0
3384 .LFE1:
3385         .section        .eh_frame,"aw",@progbits
3386 __FRAME_BEGIN__:
3387         .4byte  .LECIE1-.LSCIE1
3388 .LSCIE1:
3389         .4byte  0x0
3390         .byte   0x1
3391         .ascii "z\0"
3392         .byte   0x1
3393         .byte   0x78
3394         .byte   0x1a
3395         .byte   0x0
3396         .byte   0x4
3397         .4byte  1
3398         .p2align 1
3399 .LECIE1:
3400 .LSFDE1:
3401         .4byte  .LEFDE1-.LASFDE1
3402 .LASFDE1:
3403         .4byte  .LASFDE1-__FRAME_BEGIN__
3404         .4byte  .LFB1
3405         .4byte  .LFE1-.LFB1
3406         .byte   0x4
3407         .4byte  .LFE1-.LFB1
3408         .byte   0x4
3409         .4byte  .L1-.LFB1
3410 .LEFDE1:],
3411 [  dnl # For autoconf 2.5x, must protect trailing spaces with @&t@.
3412 cat > conftest.lit <<EOF
3413  0000 10000000 00000000 017a0001 781a0004  .........z..x...
3414  0010 01000000 12000000 18000000 00000000  ................
3415  0020 08000000 04080000 0044               .........D      @&t@
3417 cat > conftest.big <<EOF
3418  0000 00000010 00000000 017a0001 781a0004  .........z..x...
3419  0010 00000001 00000012 00000018 00000000  ................
3420  0020 00000008 04000000 0844               .........D      @&t@
3422   # If the assembler didn't choke, and we can objdump,
3423   # and we got the correct data, then succeed.
3424   # The text in the here-document typically retains its unix-style line
3425   # endings, while the output of objdump will use host line endings.
3426   # Therefore, use diff -b for the comparisons.
3427   if test x$gcc_cv_objdump != x \
3428   && $gcc_cv_objdump -s -j .eh_frame conftest.o 2>/dev/null \
3429      | tail -3 > conftest.got \
3430   && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \
3431     || diff -b conftest.big conftest.got > /dev/null 2>&1; }
3432   then
3433     gcc_cv_as_eh_frame=yes
3434   elif AC_TRY_COMMAND($gcc_cv_as -o conftest.o --traditional-format /dev/null); then
3435     gcc_cv_as_eh_frame=buggy
3436   else
3437     # Uh oh, what do we do now?
3438     gcc_cv_as_eh_frame=no
3439   fi])
3441 if test $gcc_cv_as_eh_frame = buggy; then
3442   AC_DEFINE(USE_AS_TRADITIONAL_FORMAT, 1,
3443   [Define if your assembler mis-optimizes .eh_frame data.])
3446 # Test if the assembler supports the section flag 'e' or #exclude for
3447 # specifying an excluded section.
3448 gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_e,
3449  [--fatal-warnings],
3450  [.section foo1,"e"
3451   .byte 0,0,0,0])
3452 if test $gcc_cv_as_section_exclude_e = no; then
3453   case "${target}" in
3454     # Solaris as uses #exclude instead.
3455     *-*-solaris2*)
3456       case "${target}" in
3457         sparc*-*-solaris2*)
3458           conftest_s='.section "foo1", #exclude'
3459           ;;
3460         i?86-*-solaris2* | x86_64-*-solaris2*)
3461           conftest_s='.section foo1, #exclude'
3462           ;;      
3463       esac
3464       ;;
3465     esac
3466   gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_hash,,
3467     [$conftest_s
3468      .byte 0,0,0,0])
3470 AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_EXCLUDE,
3471   [`if test $gcc_cv_as_section_exclude_e = yes || test $gcc_cv_as_section_exclude_hash = yes; then echo 1; else echo 0; fi`],
3472 [Define if your assembler supports specifying the exclude section flag.])
3474 # Test if the assembler supports the section flag 'R' for specifying
3475 # section with SHF_GNU_RETAIN.
3476 case "${target}" in
3477   # Solaris may use GNU assembler with Solairs ld.  Even if GNU
3478   # assembler supports the section flag 'R', it doesn't mean that
3479   # Solairs ld supports it.
3480   *-*-solaris2*)
3481     gcc_cv_as_shf_gnu_retain=no
3482     ;;
3483   *)
3484     gcc_GAS_CHECK_FEATURE([section 'R' flag], gcc_cv_as_shf_gnu_retain,
3485       [--fatal-warnings],
3486       [.section .foo,"awR",%progbits
3487 .byte 0])
3488     ;;
3489 esac
3490 AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_GNU_RETAIN,
3491   [`if test $gcc_cv_as_shf_gnu_retain = yes; then echo 1; else echo 0; fi`],
3492   [Define 0/1 if your assembler supports marking sections with SHF_GNU_RETAIN flag.])
3494 # Test if the assembler supports the section flag 'o' for specifying
3495 # section with link-order.
3496 case "${target}" in
3497   # Solaris may use GNU assembler with Solairs ld.  Even if GNU
3498   # assembler supports the section flag 'o', it doesn't mean that
3499   # Solairs ld supports it.
3500   *-*-solaris2*)
3501     gcc_cv_as_section_link_order=no
3502     ;;
3503   *)
3504     gcc_GAS_CHECK_FEATURE([section 'o' flag], gcc_cv_as_section_link_order,
3505       [--fatal-warnings],
3506       [.section .foo,"a"
3507 .byte 0
3508 .section __patchable_function_entries,"awo",%progbits,.foo
3509 .byte 0])
3510     ;;
3511 esac
3512 AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_LINK_ORDER,
3513   [`if test $gcc_cv_as_section_link_order = yes; then echo 1; else echo 0; fi`],
3514   [Define 0/1 if your assembler supports 'o' flag in .section directive.])
3516 gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
3517  [--fatal-warnings],
3518  [.section .rodata.str, "aMS", @progbits, 1])
3519 if test $gcc_cv_as_shf_merge = no; then
3520   gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
3521     [--fatal-warnings],
3522     [.section .rodata.str, "aMS", %progbits, 1])
3524 AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
3525   [`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`],
3526 [Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
3528 gcc_cv_ld_aligned_shf_merge=yes
3529 case "$target" in
3530   # SHF_MERGE support is broken in Solaris ld up to Solaris 11.3/SPARC for
3531   # alignment > 1.
3532   sparc*-*-solaris2.11*)
3533     if test x"$gnu_ld" = xno \
3534        && test "$ld_vers_major" -lt 2 && test "$ld_vers_minor" -lt 3159; then
3535       gcc_cv_ld_aligned_shf_merge=no
3536     fi
3537     ;;
3538 esac
3539 AC_DEFINE_UNQUOTED(HAVE_LD_ALIGNED_SHF_MERGE,
3540   [`if test $gcc_cv_ld_aligned_shf_merge = yes; then echo 1; else echo 0; fi`],
3541 [Define 0/1 if your linker supports the SHF_MERGE flag with section alignment > 1.])
3543 gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as)],
3544  gcc_cv_as_comdat_group,
3545  [--fatal-warnings],
3546  [.section .text,"axG",@progbits,.foo,comdat])
3547 if test $gcc_cv_as_comdat_group = yes; then
3548   gcc_cv_as_comdat_group_percent=no
3549   gcc_cv_as_comdat_group_group=no
3550 else
3551  gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as, %type)],
3552    gcc_cv_as_comdat_group_percent,
3553    [--fatal-warnings],
3554    [.section .text,"axG",%progbits,.foo,comdat])
3555  if test $gcc_cv_as_comdat_group_percent = yes; then
3556    gcc_cv_as_comdat_group_group=no
3557  else
3558    case "${target}" in
3559      # Sun as uses a completely different syntax.
3560      *-*-solaris2*)
3561        case "${target}" in
3562          sparc*-*-solaris2*)
3563            conftest_s='
3564                .group foo,".text%foo",#comdat
3565                .section ".text%foo", #alloc,#execinstr,#progbits
3566                .globl foo
3567              foo:
3568              '
3569            ;;
3570          i?86-*-solaris2* | x86_64-*-solaris2*)
3571            conftest_s='
3572                .group foo,.text%foo,#comdat
3573                .section .text%foo, "ax", @progbits
3574                .globl  foo
3575              foo:
3576              '
3577            ;;
3578        esac
3579        gcc_GAS_CHECK_FEATURE([COMDAT group support (Sun as, .group)],
3580          gcc_cv_as_comdat_group_group,
3581          , [$conftest_s])
3582        ;;
3583    esac
3584    if test -z "${gcc_cv_as_comdat_group_group+set}"; then
3585      gcc_cv_as_comdat_group_group=no
3586    fi
3587  fi
3589 if test x"$ld_is_gold" = xyes; then
3590   comdat_group=yes
3591 elif test x"$ld_is_mold" = xyes; then
3592   comdat_group=yes
3593 elif test $in_tree_ld = yes ; then
3594   comdat_group=no
3595   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 \
3596      && test $in_tree_ld_is_elf = yes; then
3597      comdat_group=yes
3598   fi
3599 elif echo "$ld_ver" | grep GNU > /dev/null; then
3600   comdat_group=yes
3601   if test 0"$ld_date" -lt 20050308; then
3602     if test -n "$ld_date"; then
3603       # If there was date string, but was earlier than 2005-03-08, fail
3604       comdat_group=no
3605     elif test "$ld_vers_major" -lt 2; then
3606       comdat_group=no
3607     elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
3608       comdat_group=no
3609     fi
3610   fi
3611 else
3612 changequote(,)dnl
3613   case "${target}" in
3614     *-*-solaris2.1[1-9]*)
3615       comdat_group=no
3616       # Sun ld has COMDAT group support since Solaris 9, but it doesn't
3617       # interoperate with GNU as until Solaris 11 build 130, i.e. ld
3618       # version 1.688.
3619       #
3620       # If using Sun as for COMDAT group as emitted by GCC, one needs at
3621       # least ld version 1.2267.
3622       if test "$ld_vers_major" -gt 1; then
3623         comdat_group=yes
3624       elif test "x$gas_flag" = xyes && test "$ld_vers_minor" -ge 1688; then
3625         comdat_group=yes
3626       elif test "$ld_vers_minor" -ge 2267; then
3627         comdat_group=yes
3628       fi
3629       ;;
3630     *)
3631       # Assume linkers other than GNU ld don't support COMDAT group.
3632       comdat_group=no
3633       ;;
3634   esac
3635 changequote([,])dnl
3637 # Allow overriding the automatic COMDAT group tests above.
3638 AC_ARG_ENABLE(comdat,
3639   [AS_HELP_STRING([--enable-comdat], [enable COMDAT group support])],
3640   [comdat_group="$enable_comdat"])
3641 if test $comdat_group = no; then
3642   gcc_cv_as_comdat_group=no
3643   gcc_cv_as_comdat_group_percent=no
3644   gcc_cv_as_comdat_group_group=no
3646 AC_DEFINE_UNQUOTED(HAVE_COMDAT_GROUP,
3647   [`if test $gcc_cv_as_comdat_group = yes \
3648     || test $gcc_cv_as_comdat_group_percent = yes \
3649     || test $gcc_cv_as_comdat_group_group = yes; then echo 1; else echo 0; fi`],
3650 [Define 0/1 if your assembler and linker support COMDAT groups.])
3652 # Restrict this test to Solaris/x86: other targets define this statically.
3653 case "${target}" in
3654   i?86-*-solaris2* | x86_64-*-solaris2*)
3655     AC_MSG_CHECKING(support for hidden thunks in linkonce sections)
3656     if test $in_tree_ld = yes || echo "$ld_ver" | grep GNU > /dev/null; then
3657       hidden_linkonce=yes
3658     else
3659       case "${target}" in
3660         # Full support for hidden thunks in linkonce sections only appeared in
3661         # Solaris 11/OpenSolaris.
3662         *-*-solaris2.1[[1-9]]*)
3663           hidden_linkonce=yes
3664           ;;
3665         *)
3666           hidden_linkonce=no
3667           ;;
3668       esac
3669     fi
3670     AC_MSG_RESULT($hidden_linkonce)
3671     AC_DEFINE_UNQUOTED(USE_HIDDEN_LINKONCE,
3672       [`if test $hidden_linkonce = yes; then echo 1; else echo 0; fi`],
3673     [Define 0/1 if your linker supports hidden thunks in linkonce sections.])
3674   ;;
3675 esac
3677 gcc_GAS_CHECK_FEATURE([line table is_stmt support],
3678  gcc_cv_as_is_stmt,,
3679 [       .text
3680         .file 1 "conf.c"
3681         .loc 1 1 0 is_stmt 1],,
3682 [AC_DEFINE(HAVE_GAS_LOC_STMT, 1,
3683   [Define if your assembler supports the .loc is_stmt sub-directive.])])
3685 gcc_GAS_CHECK_FEATURE([line table discriminator support],
3686  gcc_cv_as_discriminator,,
3687 [       .text
3688         .file 1 "conf.c"
3689         .loc 1 1 0 discriminator 1],,
3690 [AC_DEFINE(HAVE_GAS_DISCRIMINATOR, 1,
3691   [Define if your assembler supports the .loc discriminator sub-directive.])])
3693 # Catch the newlib flag of the same name so we can gate GCC features on it.
3694 AC_ARG_ENABLE(newlib-nano-formatted-io,
3695 [AS_HELP_STRING([--enable-newlib-nano-formatted-io], [Use nano version
3696  formatted IO])],
3697 [case "${enableval}" in
3698   yes|no)
3699     ;;
3700   *)
3701     AC_MSG_ERROR([unknown newlib-nano-formatted-io setting $enableval])
3702     ;;
3703 esac], [])
3705 # Thread-local storage - the check is heavily parameterized.
3706 conftest_s=
3707 tls_as_opt=
3708 case "$target" in
3709 changequote(,)dnl
3710   alpha*-*-*)
3711     conftest_s='
3712         .section ".tdata","awT",@progbits
3713 foo:    .long   25
3714         .text
3715         ldq     $27,__tls_get_addr($29)         !literal!1
3716         lda     $16,foo($29)                    !tlsgd!1
3717         jsr     $26,($27),__tls_get_addr        !lituse_tlsgd!1
3718         ldq     $27,__tls_get_addr($29)         !literal!2
3719         lda     $16,foo($29)                    !tlsldm!2
3720         jsr     $26,($27),__tls_get_addr        !lituse_tlsldm!2
3721         ldq     $1,foo($29)                     !gotdtprel
3722         ldah    $2,foo($29)                     !dtprelhi
3723         lda     $3,foo($2)                      !dtprello
3724         lda     $4,foo($29)                     !dtprel
3725         ldq     $1,foo($29)                     !gottprel
3726         ldah    $2,foo($29)                     !tprelhi
3727         lda     $3,foo($2)                      !tprello
3728         lda     $4,foo($29)                     !tprel'
3729         tls_as_opt=--fatal-warnings
3730         ;;
3731   arc*-*-*)
3732     conftest_s='
3733         add_s r0,r0, @foo@tpoff'
3734         ;;
3735   cris-*-*|crisv32-*-*)
3736     conftest_s='
3737         .section ".tdata","awT",@progbits
3738 x:      .long   25
3739         .text
3740         move.d x:IE,$r10
3741         nop'
3742         tls_as_opt=--fatal-warnings
3743         ;;
3744   frv*-*-*)
3745     conftest_s='
3746         .section ".tdata","awT",@progbits
3747 x:      .long   25
3748         .text
3749         call    #gettlsoff(x)'
3750         ;;
3751   hppa*-*-linux*)
3752     conftest_s='
3753 t1:     .reg    %r20
3754 t2:     .reg    %r21
3755 gp:     .reg    %r19
3756         .section ".tdata","awT",@progbits
3757 foo:    .long   25
3758         .text
3759         .align  4
3760         addil LT%foo-$tls_gdidx$,gp
3761         ldo RT%foo-$tls_gdidx$(%r1),%arg0
3762         b __tls_get_addr
3763         nop             
3764         addil LT%foo-$tls_ldidx$,gp
3765         b __tls_get_addr
3766         ldo RT%foo-$tls_ldidx$(%r1),%arg0
3767         addil LR%foo-$tls_dtpoff$,%ret0
3768         ldo RR%foo-$tls_dtpoff$(%r1),%t1
3769         mfctl %cr27,%t1                 
3770         addil LT%foo-$tls_ieoff$,gp
3771         ldw RT%foo-$tls_ieoff$(%r1),%t2
3772         add %t1,%t2,%t3                 
3773         mfctl %cr27,%t1                 
3774         addil LR%foo-$tls_leoff$,%t1
3775         ldo RR%foo-$tls_leoff$(%r1),%t2'
3776         tls_as_opt=--fatal-warnings
3777         ;;
3778   arm*-*-*)
3779     conftest_s='
3780         .section ".tdata","awT",%progbits
3781 foo:    .long   25
3782         .text
3783 .word foo(gottpoff)
3784 .word foo(tpoff)
3785 .word foo(tlsgd)
3786 .word foo(tlsldm)
3787 .word foo(tlsldo)'
3788         ;;
3789   i[34567]86-*-* | x86_64-*-*)
3790     case "$target" in
3791       i[34567]86-*-solaris2.* | x86_64-*-solaris2.*)
3792         on_solaris=yes
3793         ;;
3794       *)
3795         on_solaris=no
3796         ;;
3797     esac
3798     if test x$on_solaris = xyes && test x$gas_flag = xno; then
3799       conftest_s='
3800         .section .tdata,"awt",@progbits'
3801       tls_section_flag=t
3802 changequote([,])dnl
3803       AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
3804 [Define to the flag used to mark TLS sections if the default (`T') doesn't work.])
3805 changequote(,)dnl
3806     else
3807       conftest_s='
3808         .section ".tdata","awT",@progbits'
3809       tls_section_flag=T
3810       tls_as_opt="--fatal-warnings"
3811     fi
3812     case "$target" in
3813       i[34567]86-*-*)
3814         if test x$on_solaris = xyes; then
3815           case $gas_flag in
3816             yes) tls_as_opt="$tls_as_opt --32" ;;
3817           esac
3818         fi
3819         conftest_s="$conftest_s
3820 foo:    .long   25
3821         .text
3822         movl    %gs:0, %eax
3823         leal    foo@tlsgd(,%ebx,1), %eax
3824         leal    foo@tlsldm(%ebx), %eax
3825         leal    foo@dtpoff(%eax), %edx
3826         movl    foo@gottpoff(%ebx), %eax
3827         subl    foo@gottpoff(%ebx), %eax
3828         addl    foo@gotntpoff(%ebx), %eax
3829         movl    foo@indntpoff, %eax
3830         movl    \$foo@tpoff, %eax
3831         subl    \$foo@tpoff, %eax
3832         leal    foo@ntpoff(%ecx), %eax"
3833         ;;
3834       x86_64-*-*)
3835         if test x$on_solaris = xyes; then
3836           case $gas_flag in
3837             yes) tls_as_opt="$tls_as_opt --64" ;;
3838             no)  tls_as_opt="$tls_as_opt -xarch=amd64" ;;
3839           esac    
3840         fi
3841         conftest_s="$conftest_s
3842 foo:    .long   25
3843         .text
3844         movq    %fs:0, %rax
3845         leaq    foo@tlsgd(%rip), %rdi
3846         leaq    foo@tlsld(%rip), %rdi
3847         leaq    foo@dtpoff(%rax), %rdx
3848         movq    foo@gottpoff(%rip), %rax
3849         movq    \$foo@tpoff, %rax"
3850         ;;
3851     esac
3852     ;;
3853   ia64-*-*)
3854     conftest_s='
3855         .section ".tdata","awT",@progbits
3856 foo:    data8   25
3857         .text
3858         addl    r16 = @ltoff(@dtpmod(foo#)), gp
3859         addl    r17 = @ltoff(@dtprel(foo#)), gp
3860         addl    r18 = @ltoff(@tprel(foo#)), gp
3861         addl    r19 = @dtprel(foo#), gp
3862         adds    r21 = @dtprel(foo#), r13
3863         movl    r23 = @dtprel(foo#)
3864         addl    r20 = @tprel(foo#), gp
3865         adds    r22 = @tprel(foo#), r13
3866         movl    r24 = @tprel(foo#)'
3867         tls_as_opt=--fatal-warnings
3868         ;;
3869   loongarch*-*-*)
3870     conftest_s='
3871         .section .tdata,"awT",@progbits
3872 x:      .word 2
3873         .text
3874         la.tls.gd $a0,x
3875         bl __tls_get_addr'
3876         tls_first_major=0
3877         tls_first_minor=0
3878         tls_as_opt='--fatal-warnings'
3879         ;;
3880   microblaze*-*-*)
3881     conftest_s='
3882         .section .tdata,"awT",@progbits
3884         .word 2
3885         .text
3886         addik r5,r20,x@TLSGD
3887         addik r5,r20,x@TLSLDM'
3888         tls_as_opt='--fatal-warnings'
3889         ;;
3890   mips*-*-*)
3891     conftest_s='
3892         .section .tdata,"awT",@progbits
3894         .word 2
3895         .text
3896         addiu $4, $28, %tlsgd(x)
3897         addiu $4, $28, %tlsldm(x)
3898         lui $4, %dtprel_hi(x)
3899         addiu $4, $4, %dtprel_lo(x)
3900         lw $4, %gottprel(x)($28)
3901         lui $4, %tprel_hi(x)
3902         addiu $4, $4, %tprel_lo(x)'
3903         tls_as_opt='-32 --fatal-warnings'
3904         ;;
3905   m68k-*-*)
3906     conftest_s='
3907         .section .tdata,"awT",@progbits
3909         .word 2
3910         .text
3911 foo:
3912         move.l x@TLSGD(%a5),%a0
3913         move.l x@TLSLDM(%a5),%a0
3914         move.l x@TLSLDO(%a5),%a0
3915         move.l x@TLSIE(%a5),%a0
3916         move.l x@TLSLE(%a5),%a0'
3917         tls_as_opt='--fatal-warnings'
3918         ;;
3919   nios2-*-*)
3920       conftest_s='
3921         .section ".tdata","awT",@progbits'
3922         tls_as_opt="--fatal-warnings"
3923         ;;
3924   aarch64*-*-*)
3925     conftest_s='
3926         .section ".tdata","awT",%progbits
3927 foo:    .long   25
3928         .text
3929         adrp  x0, :tlsgd:x
3930         add   x0, x0, #:tlsgd_lo12:x
3931         bl    __tls_get_addr
3932         nop'
3933         tls_as_opt='--fatal-warnings'
3934         ;;
3935   or1k*-*-*)
3936     conftest_s='
3937         .section ".tdata","awT",@progbits
3938 foo:    .long   25
3939         .text
3940         l.movhi r3, tpoffha(foo)
3941         l.add   r3, r3, r10
3942         l.lwz   r4, tpofflo(foo)(r3)'
3943     tls_as_opt=--fatal-warnings
3944     ;;
3945   powerpc-ibm-aix*)
3946     conftest_s='
3947         .extern __get_tpointer
3948         .toc
3949 LC..1:
3950         .tc a[TC],a[TL]@le
3951         .csect .text[PR]
3952 .tlstest:
3953         lwz 9,LC..1(2)
3954         bla __get_tpointer
3955         lwzx 3,9,3
3956         .globl a
3957         .csect a[TL],4
3959         .space 4'
3960         ;;
3961   powerpc64*-*-*)
3962     conftest_s='
3963         .section ".tdata","awT",@progbits
3964         .align 3
3965 ld0:    .space 8
3966 ld1:    .space 8
3967 x1:     .space 8
3968 x2:     .space 8
3969 x3:     .space 8
3970         .text
3971         addi 3,2,ld0@got@tlsgd
3972         bl .__tls_get_addr
3973         nop
3974         addi 3,2,ld1@toc
3975         bl .__tls_get_addr
3976         nop
3977         addi 3,2,x1@got@tlsld
3978         bl .__tls_get_addr
3979         nop
3980         addi 9,3,x1@dtprel
3981         bl .__tls_get_addr
3982         nop
3983         addis 9,3,x2@dtprel@ha
3984         addi 9,9,x2@dtprel@l
3985         bl .__tls_get_addr
3986         nop
3987         ld 9,x3@got@dtprel(2)
3988         add 9,9,3
3989         bl .__tls_get_addr
3990         nop'
3991         tls_as_opt="-a64 --fatal-warnings"
3992         ;;
3993   powerpc*-*-*)
3994     conftest_s='
3995         .section ".tdata","awT",@progbits
3996         .align 2
3997 ld0:    .space 4
3998 ld1:    .space 4
3999 x1:     .space 4
4000 x2:     .space 4
4001 x3:     .space 4
4002         .text
4003         addi 3,31,ld0@got@tlsgd
4004         bl __tls_get_addr
4005         addi 3,31,x1@got@tlsld
4006         bl __tls_get_addr
4007         addi 9,3,x1@dtprel
4008         addis 9,3,x2@dtprel@ha
4009         addi 9,9,x2@dtprel@l
4010         lwz 9,x3@got@tprel(31)
4011         add 9,9,x@tls
4012         addi 9,2,x1@tprel
4013         addis 9,2,x2@tprel@ha
4014         addi 9,9,x2@tprel@l'
4015         tls_as_opt="-a32 --fatal-warnings"
4016         ;;
4017   riscv*-*-*)
4018     conftest_s='
4019         .section .tdata,"awT",@progbits
4020 x:      .word 2
4021         .text
4022         la.tls.gd a0,x
4023         call __tls_get_addr'
4024         tls_as_opt='--fatal-warnings'
4025         ;;
4026   s390-*-*)
4027     conftest_s='
4028         .section ".tdata","awT",@progbits
4029 foo:    .long   25
4030         .text
4031         .long   foo@TLSGD
4032         .long   foo@TLSLDM
4033         .long   foo@DTPOFF
4034         .long   foo@NTPOFF
4035         .long   foo@GOTNTPOFF
4036         .long   foo@INDNTPOFF
4037         l       %r1,foo@GOTNTPOFF(%r12)
4038         l       %r1,0(%r1):tls_load:foo
4039         bas     %r14,0(%r1,%r13):tls_gdcall:foo
4040         bas     %r14,0(%r1,%r13):tls_ldcall:foo'
4041         tls_as_opt="-m31 --fatal-warnings"
4042         ;;
4043   s390x-*-*)
4044     conftest_s='
4045         .section ".tdata","awT",@progbits
4046 foo:    .long   25
4047         .text
4048         .quad   foo@TLSGD
4049         .quad   foo@TLSLDM
4050         .quad   foo@DTPOFF
4051         .quad   foo@NTPOFF
4052         .quad   foo@GOTNTPOFF
4053         lg      %r1,foo@GOTNTPOFF(%r12)
4054         larl    %r1,foo@INDNTPOFF
4055         brasl   %r14,__tls_get_offset@PLT:tls_gdcall:foo
4056         brasl   %r14,__tls_get_offset@PLT:tls_ldcall:foo'
4057         tls_as_opt="-m64 -Aesame --fatal-warnings"
4058         ;;
4059   sh-*-* | sh[123456789lbe]*-*-*)
4060     conftest_s='
4061         .section ".tdata","awT",@progbits
4062 foo:    .long   25
4063         .text
4064         .long   foo@TLSGD
4065         .long   foo@TLSLDM
4066         .long   foo@DTPOFF
4067         .long   foo@GOTTPOFF
4068         .long   foo@TPOFF'
4069         tls_as_opt=--fatal-warnings
4070         ;;
4071   sparc*-*-*)
4072     case "$target" in
4073       sparc*-sun-solaris2.*)
4074         on_solaris=yes
4075         ;;
4076       *)
4077         on_solaris=no
4078         ;;
4079     esac
4080     if test x$on_solaris = xyes && test x$gas_flag = xno; then
4081       conftest_s='
4082         .section ".tdata",#alloc,#write,#tls'
4083     else
4084       conftest_s='
4085         .section ".tdata","awT",@progbits'
4086         tls_as_opt="-32 --fatal-warnings"
4087     fi
4088     conftest_s="$conftest_s
4089 foo:    .long   25
4090         .text
4091         sethi   %tgd_hi22(foo), %o0
4092         add     %o0, %tgd_lo10(foo), %o1
4093         add     %l7, %o1, %o0, %tgd_add(foo)
4094         call    __tls_get_addr, %tgd_call(foo)
4095         sethi   %tldm_hi22(foo), %l1
4096         add     %l1, %tldm_lo10(foo), %l2
4097         add     %l7, %l2, %o0, %tldm_add(foo)
4098         call    __tls_get_addr, %tldm_call(foo)
4099         sethi   %tldo_hix22(foo), %l3
4100         xor     %l3, %tldo_lox10(foo), %l4
4101         add     %o0, %l4, %l5, %tldo_add(foo)
4102         sethi   %tie_hi22(foo), %o3
4103         add     %o3, %tie_lo10(foo), %o3
4104         ld      [%l7 + %o3], %o2, %tie_ld(foo)
4105         add     %g7, %o2, %o4, %tie_add(foo)
4106         sethi   %tle_hix22(foo), %l1
4107         xor     %l1, %tle_lox10(foo), %o5
4108         ld      [%g7 + %o5], %o1"
4109         ;;
4110   xtensa*-*-*)
4111     conftest_s='
4112         .section ".tdata","awT",@progbits
4113 foo:    .long   25
4114         .text
4115         movi    a8, foo@TLSFUNC
4116         movi    a10, foo@TLSARG
4117         callx8.tls a8, foo@TLSCALL'
4118         ;;
4119 changequote([,])dnl
4120 esac
4121 set_have_as_tls=no
4122 if test "x$enable_tls" = xno ; then
4123   : # TLS explicitly disabled.
4124 elif test "x$enable_tls" = xyes ; then
4125   set_have_as_tls=yes # TLS explicitly enabled.
4126 elif test -z "$conftest_s"; then
4127   : # If we don't have a check, assume no support.
4128 else
4129   gcc_GAS_CHECK_FEATURE(thread-local storage support, gcc_cv_as_tls,
4130   [$tls_as_opt], [$conftest_s],,
4131   [set_have_as_tls=yes])
4133 if test $set_have_as_tls = yes ; then
4134   AC_DEFINE(HAVE_AS_TLS, 1,
4135             [Define if your assembler and linker support thread-local storage.])
4138 # Target-specific assembler checks.
4140 AC_MSG_CHECKING(linker -Bstatic/-Bdynamic option)
4141 gcc_cv_ld_static_dynamic=no
4142 gcc_cv_ld_static_option='-Bstatic'
4143 gcc_cv_ld_dynamic_option='-Bdynamic'
4144 if test $in_tree_ld = yes ; then
4145   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
4146     gcc_cv_ld_static_dynamic=yes
4147   fi
4148 elif test x$gcc_cv_ld != x; then
4149   # Check if linker supports -Bstatic/-Bdynamic option
4150   if $gcc_cv_ld --help 2>&1 | grep -- -Bstatic > /dev/null \
4151      && $gcc_cv_ld --help 2>&1 | grep -- -Bdynamic > /dev/null; then
4152       gcc_cv_ld_static_dynamic=yes
4153   else
4154     case "$target" in
4155       # AIX ld uses -b flags
4156       *-*-aix4.[[23]]* | *-*-aix[[5-9]]*)
4157         gcc_cv_ld_static_dynamic=yes
4158         gcc_cv_ld_static_option="-bstatic"
4159         gcc_cv_ld_dynamic_option="-bdynamic"
4160         ;;
4161       # HP-UX ld uses -a flags to select between shared and archive.
4162       *-*-hpux*)
4163         if test x"$gnu_ld" = xno; then
4164           gcc_cv_ld_static_dynamic=yes
4165           gcc_cv_ld_static_option="-aarchive_shared"
4166           gcc_cv_ld_dynamic_option="-adefault"
4167         fi
4168         ;;
4169       # Solaris 2 ld always supports -Bstatic/-Bdynamic.
4170       *-*-solaris2*)
4171         gcc_cv_ld_static_dynamic=yes
4172         ;;
4173     esac
4174   fi
4176 if test x"$gcc_cv_ld_static_dynamic" = xyes; then
4177         AC_DEFINE(HAVE_LD_STATIC_DYNAMIC, 1,
4178 [Define if your linker supports -Bstatic/-Bdynamic or equivalent options.])
4179         AC_DEFINE_UNQUOTED(LD_STATIC_OPTION, "$gcc_cv_ld_static_option",
4180 [Define to the linker option to disable use of shared objects.])
4181         AC_DEFINE_UNQUOTED(LD_DYNAMIC_OPTION, "$gcc_cv_ld_dynamic_option",
4182 [Define to the linker option to enable use of shared objects.])
4184 AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
4186 AC_MSG_CHECKING(linker --version-script option)
4187 gcc_cv_ld_version_script=no
4188 ld_version_script_option=''
4189 if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
4190   gcc_cv_ld_version_script=yes
4191   ld_version_script_option='--version-script'
4192 elif test x$gcc_cv_ld != x; then
4193   case "$target" in
4194     # Solaris 2 ld always supports -M.  It also supports a subset of
4195     # --version-script since Solaris 11.4, but requires
4196     # -z gnu-version-script-compat to activate.
4197     *-*-solaris2*)
4198       gcc_cv_ld_version_script=yes
4199       ld_version_script_option='-M'
4200       ;;
4201   esac
4203 # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
4204 AC_MSG_RESULT($gcc_cv_ld_version_script)
4205 AC_SUBST(ld_version_script_option)
4207 AC_MSG_CHECKING(linker soname option)
4208 gcc_cv_ld_soname=no
4209 if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
4210   gcc_cv_ld_soname=yes
4211   ld_soname_option='-soname'
4212 elif test x$gcc_cv_ld != x; then
4213   case "$target" in
4214     *-*-darwin*)
4215       gcc_cv_ld_soname=yes
4216       ld_soname_option='-install_name'
4217       ;;
4218     # Solaris 2 ld always supports -h.  It also supports --soname for GNU
4219     # ld compatiblity since some Solaris 10 update.
4220     *-*-solaris2*)
4221       gcc_cv_ld_soname=yes
4222       ld_soname_option='-h'
4223       ;;
4224   esac
4226 # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
4227 AC_MSG_RESULT($gcc_cv_ld_soname)
4228 AC_SUBST(ld_soname_option)
4230 if test x"$demangler_in_ld" = xyes; then
4231   AC_MSG_CHECKING(linker --demangle support)
4232   gcc_cv_ld_demangle=no
4233   if test $in_tree_ld = yes; then
4234     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 \
4235       gcc_cv_ld_demangle=yes
4236     fi
4237   elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
4238     # Check if the GNU linker supports --demangle option
4239     if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
4240       gcc_cv_ld_demangle=yes
4241     fi
4242   fi
4243   if test x"$gcc_cv_ld_demangle" = xyes; then
4244     AC_DEFINE(HAVE_LD_DEMANGLE, 1,
4245 [Define if your linker supports --demangle option.])
4246   fi
4247   AC_MSG_RESULT($gcc_cv_ld_demangle)
4250 AC_MSG_CHECKING(linker plugin support)
4251 gcc_cv_lto_plugin=0
4252 if test -f liblto_plugin.la; then
4253   save_ld_ver="$ld_ver"
4254   save_ld_vers_major="$ld_vers_major"
4255   save_ld_vers_minor="$ld_vers_minor"
4256   save_ld_is_gold="$ld_is_gold"
4258   ld_is_gold=no
4260   if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" = x"$gcc_cv_ld"; then
4261     ld_ver="GNU ld"
4262     # FIXME: ld_is_gold?
4263     ld_vers_major="$gcc_cv_gld_major_version"
4264     ld_vers_minor="$gcc_cv_gld_minor_version"
4265   else
4266     # Determine plugin linker version.
4267     # FIXME: Partial duplicate from above, generalize.
4268 changequote(,)dnl
4269     ld_ver=`$ORIGINAL_PLUGIN_LD_FOR_TARGET --version 2>/dev/null | sed 1q`
4270     if echo "$ld_ver" | grep GNU > /dev/null; then
4271       if echo "$ld_ver" | grep "GNU gold" > /dev/null; then
4272         ld_is_gold=yes
4273         ld_vers=`echo $ld_ver | sed -n \
4274             -e 's,^[^)]*[        ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
4275       else
4276         ld_vers=`echo $ld_ver | sed -n \
4277             -e 's,^.*[   ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
4278       fi
4279       ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
4280       ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
4281     fi
4282 changequote([,])dnl
4283   fi
4285   # Determine plugin support.
4286   if echo "$ld_ver" | grep GNU > /dev/null; then
4287     # Require GNU ld or gold 2.21+ for plugin support by default.
4288     if test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 21; then
4289       gcc_cv_lto_plugin=2
4290     elif test "$ld_is_mold" = yes; then
4291       gcc_cv_lto_plugin=2
4292     # Allow -fuse-linker-plugin to enable plugin support in GNU gold 2.20.
4293     elif test "$ld_is_gold" = yes -a "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 20; then
4294       gcc_cv_lto_plugin=1
4295     fi
4296   fi
4298   ld_ver="$save_ld_ver"
4299   ld_vers_major="$save_ld_vers_major"
4300   ld_vers_minor="$save_ld_vers_minor"
4301   ld_is_gold="$save_ld_is_gold"
4303 AC_DEFINE_UNQUOTED(HAVE_LTO_PLUGIN, $gcc_cv_lto_plugin,
4304   [Define to the level of your linker's plugin support.])
4305 AC_MSG_RESULT($gcc_cv_lto_plugin)
4307 # Target OS-specific assembler checks.
4309 case "$target_os" in
4310   darwin*)
4311     gcc_GAS_CHECK_FEATURE([-mmacosx-version-min option],
4312       gcc_cv_as_mmacosx_version_min,
4313       [-mmacosx-version-min=10.1], [.text],,
4314       [AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1,
4315         [Define if your Mac OS X assembler supports the -mmacos-version-min option.])])
4316     ;;
4317 esac
4319 # Target CPU-specific assembler checks.
4321 case "$target" in
4322   aarch64*-*-*)
4323     gcc_GAS_CHECK_FEATURE([-mabi option], gcc_cv_as_aarch64_mabi,
4324                           [-mabi=lp64], [.text],,,)
4325     if test x$gcc_cv_as_aarch64_mabi = xyes; then
4326       AC_DEFINE(HAVE_AS_MABI_OPTION, 1,
4327                 [Define if your assembler supports the -mabi option.])
4328     else
4329       if test x$with_abi = xilp32; then
4330         AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4331                      Upgrade the Assembler.])
4332       fi
4333       if test x"$with_multilib_list" = xdefault; then
4334         TM_MULTILIB_CONFIG=lp64
4335       else
4336         aarch64_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
4337         for aarch64_multilib in ${aarch64_multilibs}; do
4338           case ${aarch64_multilib} in
4339             ilp32)
4340               AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4341                             Upgrade the Assembler.])
4342               ;;
4343             *)
4344               ;;
4345           esac
4346         done
4347       fi
4348     fi
4349     # Check if we have binutils support for relocations types needed by -fpic
4350     gcc_GAS_CHECK_FEATURE([-fpic relocs], gcc_cv_as_aarch64_picreloc,,
4351     [
4352         .text
4353         ldr     x0, [[x2, #:gotpage_lo15:globalsym]]
4354     ],,[AC_DEFINE(HAVE_AS_SMALL_PIC_RELOCS, 1,
4355         [Define if your assembler supports relocs needed by -fpic.])])
4356     # Enable Branch Target Identification Mechanism and Return Address
4357     # Signing by default.
4358     AC_ARG_ENABLE(standard-branch-protection,
4359     [
4360 AS_HELP_STRING([--enable-standard-branch-protection],
4361         [enable Branch Target Identification Mechanism and Return Address Signing by default for AArch64])
4362 AS_HELP_STRING([--disable-standard-branch-protection],
4363         [disable Branch Target Identification Mechanism and Return Address Signing by default for AArch64])
4364     ],
4365       [
4366         case $enableval in
4367           yes)
4368             tm_defines="${tm_defines} TARGET_ENABLE_BTI=1 TARGET_ENABLE_PAC_RET=1"
4369             ;;
4370           no)
4371             ;;
4372           *)
4373             AC_MSG_ERROR(['$enableval' is an invalid value for --enable-standard-branch-protection.\
4374   Valid choices are 'yes' and 'no'.])
4375             ;;
4376         esac
4377       ],
4378     [])
4379     # Enable default workaround for AArch64 Cortex-A53 erratum 835769.
4380     AC_ARG_ENABLE(fix-cortex-a53-835769,
4381     [
4382 AS_HELP_STRING([--enable-fix-cortex-a53-835769],
4383         [enable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4384 AS_HELP_STRING([--disable-fix-cortex-a53-835769],
4385         [disable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4386     ],
4387       [
4388         case $enableval in
4389           yes)
4390             tm_defines="${tm_defines} TARGET_FIX_ERR_A53_835769_DEFAULT=1"
4391             ;;
4392           no)
4393             ;;
4394           *)
4395             AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-835769.\
4396   Valid choices are 'yes' and 'no'.])
4397             ;;
4399         esac
4400       ],
4401     [])
4402     # Enable default workaround for AArch64 Cortex-A53 erratum 843419.
4403     AC_ARG_ENABLE(fix-cortex-a53-843419,
4404     [
4405 AS_HELP_STRING([--enable-fix-cortex-a53-843419],
4406         [enable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4407 AS_HELP_STRING([--disable-fix-cortex-a53-843419],
4408         [disable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4409     ],
4410       [
4411         case $enableval in
4412           yes)
4413             tm_defines="${tm_defines} TARGET_FIX_ERR_A53_843419_DEFAULT=1"
4414             ;;
4415           no)
4416             ;;
4417           *)
4418             AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-843419.\
4419   Valid choices are 'yes' and 'no'.])
4420             ;;
4422         esac
4423       ],
4424     [])
4425     ;;
4427   # All TARGET_ABI_OSF targets.
4428   alpha*-*-linux* | alpha*-*-*bsd*)
4429     gcc_GAS_CHECK_FEATURE([explicit relocation support],
4430         gcc_cv_as_alpha_explicit_relocs,,
4431 [       .set nomacro
4432         .text
4433         extbl   $3, $2, $3      !lituse_bytoff!1
4434         ldq     $2, a($29)      !literal!1
4435         ldq     $4, b($29)      !literal!2
4436         ldq_u   $3, 0($2)       !lituse_base!1
4437         ldq     $27, f($29)     !literal!5
4438         jsr     $26, ($27), f   !lituse_jsr!5
4439         ldah    $29, 0($26)     !gpdisp!3
4440         lda     $0, c($29)      !gprel
4441         ldah    $1, d($29)      !gprelhigh
4442         lda     $1, d($1)       !gprellow
4443         lda     $29, 0($29)     !gpdisp!3],,
4444     [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
4445   [Define if your assembler supports explicit relocations.])])
4446     gcc_GAS_CHECK_FEATURE([jsrdirect relocation support],
4447         gcc_cv_as_alpha_jsrdirect_relocs,,
4448 [       .set nomacro
4449         .text
4450         ldq     $27, a($29)     !literal!1
4451         jsr     $26, ($27), a   !lituse_jsrdirect!1],,
4452     [AC_DEFINE(HAVE_AS_JSRDIRECT_RELOCS, 1,
4453   [Define if your assembler supports the lituse_jsrdirect relocation.])])
4454     ;;
4456   avr-*-*)
4457     gcc_GAS_CHECK_FEATURE([--mlink-relax option], gcc_cv_as_avr_mlink_relax,
4458       [--mlink-relax], [.text],,
4459       [AC_DEFINE(HAVE_AS_AVR_MLINK_RELAX_OPTION, 1,
4460                 [Define if your avr assembler supports --mlink-relax option.])])
4462     gcc_GAS_CHECK_FEATURE([-mrmw option], gcc_cv_as_avr_mrmw,
4463       [-mrmw], [.text],,
4464       [AC_DEFINE(HAVE_AS_AVR_MRMW_OPTION, 1,
4465                 [Define if your avr assembler supports -mrmw option.])])
4467     gcc_GAS_CHECK_FEATURE([__gcc_isr pseudo instruction],
4468       gcc_cv_as_avr_mgccisr,
4469       [-mgcc-isr], [.text
4470                     __gcc_isr 1
4471                     __gcc_isr 2
4472                     __gcc_isr 0,r24
4473                    ],,
4474       [AC_DEFINE(HAVE_AS_AVR_MGCCISR_OPTION, 1,
4475                 [Define if your avr assembler supports -mgcc-isr option.])])
4477     # Check how default linker description file implements .rodata for
4478     # avrxmega3 (PR21472).  avr-gcc assumes .rodata is *not* loaded to
4479     # RAM so avr-gcc skips __do_copy_data for .rodata objects.
4480     AC_MSG_CHECKING(binutils for avrxmega3 .rodata support)
4481     cat > conftest.s <<EOF
4482         .section .rodata,"a",@progbits
4483         .global xxvaryy
4484     ;; avr-nm should print "... R xxvaryy", not "... D xxvaryy".
4485     xxvaryy:
4486         .word 1
4488     rm -f conftest.nm
4489     AC_TRY_COMMAND([$gcc_cv_as -mmcu=avrxmega3 conftest.s -o conftest.o])
4490     AC_TRY_COMMAND([$gcc_cv_ld -mavrxmega3 conftest.o -o conftest.elf])
4491     AC_TRY_COMMAND([$gcc_cv_nm conftest.elf > conftest.nm])
4492     if test -s conftest.nm
4493     then
4494         if grep ' R xxvaryy' conftest.nm > /dev/null; then
4495             AC_MSG_RESULT(yes)
4496             AC_DEFINE(HAVE_LD_AVR_AVRXMEGA3_RODATA_IN_FLASH, 1,
4497                 [Define if your default avr linker script for avrxmega3 leaves .rodata in flash.])
4498         else
4499             AC_MSG_RESULT(no: avrxmega3 .rodata located in RAM)
4500             echo "$as_me: nm output was" >&AS_MESSAGE_LOG_FD
4501             cat conftest.nm >&AS_MESSAGE_LOG_FD
4502             avr_ld_ver="`$gcc_cv_ld -v | sed -e 's:^.* ::'`"
4503             AC_MSG_WARN([[support for avrxmega3 .rodata in flash needs Binutils 2.29 or higher (have $avr_ld_ver)]])
4504         fi
4505     else
4506         AC_MSG_RESULT(test failed)
4507         echo "$as_me: failed program was" >&AS_MESSAGE_LOG_FD
4508         cat conftest.s >&AS_MESSAGE_LOG_FD
4509         AC_MSG_WARN([[see `config.log' for details]])
4510     fi
4511     rm -f conftest.s conftest.o conftest.elf conftest.nm
4512     ;;
4514   cris-*-*)
4515     gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
4516       gcc_cv_as_cris_no_mul_bug,
4517       [-no-mul-bug-abort], [.text],,
4518       [AC_DEFINE(HAVE_AS_NO_MUL_BUG_ABORT_OPTION, 1,
4519                 [Define if your assembler supports the -no-mul-bug-abort option.])])
4520     ;;
4522   sparc*-*-*)
4523     gcc_GAS_CHECK_FEATURE([-relax option], gcc_cv_as_sparc_relax,
4524       [-relax], [.text],,
4525       [AC_DEFINE(HAVE_AS_RELAX_OPTION, 1,
4526                 [Define if your assembler supports -relax option.])])
4528     gcc_GAS_CHECK_FEATURE([GOTDATA_OP relocs],
4529       gcc_cv_as_sparc_gotdata_op,
4530       [-K PIC],
4531 [.text
4532 .align 4
4533 foo:
4534         nop
4535 bar:
4536         sethi %gdop_hix22(foo), %g1
4537         xor    %g1, %gdop_lox10(foo), %g1
4538         ld    [[%l7 + %g1]], %g2, %gdop(foo)],
4539       [if test x$gcc_cv_ld != x \
4540        && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
4541          if test x$gcc_cv_objdump != x; then
4542            if $gcc_cv_objdump -s -j .text conftest 2> /dev/null \
4543               | grep ' 03000004 82186004 c405c001'> /dev/null 2>&1; then
4544                gcc_cv_as_sparc_gotdata_op=no
4545            else
4546                gcc_cv_as_sparc_gotdata_op=yes
4547            fi
4548          fi
4549        fi
4550        rm -f conftest],
4551       [AC_DEFINE(HAVE_AS_SPARC_GOTDATA_OP, 1,
4552                 [Define if your assembler and linker support GOTDATA_OP relocs.])])
4554     gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs],
4555       gcc_cv_as_sparc_ua_pcrel,
4556       [-K PIC],
4557 [.text
4558 foo:
4559         nop
4560 .data
4561 .align 4
4562 .byte 0
4563 .uaword %r_disp32(foo)],
4564       [if test x$gcc_cv_ld != x \
4565        && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
4566          gcc_cv_as_sparc_ua_pcrel=yes
4567        fi
4568        rm -f conftest],
4569       [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
4570                 [Define if your assembler and linker support unaligned PC relative relocs.])
4572       gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs against hidden symbols],
4573         gcc_cv_as_sparc_ua_pcrel_hidden,
4574         [-K PIC],
4575 [.data
4576 .align 4
4577 .byte 0x31
4578 .uaword %r_disp32(foo)
4579 .byte 0x32, 0x33, 0x34
4580 .global foo
4581 .hidden foo
4582 foo:
4583 .skip 4],
4584         [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4585          && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
4586          && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
4587             | grep ' 31000000 07323334' > /dev/null 2>&1; then
4588             if $gcc_cv_objdump -R conftest 2> /dev/null \
4589                | grep 'DISP32' > /dev/null 2>&1; then
4590                 :
4591             else
4592                 gcc_cv_as_sparc_ua_pcrel_hidden=yes
4593             fi
4594          fi
4595          rm -f conftest],
4596          [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL_HIDDEN, 1,
4597                    [Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])])
4598     ]) # unaligned pcrel relocs
4600     gcc_GAS_CHECK_FEATURE([offsetable %lo()],
4601       gcc_cv_as_sparc_offsetable_lo10,
4602       [-xarch=v9],
4603 [.text
4604         or %g1, %lo(ab) + 12, %g1
4605         or %g1, %lo(ab + 12), %g1],
4606       [if test x$gcc_cv_objdump != x \
4607        && $gcc_cv_objdump -s -j .text conftest.o 2> /dev/null \
4608           | grep ' 82106000 82106000' > /dev/null 2>&1; then
4609          gcc_cv_as_sparc_offsetable_lo10=yes
4610        fi],
4611        [AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
4612                  [Define if your assembler supports offsetable %lo().])])
4614     gcc_GAS_CHECK_FEATURE([FMAF, HPC, and VIS 3.0 instructions],
4615       gcc_cv_as_sparc_fmaf,
4616       [-xarch=v9d],
4617       [.text
4618        .register %g2, #scratch
4619        .register %g3, #scratch
4620        .align 4
4621        fmaddd %f0, %f2, %f4, %f6
4622        addxccc %g1, %g2, %g3
4623        fsrl32 %f2, %f4, %f8
4624        fnaddd %f10, %f12, %f14],,
4625       [AC_DEFINE(HAVE_AS_FMAF_HPC_VIS3, 1,
4626                 [Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions.])])
4628     gcc_GAS_CHECK_FEATURE([SPARC4 instructions],
4629       gcc_cv_as_sparc_sparc4,
4630       [-xarch=sparc4],
4631       [.text
4632        .register %g2, #scratch
4633        .register %g3, #scratch
4634        .align 4
4635        cxbe %g2, %g3, 1f
4636 1:     cwbneg %g2, %g3, 1f
4637 1:     sha1
4638        md5
4639        aes_kexpand0 %f4, %f6, %f8
4640        des_round %f38, %f40, %f42, %f44
4641        camellia_f %f54, %f56, %f58, %f60
4642        kasumi_fi_xor %f46, %f48, %f50, %f52],,
4643       [AC_DEFINE(HAVE_AS_SPARC4, 1,
4644                 [Define if your assembler supports SPARC4 instructions.])])
4646     gcc_GAS_CHECK_FEATURE([SPARC5 and VIS 4.0 instructions],
4647       gcc_cv_as_sparc_sparc5,
4648       [-xarch=sparc5],
4649       [.text
4650        .register %g2, #scratch
4651        .register %g3, #scratch
4652        .align 4
4653        subxc %g1, %g2, %g3
4654        fpadd8 %f0, %f2, %f4],,
4655       [AC_DEFINE(HAVE_AS_SPARC5_VIS4, 1,
4656                 [Define if your assembler supports SPARC5 and VIS 4.0 instructions.])])
4658     gcc_GAS_CHECK_FEATURE([SPARC6 instructions],
4659       gcc_cv_as_sparc_sparc6,
4660       [-xarch=sparc6],
4661       [.text
4662        .register %g2, #scratch
4663        .register %g3, #scratch
4664        .align 4
4665        rd %entropy, %g1
4666        fpsll64x %f0, %f2, %f4],,
4667       [AC_DEFINE(HAVE_AS_SPARC6, 1,
4668                 [Define if your assembler supports SPARC6 instructions.])])
4670     gcc_GAS_CHECK_FEATURE([LEON instructions],
4671       gcc_cv_as_sparc_leon,
4672       [-Aleon],
4673       [.text
4674        .register %g2, #scratch
4675        .register %g3, #scratch
4676        .align 4
4677        smac %g2, %g3, %g1
4678        umac %g2, %g3, %g1
4679        casa [[%g2]] 0xb, %g3, %g1],,
4680       [AC_DEFINE(HAVE_AS_LEON, 1,
4681                 [Define if your assembler supports LEON instructions.])])
4682     ;;
4684 changequote(,)dnl
4685   i[34567]86-*-* | x86_64-*-*)
4686 changequote([,])dnl
4687     case $target_os in
4688       cygwin*)
4689         # Full C++ conformance when using a shared libstdc++-v3 requires some
4690         # support from the Cygwin DLL, which in more recent versions exports
4691         # wrappers to aid in interposing and redirecting operators new, delete,
4692         # etc., as per n2800 #17.6.4.6 [replacement.functions].  Check if we
4693         # are configuring for a version of Cygwin that exports the wrappers.
4694         if test x$host = x$target && test x$host_cpu = xi686; then
4695           AC_CHECK_FUNC([__wrap__Znaj],[gcc_ac_cygwin_dll_wrappers=yes],[gcc_ac_cygwin_dll_wrappers=no])
4696         else
4697           # Can't check presence of libc functions during cross-compile, so
4698           # we just have to assume we're building for an up-to-date target.
4699           gcc_ac_cygwin_dll_wrappers=yes
4700         fi
4701         AC_DEFINE_UNQUOTED(USE_CYGWIN_LIBSTDCXX_WRAPPERS,
4702           [`if test $gcc_ac_cygwin_dll_wrappers = yes; then echo 1; else echo 0; fi`],
4703           [Define if you want to generate code by default that assumes that the
4704            Cygwin DLL exports wrappers to support libstdc++ function replacement.])
4705     esac
4706     case $target_os in
4707       cygwin* | pe | mingw32*)
4708         # Recent binutils allows the three-operand form of ".comm" on PE.  This
4709         # definition is used unconditionally to initialise the default state of
4710         # the target option variable that governs usage of the feature.
4711         gcc_GAS_CHECK_FEATURE([.comm with alignment], gcc_cv_as_comm_has_align,,
4712           [.comm foo,1,32])
4713         AC_DEFINE_UNQUOTED(HAVE_GAS_ALIGNED_COMM,
4714           [`if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi`],
4715           [Define if your assembler supports specifying the alignment
4716            of objects allocated using the GAS .comm command.])
4717         # Used for DWARF 2 in PE
4718         gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
4719           gcc_cv_as_ix86_pe_secrel32,,
4720 [.text
4721 foo:    nop
4722 .data
4723         .secrel32 foo],
4724           [if test x$gcc_cv_ld != x \
4725            && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
4726              gcc_cv_as_ix86_pe_secrel32=yes
4727            fi
4728            rm -f conftest],
4729           [AC_DEFINE(HAVE_GAS_PE_SECREL32_RELOC, 1,
4730             [Define if your assembler and linker support 32-bit section relative relocs via '.secrel32 label'.])])
4731         # Test if the assembler supports the extended form of the .section
4732         # directive that specifies section alignment.  LTO support uses this,
4733         # but normally only after installation, so we warn but don't fail the
4734         # configure if LTO is enabled but the assembler does not support it.
4735         gcc_GAS_CHECK_FEATURE([.section with alignment], gcc_cv_as_section_has_align,
4736           -fatal-warnings,[.section lto_test,"dr0"])
4737         if test x$gcc_cv_as_section_has_align != xyes; then
4738           case ",$enable_languages," in
4739             *,lto,*)
4740               AC_MSG_WARN([LTO for $target requires binutils >= 2.20.1, but version found appears insufficient; LTO will not work until binutils is upgraded.])
4741               ;;
4742           esac
4743         fi
4744         ;;
4745     esac
4746     case $target_os in
4747        darwin2* | darwin19*)
4748         gcc_GAS_CHECK_FEATURE([llvm assembler x86-pad-for-align option],
4749           gcc_cv_as_mllvm_x86_pad_for_align,
4750           [-mllvm -x86-pad-for-align=false], [.text],,
4751           [AC_DEFINE(HAVE_AS_MLLVM_X86_PAD_FOR_ALIGN, 1,
4752             [Define if your Mac OS X assembler supports -mllvm -x86-pad-for-align=false.])])
4753        ;;
4754     esac
4756     gcc_GAS_CHECK_FEATURE([-xbrace_comment], gcc_cv_as_ix86_xbrace_comment,
4757       [-xbrace_comment=no], [.text],,
4758       [AC_DEFINE(HAVE_AS_XBRACE_COMMENT_OPTION, 1,
4759                 [Define if your assembler supports -xbrace_comment option.])])
4761     gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
4762        gcc_cv_as_ix86_filds,,
4763        [filds (%ebp); fists (%ebp)],,
4764        [AC_DEFINE(HAVE_AS_IX86_FILDS, 1,
4765          [Define if your assembler uses filds and fists mnemonics.])])
4767     gcc_GAS_CHECK_FEATURE([fildq and fistpq mnemonics],
4768        gcc_cv_as_ix86_fildq,,
4769        [fildq (%ebp); fistpq (%ebp)],,
4770        [AC_DEFINE(HAVE_AS_IX86_FILDQ, 1,
4771          [Define if your assembler uses fildq and fistq mnemonics.])])
4773     gcc_GAS_CHECK_FEATURE([cmov syntax],
4774       gcc_cv_as_ix86_cmov_sun_syntax,,
4775       [cmovl.l %edx, %eax],,
4776       [AC_DEFINE(HAVE_AS_IX86_CMOV_SUN_SYNTAX, 1,
4777         [Define if your assembler supports the Sun syntax for cmov.])])
4779     gcc_GAS_CHECK_FEATURE([ffreep mnemonic],
4780       gcc_cv_as_ix86_ffreep,,
4781       [ffreep %st(1)],,
4782       [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
4783         [Define if your assembler supports the ffreep mnemonic.])])
4785     gcc_GAS_CHECK_FEATURE([.quad directive],
4786       gcc_cv_as_ix86_quad,,
4787       [.quad 0],,
4788       [AC_DEFINE(HAVE_AS_IX86_QUAD, 1,
4789         [Define if your assembler supports the .quad directive.])])
4791     gcc_GAS_CHECK_FEATURE([sahf mnemonic],
4792       gcc_cv_as_ix86_sahf,,
4793       [.code64
4794        sahf],,
4795       [AC_DEFINE(HAVE_AS_IX86_SAHF, 1,
4796         [Define if your assembler supports the sahf mnemonic in 64bit mode.])])
4798     gcc_GAS_CHECK_FEATURE([interunit movq mnemonic],
4799       gcc_cv_as_ix86_interunit_movq,,
4800       [.code64
4801        movq %mm0, %rax
4802        movq %rax, %xmm0])
4803     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_INTERUNIT_MOVQ,
4804       [`if test $gcc_cv_as_ix86_interunit_movq = yes; then echo 1; else echo 0; fi`],
4805       [Define if your assembler supports interunit movq mnemonic.])
4807     gcc_GAS_CHECK_FEATURE([hle prefixes],
4808       gcc_cv_as_ix86_hle,,
4809       [lock xacquire cmpxchg %esi, (%ecx)],,
4810       [AC_DEFINE(HAVE_AS_IX86_HLE, 1,
4811         [Define if your assembler supports HLE prefixes.])])
4813     gcc_GAS_CHECK_FEATURE([swap suffix],
4814       gcc_cv_as_ix86_swap,,
4815       [movl.s %esp, %ebp],,
4816       [AC_DEFINE(HAVE_AS_IX86_SWAP, 1,
4817         [Define if your assembler supports the swap suffix.])])
4819     gcc_GAS_CHECK_FEATURE([different section symbol subtraction],
4820       gcc_cv_as_ix86_diff_sect_delta,,
4821       [.section .rodata
4822 .L1:
4823         .long .L2-.L1
4824         .long .L3-.L1
4825         .text
4826 .L3:    nop
4827 .L2:    nop],,
4828       [AC_DEFINE(HAVE_AS_IX86_DIFF_SECT_DELTA, 1,
4829         [Define if your assembler supports the subtraction of symbols in different sections.])])
4831     gcc_GAS_CHECK_FEATURE([rep and lock prefix],
4832         gcc_cv_as_ix86_rep_lock_prefix,,
4833         [rep movsl
4834          rep ret
4835          rep nop
4836          rep bsf %ecx, %eax
4837          rep bsr %ecx, %eax
4838          lock addl %edi, (%eax,%esi)
4839          lock orl $0, (%esp)],,
4840         [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
4841           [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
4843     gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
4844         gcc_cv_as_ix86_ud2,,
4845         [ud2],,
4846       [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
4847         [Define if your assembler supports the 'ud2' mnemonic.])])
4849     # Enforce 32-bit output with gas and gld.
4850     if test x$gas = xyes; then
4851       as_ix86_gas_32_opt="--32"
4852     fi
4853     if echo "$ld_ver" | grep GNU > /dev/null; then
4854       if $gcc_cv_ld -V 2>/dev/null | grep elf_i386_sol2 > /dev/null; then
4855         ld_ix86_gld_32_opt="-melf_i386_sol2"
4856       else
4857         ld_ix86_gld_32_opt="-melf_i386"
4858       fi
4859     fi
4861     gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
4862         gcc_cv_as_ix86_tlsgdplt,
4863         [$as_ix86_gas_32_opt],
4864         [call    tls_gd@tlsgdplt],
4865         [if test x$gcc_cv_ld != x \
4866          && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
4867            gcc_cv_as_ix86_tlsgdplt=yes
4868          fi
4869          rm -f conftest],
4870       [AC_DEFINE(HAVE_AS_IX86_TLSGDPLT, 1,
4871         [Define if your assembler and linker support @tlsgdplt.])])
4873     conftest_s='
4874         .section .tdata,"aw'$tls_section_flag'",@progbits
4875 tls_ld:
4876         .section .text,"ax",@progbits
4877          call    tls_ld@tlsldmplt'
4879     gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM_PLT reloc],
4880         gcc_cv_as_ix86_tlsldmplt,
4881         [$as_ix86_gas_32_opt],
4882         [$conftest_s],
4883         [if test x$gcc_cv_ld != x \
4884          && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
4885            gcc_cv_as_ix86_tlsldmplt=yes
4886          fi
4887          rm -f conftest])
4888     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDMPLT,
4889       [`if test $gcc_cv_as_ix86_tlsldmplt = yes; then echo 1; else echo 0; fi`],
4890       [Define to 1 if your assembler and linker support @tlsldmplt.])
4892     conftest_s='
4893         .section .text,"ax",@progbits
4894         .globl  _start
4895         .type   _start, @function
4896 _start:      
4897         leal    value@tlsldm(%ebx), %eax
4898         call    ___tls_get_addr@plt
4900         .section .tdata,"aw'$tls_section_flag'",@progbits
4901         .type   value, @object
4902 value:'
4903     gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM reloc],
4904         gcc_cv_as_ix86_tlsldm,
4905         [$as_ix86_gas_32_opt],
4906         [$conftest_s],
4907         [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4908             && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o $ld_tls_libs -lc > /dev/null 2>&1; then
4909            if $gcc_cv_objdump -d conftest 2>/dev/null | grep nop > /dev/null \
4910               || dis conftest 2>/dev/null | grep nop > /dev/null; then
4911              gcc_cv_as_ix86_tlsldm=yes
4912            fi
4913          fi
4914          rm -f conftest])
4915     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDM,
4916       [`if test $gcc_cv_as_ix86_tlsldm = yes; then echo 1; else echo 0; fi`],
4917       [Define to 1 if your assembler and linker support @tlsldm.])
4919     conftest_s='
4920         .data
4921 bar:
4922         .byte 1
4923         .text
4924         .global _start
4925 _start:
4926          cmpl $0, bar@GOT
4927          jmp *_start@GOT'
4928     gcc_GAS_CHECK_FEATURE([R_386_GOT32X reloc],
4929         gcc_cv_as_ix86_got32x,
4930         [$as_ix86_gas_32_opt],
4931         [$conftest_s],
4932         [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4933             && test x$gcc_cv_readelf != x \
4934             && $gcc_cv_readelf --relocs --wide conftest.o 2>&1 \
4935                | grep R_386_GOT32X > /dev/null 2>&1 \
4936             && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
4937            if $gcc_cv_objdump -dw conftest 2>&1 \
4938               | grep 0xffffff > /dev/null 2>&1; then
4939              gcc_cv_as_ix86_got32x=no
4940            else
4941              gcc_cv_as_ix86_got32x=yes
4942            fi
4943          fi
4944          rm -f conftest])
4945     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_GOT32X,
4946       [`if test x"$gcc_cv_as_ix86_got32x" = xyes; then echo 1; else echo 0; fi`],
4947       [Define 0/1 if your assembler and linker support @GOT.])
4949     gcc_GAS_CHECK_FEATURE([GOTOFF in data],
4950       gcc_cv_as_ix86_gotoff_in_data,
4951       [$as_ix86_gas_32_opt],
4952 [       .text
4953 .L0:
4954         nop
4955         .data
4956         .long .L0@GOTOFF])
4957     AC_DEFINE_UNQUOTED(HAVE_AS_GOTOFF_IN_DATA,
4958       [`if test $gcc_cv_as_ix86_gotoff_in_data = yes; then echo 1; else echo 0; fi`],
4959       [Define true if the assembler supports '.long foo@GOTOFF'.])
4961     conftest_s='
4962         .section .text,"ax",@progbits
4963         .globl  _start
4964         .type   _start, @function
4965 _start:
4966         leal    ld@tlsldm(%ecx), %eax
4967         call    *___tls_get_addr@GOT(%ecx)
4968         leal    gd@tlsgd(%ecx), %eax
4969         call    *___tls_get_addr@GOT(%ecx)
4971         .section .tdata,"aw'$tls_section_flag'",@progbits
4972         .type   ld, @object
4974         .byte 0
4975         .globl  gd
4976         .type   gd, @object
4978         .byte 0'
4979     gcc_GAS_CHECK_FEATURE([calling ___tls_get_addr via GOT],
4980         gcc_cv_as_ix86_tls_get_addr_via_got,
4981         [$as_ix86_gas_32_opt],
4982         [$conftest_s],
4983         [if test x$gcc_cv_ld != x \
4984             && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
4985            gcc_cv_as_ix86_tls_get_addr_via_got=yes
4986          fi
4987          rm -f conftest])
4988     AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLS_GET_ADDR_GOT,
4989       [`if test x"$gcc_cv_as_ix86_tls_get_addr_via_got" = xyes; then echo 1; else echo 0; fi`],
4990       [Define 0/1 if your assembler and linker support calling ___tls_get_addr via GOT.])
4991     ;;
4993   ia64*-*-*)
4994     gcc_GAS_CHECK_FEATURE([ltoffx and ldxmov relocs],
4995         gcc_cv_as_ia64_ltoffx_ldxmov_relocs,,
4996 [       .text
4997         addl r15 = @ltoffx(x#), gp
4998         ;;
4999         ld8.mov r16 = [[r15]], x#
5001     [AC_DEFINE(HAVE_AS_LTOFFX_LDXMOV_RELOCS, 1,
5002           [Define if your assembler supports ltoffx and ldxmov relocations.])])
5004     ;;
5006   powerpc*-*-*)
5008     case $target in
5009       *-*-darwin*)
5010         gcc_GAS_CHECK_FEATURE([.machine directive support],
5011           gcc_cv_as_machine_directive,,
5012           [     .machine ppc7400])
5013         if test x$gcc_cv_as_machine_directive != xyes; then
5014           echo "*** This target requires an assembler supporting \".machine\"" >&2
5015           echo you can get it from: https://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg >&2
5016           test x$build = x$target && exit 1
5017         fi
5018         ;;
5019     esac
5021     case $target in
5022       *-*-aix*) conftest_s='    .machine "pwr5"
5023         .csect .text[[PR]]
5024         mfcr 3,128';;
5025       *-*-darwin*) conftest_s=' .text
5026         mfcr r3,128';;
5027       *) conftest_s='   .machine power4
5028         .text
5029         mfcr 3,128';;
5030     esac
5032     gcc_GAS_CHECK_FEATURE([mfcr field support],
5033       gcc_cv_as_powerpc_mfcrf,,
5034       [$conftest_s],,
5035       [AC_DEFINE(HAVE_AS_MFCRF, 1,
5036           [Define if your assembler supports mfcr field.])])
5038     case $target in
5039       *-*-aix*) conftest_s='    .csect .text[[PR]]
5040 LCF..0:
5041         addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';;
5042       *-*-darwin*)
5043         conftest_s='    .text
5044 LCF0:
5045         addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';;
5046       *) conftest_s='   .text
5047 .LCF0:
5048         addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
5049     esac
5051     gcc_GAS_CHECK_FEATURE([rel16 relocs],
5052       gcc_cv_as_powerpc_rel16, -a32,
5053       [$conftest_s],,
5054       [AC_DEFINE(HAVE_AS_REL16, 1,
5055           [Define if your assembler supports R_PPC_REL16 relocs.])])
5057     case $target in
5058       *-*-aix*) conftest_s='    .machine "pwr7"
5059         .csect .text[[PR]]
5060         lxvd2x 1,2,3';;
5061       *) conftest_s='   .machine power7
5062         .text
5063         lxvd2x 1,2,3';;
5064     esac
5066     gcc_GAS_CHECK_FEATURE([vector-scalar support],
5067       gcc_cv_as_powerpc_vsx, -a32,
5068       [$conftest_s],,
5069       [AC_DEFINE(HAVE_AS_VSX, 1,
5070           [Define if your assembler supports VSX instructions.])])
5072     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5073       gcc_cv_as_powerpc_gnu_attribute,,
5074       [.gnu_attribute 4,1],,
5075       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5076           [Define if your assembler supports .gnu_attribute.])])
5078     gcc_GAS_CHECK_FEATURE([prologue entry point marker support],
5079       gcc_cv_as_powerpc_entry_markers,-a64 --fatal-warnings,
5080       [ .reloc .,R_PPC64_ENTRY; nop],,
5081       [AC_DEFINE(HAVE_AS_ENTRY_MARKERS, 1,
5082           [Define if your assembler supports the R_PPC64_ENTRY relocation.])])
5084     gcc_GAS_CHECK_FEATURE([plt sequence marker support],
5085       gcc_cv_as_powerpc_pltseq_markers,-a32 --fatal-warnings,
5086       [ .reloc .,R_PPC_PLTSEQ; nop],,
5087       [AC_DEFINE(HAVE_AS_PLTSEQ, 1,
5088           [Define if your assembler supports R_PPC*_PLTSEQ relocations.])])
5090     case $target in
5091       *-*-aix*)
5092         gcc_GAS_CHECK_FEATURE([AIX .ref support],
5093           gcc_cv_as_aix_ref,,
5094           [     .csect stuff[[rw]]
5095              stuff:
5096                 .long 1
5097                 .extern sym
5098                 .ref sym
5099           ],,
5100           [AC_DEFINE(HAVE_AS_REF, 1,
5101             [Define if your assembler supports .ref])])
5103         gcc_GAS_CHECK_FEATURE([AIX DWARF location lists section support],
5104           gcc_cv_as_aix_dwloc,,
5105           [     .dwsect 0xA0000
5106         Lframe..0:
5107                 .vbyte 4,Lframe..0
5108           ],,
5109           [AC_DEFINE(HAVE_XCOFF_DWARF_EXTRAS, 1,
5110             [Define if your assembler supports AIX debug frame section label reference.])])
5111         ;;
5112     esac
5113     ;;
5115   mips*-*-*)
5116     gcc_GAS_CHECK_FEATURE([explicit relocation support],
5117       gcc_cv_as_mips_explicit_relocs,,
5118 [       lw $4,%gp_rel(foo)($4)],,
5119       [if test x$target_cpu_default = x
5120        then target_cpu_default=MASK_EXPLICIT_RELOCS
5121        else target_cpu_default="($target_cpu_default)|MASK_EXPLICIT_RELOCS"
5122        fi])
5124     gcc_GAS_CHECK_FEATURE([-mno-shared support],
5125       gcc_cv_as_mips_no_shared,[-mno-shared], [nop],,
5126       [AC_DEFINE(HAVE_AS_NO_SHARED, 1,
5127                  [Define if the assembler understands -mno-shared.])])
5129     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5130       gcc_cv_as_mips_gnu_attribute,,
5131       [.gnu_attribute 4,1],,
5132       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5133           [Define if your assembler supports .gnu_attribute.])])
5135     gcc_GAS_CHECK_FEATURE([.module support],
5136       gcc_cv_as_mips_dot_module,[-32],
5137       [.module mips2
5138        .module fp=xx],,
5139       [AC_DEFINE(HAVE_AS_DOT_MODULE, 1,
5140           [Define if your assembler supports .module.])])
5141     if test x$gcc_cv_as_mips_dot_module = xno \
5142        && test x$with_fp_32 != x; then
5143       AC_MSG_ERROR(
5144         [Requesting --with-fp-32= requires assembler support for .module.])
5145     fi
5147     gcc_GAS_CHECK_FEATURE([.micromips support],
5148       gcc_cv_as_micromips_support,[--fatal-warnings],
5149       [.set micromips],,
5150       [AC_DEFINE(HAVE_GAS_MICROMIPS, 1,
5151           [Define if your assembler supports the .set micromips directive])])
5153     gcc_GAS_CHECK_FEATURE([.dtprelword support],
5154       gcc_cv_as_mips_dtprelword,,
5155       [.section .tdata,"awT",@progbits
5157         .word 2
5158         .text
5159         .dtprelword x+0x8000],,
5160       [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
5161           [Define if your assembler supports .dtprelword.])])
5163     gcc_GAS_CHECK_FEATURE([DSPR1 mult with four accumulators support],
5164       gcc_cv_as_mips_dspr1_mult,,
5165 [       .set    mips32r2
5166         .set    nodspr2
5167         .set    dsp
5168         madd    $ac3,$4,$5
5169         maddu   $ac3,$4,$5
5170         msub    $ac3,$4,$5
5171         msubu   $ac3,$4,$5
5172         mult    $ac3,$4,$5
5173         multu   $ac3,$4,$5],,
5174       [AC_DEFINE(HAVE_AS_DSPR1_MULT, 1,
5175           [Define if your assembler supports DSPR1 mult.])])
5177     AC_MSG_CHECKING(assembler and linker for explicit JALR relocation)
5178     gcc_cv_as_ld_jalr_reloc=no
5179     if test $gcc_cv_as_mips_explicit_relocs = yes; then
5180       if test $in_tree_ld = yes ; then
5181         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 \
5182            && test $in_tree_ld_is_elf = yes; then
5183           gcc_cv_as_ld_jalr_reloc=yes
5184         fi
5185       elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
5186         echo '  .ent x' > conftest.s
5187         echo 'x:        lw $2,%got_disp(y)($3)' >> conftest.s
5188         echo '  lw $25,%call16(y)($28)' >> conftest.s
5189         echo '  .reloc  1f,R_MIPS_JALR,y' >> conftest.s
5190         echo '1:        jalr $25' >> conftest.s
5191         echo '  .reloc  1f,R_MIPS_JALR,x' >> conftest.s
5192         echo '1:        jalr $25' >> conftest.s
5193         echo '  .end x' >> conftest.s
5194         if $gcc_cv_as -o conftest.o conftest.s >/dev/null 2>&AS_MESSAGE_LOG_FD \
5195            && $gcc_cv_ld -shared -o conftest.so conftest.o >/dev/null 2>&AS_MESSAGE_LOG_FD; then
5196           if $gcc_cv_objdump -d conftest.so | grep jalr >/dev/null 2>&1 \
5197              && $gcc_cv_objdump -d conftest.so | grep "bal.*<x>" >/dev/null 2>&1; then
5198             gcc_cv_as_ld_jalr_reloc=yes
5199           fi
5200         fi
5201         rm -f conftest.*
5202       fi
5203     fi
5204     if test $gcc_cv_as_ld_jalr_reloc = yes; then
5205       if test x$target_cpu_default = x; then
5206         target_cpu_default=MASK_RELAX_PIC_CALLS
5207       else
5208         target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
5209       fi
5210     fi
5211     AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
5213     AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
5214       [gcc_cv_ld_mips_personality_relaxation],
5215       [gcc_cv_ld_mips_personality_relaxation=no
5216        if test $in_tree_ld = yes ; then
5217          if test "$gcc_cv_gld_major_version" -eq 2 \
5218                  -a "$gcc_cv_gld_minor_version" -ge 21 \
5219                  -o "$gcc_cv_gld_major_version" -gt 2; then
5220            gcc_cv_ld_mips_personality_relaxation=yes
5221          fi
5222        elif test x$gcc_cv_as != x \
5223                  -a x$gcc_cv_ld != x \
5224                  -a x$gcc_cv_readelf != x ; then
5225          cat > conftest.s <<EOF
5226         .cfi_startproc
5227         .cfi_personality 0x80,indirect_ptr
5228         .ent test
5229 test:
5230         nop
5231         .end test
5232         .cfi_endproc
5234         .section .data,"aw",@progbits
5235 indirect_ptr:
5236         .dc.a personality
5238          if $gcc_cv_as -KPIC -o conftest.o conftest.s > /dev/null 2>&1 \
5239             && $gcc_cv_ld -o conftest conftest.o -shared > /dev/null 2>&1; then
5240            if $gcc_cv_readelf -d conftest 2>&1 \
5241               | grep TEXTREL > /dev/null 2>&1; then
5242              :
5243            elif $gcc_cv_readelf --relocs conftest 2>&1 \
5244                 | grep 'R_MIPS_REL32 *$' > /dev/null 2>&1; then
5245              :
5246            else
5247              gcc_cv_ld_mips_personality_relaxation=yes
5248            fi
5249          fi
5250        fi
5251        rm -f conftest.s conftest.o conftest])
5252     if test x$gcc_cv_ld_mips_personality_relaxation = xyes; then
5253             AC_DEFINE(HAVE_LD_PERSONALITY_RELAXATION, 1,
5254       [Define if your linker can relax absolute .eh_frame personality
5255 pointers into PC-relative form.])
5256     fi
5258     gcc_GAS_CHECK_FEATURE([-mnan= support],
5259       gcc_cv_as_mips_nan,
5260       [-mnan=2008],,,
5261       [AC_DEFINE(HAVE_AS_NAN, 1,
5262                  [Define if the assembler understands -mnan=.])])
5263     if test x$gcc_cv_as_mips_nan = xno \
5264        && test x$with_nan != x; then
5265       AC_MSG_ERROR(
5266         [Requesting --with-nan= requires assembler support for -mnan=])
5267     fi
5268     ;;
5269     msp430-*-*)
5270     # Earlier GAS versions generically support .gnu_attribute, but the
5271     # msp430 assembler will not do anything with it.
5272     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5273       gcc_cv_as_msp430_gnu_attribute,,
5274       [.gnu_attribute 4,1],,
5275       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5276           [Define if your assembler supports .gnu_attribute.])])
5277     gcc_GAS_CHECK_FEATURE([.mspabi_attribute support],
5278       gcc_cv_as_msp430_mspabi_attribute,,
5279       [.mspabi_attribute 4,2],,
5280       [AC_DEFINE(HAVE_AS_MSPABI_ATTRIBUTE, 1,
5281           [Define if your assembler supports .mspabi_attribute.])])
5282     if test x$enable_newlib_nano_formatted_io = xyes; then
5283       AC_DEFINE(HAVE_NEWLIB_NANO_FORMATTED_IO, 1, [Define if GCC has been
5284 configured with --enable-newlib-nano-formatted-io.])
5285       fi
5286     ;;
5287     nios2-*-*)
5288     # Versions 2.33 and earlier lacked support for the %gotoff relocation
5289     # syntax that is documented in the ABI specification.
5290     gcc_GAS_CHECK_FEATURE([support for %gotoff relocations in constant data],
5291       gcc_cv_as_nios2_gotoff_relocation,,
5292 [       .extern foo
5293         .data
5294         .long %gotoff(foo)],,
5295       [AC_DEFINE(HAVE_AS_NIOS2_GOTOFF_RELOCATION, 1,
5296           [Define if your assembler supports %gotoff relocation syntax.])])
5297     ;;
5298     riscv*-*-*)
5299     gcc_GAS_CHECK_FEATURE([.attribute support],
5300       gcc_cv_as_riscv_attribute,,
5301       [.attribute stack_align,4],,
5302       [AC_DEFINE(HAVE_AS_RISCV_ATTRIBUTE, 1,
5303           [Define if your assembler supports .attribute.])])
5304     gcc_GAS_CHECK_FEATURE([-misa-spec= support],
5305       gcc_cv_as_riscv_isa_spec,
5306       [-misa-spec=2.2],,,
5307       [AC_DEFINE(HAVE_AS_MISA_SPEC, 1,
5308                  [Define if the assembler understands -misa-spec=.])])
5309     gcc_GAS_CHECK_FEATURE([-march=rv32i_zifencei support],
5310       gcc_cv_as_riscv_march_zifencei,
5311       [-march=rv32i_zifencei2p0],,,
5312       [AC_DEFINE(HAVE_AS_MARCH_ZIFENCEI, 1,
5313                  [Define if the assembler understands -march=rv*_zifencei.])])
5314     ;;
5315     loongarch*-*-*)
5316     gcc_GAS_CHECK_FEATURE([.dtprelword support],
5317       gcc_cv_as_loongarch_dtprelword, [2,18,0],,
5318       [.section .tdata,"awT",@progbits
5320         .word 2
5321         .text
5322         .dtprelword x+0x8000],,
5323       [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
5324           [Define if your assembler supports .dtprelword.])])
5325     gcc_GAS_CHECK_FEATURE([explicit relocation support],
5326       gcc_cv_as_loongarch_explicit_relocs,,
5327       [a:pcalau12i $t0,%pc_hi20(a)],,
5328       [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
5329           [Define if your assembler supports explicit relocation.])])
5330     gcc_GAS_CHECK_FEATURE([eh_frame pcrel encoding support],
5331       gcc_cv_as_loongarch_eh_frame_pcrel_encoding_support,,
5332       [.cfi_startproc
5333        .cfi_personality 0x9b,a
5334        .cfi_lsda 0x1b,b
5335        .cfi_endproc],,
5336       [AC_DEFINE(HAVE_AS_EH_FRAME_PCREL_ENCODING_SUPPORT, 1,
5337           [Define if your assembler supports eh_frame pcrel encoding.])])
5338     ;;
5339     s390*-*-*)
5340     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
5341       gcc_cv_as_s390_gnu_attribute,,
5342       [.gnu_attribute 8,1],,
5343       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
5344           [Define if your assembler supports .gnu_attribute.])])
5345     gcc_GAS_CHECK_FEATURE([.machine and .machinemode support],
5346       gcc_cv_as_s390_machine_machinemode,,
5347       [ .machinemode push
5348         .machinemode pop
5349         .machine push
5350         .machine pop],,
5351       [AC_DEFINE(HAVE_AS_MACHINE_MACHINEMODE, 1,
5352           [Define if your assembler supports .machine and .machinemode.])])
5353     gcc_GAS_CHECK_FEATURE([architecture modifiers support],
5354       gcc_cv_as_s390_architecture_modifiers,,
5355       [ .machine z13+vx ],,
5356       [AC_DEFINE(HAVE_AS_ARCHITECTURE_MODIFIERS, 1,
5357           [Define if your assembler supports architecture modifiers.])])
5358     gcc_GAS_CHECK_FEATURE([vector load/store alignment hints],
5359       gcc_cv_as_s390_vector_loadstore_alignment_hints,,
5360       [ vl %v24,0(%r15),3 ],,
5361       [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS, 1,
5362           [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument.])])
5363     gcc_GAS_CHECK_FEATURE([vector load/store alignment hints on z13],
5364       gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13, [-mzarch -march=z13],
5365       [ vl %v24,0(%r15),3 ],,
5366       [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13, 1,
5367           [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument on z13.])])
5369     ;;
5370 esac
5372 # Mips, LoongArch and HP-UX need the GNU assembler.
5373 # Linux on IA64 might be able to use the Intel assembler.
5375 case "$target" in
5376   mips*-*-* | loongarch*-*-* | *-*-hpux* )
5377     if test x$gas_flag = xyes \
5378        || test x"$host" != x"$build" \
5379        || test ! -x "$gcc_cv_as" \
5380        || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
5381       :
5382     else
5383       echo "*** This configuration requires the GNU assembler" >&2
5384       exit 1
5385     fi
5386     ;;
5387 esac
5389 # AMD GCN needs the LLVM assembler and linker.
5390 # Test that LLVM is at least 13.0.1.
5391 case "$target" in
5392   amdgcn-* | gcn-*)
5393     AC_MSG_CHECKING(llvm assembler version)
5394     gcc_cv_as_version="unknown"
5395     if test x$gcc_cv_as != x; then
5396       gcc_cv_as_version=`$gcc_cv_as --version 2>&1 | sed -ne '/version/s/.* \([[0-9]]\)/\1/p' || echo error`
5397       case "$gcc_cv_as_version" in
5398         13.0.[[1-9]]*) ;;          # 13.0.1+
5399         13.[[1-9]]*) ;;            # 13.1+
5400         1[[4-9]]*) ;;              # 14..19
5401         [[2-9]][[0-9]]*) ;;        # 20..99
5402         [[1-9]][[0-9]][[0-9]]*) ;; # 100+
5403         error) AC_MSG_ERROR([cannot determine LLVM version]) ;;
5404         *) AC_MSG_ERROR([LLVM 13.0.1 or later is required (found LLVM $gcc_cv_as_version)]) ;;
5405       esac
5406     fi
5407     AC_MSG_RESULT([$gcc_cv_as_version, ok])
5408     ;;
5409 esac
5411 case "$target" in
5412   arm*)
5413     gcc_GAS_CHECK_FEATURE([assembler for arm accepts context-specific architecture extensions],
5414       gcc_cv_as_arm_option_extensions,
5415       [-march=armv8.1-m.main+mve],
5416       [.text
5417         .thumb
5418         .syntax unified
5419         vmov.f32 s0, s1],,
5420       [AC_DEFINE(HAVE_GAS_ARM_EXTENDED_ARCH, 1,
5421        [Define if your Arm assembler permits context-specific feature extensions.])])
5422 esac
5424 # ??? Not all targets support dwarf2 debug_line, even within a version
5425 # of gas.  Moreover, we need to emit a valid instruction to trigger any
5426 # info to the output file.  So, as supported targets are added to gas 2.11,
5427 # add some instruction here to (also) show we expect this might work.
5428 # ??? Once 2.11 is released, probably need to add first known working
5429 # version to the per-target configury.
5430 case "$cpu_type" in
5431   aarch64 | alpha | arc | arm | avr | bfin | cris | csky | i386 | loongarch | m32c \
5432   | m68k | microblaze | mips | nds32 | nios2 | pa | riscv | rs6000 | score | sparc \
5433   | visium | xstormy16 | xtensa)
5434     insn="nop"
5435     ;;
5436   ia64 | s390)
5437     insn="nop 0"
5438     ;;
5439   mmix)
5440     insn="swym 0"
5441     ;;
5442 esac
5443 if test x"$insn" != x; then
5444  conftest_s="\
5445         .file 1 \"conftest.s\"
5446         .loc 1 3 0
5447         $insn"
5448  gcc_GAS_CHECK_FEATURE([dwarf2 debug_line support],
5449   gcc_cv_as_dwarf2_debug_line,,
5450   [$conftest_s],
5451   [if test x$gcc_cv_objdump != x \
5452    && $gcc_cv_objdump -h conftest.o 2> /dev/null \
5453       | grep debug_line > /dev/null 2>&1; then
5454      gcc_cv_as_dwarf2_debug_line=yes
5455    elif test x$gcc_cv_otool != x \
5456    && $gcc_cv_otool -l conftest.o 2> /dev/null \
5457       | grep debug_line > /dev/null 2>&1; then
5458      gcc_cv_as_dwarf2_debug_line=yes
5459    fi])
5461 # The .debug_line file table must be in the exact order that
5462 # we specified the files, since these indices are also used
5463 # by DW_AT_decl_file.  Approximate this test by testing if
5464 # the assembler bitches if the same index is assigned twice.
5465  gcc_GAS_CHECK_FEATURE([buggy dwarf2 .file directive],
5466   gcc_cv_as_dwarf2_file_buggy,,
5467 [       .file 1 "foo.s"
5468         .file 1 "bar.s"])
5470  if test $gcc_cv_as_dwarf2_debug_line = yes \
5471  && test $gcc_cv_as_dwarf2_file_buggy = no; then
5472     AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1,
5473   [Define if your assembler supports dwarf2 .file/.loc directives,
5474    and preserves file table indices exactly as given.])
5476     if test $gcc_cv_as_leb128 = yes; then
5477         conftest_s="\
5478         .file 1 \"conftest.s\"
5479         .loc 1 3 0 view .LVU1
5480         $insn
5481         .data
5482         .uleb128 .LVU1
5483         .uleb128 .LVU1
5485         gcc_GAS_CHECK_FEATURE([dwarf2 debug_view support],
5486           gcc_cv_as_dwarf2_debug_view,,
5487           [$conftest_s],,
5488           [AC_DEFINE(HAVE_AS_DWARF2_DEBUG_VIEW, 1,
5489   [Define if your assembler supports views in dwarf2 .loc directives.])])
5490     fi
5491  fi
5493  gcc_GAS_CHECK_FEATURE([--gdwarf2 option],
5494   gcc_cv_as_gdwarf2_flag,
5495   [--gdwarf2], [$insn],,
5496   [AC_DEFINE(HAVE_AS_GDWARF2_DEBUG_FLAG, 1,
5497 [Define if your assembler supports the --gdwarf2 option.])])
5499  gcc_GAS_CHECK_FEATURE([--gdwarf-5 option],
5500   gcc_cv_as_gdwarf_5_flag,
5501   [--gdwarf-5], [$insn],
5502   [if test x$gcc_cv_objdump != x \
5503       && $gcc_cv_objdump -Wi conftest.o 2>&1 \
5504          | grep DW_TAG_compile_unit > /dev/null 2>&1; then
5505      gcc_cv_as_gdwarf_5_flag=yes;
5506    fi],[AC_DEFINE(HAVE_AS_GDWARF_5_DEBUG_FLAG, 1,
5507 [Define if your assembler supports the --gdwarf-5 option.])])
5509  case $target_os in
5510    win32 | pe | cygwin* | mingw32*)
5511      section_flags=\"dr\"
5512      function_type=".def foo; .scl 2; .type 32; .endef"
5513      function_size="";;
5514    *)
5515      section_flags=\"\",%progbits
5516      function_type=".type foo, %function"
5517      function_size=".size foo, .-foo";;
5518  esac
5519  dwarf4_debug_info_size=0x46
5520  dwarf4_high_pc_form=7
5521  dwarf4_debug_aranges_size=0x2c
5522  dwarf4_line_sz=9
5523  for dwarf4_addr_size in 8 4; do
5524    conftest_s="\
5525         .file   \"a.c\"
5526         .text
5527 .Ltext0:
5528         .p2align 4
5529         .globl  foo
5530         $function_type
5531 foo:
5532 .LFB0:
5533 .LM1:
5534         $insn
5535 .LM2:
5536 .LFE0:
5537         $function_size
5538 .Letext0:
5539         .section        .debug_info,$section_flags
5540 .Ldebug_info0:
5541         .4byte  $dwarf4_debug_info_size
5542         .2byte  0x4
5543         .4byte  .Ldebug_abbrev0
5544         .byte   0x$dwarf4_addr_size
5545         .byte   0x1
5546         .ascii \"GNU C17\\0\"
5547         .byte   0xc
5548         .ascii \"a.c\\0\"
5549         .ascii \"/\\0\"
5550         .${dwarf4_addr_size}byte        .Ltext0
5551         .${dwarf4_addr_size}byte        .Letext0-.Ltext0
5552         .4byte  .Ldebug_line0
5553         .byte   0x2
5554         .ascii \"foo\\0\"
5555         .byte   0x1
5556         .byte   0x2
5557         .byte   0x1
5558         .${dwarf4_addr_size}byte        .LFB0
5559         .${dwarf4_addr_size}byte        .LFE0-.LFB0
5560         .byte   0x1
5561         .byte   0x9c
5562         .byte   0
5563         .section        .debug_abbrev,$section_flags
5564 .Ldebug_abbrev0:
5565         .byte   0x1
5566         .byte   0x11
5567         .byte   0x1
5568         .byte   0x25
5569         .byte   0x8
5570         .byte   0x13
5571         .byte   0xb
5572         .byte   0x3
5573         .byte   0x8
5574         .byte   0x1b
5575         .byte   0x8
5576         .byte   0x11
5577         .byte   0x1
5578         .byte   0x12
5579         .byte   0x$dwarf4_high_pc_form
5580         .byte   0x10
5581         .byte   0x17
5582         .byte   0
5583         .byte   0
5584         .byte   0x2
5585         .byte   0x2e
5586         .byte   0
5587         .byte   0x3f
5588         .byte   0x19
5589         .byte   0x3
5590         .byte   0x8
5591         .byte   0x3a
5592         .byte   0xb
5593         .byte   0x3b
5594         .byte   0xb
5595         .byte   0x39
5596         .byte   0xb
5597         .byte   0x11
5598         .byte   0x1
5599         .byte   0x12
5600         .byte   0x$dwarf4_high_pc_form
5601         .byte   0x40
5602         .byte   0x18
5603         .byte   0
5604         .byte   0
5605         .byte   0
5606         .section        .debug_aranges,$section_flags
5607         .4byte  $dwarf4_debug_aranges_size
5608         .2byte  0x2
5609         .4byte  .Ldebug_info0
5610         .byte   0x8
5611         .byte   0
5612         .2byte  0
5613         .2byte  0
5614         .${dwarf4_addr_size}byte        .Ltext0
5615         .${dwarf4_addr_size}byte        .Letext0-.Ltext0
5616         .${dwarf4_addr_size}byte        0
5617         .${dwarf4_addr_size}byte        0
5618         .section        .debug_line,$section_flags
5619 .Ldebug_line0:
5620         .4byte  .LELT0-.LSLT0
5621 .LSLT0:
5622         .2byte  0x4
5623         .4byte  .LELTP0-.LASLTP0
5624 .LASLTP0:
5625         .byte   0x1
5626         .byte   0x1
5627         .byte   0x1
5628         .byte   0xf6
5629         .byte   0xf2
5630         .byte   0xd
5631         .byte   0
5632         .byte   0x1
5633         .byte   0x1
5634         .byte   0x1
5635         .byte   0x1
5636         .byte   0
5637         .byte   0
5638         .byte   0
5639         .byte   0x1
5640         .byte   0
5641         .byte   0
5642         .byte   0x1
5643         .byte   0
5644         .ascii \"a.c\\0\"
5645         .byte   0
5646         .byte   0
5647         .byte   0
5648         .byte   0
5649 .LELTP0:
5650         .byte   0
5651         .byte   0x$dwarf4_line_sz
5652         .byte   0x2
5653         .${dwarf4_addr_size}byte        .LM1
5654         .byte   0x18
5655         .byte   0x5
5656         .byte   0x1
5657         .byte   0
5658         .byte   0x$dwarf4_line_sz
5659         .byte   0x2
5660         .${dwarf4_addr_size}byte        .LM2
5661         .byte   0x1
5662         .byte   0x5
5663         .byte   0x1
5664         .byte   0
5665         .byte   0x$dwarf4_line_sz
5666         .byte   0x2
5667         .${dwarf4_addr_size}byte        .Letext0
5668         .byte   0
5669         .byte   0x1
5670         .byte   0x1
5671 .LELT0:
5672         .section        .debug_str,$section_flags
5673         .ident  \"GCC\"
5675    dwarf4_success=no
5676    if test $dwarf4_addr_size = 4; then
5677      gcc_GAS_CHECK_FEATURE([assembly of compiler generated 32-bit .debug_line],
5678       gcc_cv_as_debug_line_32_flag,,
5679       [$conftest_s],,
5680       [dwarf4_success=yes])
5681    else
5682      gcc_GAS_CHECK_FEATURE([assembly of compiler generated 64-bit .debug_line],
5683       gcc_cv_as_debug_line_64_flag,,
5684       [$conftest_s],,
5685       [dwarf4_success=yes])
5686    fi
5687    if test $dwarf4_success = yes; then
5688      dwarf4_success=no
5689      gcc_GAS_CHECK_FEATURE([--gdwarf-4 not refusing compiler generated .debug_line],
5690       gcc_cv_as_dwarf_4_debug_line_flag,
5691       [--gdwarf-4], [$conftest_s],,
5692       [dwarf4_success=yes])
5693      break
5694    fi
5695    dwarf4_debug_info_size=0x36
5696    dwarf4_high_pc_form=6
5697    dwarf4_debug_aranges_size=0x1c
5698    dwarf4_line_sz=5
5699  done
5701  if test $dwarf4_success = yes; then
5702    conftest_s="\
5703         .file   \"foo.c\"
5704         .text
5705 bar:
5706 #APP
5707 # 82 \"xxx.h\" 1
5708         $insn
5709 # 0 \"\" 2
5710 #NO_APP
5711         $insn
5712 foo:
5713         .file 1 \"foo.c\"
5714         $insn
5715         .file 2 \"foo.h\"
5716         ret
5718    dwarf4_success=no
5719    gcc_GAS_CHECK_FEATURE([--gdwarf-4 with the APP marker],
5720      gcc_cv_as_dwarf_4_app_flag,
5721      [--gdwarf-4], [$conftest_s],, [dwarf4_success=yes])
5722  fi
5724  if test $dwarf4_success = yes; then
5725    conftest_s="\
5726         .text
5727         .globl  foo
5728         $function_type
5729 foo:
5730         $insn
5731         $function_size
5732         .file   1 \"foo.c\"
5734    gcc_GAS_CHECK_FEATURE([working --gdwarf-4/--gdwarf-5 for all sources],
5735      gcc_cv_as_working_gdwarf_n_flag,
5736      [--gdwarf-4],
5737      [$conftest_s],
5738      [changequote(,)dnl
5739       if test x$gcc_cv_objdump != x \
5740          && $gcc_cv_objdump -W conftest.o 2>&1 \
5741                 | grep conftest.s > /dev/null 2>&1; then
5742         gcc_cv_as_working_gdwarf_n_flag=no
5743       else
5744         gcc_cv_as_working_gdwarf_n_flag=yes
5745       fi
5746       changequote([,])dnl])
5747    if test $gcc_cv_as_working_gdwarf_n_flag = yes; then
5748      AC_DEFINE(HAVE_AS_WORKING_DWARF_N_FLAG, 1,
5749 [Define if your assembler supports --gdwarf-4/--gdwarf-5 even with
5750  compiler generated .debug_line.])
5751    fi
5752  fi
5754  gcc_GAS_CHECK_FEATURE([--debug-prefix-map option],
5755   gcc_cv_as_debug_prefix_map_flag,
5756   [--debug-prefix-map /a=/b], [$insn],,
5757   [AC_DEFINE(HAVE_AS_DEBUG_PREFIX_MAP, 1,
5758 [Define if your assembler supports the --debug-prefix-map option.])])
5761 gcc_GAS_CHECK_FEATURE([compressed debug sections],
5762   gcc_cv_as_compress_debug,,,
5763   [# gas compiled without zlib cannot compress debug sections and warns
5764    # about it, but still exits successfully.  So check for this, too.
5765    if $gcc_cv_as --compress-debug-sections -o conftest.o conftest.s 2>&1 | grep -i warning > /dev/null
5766    then
5767      gcc_cv_as_compress_debug=0
5768    elif $gcc_cv_as --compress-debug-sections=zlib -o conftest.o conftest.s > /dev/null 2>&1
5769    then
5770      gcc_cv_as_compress_debug=1
5771      gcc_cv_as_compress_debug_option="--compress-debug-sections"
5772      gcc_cv_as_no_compress_debug_option="--nocompress-debug-sections"
5773      # Since binutils 2.40, gas supports --compress-debug-sections=zstd.
5774      if $gcc_cv_as --compress-debug-sections=zstd -o conftest.o conftest.s > /dev/null 2>&1
5775      then
5776        gcc_cv_as_compress_debug=2
5777      fi
5778    else
5779      gcc_cv_as_compress_debug=0
5780    fi])
5781 AC_DEFINE_UNQUOTED(HAVE_AS_COMPRESS_DEBUG, $gcc_cv_as_compress_debug,
5782 [Define to the level of your assembler's compressed debug section support.])
5783 AC_DEFINE_UNQUOTED(AS_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_compress_debug_option",
5784 [Define to the assembler option to enable compressed debug sections.])
5785 AC_DEFINE_UNQUOTED(AS_NO_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_no_compress_debug_option",
5786 [Define to the assembler option to disable compressed debug sections.])
5788 gcc_GAS_CHECK_FEATURE([.lcomm with alignment], gcc_cv_as_lcomm_with_alignment,,
5789 [.lcomm bar,4,16],,
5790 [AC_DEFINE(HAVE_GAS_LCOMM_WITH_ALIGNMENT, 1,
5791   [Define if your assembler supports .lcomm with an alignment field.])])
5793 if test x$with_sysroot = x && test x$host = x$target \
5794    && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" \
5795    && test "$prefix" != "NONE"; then
5796   AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
5797 [Define to PREFIX/include if cpp should also search that directory.])
5800 # Determine the version of glibc, if any, used on the target.
5801 AC_MSG_CHECKING([for target glibc version])
5802 AC_ARG_WITH([glibc-version],
5803   [AS_HELP_STRING([--with-glibc-version=M.N],
5804     [assume GCC used with glibc version M.N or later])], [
5805 if [echo "$with_glibc_version" | grep '^[0-9][0-9]*\.[0-9][0-9]*$']; then
5806   glibc_version_major=`echo "$with_glibc_version" | sed -e 's/\..*//'`
5807   glibc_version_minor=`echo "$with_glibc_version" | sed -e 's/.*\.//'`
5808 else
5809   AC_MSG_ERROR([option --with-glibc-version requires a version number M.N])
5810 fi], [
5811 glibc_version_major=0
5812 glibc_version_minor=0
5813 [if test -f $target_header_dir/features.h \
5814   && glibc_version_major_define=`$EGREP '^[     ]*#[    ]*define[       ]+__GLIBC__[    ]+[0-9]' $target_header_dir/features.h` \
5815   && glibc_version_minor_define=`$EGREP '^[     ]*#[    ]*define[       ]+__GLIBC_MINOR__[      ]+[0-9]' $target_header_dir/features.h`; then
5816   glibc_version_major=`echo "$glibc_version_major_define" | sed -e 's/.*__GLIBC__[      ]*//'`
5817   glibc_version_minor=`echo "$glibc_version_minor_define" | sed -e 's/.*__GLIBC_MINOR__[        ]*//'`
5818 fi]])
5819 AC_MSG_RESULT([$glibc_version_major.$glibc_version_minor])
5820 AC_DEFINE_UNQUOTED([TARGET_GLIBC_MAJOR], [$glibc_version_major],
5821 [GNU C Library major version number used on the target, or 0.])
5822 AC_DEFINE_UNQUOTED([TARGET_GLIBC_MINOR], [$glibc_version_minor],
5823 [GNU C Library minor version number used on the target, or 0.])
5825 AC_ARG_ENABLE(gnu-unique-object,
5826  [AS_HELP_STRING([--enable-gnu-unique-object],
5827    [enable the use of the @gnu_unique_object ELF extension on glibc systems])],
5828  [case $enable_gnu_unique_object in
5829     yes | no) ;;
5830     *) AC_MSG_ERROR(['$enable_gnu_unique_object' is an invalid value for --enable-gnu-unique-object.
5831 Valid choices are 'yes' and 'no'.]) ;;
5832   esac],
5833  [gcc_GAS_CHECK_FEATURE([gnu_unique_object], gcc_cv_as_gnu_unique_object,,
5834    [.type foo, '$target_type_format_char'gnu_unique_object],,
5835 # We need to unquote above to to use the definition from config.gcc.
5836 # Also check for ld.so support, i.e. glibc 2.11 or higher.
5837    [GCC_GLIBC_VERSION_GTE_IFELSE([2], [11], [enable_gnu_unique_object=yes], )]
5838    )])
5839 if test x$enable_gnu_unique_object = xyes; then
5840   AC_DEFINE(HAVE_GAS_GNU_UNIQUE_OBJECT, 1,
5841    [Define if your assembler supports @gnu_unique_object.])
5844 AC_CACHE_CHECK([assembler for tolerance to line number 0],
5845  [gcc_cv_as_line_zero],
5846  [gcc_cv_as_line_zero=no
5847   if test "x$gcc_cv_as" != x; then
5848     { echo '# 1 "test.s" 1'; echo '# 0 "" 2'; } > conftest.s
5849     if AC_TRY_COMMAND([$gcc_cv_as -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD 2>conftest.out]) &&
5850        test "x`cat conftest.out`" = x
5851     then
5852       gcc_cv_as_line_zero=yes
5853     else
5854       echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
5855       cat conftest.s >&AS_MESSAGE_LOG_FD
5856       echo "configure: error output was" >&AS_MESSAGE_LOG_FD
5857       cat conftest.out >&AS_MESSAGE_LOG_FD
5858     fi
5859     rm -f conftest.o conftest.s conftest.out
5860   fi])
5861 if test "x$gcc_cv_as_line_zero" = xyes; then
5862   AC_DEFINE([HAVE_AS_LINE_ZERO], 1,
5863 [Define if the assembler won't complain about a line such as # 0 "" 2.])
5866 AC_MSG_CHECKING(support for thin archives)
5867 thin_archive_support=no
5868 echo 'int main (void) { return 0; }' > conftest.c
5869 if ($AR --version | sed 1q | grep "GNU ar" \
5870     && $CC $CFLAGS -c conftest.c \
5871     && $AR rcT conftest.a conftest.o \
5872     && $CC $CFLAGS $LDFLAGS -o conftest conftest.a) >/dev/null 2>&1; then
5873   thin_archive_support=yes
5875 rm -f conftest.c conftest.o conftest.a conftest
5876 AC_MSG_RESULT($thin_archive_support)
5877 AC_SUBST(thin_archive_support)
5879 AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
5880 gcc_cv_ld_eh_frame_hdr=no
5881 if test $in_tree_ld = yes ; then
5882   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 \
5883      && test $in_tree_ld_is_elf = yes; then
5884     gcc_cv_ld_eh_frame_hdr=yes
5885   fi
5886 elif test x$gcc_cv_ld != x; then
5887   if echo "$ld_ver" | grep GNU > /dev/null; then
5888     # Check if linker supports --eh-frame-hdr option
5889     if $gcc_cv_ld --help 2>&1 | grep eh-frame-hdr > /dev/null; then
5890       gcc_cv_ld_eh_frame_hdr=yes
5891     fi
5892   else
5893     case "$target" in
5894       *-*-solaris2*)
5895         # Sun ld has various bugs in .eh_frame_hdr support before version 1.2251.
5896         if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2251; then
5897           gcc_cv_ld_eh_frame_hdr=yes
5898         fi
5899         ;;
5900     esac
5901   fi
5903 GCC_TARGET_TEMPLATE([HAVE_LD_EH_FRAME_HDR])
5904 if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then
5905         AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1,
5906 [Define if your linker supports .eh_frame_hdr.])
5908 AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr)
5910 AC_MSG_CHECKING(linker CIEv3 in .eh_frame support)
5911 gcc_cv_ld_eh_frame_ciev3=no
5912 if test $in_tree_ld = yes ; then
5913   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 \
5914      && test $in_tree_ld_is_elf = yes; then
5915     gcc_cv_ld_eh_frame_ciev3=yes
5916   fi
5917 elif test x$gcc_cv_ld != x; then
5918   if echo "$ld_ver" | grep GNU > /dev/null; then
5919     gcc_cv_ld_eh_frame_ciev3=yes
5920     if test 0"$ld_date" -lt 20040513; then
5921       if test -n "$ld_date"; then
5922         # If there was date string, but was earlier than 2004-05-13, fail
5923         gcc_cv_ld_eh_frame_ciev3=no
5924       elif test "$ld_vers_major" -lt 2; then
5925         gcc_cv_ld_eh_frame_ciev3=no
5926       elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
5927         gcc_cv_ld_eh_frame_ciev3=no
5928       fi
5929     fi
5930   else
5931     case "$target" in
5932       *-*-solaris2*)
5933         # Sun ld added support for CIE v3 in .eh_frame in Solaris 11.1.
5934         if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2324; then
5935           gcc_cv_ld_eh_frame_ciev3=yes
5936         fi
5937         ;;
5938     esac
5939   fi
5941 AC_DEFINE_UNQUOTED(HAVE_LD_EH_FRAME_CIEV3,
5942   [`if test x"$gcc_cv_ld_eh_frame_ciev3" = xyes; then echo 1; else echo 0; fi`],
5943   [Define 0/1 if your linker supports CIE v3 in .eh_frame.])
5944 AC_MSG_RESULT($gcc_cv_ld_eh_frame_ciev3)
5946 AC_MSG_CHECKING(linker position independent executable support)
5947 gcc_cv_ld_pie=no
5948 if test $in_tree_ld = yes ; then
5949   case "$target" in
5950     # Full PIE support on Solaris was only introduced in gld 2.26.
5951     *-*-solaris2*)  gcc_gld_pie_min_version=26 ;;
5952     *)              gcc_gld_pie_min_version=15 ;;
5953   esac
5954   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 \
5955      && test $in_tree_ld_is_elf = yes; then
5956     gcc_cv_ld_pie=yes
5957   fi
5958 elif test x$gcc_cv_ld != x; then
5959   # Check if linker supports -pie option
5960   if $gcc_cv_ld --help 2>&1 | grep -- -pie > /dev/null; then
5961     gcc_cv_ld_pie=yes
5962     case "$target" in
5963       *-*-solaris2*)
5964         if echo "$ld_ver" | grep GNU > /dev/null \
5965           && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 26; then
5966           gcc_cv_ld_pie=no
5967         fi
5968         ;;
5969     esac
5970   else
5971     case "$target" in
5972       *-*-solaris2.1[[1-9]]*)
5973         # Solaris 11.3 added PIE support.
5974         if $gcc_cv_ld -z help 2>&1 | grep -- type.*pie > /dev/null; then
5975           gcc_cv_ld_pie=yes
5976         fi
5977         ;;
5978     esac
5979   fi
5981 if test x"$gcc_cv_ld_pie" = xyes; then
5982         AC_DEFINE(HAVE_LD_PIE, 1,
5983 [Define if your linker supports PIE option.])
5985 AC_MSG_RESULT($gcc_cv_ld_pie)
5987 AC_MSG_CHECKING(linker PIE support with copy reloc)
5988 gcc_cv_ld_pie_copyreloc=no
5989 if test $gcc_cv_ld_pie = yes ; then
5990   if test $in_tree_ld = yes ; then
5991     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
5992       gcc_cv_ld_pie_copyreloc=yes
5993     fi
5994   elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
5995     # Check if linker supports -pie option with copy reloc
5996     case "$target" in
5997     i?86-*-linux* | x86_64-*-linux*)
5998       cat > conftest1.s <<EOF
5999         .globl  a_glob
6000         .data
6001         .type   a_glob, @object
6002         .size   a_glob, 4
6003 a_glob:
6004         .long   2
6006       cat > conftest2.s <<EOF
6007         .text
6008         .globl  main
6009         .type   main, @function
6010 main:
6011         movl    %eax, a_glob(%rip)
6012         .size   main, .-main
6013         .globl  ptr
6014         .section        .data.rel,"aw",@progbits
6015         .type   ptr, @object
6016 ptr:
6017         .quad   a_glob
6019       if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6020          && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
6021          && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6022          && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
6023         gcc_cv_ld_pie_copyreloc=yes
6024       fi
6025       rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
6026       ;;
6027     esac
6028   fi
6030 AC_DEFINE_UNQUOTED(HAVE_LD_PIE_COPYRELOC,
6031   [`if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`],
6032   [Define 0/1 if your linker supports -pie option with copy reloc.])
6033 AC_MSG_RESULT($gcc_cv_ld_pie_copyreloc)
6035 AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
6036 gcc_cv_ld_eh_gc_sections=no
6037 if test $in_tree_ld = yes ; then
6038   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 \
6039      && test $in_tree_ld_is_elf = yes; then
6040     gcc_cv_ld_eh_gc_sections=yes
6041   fi
6042 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
6043   cat > conftest.s <<EOF
6044         .section        .text
6045 .globl _start
6046         .type _start, @function
6047 _start:
6048         .long foo
6049         .size _start, .-_start
6050         .section        .text.foo,"ax",@progbits
6051         .type foo, @function
6052 foo:
6053         .long 0
6054         .size foo, .-foo
6055         .section        .gcc_except_table.foo,"a",@progbits
6056 .L0:
6057         .long 0
6058         .section        .eh_frame,"a",@progbits
6059         .long .L0
6061   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6062     if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6063          | grep "gc-sections option ignored" > /dev/null; then
6064       gcc_cv_ld_eh_gc_sections=no
6065     elif $gcc_cv_objdump -h conftest 2> /dev/null \
6066          | grep gcc_except_table > /dev/null; then
6067       gcc_cv_ld_eh_gc_sections=yes
6068       # If no COMDAT groups, the compiler will emit .gnu.linkonce.t. sections.
6069       if test x$gcc_cv_as_comdat_group != xyes; then
6070         gcc_cv_ld_eh_gc_sections=no
6071         cat > conftest.s <<EOF
6072         .section        .text
6073 .globl _start
6074         .type _start, @function
6075 _start:
6076         .long foo
6077         .size _start, .-_start
6078         .section        .gnu.linkonce.t.foo,"ax",@progbits
6079         .type foo, @function
6080 foo:
6081         .long 0
6082         .size foo, .-foo
6083         .section        .gcc_except_table.foo,"a",@progbits
6084 .L0:
6085         .long 0
6086         .section        .eh_frame,"a",@progbits
6087         .long .L0
6089         if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6090           if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6091                | grep "gc-sections option ignored" > /dev/null; then
6092             gcc_cv_ld_eh_gc_sections=no
6093           elif $gcc_cv_objdump -h conftest 2> /dev/null \
6094                | grep gcc_except_table > /dev/null; then
6095             gcc_cv_ld_eh_gc_sections=yes
6096           fi
6097         fi
6098       fi
6099     fi
6100   fi
6101   rm -f conftest.s conftest.o conftest
6103 case "$target" in
6104   hppa*-*-linux*)
6105     # ??? This apparently exposes a binutils bug with PC-relative relocations.
6106     gcc_cv_ld_eh_gc_sections=no
6107     ;;
6108 esac
6109 if test x$gcc_cv_ld_eh_gc_sections = xyes; then
6110         AC_DEFINE(HAVE_LD_EH_GC_SECTIONS, 1,
6111   [Define if your linker supports garbage collection of
6112    sections in presence of EH frames.])
6114 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections)
6116 AC_MSG_CHECKING(linker EH garbage collection of sections bug)
6117 gcc_cv_ld_eh_gc_sections_bug=no
6118 if test $in_tree_ld = yes ; then
6119   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 \
6120      && test $in_tree_ld_is_elf = yes; then
6121     gcc_cv_ld_eh_gc_sections_bug=yes
6122   fi
6123 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
6124   gcc_cv_ld_eh_gc_sections_bug=yes
6125   cat > conftest.s <<EOF
6126         .section        .text
6127 .globl _start
6128         .type _start, @function
6129 _start:
6130         .long foo
6131         .size _start, .-_start
6132         .section        .text.startup.foo,"ax",@progbits
6133         .type foo, @function
6134 foo:
6135         .long 0
6136         .size foo, .-foo
6137         .section        .gcc_except_table.foo,"a",@progbits
6138 .L0:
6139         .long 0
6140         .section        .eh_frame,"a",@progbits
6141         .long .L0
6143   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
6144     if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
6145          | grep "gc-sections option ignored" > /dev/null; then
6146       :
6147     elif $gcc_cv_objdump -h conftest 2> /dev/null \
6148          | grep gcc_except_table > /dev/null; then
6149       gcc_cv_ld_eh_gc_sections_bug=no
6150     fi
6151   fi
6152   rm -f conftest.s conftest.o conftest
6154 if test x$gcc_cv_ld_eh_gc_sections_bug = xyes; then
6155         AC_DEFINE(HAVE_LD_EH_GC_SECTIONS_BUG, 1,
6156   [Define if your linker has buggy garbage collection of
6157    sections support when .text.startup.foo like sections are used.])
6159 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections_bug)
6161 AC_MSG_CHECKING(linker for compressed debug sections)
6162 # GNU ld/gold support --compressed-debug-sections=zlib since binutils 2.26.
6163 if $gcc_cv_ld --help 2>&1 | grep -- '--compress-debug-sections.*\<zlib-gabi\>' > /dev/null; then
6164     gcc_cv_ld_compress_debug=1
6165     gcc_cv_ld_compress_debug_option="--compress-debug-sections"
6166     # Detect zstd debug section compression support
6167     if $gcc_cv_ld --help 2>&1 | grep -- '--compress-debug-sections.*\<zstd\>' > /dev/null; then
6168       gcc_cv_ld_compress_debug=2
6169     fi
6170 else
6171 changequote(,)dnl
6172   case "${target}" in
6173     *-*-solaris2*)
6174       # Introduced in Solaris 11.2.
6175       if $gcc_cv_ld --help 2>&1 | grep -- '-z compress-sections' > /dev/null; then
6176         gcc_cv_ld_compress_debug=1
6177         gcc_cv_ld_compress_debug_option="-z compress-sections"
6178       else
6179         gcc_cv_ld_compress_debug=0
6180       fi
6181       ;;
6182     *)
6183       # Assume linkers other than GNU ld don't support compessed debug
6184       # sections.
6185       gcc_cv_ld_compress_debug=0
6186       ;;
6187   esac
6188 changequote([,])dnl
6190 AC_DEFINE_UNQUOTED(HAVE_LD_COMPRESS_DEBUG, $gcc_cv_ld_compress_debug,
6191 [Define to the level of your linker's compressed debug section support.])
6192 AC_DEFINE_UNQUOTED(LD_COMPRESS_DEBUG_OPTION, "$gcc_cv_ld_compress_debug_option",
6193 [Define to the linker option to enable compressed debug sections.])
6194 AC_MSG_RESULT($gcc_cv_ld_compress_debug)
6196 if test x"$ld64_flag" = x"yes"; then
6198   # Set defaults for possibly untestable items.
6199   gcc_cv_ld64_export_dynamic=0
6200   gcc_cv_ld64_platform_version=0
6202   if test "$build" = "$host"; then
6203     darwin_try_test=1
6204   else
6205     darwin_try_test=0
6206   fi
6208   # On Darwin, because of FAT library support, it is often possible to execute
6209   # exes from compatible archs even when the host differs from the build system.
6210   case "$build","$host" in
6211     x86_64-*-darwin*,i?86-*-darwin* | powerpc64*-*-darwin*,powerpc*-*-darwin*)
6212         darwin_try_test=1;;
6213     *) ;;
6214   esac
6216   # If the configurer specified a minimum ld64 version to be supported, then use
6217   # that to determine feature support.
6218   if test x"${gcc_cv_ld64_version}" != x; then
6219     AC_MSG_CHECKING(ld64 specified version)
6220     gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'`
6221     AC_MSG_RESULT($gcc_cv_ld64_major)
6222     if test "$gcc_cv_ld64_major" -ge 236; then
6223       gcc_cv_ld64_export_dynamic=1
6224     fi
6225     if test "$gcc_cv_ld64_major" -ge 512; then
6226       gcc_cv_ld64_platform_version=1
6227     fi
6228   elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
6229     # If the version was not specified, try to find it.
6230     AC_MSG_CHECKING(linker version)
6231     if test x"${gcc_cv_ld64_version}" = x; then
6232       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | grep ld64 | sed s/.*ld64-// | awk '{print $1}'`
6233     fi
6234     AC_MSG_RESULT($gcc_cv_ld64_version)
6236     AC_MSG_CHECKING(linker for -export_dynamic support)
6237     gcc_cv_ld64_export_dynamic=1
6238     if $gcc_cv_ld -export_dynamic < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6239       gcc_cv_ld64_export_dynamic=0
6240     fi
6241     AC_MSG_RESULT($gcc_cv_ld64_export_dynamic)
6243     AC_MSG_CHECKING(linker for -platform_version support)
6244     gcc_cv_ld64_platform_version=1
6245     if $gcc_cv_ld -platform_version macos 10.5 0.0 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
6246       gcc_cv_ld64_platform_version=0
6247     fi
6248     AC_MSG_RESULT($gcc_cv_ld64_platform_version)
6249   fi
6251   if test x"${gcc_cv_ld64_version}" != x; then
6252     AC_DEFINE_UNQUOTED(LD64_VERSION, "${gcc_cv_ld64_version}",
6253       [Define to ld64 version.])
6254   fi
6256   AC_DEFINE_UNQUOTED(LD64_HAS_EXPORT_DYNAMIC, $gcc_cv_ld64_export_dynamic,
6257   [Define to 1 if ld64 supports '-export_dynamic'.])
6259   AC_DEFINE_UNQUOTED(LD64_HAS_PLATFORM_VERSION, $gcc_cv_ld64_platform_version,
6260   [Define to 1 if ld64 supports '-platform_version'.])
6263 if test x"$dsymutil_flag" = x"yes"; then
6265     # If the user specified a dsymutil path, then we will already have the
6266     # version string, otherwise, pick it up.
6267     if test x"$gcc_cv_dsymutil" = x; then
6268         AC_MSG_WARN([dsymutil is a required tool for this system, but not found])
6269         dsymutil_vers="tool unspecified"
6270     elif test x"$dsymutil_vers" = x; then
6271         dsymutil_vers=`$gcc_cv_dsymutil -v /dev/null 2>&1`
6272     fi
6274     dsymutil_temp=`echo $dsymutil_vers | sed 1q`
6275     AC_MSG_CHECKING(dsymutil version "$dsymutil_temp")
6276     if echo $dsymutil_temp | grep dwarfutils- > /dev/null; then
6277       dsymutil_kind=DWARFUTILS
6278       dsymutil_vers=`echo $dsymutil_temp | sed 's/.*dwarfutils-\([[0-9\.]]*\).*/\1/'`
6279     elif echo $dsymutil_temp | grep clang- > /dev/null; then
6280       dsymutil_kind=CLANG
6281       dsymutil_vers=`echo $dsymutil_temp | sed 's/.*clang-\([[0-9\.]]*\).*/\1/'`
6282     elif echo $dsymutil_temp | grep 'LLVM version ' > /dev/null; then
6283       dsymutil_kind=LLVM
6284       dsymutil_vers=`echo $dsymutil_temp | sed 's/.*LLVM\ version\ \([[0-9\.]]*\).*/\1/'`
6285     else
6286       dsymutil_kind=UNKNOWN
6287       dsymutil_vers="0.0"
6288     fi
6289     dsymutil_major=`expr "$dsymutil_vers" : '\([[0-9]]*\)'`
6290     dsymutil_minor=`expr "$dsymutil_vers" : '[[0-9]]*\.\([[0-9]]*\)'`
6291     dsymutil_tiny=`expr "$dsymutil_vers" : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
6292     if test x"${dsymutil_minor}" = x; then
6293       dsymutil_minor=0
6294     fi
6295     if test x"${dsymutil_tiny}" = x; then
6296       dsymutil_tiny=0
6297     fi
6298     AC_DEFINE_UNQUOTED(DSYMUTIL_VERSION, [$dsymutil_kind,${dsymutil_major},${dsymutil_minor},${dsymutil_tiny}],
6299         [Define to the dsymutil version.])
6300     AC_MSG_RESULT($dsymutil_vers : $dsymutil_kind ${dsymutil_major} ${dsymutil_minor} ${dsymutil_tiny} )
6303 case $target_os in
6304   win32 | pe | cygwin* | mingw32*)
6305     AC_MSG_CHECKING(broken PE linker dwarf5 support)
6306     gcc_cv_ld_broken_pe_dwarf5=yes
6307     if test $in_tree_ld = yes ; then
6308       if grep -q '\.debug_loclists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6309            $gcc_cv_ld_gld_srcdir/scripttempl/pe*.sc \
6310          && grep -q '\.debug_rnglists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6311               $gcc_cv_ld_gld_srcdir/scripttempl/pe*.sc; then
6312         gcc_cv_ld_broken_pe_dwarf5=no
6313       fi
6314     else
6315       if $gcc_cv_ld --verbose 2>&1 | grep -q '\.debug_loclists.*BLOCK.*__section_alignment__.*NOLOAD.*:' \
6316          && $gcc_cv_ld --verbose 2>&1 | grep -q '\.debug_rnglists.*BLOCK.*__section_alignment__.*NOLOAD.*:'; then
6317         gcc_cv_ld_broken_pe_dwarf5=no
6318       fi
6319     fi
6320     if test x$gcc_cv_ld_broken_pe_dwarf5 = xyes; then
6321       AC_DEFINE(HAVE_LD_BROKEN_PE_DWARF5, 1,
6322                 [Define if the PE linker has broken DWARF 5 support.])
6323     fi
6324     AC_MSG_RESULT($gcc_cv_ld_broken_pe_dwarf5)
6326     AC_MSG_CHECKING(PE linker --disable-dynamicbase support)
6327     gcc_cv_ld_disable_dynamicbase=no
6328     if test $in_tree_ld = yes; then
6329       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 \
6330         gcc_cv_ld_disable_dynamicbase=yes
6331       fi
6332     else
6333       if $gcc_cv_ld --help 2>&1 | grep -q 'disable\-]dynamicbase' > /dev/null; then
6334         gcc_cv_ld_disable_dynamicbase=yes
6335       fi
6336     fi
6337     if test x"$gcc_cv_ld_disable_dynamicbase" = xyes; then
6338       AC_DEFINE(HAVE_LD_PE_DISABLE_DYNAMICBASE, 1,
6339                 [Define if the PE linker supports --disable-dynamicbase option.])
6340     fi
6341     AC_MSG_RESULT($gcc_cv_ld_disable_dynamicbase)
6342     ;;
6343 esac
6345 # --------
6346 # UNSORTED
6347 # --------
6349 AC_CACHE_CHECK(linker --as-needed support,
6350 gcc_cv_ld_as_needed,
6351 [gcc_cv_ld_as_needed=no
6352 gcc_cv_ld_as_needed_option='--as-needed'
6353 gcc_cv_ld_no_as_needed_option='--no-as-needed'
6354 if test $in_tree_ld = yes ; then
6355   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 \
6356      && test $in_tree_ld_is_elf = yes; then
6357     gcc_cv_ld_as_needed=yes
6358     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 28; then
6359       gcc_cv_ld_as_needed_option='--push-state --as-needed'
6360       gcc_cv_ld_no_as_needed_option='--pop-state'
6361     fi
6362   fi
6363 elif test x$gcc_cv_ld != x; then
6364   # Check if linker supports --as-needed and --no-as-needed options
6365   if $gcc_cv_ld --help 2>&1 | grep as-needed > /dev/null; then
6366     gcc_cv_ld_as_needed=yes
6367     if $gcc_cv_ld --help 2>&1 | grep push-state > /dev/null \
6368        && $gcc_cv_ld --help 2>&1 | grep pop-state > /dev/null \
6369        && echo "$ld_ver" | grep GNU > /dev/null \
6370        && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 28; then
6371       # Use these options only when both ld.bfd and ld.gold support
6372       # --push-state/--pop-state, which unfortunately wasn't added
6373       # at the same time.
6374       gcc_cv_ld_as_needed_option='--push-state --as-needed'
6375       gcc_cv_ld_no_as_needed_option='--pop-state'
6376     fi
6377   fi
6378   case "$target:$gnu_ld" in
6379     *-*-solaris2*:no)
6380       # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
6381       # forms.
6382       gcc_cv_ld_as_needed=yes
6383       gcc_cv_ld_as_needed_option="-z ignore"
6384       gcc_cv_ld_no_as_needed_option="-z record"
6385       ;;
6386   esac
6388 # --as-needed/-z ignore can only be used if libgcc_s.so.1 uses
6389 # dl_iterate_phdr, i.e. since Solaris 11.
6390 case "$target" in
6391   *-*-solaris2.1[[1-9]]*)
6392     case "$target" in
6393     i?86-*-* | x86_64-*-*)
6394       if echo "$ld_ver" | grep GNU > /dev/null; then
6395         # Doesn't work with gld on Solaris/x86 due to PR ld/12320.
6396         gcc_cv_ld_as_needed=no
6397       fi
6398       ;;
6399     esac
6400     ;;
6401   *-*-solaris2*)
6402     gcc_cv_ld_as_needed=no
6403     ;;
6404 esac
6406 if test x"$gcc_cv_ld_as_needed" = xyes; then
6407         AC_DEFINE(HAVE_LD_AS_NEEDED, 1,
6408 [Define if your linker supports --as-needed/--no-as-needed or equivalent options.])
6409         AC_DEFINE_UNQUOTED(LD_AS_NEEDED_OPTION, "$gcc_cv_ld_as_needed_option",
6410 [Define to the linker option to ignore unused dependencies.])
6411         AC_DEFINE_UNQUOTED(LD_NO_AS_NEEDED_OPTION, "$gcc_cv_ld_no_as_needed_option",
6412 [Define to the linker option to keep unused dependencies.])
6415 AC_MSG_CHECKING(linker mapfile support for clearing hardware capabilities)
6416 saved_LDFLAGS="$LDFLAGS"
6417 for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
6418   LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
6419   AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
6420     [gcc_cv_ld_clearcap=yes; break], [gcc_cv_ld_clearcap=no])
6421 done
6422 LDFLAGS="$saved_LDFLAGS"
6423 if test "x$gcc_cv_ld_clearcap" = xyes; then
6424   AC_DEFINE([HAVE_LD_CLEARCAP], 1,
6425 [Define if the linker supports clearing hardware capabilities via mapfile.])
6426   AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/$clearcap_map])
6428 AC_MSG_RESULT($gcc_cv_ld_clearcap)
6430 case "$target" in
6431   powerpc*-*-*)
6432     case "$target" in
6433       *le-*-linux*)
6434         emul_name="-melf32lppc"
6435         ;;
6436       *)
6437         emul_name="-melf32ppc"
6438         ;;
6439     esac
6440     AC_CACHE_CHECK(linker .gnu.attributes long double support,
6441     gcc_cv_ld_ppc_attr,
6442     [gcc_cv_ld_ppc_attr=no
6443     if test x"$ld_is_gold" = xyes; then
6444       gcc_cv_ld_ppc_attr=yes
6445     elif test $in_tree_ld = yes ; then
6446       if test "$gcc_cv_gld_major_version" -eq 2 \
6447                 -a "$gcc_cv_gld_minor_version" -ge 28 \
6448                 -o "$gcc_cv_gld_major_version" -gt 2; then
6449         gcc_cv_ld_ppc_attr=yes
6450       fi
6451     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6452       # check that merging the long double .gnu_attribute doesn't warn
6453       cat > conftest1.s <<EOF
6454         .gnu_attribute 4,1
6456       cat > conftest2.s <<EOF
6457         .gnu_attribute 4,9
6459       if $gcc_cv_as -a32 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6460          && $gcc_cv_as -a32 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6461          && $gcc_cv_ld $emul_name -r -o conftest.o conftest1.o conftest2.o > /dev/null 2> conftest.err \
6462          && test ! -s conftest.err; then
6463         gcc_cv_ld_ppc_attr=yes
6464       fi
6465       rm -f conftest.err conftest.o conftest1.o conftest2.o conftest1.s conftest2.s
6466     fi
6467     ])
6468     if test x$gcc_cv_ld_ppc_attr = xyes; then
6469       AC_DEFINE(HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE, 1,
6470     [Define if your PowerPC linker has .gnu.attributes long double support.])
6471     fi
6472     ;;
6473 esac
6475 case "$target:$tm_file" in
6476   powerpc64*-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
6477   case "$target" in
6478      *le-*-linux*)
6479      emul_name="-melf64lppc"
6480       ;;
6481      *-*-linux*)
6482      emul_name="-melf64ppc"
6483       ;;
6484      *le-*-freebsd*)
6485      emul_name="-melf64lppc_fbsd"
6486       ;;
6487      *-*-freebsd*)
6488      emul_name="-melf64ppc_fbsd"
6489       ;;
6490   esac
6491     AC_CACHE_CHECK(linker support for omitting dot symbols,
6492     gcc_cv_ld_no_dot_syms,
6493     [gcc_cv_ld_no_dot_syms=no
6494     if test x"$ld_is_gold" = xyes; then
6495       gcc_cv_ld_no_dot_syms=yes
6496     elif test $in_tree_ld = yes ; then
6497       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
6498         gcc_cv_ld_no_dot_syms=yes
6499       fi
6500     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6501       cat > conftest1.s <<EOF
6502         .text
6503         bl .foo
6505       cat > conftest2.s <<EOF
6506         .section ".opd","aw"
6507         .align 3
6508         .globl foo
6509         .type foo,@function
6510 foo:
6511         .quad .LEfoo,.TOC.@tocbase,0
6512         .text
6513 .LEfoo:
6514         blr
6515         .size foo,.-.LEfoo
6517       if $gcc_cv_as -a64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
6518          && $gcc_cv_as -a64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
6519          && $gcc_cv_ld $emul_name -o conftest conftest1.o conftest2.o > /dev/null 2>&1; then
6520         gcc_cv_ld_no_dot_syms=yes
6521       fi
6522       rm -f conftest conftest1.o conftest2.o conftest1.s conftest2.s
6523     fi
6524     ])
6525     if test x"$gcc_cv_ld_no_dot_syms" = xyes; then
6526       AC_DEFINE(HAVE_LD_NO_DOT_SYMS, 1,
6527     [Define if your PowerPC64 linker only needs function descriptor syms.])
6528     fi
6530     AC_CACHE_CHECK(linker large toc support,
6531     gcc_cv_ld_large_toc,
6532     [gcc_cv_ld_large_toc=no
6533     if test x"$ld_is_gold" = xyes; then
6534       gcc_cv_ld_large_toc=yes
6535     elif test $in_tree_ld = yes ; then
6536       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
6537         gcc_cv_ld_large_toc=yes
6538       fi
6539     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
6540       cat > conftest.s <<EOF
6541         .section ".tbss","awT",@nobits
6542         .align 3
6543 ie0:    .space 8
6544         .global _start
6545         .text
6546 _start:
6547         addis 9,13,ie0@got@tprel@ha
6548         ld 9,ie0@got@tprel@l(9)
6550       if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
6551          && $gcc_cv_ld $emul_name --no-toc-sort -o conftest conftest.o > /dev/null 2>&1; then
6552         gcc_cv_ld_large_toc=yes
6553       fi
6554       rm -f conftest conftest.o conftest.s
6555     fi
6556     ])
6557     if test x"$gcc_cv_ld_large_toc" = xyes; then
6558       AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
6559     [Define if your PowerPC64 linker supports a large TOC.])
6560     fi
6562     AC_CACHE_CHECK(linker toc pointer alignment,
6563     gcc_cv_ld_toc_align,
6564     [if test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_nm != x; then
6565       cat > conftest.s <<EOF
6566         .global _start
6567         .text
6568 _start:
6569         addis 9,2,x@got@ha
6570         .section .data.rel.ro,"aw",@progbits
6571         .p2align 16
6572         .space 32768
6573 x:      .quad .TOC.
6575       if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
6576          && $gcc_cv_ld $emul_name -z norelro -o conftest conftest.o > /dev/null 2>&1; then
6577         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)) }'`
6578       fi
6579       rm -f conftest conftest.o conftest.s
6580     fi
6581     ])
6582     if test -n "$gcc_cv_ld_toc_align" && test $gcc_cv_ld_toc_align -gt 8; then
6583       AC_DEFINE_UNQUOTED(POWERPC64_TOC_POINTER_ALIGNMENT, $gcc_cv_ld_toc_align,
6584     [Define to .TOC. alignment forced by your linker.])
6585     fi
6586     ;;
6587 esac
6589 case "$target" in
6590   *-*-aix*)
6591     AC_CACHE_CHECK(linker large toc support,
6592     gcc_cv_ld_large_toc,
6593     [gcc_cv_ld_large_toc=no
6594     if test x$gcc_cv_as != x ; then
6595       cat > conftest.s <<EOF
6596         .toc
6597 LC..1:
6598         .tc a[[TC]],a[[RW]]
6599         .extern a[[RW]]
6600         .csect .text[[PR]]
6601 .largetoctest:
6602         addis 9,LC..1@u(2)
6603         ld 3,LC..1@l(9)
6605       if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1; then
6606         gcc_cv_ld_large_toc=yes
6607       fi
6608       rm -f conftest conftest.o conftest.s
6609     fi
6610     ])
6611     if test x"$gcc_cv_ld_large_toc" = xyes; then
6612       AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
6613     [Define if your PowerPC64 linker supports a large TOC.])
6614     fi
6615     ;;
6616 esac
6618 AC_CACHE_CHECK(linker --build-id support,
6619   gcc_cv_ld_buildid,
6620   [gcc_cv_ld_buildid=no
6621   if test $in_tree_ld = yes ; then
6622     if test "$gcc_cv_gld_major_version" -eq 2 -a \
6623        "$gcc_cv_gld_minor_version" -ge 18 -o \
6624        "$gcc_cv_gld_major_version" -gt 2 \
6625        && test $in_tree_ld_is_elf = yes; then
6626       gcc_cv_ld_buildid=yes
6627     fi
6628   elif test x$gcc_cv_ld != x; then
6629     if $gcc_cv_ld --help 2>&1 | grep build-id > /dev/null; then
6630       gcc_cv_ld_buildid=yes
6631     fi
6632   fi])
6633 if test x"$gcc_cv_ld_buildid" = xyes; then
6634   AC_DEFINE(HAVE_LD_BUILDID, 1,
6635   [Define if your linker supports --build-id.])
6638 AC_ARG_ENABLE(linker-build-id,
6639 [AS_HELP_STRING([--enable-linker-build-id],
6640                 [compiler will always pass --build-id to linker])],
6642 enable_linker_build_id=no)
6644 if test x"$enable_linker_build_id" = xyes; then
6645   if test x"$gcc_cv_ld_buildid" = xyes; then
6646     AC_DEFINE(ENABLE_LD_BUILDID, 1,
6647     [Define if gcc should always pass --build-id to linker.])
6648   else
6649     AC_MSG_WARN(--build-id is not supported by your linker; --enable-linker-build-id ignored)
6650   fi
6653 # In binutils 2.21, GNU ld gained support for new emulations fully
6654 # supporting the Solaris 2 ABI.  Detect their presence in the linker used.
6655 AC_CACHE_CHECK(linker *_sol2 emulation support,
6656   gcc_cv_ld_sol2_emulation,
6657   [gcc_cv_ld_sol2_emulation=no
6658   if test $in_tree_ld = yes ; then
6659     if test "$gcc_cv_gld_major_version" -eq 2 -a \
6660        "$gcc_cv_gld_minor_version" -ge 21 -o \
6661        "$gcc_cv_gld_major_version" -gt 2 \
6662        && test $in_tree_ld_is_elf = yes; then
6663       gcc_cv_ld_sol2_emulation=yes
6664     fi
6665   elif test x$gcc_cv_ld != x; then
6666     if $gcc_cv_ld -V 2>/dev/null | sed -e '1,/Supported emulations/d;q' | \
6667        grep _sol2 > /dev/null; then
6668       gcc_cv_ld_sol2_emulation=yes
6669     fi
6670   fi])
6671 if test x"$gcc_cv_ld_sol2_emulation" = xyes; then
6672   AC_DEFINE(HAVE_LD_SOL2_EMULATION, 1,
6673   [Define if your linker supports the *_sol2 emulations.])
6676 AC_CACHE_CHECK(linker --sysroot support,
6677   gcc_cv_ld_sysroot,
6678   [gcc_cv_ld_sysroot=no
6679   if test $in_tree_ld = yes ; then
6680       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
6681         gcc_cv_ld_sysroot=yes
6682       fi
6683   elif test x$gcc_cv_ld != x; then 
6684     if $gcc_cv_ld --help 2>&1 | grep sysroot > /dev/null; then
6685       gcc_cv_ld_sysroot=yes
6686     fi
6687   fi])
6688 if test x"$gcc_cv_ld_sysroot" = xyes; then
6689   AC_DEFINE(HAVE_LD_SYSROOT, 1,
6690   [Define if your linker supports --sysroot.])
6691 fi        
6693 case $target in
6694 *-*-solaris2*)
6695   # Check for system-provided CRTs on Solaris 11.x and Solaris 12.
6696   AC_CACHE_CHECK([system-provided CRTs on Solaris],
6697     gcc_cv_solaris_crts,
6698     [gcc_cv_solaris_crts=no
6699      if test x$host != x$target; then
6700        if test "x$with_sysroot" = xyes; then
6701          target_sysroot="${test_exec_prefix}/${target_noncanonical}/sys-root"
6702        else
6703          target_sysroot="${with_sysroot}"
6704        fi
6705      fi
6706      target_libdir="$target_sysroot/usr/lib"
6707      # At the time they were added, gcrt1.o became a symlink for backwards
6708      # compatibility on x86, while crt1.o was added on sparc, so check for that.
6709      case $target in
6710        i?86-*-solaris2* | x86_64-*-solaris2*)
6711          if test -h "$target_libdir/gcrt1.o"; then gcc_cv_solaris_crts=yes; fi
6712          ;;
6713        sparc*-*-solaris2*)
6714          if test -f "$target_libdir/crt1.o"; then gcc_cv_solaris_crts=yes; fi
6715          ;;
6716      esac])
6717   ;;
6718 esac
6719 if test x$gcc_cv_solaris_crts = xyes; then
6720   AC_DEFINE(HAVE_SOLARIS_CRTS, 1,
6721             [Define if the system-provided CRTs are present on Solaris.])
6724 AC_ARG_ENABLE(libssp,
6725 [AS_HELP_STRING([--enable-libssp], [enable linking against libssp])],
6726 [case "${enableval}" in
6727   yes|no)
6728     ;;
6729   *)
6730     AC_MSG_ERROR([unknown libssp setting $enableval])
6731     ;;
6732 esac], [])
6734 # Test for stack protector support in target C library.
6735 AC_CACHE_CHECK(__stack_chk_fail in target C library,
6736   gcc_cv_libc_provides_ssp,
6737   [gcc_cv_libc_provides_ssp=no
6738   if test "x$enable_libssp" = "xno"; then
6739     gcc_cv_libc_provides_ssp=yes
6740   elif test "x$enable_libssp" = "xyes"; then
6741     gcc_cv_libc_provides_ssp=no
6742   else
6743     case "$target" in
6744        *-*-musl*)
6745          # All versions of musl provide stack protector
6746          gcc_cv_libc_provides_ssp=yes;;
6747        *-*-linux* | *-*-kfreebsd*-gnu)
6748       # glibc 2.4 and later provides __stack_chk_fail and
6749       # either __stack_chk_guard, or TLS access to stack guard canary.
6750       GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_libc_provides_ssp=yes], [
6751       [if test -f $target_header_dir/features.h \
6752          && $EGREP '^[  ]*#[    ]*define[       ]+__GNU_LIBRARY__[      ]+([1-9][0-9]|[6-9])' \
6753             $target_header_dir/features.h > /dev/null; then
6754         if $EGREP '^[   ]*#[    ]*define[       ]+__UCLIBC__[   ]+1' \
6755              $target_header_dir/features.h > /dev/null && \
6756              test -f $target_header_dir/bits/uClibc_config.h && \
6757              $EGREP '^[         ]*#[    ]*define[       ]+__UCLIBC_HAS_SSP__[   ]+1' \
6758              $target_header_dir/bits/uClibc_config.h > /dev/null; then
6759           gcc_cv_libc_provides_ssp=yes
6760         fi
6761       # all versions of Bionic support stack protector
6762       elif test -f $target_header_dir/sys/cdefs.h \
6763         && $EGREP '^[  ]*#[    ]*define[       ]+__BIONIC__[   ]+1' \
6764            $target_header_dir/sys/cdefs.h > /dev/null; then
6765          gcc_cv_libc_provides_ssp=yes
6766       fi]])
6767         ;;
6768        *-*-gnu*)
6769          # Avoid complicated tests (see
6770          # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
6771          # simply assert that glibc does provide this, which is true for all
6772          # realistically usable GNU/Hurd configurations.
6773          # All supported versions of musl provide it as well
6774          gcc_cv_libc_provides_ssp=yes;;
6775        *-*-darwin* | *-*-freebsd* | *-*-netbsd*)
6776          AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
6777            [echo "no __stack_chk_fail on this target"])
6778         ;;
6779        *) gcc_cv_libc_provides_ssp=no ;;
6780     esac
6781   fi])
6783 if test x$gcc_cv_libc_provides_ssp = xyes; then
6784   AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
6785             [Define if your target C library provides stack protector support])
6788 # Check whether --enable-default-ssp was given.
6789 AC_ARG_ENABLE(default-ssp,
6790 [AS_HELP_STRING([--enable-default-ssp],
6791   [enable Stack Smashing Protection as default])],[
6792 if test x$gcc_cv_libc_provides_ssp = xyes; then
6793   case "$target" in
6794     ia64*-*-*) enable_default_ssp=no ;;
6795     *) enable_default_ssp=$enableval ;;
6796   esac
6797 else
6798   enable_default_ssp=no
6799 fi],
6800 enable_default_ssp=no)
6801 if test x$enable_default_ssp = xyes ; then
6802   AC_DEFINE(ENABLE_DEFAULT_SSP, 1,
6803       [Define if your target supports default stack protector and it is enabled.])
6805 AC_SUBST([enable_default_ssp])
6807 # Test for <sys/sdt.h> on the target.
6808 GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H])
6809 AC_CACHE_CHECK([sys/sdt.h in the target C library], [gcc_cv_sys_sdt_h], [
6810   gcc_cv_sys_sdt_h=no
6811   if test -f $target_header_dir/sys/sdt.h; then
6812     gcc_cv_sys_sdt_h=yes
6813   fi
6815 AS_IF([test x$gcc_cv_sys_sdt_h = xyes], [
6816   AC_DEFINE([HAVE_SYS_SDT_H], [1],
6817             [Define if your target C library provides sys/sdt.h])
6820 # Check if TFmode long double should be used by default or not.
6821 # Some glibc targets used DFmode long double, but with glibc 2.4
6822 # and later they can use TFmode.
6823 case "$target" in
6824   powerpc*-*-linux* | \
6825   sparc*-*-linux* | \
6826   s390*-*-linux* | \
6827   alpha*-*-linux*)
6828     AC_ARG_WITH(long-double-128,
6829       [AS_HELP_STRING([--with-long-double-128],
6830                       [use 128-bit long double by default])],
6831       gcc_cv_target_ldbl128="$with_long_double_128", [
6832       case "$target" in
6833         s390*-*-linux-musl*)
6834           gcc_cv_target_ldbl128=yes
6835           ;;
6836         powerpc*-*-linux-musl*)
6837           gcc_cv_target_ldbl128=no
6838           ;;
6839         *)]
6840       [GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_target_ldbl128=yes], [
6841       [gcc_cv_target_ldbl128=no
6842       grep '^[  ]*#[    ]*define[       ][      ]*__LONG_DOUBLE_MATH_OPTIONAL' \
6843         $target_header_dir/bits/wordsize.h > /dev/null 2>&1 \
6844       && gcc_cv_target_ldbl128=yes
6845       ]])]
6846       [
6847           ;;
6848       esac
6849       ])
6850     ;;
6851 esac
6852 if test x$gcc_cv_target_ldbl128 = xyes; then
6853   AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
6854             [Define if TFmode long double should be the default])
6857 # Check if TFmode long double target should use the IBM extended double or IEEE
6858 # 128-bit floating point formats if long doubles are 128-bits long.  The long
6859 # double type can only be switched on powerpc64 bit Linux systems where VSX is
6860 # supported.  Other PowerPC systems do not build the IEEE 128-bit emulator in
6861 # libgcc.
6862 AC_ARG_WITH([long-double-format],
6863   [AS_HELP_STRING([--with-long-double-format={ieee,ibm}]
6864                   [Specify whether PowerPC long double uses IEEE or IBM format])],[
6865 case "$target:$with_long_double_format" in
6866   powerpc64le-*-linux*:ieee | powerpc64le-*-linux*:ibm)
6867     :
6868     ;;
6869   powerpc64-*-linux*:ieee | powerpc64-*-linux*:ibm)
6870     # IEEE 128-bit emulation is only built on 64-bit VSX Linux systems
6871     case "$with_cpu" in
6872       power7 | power8 | power9 | power1*)
6873         :
6874         ;;
6875       *)
6876         AC_MSG_ERROR([Configuration option --with-long-double-format is only \
6877 supported if the default cpu is power7 or newer])
6878         with_long_double_format=""
6879         ;;
6880       esac
6881       ;;
6882   powerpc64*-*-linux*:*)
6883     AC_MSG_ERROR([--with-long-double-format argument should be ibm or ieee])
6884     with_long_double_format=""
6885     ;;
6886   *)
6887     AC_MSG_ERROR([Configure option --with-long-double-format is only supported \
6888 on 64-bit PowerPC VSX Linux systems])
6889     with_long_double_format=""
6890     ;;
6891 esac],
6892   [])
6894 # Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP
6895 # values in the TCB.  Currently, only GLIBC 2.23 and later support this.
6896 gcc_cv_libc_provides_hwcap_in_tcb=no
6897 case "$target" in
6898   powerpc*-*-linux*)
6899     GCC_GLIBC_VERSION_GTE_IFELSE([2], [23], [gcc_cv_libc_provides_hwcap_in_tcb=yes], )
6900     ;;
6901 esac
6902 if test x$gcc_cv_libc_provides_hwcap_in_tcb = xyes; then
6903   AC_DEFINE(TARGET_LIBC_PROVIDES_HWCAP_IN_TCB, 1,
6904             [Define if your target C Library provides the AT_HWCAP value in the TCB])
6907 # Check if the target LIBC handles PT_GNU_STACK.
6908 gcc_cv_libc_gnustack=unknown
6909 case "$target" in
6910   mips*-*-linux-musl*)
6911     gcc_cv_libc_gnustack=yes
6912     ;;
6913   mips*-*-linux*)
6914     GCC_GLIBC_VERSION_GTE_IFELSE([2], [31], [gcc_cv_libc_gnustack=yes], )
6915     ;;
6916 esac
6917 if test x$gcc_cv_libc_gnustack = xyes; then
6918   AC_DEFINE(TARGET_LIBC_GNUSTACK, 1,
6919             [Define if your target C Library properly handles PT_GNU_STACK])
6922 AC_MSG_CHECKING(dl_iterate_phdr in target C library)
6923 gcc_cv_target_dl_iterate_phdr=unknown
6924 case "$target" in
6925   *-*-solaris2*)
6926     # <link.h> needs both a dl_iterate_phdr declaration and support for
6927     # compilation with largefile support.
6928     if grep dl_iterate_phdr $target_header_dir/link.h > /dev/null 2>&1 \
6929       && grep 'large file capable' $target_header_dir/link.h > /dev/null 2>&1; then
6930       gcc_cv_target_dl_iterate_phdr=yes
6931     else
6932       gcc_cv_target_dl_iterate_phdr=no
6933     fi
6934     ;;
6935   *-*-dragonfly* | *-*-freebsd*)
6936     if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
6937       gcc_cv_target_dl_iterate_phdr=yes
6938     else
6939       gcc_cv_target_dl_iterate_phdr=no
6940     fi
6941     ;;
6942   *-linux-musl*)
6943     gcc_cv_target_dl_iterate_phdr=yes
6944     ;;
6945 esac
6946 GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
6947 if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
6948    AC_DEFINE(TARGET_DL_ITERATE_PHDR, 1,
6949 [Define if your target C library provides the `dl_iterate_phdr' function.])
6951 AC_MSG_RESULT($gcc_cv_target_dl_iterate_phdr)
6953 # We no longer support different GC mechanisms.  Emit an error if
6954 # the user configures with --with-gc.
6955 AC_ARG_WITH(gc,
6956 [AS_HELP_STRING([--with-gc={page,zone}],
6957                 [this option is not supported anymore.  It used to choose
6958                  the garbage collection mechanism to use with the compiler])],
6959 [AC_MSG_ERROR([Configure option --with-gc is only supported up to GCC 4.7.x])],
6962 # Libraries to use on the host.  This will normally be set by the top
6963 # level Makefile.  Here we simply capture the value for our Makefile.
6964 if test -z "${HOST_LIBS+set}"; then
6965   HOST_LIBS=
6967 AC_SUBST(HOST_LIBS)
6969 # Use the system's zlib library.
6970 AM_ZLIB
6972 dnl Very limited version of automake's enable-maintainer-mode
6974 AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
6975   dnl maintainer-mode is disabled by default
6976   AC_ARG_ENABLE(maintainer-mode,
6977 [AS_HELP_STRING([--enable-maintainer-mode],
6978                 [enable make rules and dependencies not useful
6979                  (and sometimes confusing) to the casual installer])],
6980       maintainer_mode=$enableval,
6981       maintainer_mode=no)
6983 AC_MSG_RESULT($maintainer_mode)
6985 if test "$maintainer_mode" = "yes"; then
6986   MAINT=''
6987 else
6988   MAINT='#'
6990 AC_SUBST(MAINT)dnl
6992 dnl Variables for tags utilities; copied from automake 1.16.4+'s init.m4
6993 if test -z "$CTAGS"; then
6994   CTAGS=ctags
6996 AC_SUBST([CTAGS])
6997 if test -z "$ETAGS"; then
6998   ETAGS=etags
7000 AC_SUBST([ETAGS])
7001 if test -z "$CSCOPE"; then
7002   CSCOPE=cscope
7004 AC_SUBST([CSCOPE])
7006 dnl Whether to prevent multiple front-ends from linking at the same time
7008 AC_MSG_CHECKING([whether to avoid linking multiple front-ends at once])
7009   AC_ARG_ENABLE(link-mutex,
7010 [AS_HELP_STRING([--enable-link-mutex],
7011                 [avoid linking multiple front-ends at once to avoid thrashing
7012                  on the build machine])],
7013       do_link_mutex=$enableval,
7014       do_link_mutex=no)
7015 AC_MSG_RESULT($do_link_mutex)
7017 if test "$do_link_mutex" = "yes"; then
7018    DO_LINK_MUTEX=true
7019    AC_MSG_WARN([--enable-link-mutex is deprecated and will be removed in the next release, use --enable-link-serialization instead])
7020 else
7021    DO_LINK_MUTEX=false
7023 AC_SUBST(DO_LINK_MUTEX)
7025 dnl Whether to prevent multiple GCC front-ends from linking at the same time
7027 AC_MSG_CHECKING([whether to serialize linking of multiple front-ends])
7028   AC_ARG_ENABLE(link-serialization,
7029 [AS_HELP_STRING([--enable-link-serialization],
7030                 [avoid linking multiple GCC front-ends at once using make
7031                  dependencies to avoid thrashing on the build machine])],
7032       do_link_serialization=$enableval,
7033       do_link_serialization=no)
7034 AC_MSG_RESULT($do_link_serialization)
7036 case "$do_link_serialization" in
7037   yes)
7038     DO_LINK_SERIALIZATION=1;;
7039   [[1-9]] | [[1-9]][[0-9]] | [[1-9]][[0-9]][[0-9]])
7040     DO_LINK_SERIALIZATION=$do_link_serialization;;
7041   no)
7042     DO_LINK_SERIALIZATION=;;
7043   *)
7044     AC_MSG_ERROR(bad value ${do_link_serialization} given for --enable-link-serialization) ;;
7045 esac
7046 AC_SUBST(DO_LINK_SERIALIZATION)
7048 # --------------
7049 # Language hooks
7050 # --------------
7052 # Make empty files to contain the specs and options for each language.
7053 # Then add #include lines to for a compiler that has specs and/or options.
7055 subdirs=
7056 lang_opt_files=
7057 lang_specs_files=
7058 lang_tree_files=
7059 # These (without "all_") are set in each config-lang.in.
7060 # `language' must be a single word so is spelled singularly.
7061 all_languages=
7062 all_compilers=
7063 all_outputs='Makefile'
7064 # List of language configure and makefile fragments.
7065 all_lang_configurefrags=
7066 all_lang_makefrags=
7067 # Additional files for gengtype
7068 all_gtfiles="$target_gtfiles"
7070 # These are the languages that are set in --enable-languages,
7071 # and are available in the GCC tree.
7072 all_selected_languages=
7074 # Add the language fragments.
7075 # Languages are added via two mechanisms.  Some information must be
7076 # recorded in makefile variables, these are defined in config-lang.in.
7077 # We accumulate them and plug them into the main Makefile.
7078 # The other mechanism is a set of hooks for each of the main targets
7079 # like `clean', `install', etc.
7081 language_hooks="Make-hooks"
7083 for lang in ${srcdir}/*/config-lang.in
7085 changequote(,)dnl
7086         test "$lang" = "${srcdir}/*/config-lang.in" && continue
7088         lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^   ]*\).*$,\1,p' $lang`
7089         if test "x$lang_alias" = x
7090         then
7091               echo "$lang doesn't set \$language." 1>&2
7092               exit 1
7093         fi
7094         subdir="`echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`"
7095         subdirs="$subdirs $subdir"
7097         # $gcc_subdir is where the gcc integration files are to be found
7098         # for a language, both for internal compiler purposes (compiler
7099         # sources implementing front-end to GCC tree converters), and for
7100         # build infrastructure purposes (Make-lang.in, etc.)
7101         #
7102         # This will be <subdir> (relative to $srcdir) if a line like 
7103         # gcc_subdir="<subdir>" or gcc_subdir=<subdir>
7104         # is found in <langdir>/config-lang.in, and will remain <langdir>
7105         # otherwise.
7106         #
7107         # Except for the language alias (fetched above), the regular
7108         # "config-lang.in" contents are always retrieved from $gcc_subdir,
7109         # so a <langdir>/config-lang.in setting gcc_subdir typically sets
7110         # only this and the language alias.
7112         gcc_subdir=`sed -n -e 's,^gcc_subdir=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^gcc_subdir=\([^   ]*\).*$,\1,p' $lang`
7113         if [ "$gcc_subdir" = "" ]; then
7114            gcc_subdir="$subdir"
7115         fi
7117         case ",$enable_languages," in
7118         *,$lang_alias,*)
7119             all_selected_languages="$all_selected_languages $lang_alias"
7120             if test -f $srcdir/$gcc_subdir/lang-specs.h; then
7121                 lang_specs_files="$lang_specs_files $srcdir/$gcc_subdir/lang-specs.h"
7122             fi
7123             ;;
7124         esac
7125 changequote([,])dnl
7127         language=
7128         boot_language=
7129         compilers=
7130         outputs=
7131         gtfiles=
7132         subdir_requires=
7133         . ${srcdir}/$gcc_subdir/config-lang.in
7134         if test "x$language" = x
7135         then
7136                 echo "${srcdir}/$gcc_subdir/config-lang.in doesn't set \$language." 1>&2
7137                 exit 1
7138         fi
7140         ok=:
7141         case ",$enable_languages," in
7142                 *,$lang_alias,*) ;;
7143                 *)
7144                         for i in $subdir_requires; do
7145                                 test -f "${srcdir}/$i/config-lang.in" && continue
7146                                 ok=false
7147                                 break
7148                         done
7149                 ;;
7150         esac
7151         $ok || continue
7153         all_lang_configurefrags="$all_lang_configurefrags \$(srcdir)/$gcc_subdir/config-lang.in"
7154         if test "x$language" = xc && test -n "$all_lang_makefrags"; then
7155             # Put c/Make-lang.in fragment first to match serialization languages order.
7156             all_lang_makefrags="\$(srcdir)/$gcc_subdir/Make-lang.in $all_lang_makefrags"
7157         else
7158             all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$gcc_subdir/Make-lang.in"
7159         fi
7160         if test -f $srcdir/$gcc_subdir/lang.opt; then
7161             lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt"
7162             all_opt_files="$all_opt_files $srcdir/$gcc_subdir/lang.opt"
7163         fi
7164         if test -f $srcdir/$gcc_subdir/$subdir-tree.def; then
7165             lang_tree_files="$lang_tree_files $srcdir/$gcc_subdir/$subdir-tree.def"
7166         fi
7167         all_languages="$all_languages $language"
7168         all_compilers="$all_compilers $compilers"
7169         all_outputs="$all_outputs $outputs"
7170         all_gtfiles="$all_gtfiles [[$subdir]] $gtfiles"
7171         case ",$enable_languages," in
7172                 *,lto,*)
7173                     AC_DEFINE(ENABLE_LTO, 1, [Define to enable LTO support.])
7174                     enable_lto=yes
7175                     AC_SUBST(enable_lto)
7176                     ;;
7177                 *) ;;
7178         esac
7179 done
7181 check_languages=
7182 for language in $all_selected_languages
7184         check_languages="$check_languages check-$language"
7185 done
7187 selftest_languages=
7188 for language in $all_selected_languages
7190         selftest_languages="$selftest_languages selftest-$language"
7191 done
7193 # We link each language in with a set of hooks, reached indirectly via
7194 # lang.${target}.  Only do so for selected languages.
7196 rm -f Make-hooks
7197 touch Make-hooks
7198 target_list="all.cross start.encap rest.encap tags \
7199         install-common install-man install-info install-dvi install-pdf \
7200         install-html dvi pdf html uninstall info man srcextra srcman srcinfo \
7201         mostlyclean clean distclean maintainer-clean install-plugin"
7203 for t in $target_list
7205         x=
7206         for lang in $all_selected_languages
7207         do
7208                 x="$x $lang.$t"
7209         done
7210         echo "lang.$t: $x" >> Make-hooks
7211 done
7213 echo "ifeq (\$(DO_LINK_SERIALIZATION),)" >> Make-hooks
7214 echo "SERIAL_LIST =" >> Make-hooks
7215 echo else >> Make-hooks
7216 lang_cnt=0
7217 lang_list=
7218 prev=c
7219 serialization_languages=c
7220 for lang in $all_selected_languages
7222         test $lang = c && continue
7223         if test $lang = lto; then
7224                 serialization_languages="$serialization_languages lto1 lto2"
7225         else
7226                 serialization_languages="$serialization_languages $lang"
7227         fi
7228 done
7229 for lang in $serialization_languages
7231         test $lang = c && continue
7232         lang_cnt=`expr $lang_cnt + 1`
7233         lang_list=" $prev$lang_list"
7234         prev=${lang}
7235 done
7236 echo "SERIAL_LIST = \$(wordlist \$(DO_LINK_SERIALIZATION),$lang_cnt,$lang_list)" >> Make-hooks
7237 echo endif >> Make-hooks
7238 echo "SERIAL_COUNT = `expr $lang_cnt + 1`" >> Make-hooks
7239 echo "INDEX.c = 0" >> Make-hooks
7240 lang_idx=1
7241 for lang in $serialization_languages
7243         test $lang = c && continue
7244         echo "$lang.prev = \$(if \$(word $lang_cnt,\$(SERIAL_LIST)),\$(\$(word $lang_cnt,\$(SERIAL_LIST)).serial))" >> Make-hooks
7245         echo "INDEX.$lang = $lang_idx" >> Make-hooks
7246         lang_cnt=`expr $lang_cnt - 1`
7247         lang_idx=`expr $lang_idx + 1`
7248 done
7250 # --------
7251 # Option include files
7252 # --------
7254 ${AWK} -f $srcdir/opt-include.awk $all_opt_files > option-includes.mk
7255 option_includes="option-includes.mk"
7256 AC_SUBST_FILE(option_includes)
7258 # --------
7259 # UNSORTED
7260 # --------
7262 # Create .gdbinit.
7264 echo "dir ." > .gdbinit
7265 echo "dir ${srcdir}" >> .gdbinit
7266 if test x$gdb_needs_out_file_path = xyes
7267 then
7268         echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
7270 if test "x$subdirs" != x; then
7271         for s in $subdirs
7272         do
7273                 echo "dir ${srcdir}/$s" >> .gdbinit
7274         done
7276 echo "source ${srcdir}/gdbinit.in" >> .gdbinit
7277 echo "python import sys; sys.path.append('${srcdir}'); import gdbhooks" >> .gdbinit
7279 # Put a breakpoint on __asan_report_error to help with debugging buffer
7280 # overflow.
7281 case "$CFLAGS" in
7282 *-fsanitize=address*)
7283   echo "source ${srcdir}/gdbasan.in" >> .gdbinit
7284   ;;
7285 esac
7287 gcc_tooldir='$(libsubdir)/$(libsubdir_to_prefix)$(target_noncanonical)'
7288 AC_SUBST(gcc_tooldir)
7289 AC_SUBST(dollar)
7291 # Find a directory in which to install a shared libgcc.
7293 AC_ARG_ENABLE(version-specific-runtime-libs,
7294 [AS_HELP_STRING([--enable-version-specific-runtime-libs],
7295                 [specify that runtime libraries should be
7296                  installed in a compiler-specific directory])])
7298 # Substitute configuration variables
7299 AC_SUBST(subdirs)
7300 AC_SUBST(srcdir)
7301 AC_SUBST(all_compilers)
7302 AC_SUBST(all_gtfiles)
7303 AC_SUBST(all_lang_configurefrags)
7304 AC_SUBST(all_lang_makefrags)
7305 AC_SUBST(all_languages)
7306 AC_SUBST(all_selected_languages)
7307 AC_SUBST(build_exeext)
7308 AC_SUBST(build_install_headers_dir)
7309 AC_SUBST(build_xm_file_list)
7310 AC_SUBST(build_xm_include_list)
7311 AC_SUBST(build_xm_defines)
7312 AC_SUBST(build_file_translate)
7313 AC_SUBST(check_languages)
7314 AC_SUBST(selftest_languages)
7315 AC_SUBST(cpp_install_dir)
7316 AC_SUBST(xmake_file)
7317 AC_SUBST(tmake_file)
7318 AC_SUBST(TM_ENDIAN_CONFIG)
7319 AC_SUBST(TM_MULTILIB_CONFIG)
7320 AC_SUBST(TM_MULTILIB_EXCEPTIONS_CONFIG)
7321 AC_SUBST(extra_gcc_objs)
7322 AC_SUBST(user_headers_inc_next_pre)
7323 AC_SUBST(user_headers_inc_next_post)
7324 AC_SUBST(extra_headers_list)
7325 AC_SUBST(extra_objs)
7326 AC_SUBST(extra_programs)
7327 AC_SUBST(float_h_file)
7328 AC_SUBST(gcc_config_arguments)
7329 AC_SUBST(gcc_gxx_include_dir)
7330 AC_SUBST(gcc_gxx_include_dir_add_sysroot)
7331 AC_SUBST(gcc_gxx_libcxx_include_dir)
7332 AC_SUBST(gcc_gxx_libcxx_include_dir_add_sysroot)
7333 AC_SUBST(host_exeext)
7334 AC_SUBST(host_xm_file_list)
7335 AC_SUBST(host_xm_include_list)
7336 AC_SUBST(host_xm_defines)
7337 AC_SUBST(out_host_hook_obj)
7338 AC_SUBST(install)
7339 AC_SUBST(lang_opt_files)
7340 AC_SUBST(lang_specs_files)
7341 AC_SUBST(lang_tree_files)
7342 AC_SUBST(local_prefix)
7343 AC_SUBST(md_file)
7344 AC_SUBST(objc_boehm_gc)
7345 AC_SUBST(out_file)
7346 AC_SUBST(out_object_file)
7347 AC_SUBST(common_out_file)
7348 AC_SUBST(common_out_object_file)
7349 AC_SUBST(tm_file_list)
7350 AC_SUBST(tm_include_list)
7351 AC_SUBST(tm_defines)
7352 AC_SUBST(tm_p_file_list)
7353 AC_SUBST(tm_p_include_list)
7354 AC_SUBST(tm_d_file_list)
7355 AC_SUBST(tm_d_include_list)
7356 AC_SUBST(xm_file_list)
7357 AC_SUBST(xm_include_list)
7358 AC_SUBST(xm_defines)
7359 AC_SUBST(use_gcc_stdint)
7360 AC_SUBST(c_target_objs)
7361 AC_SUBST(cxx_target_objs)
7362 AC_SUBST(fortran_target_objs)
7363 AC_SUBST(d_target_objs)
7364 AC_SUBST(target_cpu_default)
7366 AC_SUBST_FILE(language_hooks)
7368 # Echo link setup.
7369 if test x${build} = x${host} ; then
7370   if test x${host} = x${target} ; then
7371     echo "Links are now set up to build a native compiler for ${target}." 1>&2
7372   else
7373     echo "Links are now set up to build a cross-compiler" 1>&2
7374     echo " from ${host} to ${target}." 1>&2
7375   fi
7376 else
7377   if test x${host} = x${target} ; then
7378     echo "Links are now set up to build (on ${build}) a native compiler" 1>&2
7379     echo " for ${target}." 1>&2
7380   else
7381     echo "Links are now set up to build (on ${build}) a cross-compiler" 1>&2
7382     echo " from ${host} to ${target}." 1>&2
7383   fi
7386 AC_ARG_VAR(GMPLIBS,[How to link GMP])
7387 AC_ARG_VAR(GMPINC,[How to find GMP include files])
7389 AC_ARG_VAR(ISLLIBS,[How to link isl])
7390 AC_ARG_VAR(ISLINC,[How to find isl include files])
7391 if test "x${ISLLIBS}" != "x" ; then 
7392    AC_DEFINE(HAVE_isl, 1, [Define if isl is in use.])
7395 GCC_ENABLE_PLUGINS
7396 AC_SUBST(pluginlibs)
7397 AC_SUBST(enable_plugin)
7398 if test x"$enable_plugin" = x"yes"; then
7399   AC_DEFINE(ENABLE_PLUGIN, 1, [Define to enable plugin support.])
7403 # Enable --enable-host-shared
7404 AC_ARG_ENABLE(host-shared,
7405 [AS_HELP_STRING([--enable-host-shared],
7406                 [build host code as shared libraries])],
7407 [PICFLAG=-fPIC], [PICFLAG=])
7408 AC_SUBST(enable_host_shared)
7409 AC_SUBST(PICFLAG)
7412 AC_ARG_ENABLE(libquadmath-support,
7413 [AS_HELP_STRING([--disable-libquadmath-support],
7414   [disable libquadmath support for Fortran])],
7415 ENABLE_LIBQUADMATH_SUPPORT=$enableval,
7416 ENABLE_LIBQUADMATH_SUPPORT=yes)
7417 if test "${ENABLE_LIBQUADMATH_SUPPORT}" != "no" ; then
7418   AC_DEFINE(ENABLE_LIBQUADMATH_SUPPORT, 1,
7419             [Define to 1 to enable libquadmath support])
7423 # Specify what hash style to use by default.
7424 AC_ARG_WITH([linker-hash-style],
7425 [AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
7426                 [specify the linker hash style])],
7427 [case x"$withval" in
7428    xsysv)
7429      LINKER_HASH_STYLE=sysv
7430      ;;
7431    xgnu)
7432      LINKER_HASH_STYLE=gnu
7433      ;;
7434    xboth)
7435      LINKER_HASH_STYLE=both
7436      ;;
7437    *)
7438      AC_MSG_ERROR([$withval is an invalid option to --with-linker-hash-style])
7439      ;;
7440  esac],
7441 [LINKER_HASH_STYLE=''])
7442 if test x"${LINKER_HASH_STYLE}" != x; then
7443   AC_DEFINE_UNQUOTED(LINKER_HASH_STYLE, "$LINKER_HASH_STYLE",
7444                                          [The linker hash style])
7447 # Specify what should be the default of -fdiagnostics-color option.
7448 AC_ARG_WITH([diagnostics-color],
7449 [AC_HELP_STRING([--with-diagnostics-color={never,auto,auto-if-env,always}],
7450                 [specify the default of -fdiagnostics-color option
7451                  auto-if-env stands for -fdiagnostics-color=auto if
7452                  GCC_COLOR environment variable is present and
7453                  -fdiagnostics-color=never otherwise])],
7454 [case x"$withval" in
7455    xnever)
7456      DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_NO
7457      ;;
7458    xauto)
7459      DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO
7460      ;;
7461    xauto-if-env)
7462      DIAGNOSTICS_COLOR_DEFAULT=-1
7463      ;;
7464    xalways)
7465      DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_YES
7466      ;;
7467    *)
7468      AC_MSG_ERROR([$withval is an invalid option to --with-diagnostics-color])
7469      ;;
7470  esac],
7471 [DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO])
7472 AC_DEFINE_UNQUOTED(DIAGNOSTICS_COLOR_DEFAULT, $DIAGNOSTICS_COLOR_DEFAULT,
7473                    [The default for -fdiagnostics-color option])
7475 # Specify what should be the default of -fdiagnostics-urls option.
7476 AC_ARG_WITH([diagnostics-urls],
7477 [AC_HELP_STRING([--with-diagnostics-urls={never,auto,auto-if-env,always}],
7478                 [specify the default of -fdiagnostics-urls option
7479                  auto-if-env stands for -fdiagnostics-urls=auto if
7480                  GCC_URLS or TERM_URLS environment variable is present and
7481                  -fdiagnostics-urls=never otherwise])],
7482 [case x"$withval" in
7483    xnever)
7484      DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_NO
7485      ;;
7486    xauto)
7487      DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_AUTO
7488      ;;
7489    xauto-if-env)
7490      DIAGNOSTICS_URLS_DEFAULT=-1
7491      ;;
7492    xalways)
7493      DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_YES
7494      ;;
7495    *)
7496      AC_MSG_ERROR([$withval is an invalid option to --with-diagnostics-urls])
7497      ;;
7498  esac],
7499 [DIAGNOSTICS_URLS_DEFAULT=DIAGNOSTICS_URL_AUTO])
7500 AC_DEFINE_UNQUOTED(DIAGNOSTICS_URLS_DEFAULT, $DIAGNOSTICS_URLS_DEFAULT,
7501                    [The default for -fdiagnostics-urls option])
7503 # Generate gcc-driver-name.h containing GCC_DRIVER_NAME for the benefit
7504 # of jit/jit-playback.cc.
7505 gcc_driver_version=`eval "${get_gcc_base_ver} $srcdir/BASE-VER"`
7506 echo "gcc_driver_version: ${gcc_driver_version}"
7507 cat > gcc-driver-name.h <<EOF
7508 #define GCC_DRIVER_NAME "${target_noncanonical}-gcc-${gcc_driver_version}${exeext}"
7511 # Check whether --enable-default-pie was given.
7512 AC_ARG_ENABLE(default-pie,
7513 [AS_HELP_STRING([--enable-default-pie],
7514   [enable Position Independent Executable as default])],
7515 enable_default_pie=$enableval,
7516 enable_default_pie=no)
7517 if test x$enable_default_pie = xyes ; then
7518   AC_DEFINE(ENABLE_DEFAULT_PIE, 1,
7519       [Define if your target supports default PIE and it is enabled.])
7521 AC_SUBST([enable_default_pie])
7523 # Check if -fno-PIE works.
7524 AC_CACHE_CHECK([for -fno-PIE option],
7525   [gcc_cv_c_no_fpie],
7526   [saved_CXXFLAGS="$CXXFLAGS"
7527    CXXFLAGS="$CXXFLAGS -fno-PIE"
7528    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
7529      [gcc_cv_c_no_fpie=yes],
7530      [gcc_cv_c_no_fpie=no])
7531    CXXFLAGS="$saved_CXXFLAGS"])
7532 if test "$gcc_cv_c_no_fpie" = "yes"; then
7533   NO_PIE_CFLAGS="-fno-PIE"
7535 AC_SUBST([NO_PIE_CFLAGS])
7537 # Check if -no-pie works.
7538 AC_CACHE_CHECK([for -no-pie option],
7539   [gcc_cv_no_pie],
7540   [saved_LDFLAGS="$LDFLAGS"
7541    LDFLAGS="$LDFLAGS -no-pie"
7542    AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
7543      [gcc_cv_no_pie=yes],
7544      [gcc_cv_no_pie=no])
7545    LDFLAGS="$saved_LDFLAGS"])
7546 if test "$gcc_cv_no_pie" = "yes"; then
7547   NO_PIE_FLAG="-no-pie"
7549 AC_SUBST([NO_PIE_FLAG])
7551 # Enable Intel CET on Intel CET enabled host if jit is enabled.
7552 GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
7553 case x$enable_languages in
7554 *jit*)
7555   ;;
7557   CET_HOST_FLAGS=
7558   ;;
7559 esac
7560 AC_SUBST(CET_HOST_FLAGS)
7562 # Check linker supports '-z bndplt'
7563 ld_bndplt_support=no
7564 AC_MSG_CHECKING(linker -z bndplt option)
7565 if test x"$ld_is_gold" = xno; then
7566   if test $in_tree_ld = yes ; then
7567     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
7568       ld_bndplt_support=yes
7569     fi
7570   elif test x$gcc_cv_ld != x; then
7571     # Check if linker supports -a bndplt option
7572     if $gcc_cv_ld --help 2>&1 | grep -- '-z bndplt' > /dev/null; then
7573       ld_bndplt_support=yes
7574     fi
7575   fi
7577 if test x"$ld_bndplt_support" = xyes; then
7578   AC_DEFINE(HAVE_LD_BNDPLT_SUPPORT, 1,
7579         [Define if your linker supports -z bndplt])
7581 AC_MSG_RESULT($ld_bndplt_support)
7583 # Check linker supports '--push-state'/'--pop-state'
7584 ld_pushpopstate_support=no
7585 AC_MSG_CHECKING(linker --push-state/--pop-state options)
7586 if test x"$ld_is_gold" = xno; then
7587   if test $in_tree_ld = yes ; then
7588     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
7589       ld_pushpopstate_support=yes
7590     fi
7591   elif test x$gcc_cv_ld != x; then
7592     # Check if linker supports --push-state/--pop-state options
7593     if $gcc_cv_ld --help 2>&1 | grep -- '--push-state' > /dev/null; then
7594       ld_pushpopstate_support=yes
7595     fi
7596   fi
7598 if test x"$ld_pushpopstate_support" = xyes; then
7599   AC_DEFINE(HAVE_LD_PUSHPOPSTATE_SUPPORT, 1,
7600         [Define if your linker supports --push-state/--pop-state])
7602 AC_MSG_RESULT($ld_pushpopstate_support)
7604 # On s390, float_t has historically been statically defined as double for no
7605 # good reason. To comply with the C standard in the light of this definition,
7606 # gcc has evaluated float expressions in double precision when in
7607 # standards-compatible mode or when given -fexcess-precision=standard. To enable
7608 # a smooth transition towards the new model used by most architectures, where
7609 # gcc describes its behavior via the macro __FLT_EVAL_METHOD__ and glibc derives
7610 # float_t from that, this behavior can be configured with
7611 # --enable-s390-excess-float-precision. When given as enabled, that flag selects
7612 # the old model. When omitted, native builds and cross compiles that have target
7613 # libc headers will detect whether libc clamps float_t to double and in that
7614 # case maintain the old model. Otherwise, they will default to the new model.
7615 AC_ARG_ENABLE(s390-excess-float-precision,
7616   [AS_HELP_STRING([--enable-s390-excess-float-precision],
7617                   [on s390 targets, evaluate float with double precision
7618                    when in standards-conforming mode])],
7619   [],[enable_s390_excess_float_precision=auto])
7621 case $target in
7622   s390*-linux*)
7623   if test x"$enable_s390_excess_float_precision" = xauto; then
7624     # Can we autodetect the behavior of the target libc?
7625     if test "$target" = "$host" -a "$host" = "$build"; then
7626       enable_s390_excess_float_precision=autodetect
7627     elif test "x$with_headers" != xno; then
7628       # cross build. are target headers available?
7629       # carefully coerce the build-system compiler to use target headers
7630       saved_CXXFLAGS="$CXXFLAGS"
7631       fixed_XGCC_FLAGS_FOR_TARGET=`echo "$XGCC_FLAGS_FOR_TARGET" | sed 's/-B/-idirafter/g'`
7632       CROSS_TEST_CXXFLAGS="-nostdinc $fixed_XGCC_FLAGS_FOR_TARGET"
7633       CXXFLAGS="$CROSS_TEST_CXXFLAGS"
7634       AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7635 #include <math.h>
7636 ]])], [enable_s390_excess_float_precision=autodetect], [])
7637       CXXFLAGS="$saved_CXXFLAGS"
7638     fi
7640     if test x"$enable_s390_excess_float_precision" = xautodetect; then
7641       saved_CXXFLAGS="$CXXFLAGS"
7642       if ! test "$target" = "$host" -a "$host" = "$build"; then
7643         CXXFLAGS="$CROSS_TEST_CXXFLAGS"
7644         unset CROSS_TEST_CXXFLAGS
7645       fi
7646       AC_CACHE_CHECK([for glibc clamping float_t to double],
7647         gcc_cv_float_t_clamped_to_double, [
7648         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7649 #define __FLT_EVAL_METHOD__ 0
7650 #include <math.h>
7651 int dummy[sizeof(float_t) == sizeof(double) ? 1 : -1];
7652 ]])],
7653           [gcc_cv_float_t_clamped_to_double=yes],
7654           [gcc_cv_float_t_clamped_to_double=no])])
7655       CXXFLAGS="$saved_CXXFLAGS"
7656       enable_s390_excess_float_precision="$gcc_cv_float_t_clamped_to_double"
7657     else
7658       # no way to detect behavior of target libc, default to new model
7659       enable_s390_excess_float_precision=no
7660     fi
7661   fi
7663   GCC_TARGET_TEMPLATE(ENABLE_S390_EXCESS_FLOAT_PRECISION)
7664   if test x"$enable_s390_excess_float_precision" = xyes; then
7665     AC_DEFINE(ENABLE_S390_EXCESS_FLOAT_PRECISION, 1,
7666 [Define to enable evaluating float expressions with double precision in
7667 standards-compatible mode on s390 targets.])
7668   fi
7669   ;;
7670 esac
7672 # Configure the subdirectories
7673 # AC_CONFIG_SUBDIRS($subdirs)
7675 # Create the Makefile
7676 # and configure language subdirectories
7677 AC_CONFIG_FILES($all_outputs)
7679 AC_CONFIG_COMMANDS([default],
7681 case ${CONFIG_HEADERS} in
7682   *auto-host.h:config.in*)
7683   echo > cstamp-h ;;
7684 esac
7685 # Make sure all the subdirs exist.
7686 for d in $subdirs doc build common c-family
7688     test -d $d || mkdir $d
7689 done
7690 ], 
7691 [subdirs='$subdirs'])
7692 AC_OUTPUT