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