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