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