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