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