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