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