]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/configure.ac
[Ada] Define the -fdump-scos option in lang.opt
[thirdparty/gcc.git] / gcc / configure.ac
CommitLineData
2cd18f76 1# configure.ac for GCC
01dc27ef 2# Process this file with autoconf to generate a configuration script.
3
fbd26352 4# Copyright (C) 1997-2019 Free Software Foundation, Inc.
01dc27ef 5
f12b58b3 6#This file is part of GCC.
01dc27ef 7
f12b58b3 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
8c4c00c1 10#Software Foundation; either version 3, or (at your option) any later
f12b58b3 11#version.
01dc27ef 12
f12b58b3 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.
01dc27ef 17
18#You should have received a copy of the GNU General Public License
8c4c00c1 19#along with GCC; see the file COPYING3. If not see
20#<http://www.gnu.org/licenses/>.
01dc27ef 21
7349ace9 22# --------------------------------
23# Initialization and sanity checks
24# --------------------------------
25
1211e6bc 26AC_INIT
27AC_CONFIG_SRCDIR(tree.c)
764fc592 28AC_CONFIG_HEADER(auto-host.h:config.in)
805483cf 29
f32e3360 30gcc_version=`cat $srcdir/BASE-VER`
31
7349ace9 32# Determine the host, build, and target systems
1211e6bc 33AC_CANONICAL_BUILD
34AC_CANONICAL_HOST
35AC_CANONICAL_TARGET
7349ace9 36
5788a324 37# Determine the noncanonical host name, for Ada.
38ACX_NONCANONICAL_HOST
39
d58156a1 40# Determine the noncanonical target name, for directory use.
dabbc00f 41ACX_NONCANONICAL_TARGET
d58156a1 42
a3d93be3 43# Used for constructing correct paths for offload compilers.
44real_target_noncanonical=${target_noncanonical}
45accel_dir_suffix=
46
4f442f07 47# Determine the target- and build-specific subdirectories
48GCC_TOPLEV_SUBDIRS
49
7349ace9 50# Set program_transform_name
51AC_ARG_PROGRAM
01dc27ef 52
279894f2 53# Check for bogus environment variables.
54# Test if LIBRARY_PATH contains the notation for the current directory
55# since this would lead to problems installing/building glibc.
56# LIBRARY_PATH contains the current directory if one of the following
57# is true:
58# - one of the terminals (":" and ";") is the first or last sign
59# - two terminals occur directly after each other
60# - the path contains an element with a dot in it
61AC_MSG_CHECKING(LIBRARY_PATH variable)
62changequote(,)dnl
63case ${LIBRARY_PATH} in
64 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
65 library_path_setting="contains current directory"
66 ;;
67 *)
68 library_path_setting="ok"
69 ;;
70esac
71changequote([,])dnl
72AC_MSG_RESULT($library_path_setting)
73if test "$library_path_setting" != "ok"; then
74AC_MSG_ERROR([
75*** LIBRARY_PATH shouldn't contain the current directory when
edf2430c 76*** building gcc. Please change the environment variable
279894f2 77*** and run configure again.])
78fi
79
80# Test if GCC_EXEC_PREFIX contains the notation for the current directory
81# since this would lead to problems installing/building glibc.
82# GCC_EXEC_PREFIX contains the current directory if one of the following
83# is true:
84# - one of the terminals (":" and ";") is the first or last sign
85# - two terminals occur directly after each other
86# - the path contains an element with a dot in it
87AC_MSG_CHECKING(GCC_EXEC_PREFIX variable)
88changequote(,)dnl
89case ${GCC_EXEC_PREFIX} in
90 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
91 gcc_exec_prefix_setting="contains current directory"
92 ;;
93 *)
94 gcc_exec_prefix_setting="ok"
95 ;;
96esac
97changequote([,])dnl
98AC_MSG_RESULT($gcc_exec_prefix_setting)
99if test "$gcc_exec_prefix_setting" != "ok"; then
100AC_MSG_ERROR([
101*** GCC_EXEC_PREFIX shouldn't contain the current directory when
edf2430c 102*** building gcc. Please change the environment variable
279894f2 103*** and run configure again.])
104fi
105
7349ace9 106# -----------
107# Directories
108# -----------
109
110# Specify the local prefix
111local_prefix=
112AC_ARG_WITH(local-prefix,
bc6c87c1 113[AS_HELP_STRING([--with-local-prefix=DIR],
114 [specifies directory to put local include])],
7349ace9 115[case "${withval}" in
116yes) AC_MSG_ERROR(bad value ${withval} given for local include directory prefix) ;;
117no) ;;
118*) local_prefix=$with_local_prefix ;;
119esac])
120
121# Default local prefix if it is empty
122if test x$local_prefix = x; then
123 local_prefix=/usr/local
124fi
125
aa327038 126AC_ARG_WITH([native-system-header-dir],
127 [ --with-native-system-header-dir=dir
128 use dir as the directory to look for standard
129 system header files in. Defaults to /usr/include.],
130[
131 case ${with_native_system_header_dir} in
132 yes|no) AC_MSG_ERROR([bad value ${withval} given for --with-native-system-header-dir]) ;;
133 /* | [[A-Za-z]]:[[\\/]]*) ;;
134 *) AC_MSG_ERROR([--with-native-system-header-dir argument ${withval} must be an absolute directory]) ;;
135 esac
136 configured_native_system_header_dir="${withval}"
137], [configured_native_system_header_dir=])
138
139AC_ARG_WITH(build-sysroot,
140 [AS_HELP_STRING([--with-build-sysroot=sysroot],
141 [use sysroot as the system root during the build])],
142 [if test x"$withval" != x ; then
143 SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
144 fi],
145 [SYSROOT_CFLAGS_FOR_TARGET=])
146AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
147
148if test "x$prefix" = xNONE; then
149 test_prefix=/usr/local
150else
151 test_prefix=$prefix
152fi
153if test "x$exec_prefix" = xNONE; then
154 test_exec_prefix=$test_prefix
155else
156 test_exec_prefix=$exec_prefix
157fi
158
159AC_ARG_WITH(sysroot,
160[AS_HELP_STRING([[--with-sysroot[=DIR]]],
161 [search for usr/lib, usr/include, et al, within DIR])],
162[
163 case ${with_sysroot} in
164 /) ;;
165 */) with_sysroot=`echo $with_sysroot | sed 's,/$,,'` ;;
166 esac
167 case ${with_sysroot} in
168 yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
169 *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
170 esac
171
172 TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
173 CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
174
175 case ${TARGET_SYSTEM_ROOT} in
176 "${test_prefix}"|"${test_prefix}/"*|\
177 "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
178 '${prefix}'|'${prefix}/'*|\
179 '${exec_prefix}'|'${exec_prefix}/'*)
180 t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
181 TARGET_SYSTEM_ROOT_DEFINE="$t"
182 ;;
183 esac
184], [
185 TARGET_SYSTEM_ROOT=
186 TARGET_SYSTEM_ROOT_DEFINE=
187 CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
188])
189AC_SUBST(TARGET_SYSTEM_ROOT)
190AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
191AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
192
7349ace9 193# Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
194# passed in by the toplevel make and thus we'd get different behavior
195# depending on where we built the sources.
196gcc_gxx_include_dir=
197# Specify the g++ header file directory
198AC_ARG_WITH(gxx-include-dir,
bc6c87c1 199[AS_HELP_STRING([--with-gxx-include-dir=DIR],
200 [specifies directory to put g++ header files])],
7349ace9 201[case "${withval}" in
202yes) AC_MSG_ERROR(bad value ${withval} given for g++ include directory) ;;
203no) ;;
204*) gcc_gxx_include_dir=$with_gxx_include_dir ;;
205esac])
206
1244c182 207# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
208# the former in the latter and, upon success, compute gcc_gxx_include_dir as
209# relative to the sysroot.
210gcc_gxx_include_dir_add_sysroot=0
211
0bf9691e 212# This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
7349ace9 213if test x${gcc_gxx_include_dir} = x; then
214 if test x${enable_version_specific_runtime_libs} = xyes; then
215 gcc_gxx_include_dir='${libsubdir}/include/c++'
216 else
0bf9691e 217 libstdcxx_incdir='include/c++/$(version)'
218 if test x$host != x$target; then
219 libstdcxx_incdir="$target_alias/$libstdcxx_incdir"
220 fi
fc5f9e0c 221 gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
7349ace9 222 fi
1244c182 223elif test "${with_sysroot+set}" = set; then
36ddd5fe 224 gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
225 if test "${gcc_gxx_without_sysroot}"; then
1244c182 226 gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
36ddd5fe 227 gcc_gxx_include_dir_add_sysroot=1
228 fi
229fi
230
7349ace9 231AC_ARG_WITH(cpp_install_dir,
bc6c87c1 232[AC_HELP_STRING([--with-cpp-install-dir=DIR],
233 [install the user visible C preprocessor in DIR
234 (relative to PREFIX) as well as PREFIX/bin])],
7349ace9 235[if test x$withval = xyes; then
236 AC_MSG_ERROR([option --with-cpp-install-dir requires an argument])
237elif test x$withval != xno; then
238 cpp_install_dir=$withval
239fi])
240
37c96b91 241# We would like to our source tree to be readonly. However when releases or
242# pre-releases are generated, the flex/bison generated files as well as the
243# various formats of manuals need to be included along with the rest of the
244# sources. Therefore we have --enable-generated-files-in-srcdir to do
245# just that.
246
a6b4c5a9 247AC_MSG_CHECKING([whether to place generated files in the source directory])
248 dnl generated-files-in-srcdir is disabled by default
249 AC_ARG_ENABLE(generated-files-in-srcdir,
bc6c87c1 250 [AS_HELP_STRING([--enable-generated-files-in-srcdir],
251 [put copies of generated files in source dir
252 intended for creating source tarballs for users
253 without texinfo bison or flex])],
a6b4c5a9 254 generated_files_in_srcdir=$enableval,
255 generated_files_in_srcdir=no)
256
257AC_MSG_RESULT($generated_files_in_srcdir)
258
259if test "$generated_files_in_srcdir" = "yes"; then
260 GENINSRC=''
a6b4c5a9 261else
262 GENINSRC='#'
a6b4c5a9 263fi
264AC_SUBST(GENINSRC)
37c96b91 265
7349ace9 266# -------------------
267# Find default linker
268# -------------------
01dc27ef 269
270# With GNU ld
271AC_ARG_WITH(gnu-ld,
bc6c87c1 272[AS_HELP_STRING([--with-gnu-ld], [arrange to work with GNU ld])],
c4f70bb2 273gnu_ld_flag="$with_gnu_ld",
274gnu_ld_flag=no)
01dc27ef 275
6afab66e 276case $target in
277 *darwin*) ld64_flag=yes;; # Darwin can only use a ld64-compatible linker.
278 *) ld64_flag=no;;
279esac
280
f07251bc 281# With pre-defined ld
282AC_ARG_WITH(ld,
bc6c87c1 283[AS_HELP_STRING([--with-ld], [arrange to use the specified ld (full pathname)])],
f8b7dbdb 284DEFAULT_LINKER="$with_ld")
285if test x"${DEFAULT_LINKER+set}" = x"set"; then
286 if test ! -x "$DEFAULT_LINKER"; then
b452b31a 287 AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
16e09e89 288 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
f07251bc 289 gnu_ld_flag=yes
6afab66e 290 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then
291 ld64_flag=yes
f07251bc 292 fi
42f1312d 293 AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
294 [Define to enable the use of a default linker.])
f07251bc 295fi
296
7349ace9 297AC_MSG_CHECKING([whether a default linker was specified])
298if test x"${DEFAULT_LINKER+set}" = x"set"; then
299 if test x"$gnu_ld_flag" = x"no"; then
300 AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
301 else
302 AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
303 fi
304else
305 AC_MSG_RESULT(no)
306fi
307
9c948bc2 308# With demangler in GNU ld
309AC_ARG_WITH(demangler-in-ld,
bc6c87c1 310[AS_HELP_STRING([--with-demangler-in-ld], [try to use demangler in GNU ld])],
9c948bc2 311demangler_in_ld="$with_demangler_in_ld",
73caa9f3 312demangler_in_ld=yes)
9c948bc2 313
7349ace9 314# ----------------------
315# Find default assembler
316# ----------------------
317
01dc27ef 318# With GNU as
319AC_ARG_WITH(gnu-as,
bc6c87c1 320[AS_HELP_STRING([--with-gnu-as], [arrange to work with GNU as])],
c4f70bb2 321gas_flag="$with_gnu_as",
322gas_flag=no)
01dc27ef 323
f07251bc 324AC_ARG_WITH(as,
bc6c87c1 325[AS_HELP_STRING([--with-as], [arrange to use the specified as (full pathname)])],
f8b7dbdb 326DEFAULT_ASSEMBLER="$with_as")
327if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
328 if test ! -x "$DEFAULT_ASSEMBLER"; then
b452b31a 329 AC_MSG_ERROR([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
16e09e89 330 elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
f07251bc 331 gas_flag=yes
332 fi
42f1312d 333 AC_DEFINE_UNQUOTED(DEFAULT_ASSEMBLER,"$DEFAULT_ASSEMBLER",
334 [Define to enable the use of a default assembler.])
f8b7dbdb 335fi
f07251bc 336
7349ace9 337AC_MSG_CHECKING([whether a default assembler was specified])
338if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
339 if test x"$gas_flag" = x"no"; then
340 AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
6e014aa3 341 else
7349ace9 342 AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
6e014aa3 343 fi
7349ace9 344else
345 AC_MSG_RESULT(no)
6e014aa3 346fi
01dc27ef 347
7349ace9 348# ---------------
349# Find C compiler
350# ---------------
1c6c0617 351
f7a804c7 352# If a non-executable a.out is present (e.g. created by GNU as above even if
353# invoked with -v only), the IRIX 6 native ld just overwrites the existing
354# file, even when creating an executable, so an execution test fails.
355# Remove possible default executable files to avoid this.
356#
357# FIXME: This really belongs into AC_PROG_CC and can be removed once
358# Autoconf includes it.
359rm -f a.out a.exe b.out
360
0fa54ff1 361# Find the native compiler
362AC_PROG_CC
7ab76cec 363AC_PROG_CXX
7a43a9bc 364ACX_PROG_GNAT([-I"$srcdir"/ada/libgnat])
f1984c57 365
c20b03af 366# Do configure tests with the C++ compiler, since that's what we build with.
367AC_LANG(C++)
368
c81c13fb 369# Remove the -O2: for historical reasons, unless bootstrapping we prefer
370# optimizations to be activated explicitly by the toplevel.
371case "$CC" in
372 */prev-gcc/xgcc*) ;;
9dbf9573 373 *) CFLAGS=`echo "$CFLAGS " | sed -e "s/-Ofast[[ ]]//" -e "s/-O[[gs]][[ ]]//" -e "s/-O[[0-9]]*[[ ]]//" `
374 CXXFLAGS=`echo "$CXXFLAGS " | sed -e "s/-Ofast[[ ]]//" -e "s/-O[[gs]][[ ]]//" -e "s/-O[[0-9]]*[[ ]]//" ` ;;
c81c13fb 375esac
376AC_SUBST(CFLAGS)
56d581e9 377AC_SUBST(CXXFLAGS)
c81c13fb 378
d89b8910 379# Determine PICFLAG for target gnatlib.
380GCC_PICFLAG_FOR_TARGET
381AC_SUBST(PICFLAG_FOR_TARGET)
382
966842d4 383# -------------------------
384# Check C compiler features
385# -------------------------
386
b9146087 387AC_USE_SYSTEM_EXTENSIONS
7349ace9 388AC_PROG_CPP
389AC_C_INLINE
7349ace9 390
075f1161 391AC_SYS_LARGEFILE
392
7349ace9 393# sizeof(char) is 1 by definition.
b085c511 394AC_CHECK_SIZEOF(void *)
395AC_CHECK_SIZEOF(short)
396AC_CHECK_SIZEOF(int)
397AC_CHECK_SIZEOF(long)
cd29f3a4 398AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
82e964b0 399GCC_STDINT_TYPES
1c8ad86a 400if test x"$ac_cv_c_uint64_t" = x"no" -o x"$ac_cv_c_int64_t" = x"no"; then
401 AC_MSG_ERROR([uint64_t or int64_t not found])
402fi
7349ace9 403
d515e136 404# check what underlying integer type int64_t uses
d515e136 405AC_CACHE_CHECK(for int64_t underlying type, ac_cv_int64_t_type, [
406AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
407#ifdef HAVE_STDINT_H
408#include <stdint.h>
409#endif
410template <typename T> struct X { };
411template <>
412struct X<long> { typedef long t; };
413]], [[X<int64_t>::t x;]])],[ac_cv_int64_t_type=long],[ac_cv_int64_t_type="long long"])])
414if test "$ac_cv_int64_t_type" = "long"; then
415 AC_DEFINE(INT64_T_IS_LONG, 1,
416 [Define if int64_t uses long as underlying type.])
417else
418AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
419#ifdef HAVE_STDINT_H
420#include <stdint.h>
421#endif
422template <typename T> struct X { };
423template <>
424struct X<long long> { typedef long long t; };
425]], [[X<int64_t>::t x;]])],[],[AC_MSG_ERROR([error verifying int64_t uses long long])])
426fi
d515e136 427
4176ce09 428AC_CACHE_CHECK(for std::swap in <utility>, ac_cv_std_swap_in_utility, [
429AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
430#include <utility>
431]], [[int a, b; std::swap(a,b);]])],[ac_cv_std_swap_in_utility=yes],[ac_cv_std_swap_in_utility=no])])
432if test $ac_cv_std_swap_in_utility = yes; then
433 AC_DEFINE(HAVE_SWAP_IN_UTILITY, 1,
434 [Define if <utility> defines std::swap.])
435fi
436
605922af 437# Check whether compiler is affected by placement new aliasing bug (PR 29286).
438# If the host compiler is affected by the bug, and we build with optimization
439# enabled (which happens e.g. when cross-compiling), the pool allocator may
440# get miscompiled. Use -fno-strict-aliasing to work around this problem.
441# Since there is no reliable feature check for the presence of this bug,
442# we simply use a GCC version number check. (This should never trigger for
443# stages 2 or 3 of a native bootstrap.)
444aliasing_flags=
445if test "$GCC" = yes; then
446 saved_CXXFLAGS="$CXXFLAGS"
447
448 # The following test compilation will succeed if and only if $CXX accepts
449 # -fno-strict-aliasing *and* is older than GCC 4.3.
450 CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
451 AC_MSG_CHECKING([whether $CXX is affected by placement new aliasing bug])
f00f02a3 452 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
605922af 453#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
454#error compiler not affected by placement new aliasing bug
455#endif
f00f02a3 456])],
605922af 457 [AC_MSG_RESULT([yes]); aliasing_flags='-fno-strict-aliasing'],
458 [AC_MSG_RESULT([no])])
459
460 CXXFLAGS="$saved_CXXFLAGS"
461fi
462AC_SUBST(aliasing_flags)
d515e136 463
464
465
7349ace9 466# ---------------------
467# Warnings and checking
468# ---------------------
469
1f59d204 470# Check $CC warning features (if it's GCC).
471# We want to use -pedantic, but we don't want warnings about
472# * 'long long'
473# * variadic macros
1d752508 474# * overlong strings
7e783eb3 475# * C++11 narrowing conversions in { }
1f59d204 476# So, we only use -pedantic if we can disable those warnings.
477
e0fad718 478# In stage 1, disable -Wformat warnings from old GCCs about new % codes
479AC_ARG_ENABLE(build-format-warnings,
480 AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
481 [],[enable_build_format_warnings=yes])
482AS_IF([test $enable_build_format_warnings = no],
483 [wf_opt=-Wno-format],[wf_opt=])
a487af0e 484ACX_PROG_CXX_WARNING_OPTS(
56409006 485 m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
62c34df8 486 [-Wcast-qual -Wno-error=format-diag $wf_opt])),
487 [loose_warn])
9fce6407 488ACX_PROG_CC_WARNING_OPTS(
62c34df8 489 m4_quote(m4_do([-Wstrict-prototypes -Wmissing-prototypes ],
490 [-Wno-error=format-diag])), [c_loose_warn])
a487af0e 491ACX_PROG_CXX_WARNING_OPTS(
1c486c58 492 m4_quote(m4_do([-Wmissing-format-attribute ],
493 [-Woverloaded-virtual])), [strict_warn])
7ab76cec 494ACX_PROG_CC_WARNING_OPTS(
495 m4_quote(m4_do([-Wold-style-definition -Wc++-compat])), [c_strict_warn])
a487af0e 496ACX_PROG_CXX_WARNING_ALMOST_PEDANTIC(
c3aa71d4 497 m4_quote(m4_do([-Wno-long-long -Wno-variadic-macros ],
498 [-Wno-overlength-strings])), [strict_warn])
a487af0e 499ACX_PROG_CXX_WARNINGS_ARE_ERRORS([manual], [strict_warn])
c7cc973b 500
501# The above macros do nothing if the compiler is not GCC. However, the
7ab76cec 502# Makefile has more goo to add other flags, so these variables are used
503# to enable warnings only for GCC.
0fa54ff1 504warn_cflags=
7ab76cec 505warn_cxxflags=
0fa54ff1 506if test "x$GCC" = "xyes"; then
507 warn_cflags='$(GCC_WARN_CFLAGS)'
7ab76cec 508 warn_cxxflags='$(GCC_WARN_CXXFLAGS)'
0fa54ff1 509fi
510AC_SUBST(warn_cflags)
7ab76cec 511AC_SUBST(warn_cxxflags)
0fa54ff1 512
7c801b60 513# Disable exceptions and RTTI if building with g++
514ACX_PROG_CC_WARNING_OPTS(
3e15d79c 515 m4_quote(m4_do([-fno-exceptions -fno-rtti -fasynchronous-unwind-tables])),
516 [noexception_flags])
7c801b60 517
e3ca137a 518# Enable expensive internal checks
1af67e62 519is_release=
520if test x"`cat $srcdir/DEV-PHASE`" != xexperimental; then
521 is_release=yes
522fi
a179eb24 523
485205d1 524AC_ARG_ENABLE(checking,
bc6c87c1 525[AS_HELP_STRING([[--enable-checking[=LIST]]],
526 [enable expensive run-time checks. With LIST,
527 enable only specific categories of checks.
528 Categories are: yes,no,all,none,release.
c05979a1 529 Flags are: assert,df,extra,fold,gc,gcac,gimple,misc,
bc6c87c1 530 rtlflag,rtl,runtime,tree,valgrind,types])],
a1fa05f0 531[ac_checking_flags="${enableval}"],[
532# Determine the default checks.
533if test x$is_release = x ; then
c05979a1 534 ac_checking_flags=yes,extra
a1fa05f0 535else
536 ac_checking_flags=release
537fi])
a1fa05f0 538IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS,"
624a5fae 539for check in release $ac_checking_flags
a1fa05f0 540do
541 case $check in
5391b316 542 # these set all the flags to specific states
314966f4 543 yes) ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking= ;
c05979a1 544 ac_fold_checking= ; ac_gc_checking=1 ; ac_extra_checking= ;
75a70cf9 545 ac_gc_always_collect= ; ac_gimple_checking=1 ; ac_rtl_checking= ;
fcd42b1e 546 ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
f03e0ae4 547 ac_tree_checking=1 ; ac_valgrind_checking= ;
80296012 548 ac_types_checking=1 ;;
5ccba2dc 549 no|none) ac_assert_checking= ; ac_checking= ; ac_df_checking= ;
c05979a1 550 ac_fold_checking= ; ac_gc_checking= ; ac_extra_checking= ;
75a70cf9 551 ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
fcd42b1e 552 ac_rtlflag_checking= ; ac_runtime_checking= ;
f03e0ae4 553 ac_tree_checking= ; ac_valgrind_checking= ;
554 ac_types_checking= ;;
5ccba2dc 555 all) ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking=1 ;
c05979a1 556 ac_fold_checking=1 ; ac_gc_checking=1 ; ac_extra_checking=1 ;
75a70cf9 557 ac_gc_always_collect=1 ; ac_gimple_checking=1 ; ac_rtl_checking=1 ;
5391b316 558 ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
f03e0ae4 559 ac_tree_checking=1 ; ac_valgrind_checking= ;
560 ac_types_checking=1 ;;
5ccba2dc 561 release) ac_assert_checking=1 ; ac_checking= ; ac_df_checking= ;
c05979a1 562 ac_fold_checking= ; ac_gc_checking= ; ac_extra_checking= ;
75a70cf9 563 ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
5391b316 564 ac_rtlflag_checking= ; ac_runtime_checking=1 ;
f03e0ae4 565 ac_tree_checking= ; ac_valgrind_checking= ;
566 ac_types_checking= ;;
5391b316 567 # these enable particular checks
a1fa05f0 568 assert) ac_assert_checking=1 ;;
c05979a1 569 df) ac_df_checking=1 ;;
570 extra) ac_extra_checking=1 ;;
a1fa05f0 571 fold) ac_fold_checking=1 ;;
572 gc) ac_gc_checking=1 ;;
573 gcac) ac_gc_always_collect=1 ;;
75a70cf9 574 gimple) ac_gimple_checking=1 ;;
a1fa05f0 575 misc) ac_checking=1 ;;
a1fa05f0 576 rtl) ac_rtl_checking=1 ;;
5391b316 577 rtlflag) ac_rtlflag_checking=1 ;;
06350693 578 runtime) ac_runtime_checking=1 ;;
a1fa05f0 579 tree) ac_tree_checking=1 ;;
f03e0ae4 580 types) ac_types_checking=1 ;;
5391b316 581 valgrind) ac_valgrind_checking=1 ;;
a1fa05f0 582 *) AC_MSG_ERROR(unknown check category $check) ;;
583 esac
584done
585IFS="$ac_save_IFS"
586
0d74b24d 587nocommon_flag=""
42f1312d 588if test x$ac_checking != x ; then
9ccb8d8d 589 AC_DEFINE(CHECKING_P, 1,
590[Define to 0/1 if you want more run-time sanity checks. This one gets a grab
591bag of miscellaneous but relatively cheap checks.])
0d74b24d 592 nocommon_flag=-fno-common
92a110bb 593else
594 AC_DEFINE(CHECKING_P, 0)
42f1312d 595fi
0d74b24d 596AC_SUBST(nocommon_flag)
9ccb8d8d 597if test x$ac_extra_checking != x ; then
598 AC_DEFINE(ENABLE_EXTRA_CHECKING, 1,
599[Define to 0/1 if you want extra run-time checking that might affect code
600generation.])
601else
602 AC_DEFINE(ENABLE_EXTRA_CHECKING, 0)
603fi
5ccba2dc 604if test x$ac_df_checking != x ; then
605 AC_DEFINE(ENABLE_DF_CHECKING, 1,
606[Define if you want more run-time sanity checks for dataflow.])
607fi
997731eb 608if test x$ac_assert_checking != x ; then
609 AC_DEFINE(ENABLE_ASSERT_CHECKING, 1,
610[Define if you want assertions enabled. This is a cheap check.])
611fi
75a70cf9 612if test x$ac_gimple_checking != x ; then
613 AC_DEFINE(ENABLE_GIMPLE_CHECKING, 1,
614[Define if you want operations on GIMPLE (the basic data structure of
615the high-level optimizers) to be checked for dynamic type safety at
616runtime. This is moderately expensive.])
617fi
fcd42b1e 618GCC_TARGET_TEMPLATE(ENABLE_RUNTIME_CHECKING)
06350693 619if test x$ac_runtime_checking != x ; then
620 AC_DEFINE(ENABLE_RUNTIME_CHECKING, 1,
621[Define if you want runtime assertions enabled. This is a cheap check.])
622fi
42f1312d 623if test x$ac_tree_checking != x ; then
624 AC_DEFINE(ENABLE_TREE_CHECKING, 1,
625[Define if you want all operations on trees (the basic data
626 structure of the front ends) to be checked for dynamic type safety
894a34ef 627 at runtime. This is moderately expensive.
4e7212d1 628 ])
1410e798 629 TREECHECKING=yes
42f1312d 630fi
f03e0ae4 631if test x$ac_types_checking != x ; then
632 AC_DEFINE(ENABLE_TYPES_CHECKING, 1,
633[Define if you want all gimple types to be verified after gimplifiation.
634 This is cheap.
635 ])
636fi
1410e798 637AC_SUBST(TREECHECKING)
42f1312d 638if test x$ac_rtl_checking != x ; then
639 AC_DEFINE(ENABLE_RTL_CHECKING, 1,
640[Define if you want all operations on RTL (the basic data structure
641 of the optimizer and back end) to be checked for dynamic type safety
642 at runtime. This is quite expensive.])
643fi
b0e7e012 644if test x$ac_rtlflag_checking != x ; then
645 AC_DEFINE(ENABLE_RTL_FLAG_CHECKING, 1,
646[Define if you want RTL flag accesses to be checked against the RTL
647 codes that are supported for each access macro. This is relatively
648 cheap.])
649fi
42f1312d 650if test x$ac_gc_checking != x ; then
651 AC_DEFINE(ENABLE_GC_CHECKING, 1,
652[Define if you want the garbage collector to do object poisoning and
653 other memory allocation checks. This is quite expensive.])
654fi
655if test x$ac_gc_always_collect != x ; then
656 AC_DEFINE(ENABLE_GC_ALWAYS_COLLECT, 1,
657[Define if you want the garbage collector to operate in maximally
658 paranoid mode, validating the entire heap and collecting garbage at
659 every opportunity. This is extremely expensive.])
660fi
fc3df357 661if test x$ac_fold_checking != x ; then
662 AC_DEFINE(ENABLE_FOLD_CHECKING, 1,
663[Define if you want fold checked that it never destructs its argument.
664 This is quite expensive.])
665fi
0fa54ff1 666valgrind_path_defines=
667valgrind_command=
3f720cf7 668
669dnl # This check AC_REQUIREs various stuff, so it *must not* be inside
670dnl # an if statement. This was the source of very frustrating bugs
671dnl # in converting to autoconf 2.5x!
672AC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
673
b90976fa 674# It is certainly possible that there's valgrind but no valgrind.h.
675# GCC relies on making annotations so we must have both.
676AC_MSG_CHECKING(for VALGRIND_DISCARD in <valgrind/memcheck.h>)
677AC_PREPROC_IFELSE([AC_LANG_SOURCE(
678 [[#include <valgrind/memcheck.h>
a519c4d3 679#ifndef VALGRIND_DISCARD
680#error VALGRIND_DISCARD not defined
11e66330 681#endif]])],
a519c4d3 682 [gcc_cv_header_valgrind_memcheck_h=yes],
683 [gcc_cv_header_valgrind_memcheck_h=no])
b90976fa 684AC_MSG_RESULT($gcc_cv_header_valgrind_memcheck_h)
685AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
686AC_PREPROC_IFELSE([AC_LANG_SOURCE(
687 [[#include <memcheck.h>
8adead19 688#ifndef VALGRIND_DISCARD
689#error VALGRIND_DISCARD not defined
11e66330 690#endif]])],
691 [gcc_cv_header_memcheck_h=yes],
692 [gcc_cv_header_memcheck_h=no])
b90976fa 693AC_MSG_RESULT($gcc_cv_header_memcheck_h)
694if test $gcc_cv_header_valgrind_memcheck_h = yes; then
695 AC_DEFINE(HAVE_VALGRIND_MEMCHECK_H, 1,
696 [Define if valgrind's valgrind/memcheck.h header is installed.])
697fi
698if test $gcc_cv_header_memcheck_h = yes; then
699 AC_DEFINE(HAVE_MEMCHECK_H, 1,
700 [Define if valgrind's memcheck.h header is installed.])
701fi
702
703if test x$ac_valgrind_checking != x ; then
0fa54ff1 704 AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
705 [$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
a519c4d3 706 if test "x$valgrind_path" = "x" \
707 || (test $have_valgrind_h = no \
708 && test $gcc_cv_header_memcheck_h = no \
709 && test $gcc_cv_header_valgrind_memcheck_h = no); then
710 AC_MSG_ERROR([*** Can't find both valgrind and valgrind/memcheck.h, memcheck.h or valgrind.h])
0fa54ff1 711 fi
712 valgrind_path_defines=-DVALGRIND_PATH='\"'$valgrind_path'\"'
713 valgrind_command="$valgrind_path -q"
714 AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
715[Define if you want to run subprograms and generated programs
716 through valgrind (a memory checker). This is extremely expensive.])
717fi
718AC_SUBST(valgrind_path_defines)
719AC_SUBST(valgrind_command)
59420fa7 720
d5a37d75 721# Enable code coverage collection
722AC_ARG_ENABLE(coverage,
bc6c87c1 723[AS_HELP_STRING([[--enable-coverage[=LEVEL]]],
724 [enable compiler's code coverage collection.
725 Use to measure compiler performance and locate
726 unused parts of the compiler. With LEVEL, specify
727 optimization. Values are opt, noopt,
728 default is noopt])],
d5a37d75 729[case "${enableval}" in
034b0f6e 730 yes|noopt)
17187f6a 731 coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O0 -fkeep-static-functions"
034b0f6e 732 ;;
733 opt)
17187f6a 734 coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O2 -fkeep-static-functions"
034b0f6e 735 ;;
736 no)
737 # a.k.a. --disable-coverage
738 coverage_flags=""
739 ;;
740 *)
741 AC_MSG_ERROR(unknown coverage setting $enableval)
742 ;;
d5a37d75 743esac],
5328265b 744[coverage_flags=""])
d5a37d75 745AC_SUBST(coverage_flags)
746
86736f9e 747AC_ARG_ENABLE(gather-detailed-mem-stats,
bc6c87c1 748[AS_HELP_STRING([--enable-gather-detailed-mem-stats],
749 [enable detailed memory allocation stats gathering])], [],
86736f9e 750[enable_gather_detailed_mem_stats=no])
ecd52ea9 751gather_stats=`if test $enable_gather_detailed_mem_stats != no; then echo 1; else echo 0; fi`
752AC_DEFINE_UNQUOTED(GATHER_STATISTICS, $gather_stats,
753[Define to enable detailed memory allocation stats gathering.])
86736f9e 754
b90976fa 755AC_ARG_ENABLE(valgrind-annotations,
756[AS_HELP_STRING([--enable-valgrind-annotations],
757 [enable valgrind runtime interaction])], [],
758[enable_valgrind_annotations=no])
759if test x$enable_valgrind_annotations != xno \
760 || test x$ac_valgrind_checking != x; then
761 if (test $have_valgrind_h = no \
762 && test $gcc_cv_header_memcheck_h = no \
763 && test $gcc_cv_header_valgrind_memcheck_h = no); then
764 AC_MSG_ERROR([*** Can't find valgrind/memcheck.h, memcheck.h or valgrind.h])
765 fi
766 AC_DEFINE(ENABLE_VALGRIND_ANNOTATIONS, 1,
767[Define to get calls to the valgrind runtime enabled.])
768fi
769
966842d4 770# -------------------------------
771# Miscenalleous configure options
772# -------------------------------
7349ace9 773
774# With stabs
775AC_ARG_WITH(stabs,
bc6c87c1 776[AS_HELP_STRING([--with-stabs],
777 [arrange to use stabs instead of host debug format])],
7349ace9 778stabs="$with_stabs",
779stabs=no)
780
7349ace9 781# Determine whether or not multilibs are enabled.
782AC_ARG_ENABLE(multilib,
bc6c87c1 783[AS_HELP_STRING([--enable-multilib],
784 [enable library support for multiple ABIs])],
7349ace9 785[], [enable_multilib=yes])
786AC_SUBST(enable_multilib)
f7b90398 787
77adc39e 788# Determine whether or not multiarch is enabled.
789AC_ARG_ENABLE(multiarch,
790[AS_HELP_STRING([--enable-multiarch],
791 [enable support for multiarch paths])],
a2869930 792[case "${enableval}" in
793yes|no|auto) enable_multiarch=$enableval;;
794*) AC_MSG_ERROR(bad value ${enableval} given for --enable-multiarch option) ;;
77adc39e 795esac], [enable_multiarch=auto])
796if test x${enable_multiarch} = xauto; then
797 if test x${with_native_system_header_dir} != x; then
798 ma_msg_suffix=", disabled auto check (configured with --native-system-header-dir)"
799 enable_multiarch=no
800 fi
801 if test x$host != x$target && test "x$with_sysroot" = x; then
802 ma_msg_suffix=", disabled auto check (cross build configured without --with-sysroot)"
803 enable_multiarch=no
804 fi
805fi
806AC_MSG_CHECKING(for multiarch configuration)
807AC_SUBST(enable_multiarch)
808AC_MSG_RESULT($enable_multiarch$ma_msg_suffix)
809
810# needed for setting the multiarch name for soft-float/hard-float ABIs
af69b10a 811AC_SUBST(with_cpu)
77adc39e 812AC_SUBST(with_float)
813
de2dc831 814# default stack clash protection guard size as power of twos in bytes.
815# Please keep these in sync with params.def.
816stk_clash_min=12
817stk_clash_max=30
818
819# Keep the default value when the option is not used to 0, this allows us to
820# distinguish between the cases where the user specifially set a value via
821# configure and when the normal default value is used.
822AC_ARG_WITH(stack-clash-protection-guard-size,
823[AS_HELP_STRING([--with-stack-clash-protection-guard-size=size],
824[Set the default stack clash protection guard size for specific targets as a power of two in bytes.])],
825[DEFAULT_STK_CLASH_GUARD_SIZE="$with_stack_clash_protection_guard_size"], [DEFAULT_STK_CLASH_GUARD_SIZE=0])
826if test $DEFAULT_STK_CLASH_GUARD_SIZE -ne 0 \
827 && (test $DEFAULT_STK_CLASH_GUARD_SIZE -lt $stk_clash_min \
828 || test $DEFAULT_STK_CLASH_GUARD_SIZE -gt $stk_clash_max); then
829 AC_MSG_ERROR(m4_normalize([
830 Invalid value $DEFAULT_STK_CLASH_GUARD_SIZE for --with-stack-clash-protection-guard-size. \
831 Must be between $stk_clash_min and $stk_clash_max.]))
832fi
833
834AC_DEFINE_UNQUOTED(DEFAULT_STK_CLASH_GUARD_SIZE, $DEFAULT_STK_CLASH_GUARD_SIZE,
835 [Define to larger than zero set the default stack clash protector size.])
836
70ac8784 837# Enable __cxa_atexit for C++.
838AC_ARG_ENABLE(__cxa_atexit,
bc6c87c1 839[AS_HELP_STRING([--enable-__cxa_atexit], [enable __cxa_atexit for C++])],
70ac8784 840[], [])
bc5ae993 841
e38498a2 842# Enable C extension for decimal float if target supports it.
23340821 843GCC_AC_ENABLE_DECIMAL_FLOAT([$target])
e38498a2 844
10de71e1 845dfp=`if test $enable_decimal_float != no; then echo 1; else echo 0; fi`
e38498a2 846AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_FLOAT, $dfp,
847[Define to 1 to enable decimal float extension to C.])
848
a87eb011 849# Use default_decimal_float for dependency.
850enable_decimal_float=$default_decimal_float
851
10de71e1 852bid=`if test $enable_decimal_float = bid; then echo 1; else echo 0; fi`
853AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_BID_FORMAT, $bid,
854[Define to 1 to specify that we are using the BID decimal floating
855point format instead of DPD])
856
9421ebb9 857# Enable C extension for fixed-point arithmetic.
858AC_ARG_ENABLE(fixed-point,
bc6c87c1 859[AS_HELP_STRING([--enable-fixed-point],
860 [enable fixed-point arithmetic extension to C])],
861[],
9421ebb9 862[
863 case $target in
bbbe4599 864 arm*)
865 enable_fixed_point=yes
866 ;;
867
9421ebb9 868 mips*-*-*)
5641963c 869 enable_fixed_point=yes
9421ebb9 870 ;;
871 *)
e6425baf 872 AC_MSG_WARN([fixed-point is not supported for this target, ignored])
9421ebb9 873 enable_fixed_point=no
874 ;;
875 esac
876])
877AC_SUBST(enable_fixed_point)
878
879fixedpoint=`if test $enable_fixed_point = yes; then echo 1; else echo 0; fi`
880AC_DEFINE_UNQUOTED(ENABLE_FIXED_POINT, $fixedpoint,
881[Define to 1 to enable fixed-point arithmetic extension to C.])
882
3e637c99 883# Enable threads
884# Pass with no value to take the default
885# Pass with a value to specify a thread package
886AC_ARG_ENABLE(threads,
bc6c87c1 887[AS_HELP_STRING([[--enable-threads[=LIB]]],
888 [enable thread usage for target GCC,
889 using LIB thread package])],,
334c8279 890[enable_threads=''])
3e637c99 891
c024e802 892AC_ARG_ENABLE(tls,
bc6c87c1 893[AS_HELP_STRING([--enable-tls],
894 [enable or disable generation of tls code
895 overriding the assembler check for tls support])],
c024e802 896[
897 case $enable_tls in
898 yes | no) ;;
899 *) AC_MSG_ERROR(['$enable_tls' is an invalid value for --enable-tls.
900Valid choices are 'yes' and 'no'.]) ;;
901 esac
902], [enable_tls=''])
903
940c7236 904AC_ARG_ENABLE(vtable-verify,
905[AS_HELP_STRING([--enable-vtable-verify],
906 [enable vtable verification feature])],,
907[enable_vtable_verify=no])
908vtable_verify=`if test x$enable_vtable_verify = xyes; then echo 1; else echo 0; fi`
909AC_DEFINE_UNQUOTED(ENABLE_VTABLE_VERIFY, $vtable_verify,
910[Define 0/1 if vtable verification feature is enabled.])
911
5c872430 912AC_ARG_ENABLE(objc-gc,
bc6c87c1 913[AS_HELP_STRING([--enable-objc-gc],
914 [enable the use of Boehm's garbage collector with
915 the GNU Objective-C runtime])],
7a28a1b6 916if test x$enable_objc_gc = xno; then
5c872430 917 objc_boehm_gc=''
918else
919 objc_boehm_gc=1
920fi,
921objc_boehm_gc='')
922
27b15aee 923AC_ARG_WITH(dwarf2,
bc6c87c1 924[AS_HELP_STRING([--with-dwarf2], [force the default debug format to be DWARF 2])],
a81417f9 925dwarf2="$with_dwarf2",
27b15aee 926dwarf2=no)
927
a1415e6d 928AC_ARG_ENABLE(shared,
bc6c87c1 929[AS_HELP_STRING([--disable-shared], [don't provide a shared libgcc])],
10393ad5 930[
931 case $enable_shared in
932 yes | no) ;;
933 *)
934 enable_shared=no
935 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
936 for pkg in $enableval; do
937 if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
938 enable_shared=yes
939 fi
940 done
941 IFS="$ac_save_ifs"
942 ;;
943 esac
944], [enable_shared=yes])
a1415e6d 945AC_SUBST(enable_shared)
946
bab25aa4 947AC_ARG_ENABLE(gcov,
948[ --disable-gcov don't provide libgcov and related host tools],
949[], [enable_gcov=yes])
950AC_SUBST(enable_gcov)
951
a24a71cc 952AC_ARG_WITH(specs,
953 [AS_HELP_STRING([--with-specs=SPECS],
954 [add SPECS to driver command-line processing])],
955 [CONFIGURE_SPECS=$withval],
956 [CONFIGURE_SPECS=]
957)
958AC_SUBST(CONFIGURE_SPECS)
959
d25dc80e 960ACX_PKGVERSION([GCC])
88d75d9d 961ACX_BUGURL([https://gcc.gnu.org/bugs/])
d25dc80e 962
c24c5e46 963# Sanity check enable_languages in case someone does not run the toplevel
964# configure # script.
965AC_ARG_ENABLE(languages,
bc6c87c1 966[AS_HELP_STRING([--enable-languages=LIST], [specify which front-ends to build])],
c24c5e46 967[case ,${enable_languages}, in
968 ,,|,yes,)
969 # go safe -- we cannot be much sure without the toplevel
970 # configure's
971 # analysis of which target libs are present and usable
972 enable_languages=c
973 ;;
974 *,all,*)
975 AC_MSG_ERROR([only the toplevel supports --enable-languages=all])
976 ;;
977 *,c,*)
978 ;;
979 *)
980 enable_languages=c,${enable_languages}
981 ;;
982esac],
983[enable_languages=c])
984
a3d93be3 985if test x"$enable_as_accelerator_for" != x; then
986 AC_DEFINE(ACCEL_COMPILER, 1,
987 [Define if this compiler should be built as the offload target compiler.])
988 enable_as_accelerator=yes
989 case "${target}" in
990 *-intelmicemul-*)
991 # In this case we expect offload compiler to be built as native, so we
992 # need to rename the driver to avoid clashes with host's drivers.
993 program_transform_name="s&^&${target}-&" ;;
994 esac
995 sedscript="s#${target_noncanonical}#${enable_as_accelerator_for}-accel-${target_noncanonical}#"
996 program_transform_name=`echo $program_transform_name | sed $sedscript`
997 accel_dir_suffix=/accel/${target_noncanonical}
998 real_target_noncanonical=${enable_as_accelerator_for}
999fi
1000AC_SUBST(enable_as_accelerator)
1001AC_SUBST(real_target_noncanonical)
1002AC_SUBST(accel_dir_suffix)
1003
1004for tgt in `echo $enable_offload_targets | sed 's/,/ /g'`; do
1005 tgt=`echo $tgt | sed 's/=.*//'`
56686608 1006
1007 if echo "$tgt" | grep "^hsa" > /dev/null ; then
1008 enable_hsa=1
1009 else
1010 enable_offloading=1
1011 fi
1012
a3d93be3 1013 if test x"$offload_targets" = x; then
1014 offload_targets=$tgt
1015 else
daa8f58f 1016 offload_targets="$offload_targets,$tgt"
a3d93be3 1017 fi
1018done
1019AC_DEFINE_UNQUOTED(OFFLOAD_TARGETS, "$offload_targets",
daa8f58f 1020 [Define to offload targets, separated by commas.])
56686608 1021if test x"$enable_offloading" != x; then
a3d93be3 1022 AC_DEFINE(ENABLE_OFFLOADING, 1,
1023 [Define this to enable support for offloading.])
5f3001a9 1024else
1025 AC_DEFINE(ENABLE_OFFLOADING, 0,
1026 [Define this to enable support for offloading.])
a3d93be3 1027fi
1028
56686608 1029if test x"$enable_hsa" = x1 ; then
1030 AC_DEFINE(ENABLE_HSA, 1,
1031 [Define this to enable support for generating HSAIL.])
1032fi
1033
f555bf81 1034AC_ARG_WITH(multilib-list,
bb009361 1035[AS_HELP_STRING([--with-multilib-list], [select multilibs (AArch64, SH and x86-64 only)])],
f555bf81 1036:,
1037with_multilib_list=default)
1038
966842d4 1039# -------------------------
1040# Checks for other programs
1041# -------------------------
6f63674e 1042
0dbd1c74 1043AC_PROG_MAKE_SET
1044
01dc27ef 1045# Find some useful tools
1046AC_PROG_AWK
e8b212b8 1047# We need awk to create options.c and options.h.
b007b385 1048# Bail out if it's missing.
1049case ${AWK} in
1050 "") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
1051esac
1052
f9708620 1053gcc_AC_PROG_LN_S
599a3eac 1054ACX_PROG_LN($LN_S)
01dc27ef 1055AC_PROG_RANLIB
59bc2a23 1056ranlib_flags=""
72318bfa 1057AC_SUBST(ranlib_flags)
1058
f9708620 1059gcc_AC_PROG_INSTALL
01dc27ef 1060
8fea036f 1061# See if cmp has --ignore-initial.
1062gcc_AC_PROG_CMP_IGNORE_INITIAL
1063
72f3368f 1064# See if we have the mktemp command.
1065AC_CHECK_PROG(have_mktemp_command, mktemp, yes, no)
1066
a1ad7483 1067# See if makeinfo has been installed and is modern enough
1068# that we can use it.
c7cc973b 1069ACX_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
049ccec1 1070 [GNU texinfo.* \([0-9][0-9.]*\)],
69f31627 1071 [4.[7-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
049ccec1 1072if test $gcc_cv_prog_makeinfo_modern = no; then
1073 AC_MSG_WARN([
1074*** Makeinfo is missing or too old.
c94ba072 1075*** Info documentation will not be built.])
049ccec1 1076 BUILD_INFO=
049ccec1 1077else
a1ad7483 1078 BUILD_INFO=info
049ccec1 1079fi
a1ad7483 1080AC_SUBST(BUILD_INFO)
049ccec1 1081
0dd06be9 1082# Is pod2man recent enough to regenerate manpages?
1083AC_MSG_CHECKING([for recent Pod::Man])
7e8ebf06 1084if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
fefb5ea6 1085 AC_MSG_RESULT(yes)
a1ad7483 1086 GENERATED_MANPAGES=generated-manpages
fefb5ea6 1087else
1088 AC_MSG_RESULT(no)
1089 GENERATED_MANPAGES=
1090fi
a1ad7483 1091AC_SUBST(GENERATED_MANPAGES)
fefb5ea6 1092
c7cc973b 1093MISSING="${CONFIG_SHELL-/bin/sh} $ac_aux_dir/missing"
1094
345a1501 1095# How about lex?
1096dnl Don't use AC_PROG_LEX; we insist on flex.
1097dnl LEXLIB is not useful in gcc.
a1ad7483 1098AC_CHECK_PROGS([FLEX], flex, [$MISSING flex])
345a1501 1099
1100# Bison?
a1ad7483 1101AC_CHECK_PROGS([BISON], bison, [$MISSING bison])
1102
1103# Binutils are not build modules, unlike bison/flex/makeinfo. So we
1104# check for build == host before using them.
345a1501 1105
6ac26439 1106# NM
28c79bfe 1107if test x${build} = x${host} && test -f $srcdir/../binutils/nm.c \
1108 && test -d ../binutils ; then
4f132c11 1109 NM='${objdir}/../binutils/nm-new'
6ac26439 1110else
1111 AC_CHECK_PROG(NM, nm, nm, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing nm)
1112fi
1113
1114# AR
28c79bfe 1115if test x${build} = x${host} && test -f $srcdir/../binutils/ar.c \
1116 && test -d ../binutils ; then
4f132c11 1117 AR='${objdir}/../binutils/ar'
6ac26439 1118else
1119 AC_CHECK_PROG(AR, ar, ar, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing ar)
1120fi
1121
863e76f9 1122# The jit documentation looks better if built with sphinx, but can be
1123# built with texinfo if sphinx is not available.
1124# Set "doc_build_sys" to "sphinx" or "texinfo" accordingly.
1125AC_CHECK_PROG(doc_build_sys, sphinx-build, sphinx, texinfo)
6ac26439 1126
966842d4 1127# --------------------
1128# Checks for C headers
1129# --------------------
1130
2cd18f76 1131# Need to reject headers which give warnings, so that the -Werror bootstrap
1132# works later. *sigh* This needs to come before all header checks.
1133AC_PROG_CPP_WERROR
1134
966842d4 1135AC_HEADER_STDC
1136AC_HEADER_TIME
d856c8a6 1137ACX_HEADER_STRING
966842d4 1138AC_HEADER_SYS_WAIT
f3b719b3 1139AC_HEADER_TIOCGWINSZ
e5d424c9 1140AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \
eb4b8219 1141 fcntl.h ftw.h unistd.h sys/file.h sys/time.h sys/mman.h \
966842d4 1142 sys/resource.h sys/param.h sys/times.h sys/stat.h \
45cde32d 1143 direct.h malloc.h langinfo.h ldfcn.h locale.h wchar.h)
966842d4 1144
1145# Check for thread headers.
1146AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
1147AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
1148
1149# These tests can't be done till we know if we have limits.h.
1150gcc_AC_C_CHAR_BIT
fd158959 1151AC_C_BIGENDIAN
966842d4 1152
60f35dba 1153# ----------------------
1154# Checks for C++ headers
1155# ----------------------
1156
54486c25 1157dnl Autoconf will give an error in the configure script if there is no
1158dnl C++ preprocessor. Hack to prevent that.
1159m4_pushdef([AC_MSG_ERROR], m4_defn([AC_MSG_WARN]))[]dnl
1160AC_PROG_CXXCPP
1161m4_popdef([AC_MSG_ERROR])[]dnl
1162
60f35dba 1163AC_CHECK_HEADERS(unordered_map)
1164AC_CHECK_HEADERS(tr1/unordered_map)
1165AC_CHECK_HEADERS(ext/hash_map)
1166
b8bd120b 1167# --------
1168# Dependency checking.
1169# --------
1170
b8bd120b 1171ZW_CREATE_DEPDIR
1172AC_CONFIG_COMMANDS([gccdepdir],[
1173 ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs build/$DEPDIR
1174 for lang in $subdirs c-family common
1175 do
1176 ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR
1177 done], [subdirs="$subdirs" ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR])
1178
b0e45289 1179ZW_PROG_COMPILER_DEPENDENCIES([CXX])
60f35dba 1180
966842d4 1181# --------
1182# UNSORTED
1183# --------
1184
966842d4 1185
45449d9f 1186# These libraries may be used by collect2.
1187# We may need a special search path to get them linked.
1188AC_CACHE_CHECK(for collect2 libraries, gcc_cv_collect2_libs,
1189[save_LIBS="$LIBS"
8e01c6f6 1190for libs in '' -lld -lmld \
45449d9f 1191 '-L/usr/lib/cmplrs/cc2.11 -lmld' \
1192 '-L/usr/lib/cmplrs/cc3.11 -lmld'
1193do
1194 LIBS="$libs"
1195 AC_TRY_LINK_FUNC(ldopen,
1196 [gcc_cv_collect2_libs="$libs"; break])
1197done
1198LIBS="$save_LIBS"
1199test -z "$gcc_cv_collect2_libs" && gcc_cv_collect2_libs='none required'])
1200case $gcc_cv_collect2_libs in
1201 "none required") ;;
1202 *) COLLECT2_LIBS=$gcc_cv_collect2_libs ;;
1203esac
1204AC_SUBST(COLLECT2_LIBS)
1205
8e01c6f6 1206# When building Ada code on Alpha, we need exc_resume which is usually in
1207# -lexc. So test for it.
1208save_LIBS="$LIBS"
1209LIBS=
1210AC_SEARCH_LIBS(exc_resume, exc)
1211GNAT_LIBEXC="$LIBS"
1212LIBS="$save_LIBS"
1213AC_SUBST(GNAT_LIBEXC)
1214
76fd9e61 1215# To support -mcpu=native on Solaris/SPARC, we need libkstat.
1216save_LIBS="$LIBS"
1217LIBS=
1218AC_SEARCH_LIBS(kstat_open, kstat)
1219EXTRA_GCC_LIBS="$LIBS"
1220LIBS="$save_LIBS"
1221AC_SUBST(EXTRA_GCC_LIBS)
1222
96b74343 1223# Some systems put ldexp and frexp in libm instead of libc; assume
1224# they're both in the same place. jcf-dump needs them.
1225save_LIBS="$LIBS"
1226LIBS=
1227AC_SEARCH_LIBS(ldexp, m)
1228LDEXP_LIB="$LIBS"
1229LIBS="$save_LIBS"
1230AC_SUBST(LDEXP_LIB)
1231
d62c0949 1232# Some systems need dlopen
1233save_LIBS="$LIBS"
1234LIBS=
1235AC_SEARCH_LIBS(dlopen, dl)
1236DL_LIB="$LIBS"
1237LIBS="$save_LIBS"
1238AC_SUBST(DL_LIB)
1239
a3477a0e 1240# Use <inttypes.h> only if it exists,
d515e136 1241# doesn't clash with <sys/types.h>, declares intmax_t and defines
1242# PRId64
a3477a0e 1243AC_MSG_CHECKING(for inttypes.h)
1244AC_CACHE_VAL(gcc_cv_header_inttypes_h,
11e66330 1245[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
d515e136 1246[[#define __STDC_FORMAT_MACROS
1247#include <sys/types.h>
11e66330 1248#include <inttypes.h>]],
d515e136 1249 [[intmax_t i = -1;
1250#ifndef PRId64
1251choke me
1252#endif]])],
fd80090d 1253 [gcc_cv_header_inttypes_h=yes],
11e66330 1254 [gcc_cv_header_inttypes_h=no])])
a3477a0e 1255AC_MSG_RESULT($gcc_cv_header_inttypes_h)
fd80090d 1256if test $gcc_cv_header_inttypes_h = yes; then
42f1312d 1257 AC_DEFINE(HAVE_INTTYPES_H, 1,
1258 [Define if you have a working <inttypes.h> header file.])
fd80090d 1259fi
805483cf 1260
3dcfd230 1261# Look for the ZSTD package.
1262ZSTD_INCLUDE=
1263ZSTD_LIB=
1264AC_SUBST(ZSTD_INCLUDE)
1265AC_SUBST(ZSTD_LIB)
1266ZSTD_CPPFLAGS=
1267ZSTD_LDFLAGS=
1268AC_ARG_WITH(zstd,
1269 [AS_HELP_STRING([--with-zstd=PATH],
1270 [specify prefix directory for installed zstd library.
1271 Equivalent to --with-zstd-include=PATH/include
1272 plus --with-zstd-lib=PATH/lib])])
1273AC_ARG_WITH(zstd-include,
1274 [AS_HELP_STRING([--with-zstd-include=PATH],
1275 [specify directory for installed zstd include files])])
1276AC_ARG_WITH(zstd-lib,
1277 [AS_HELP_STRING([--with-zstd-lib=PATH],
1278 [specify directory for the installed zstd library])])
1279case "x$with_zstd" in
1280 x) ;;
1281 xno)
1282 ZSTD_INCLUDE=no
1283 ZSTD_LIB=no
1284 ;;
1285 *) ZSTD_INCLUDE=$with_zstd/include
1286 ZSTD_LIB=$with_zstd/lib
1287 ;;
1288esac
1289if test "x$with_zstd_include" != x; then
1290 ZSTD_INCLUDE=$with_zstd_include
1291fi
1292if test "x$with_zstd_lib" != x; then
1293 ZSTD_LIB=$with_zstd_lib
1294fi
1295if test "x$ZSTD_INCLUDE" != x \
1296 && test "x$ZSTD_INCLUDE" != xno; then
1297 ZSTD_CPPFLAGS=-I$ZSTD_INCLUDE
1298fi
1299if test "x$ZSTD_LIB" != x \
1300 && test "x$ZSTD_LIB" != xno; then
1301 ZSTD_LDFLAGS=-L$ZSTD_LIB
1302fi
1303
1304CXXFLAGS="$CXXFLAGS $ZSTD_CPPFLAGS"
1305LDFLAGS="$LDFLAGS $ZSTD_LDFLAGS"
1306
1307AC_MSG_CHECKING(for zstd.h)
1308AC_CACHE_VAL(gcc_cv_header_zstd_h,
1309[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1310[[#include <zstd.h>]])],
1311 [gcc_cv_header_zstd_h=yes],
1312 [gcc_cv_header_zstd_h=no])])
1313AC_MSG_RESULT($gcc_cv_header_zstd_h)
1314if test $gcc_cv_header_zstd_h = yes; then
1315 AC_DEFINE(HAVE_ZSTD_H, 1,
1316 [Define if you have a working <zstd.h> header file.])
1317fi
1318
1319# LTO can use zstd compression algorithm
1320save_LIBS="$LIBS"
1321LIBS=
1322AC_SEARCH_LIBS(ZSTD_compress, zstd)
1323ZSTD_LIB="$LIBS"
1324LIBS="$save_LIBS"
1325AC_SUBST(ZSTD_LIB)
1326
aab9bda6 1327dnl Disabled until we have a complete test for buggy enum bitfields.
1328dnl gcc_AC_C_ENUM_BF_UNSIGNED
488c4206 1329
077a3c99 1330define(gcc_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
1331 ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl
1332 fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl
1333 fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
1334 putchar_unlocked putc_unlocked)
93da3efe 1335AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoq \
6cc8a944 1336 popen sysconf strsignal getrusage nl_langinfo \
967958e4 1337 gettimeofday mbstowcs wcswidth mmap setlocale \
c5db973f 1338 gcc_UNLOCKED_FUNCS madvise)
4211624c 1339
b503c1a2 1340if test x$ac_cv_func_mbstowcs = xyes; then
1341 AC_CACHE_CHECK(whether mbstowcs works, gcc_cv_func_mbstowcs_works,
11e66330 1342[ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
b503c1a2 1343int main()
1344{
1345 mbstowcs(0, "", 0);
1346 return 0;
11e66330 1347}]])],
1348 [gcc_cv_func_mbstowcs_works=yes],
1349 [gcc_cv_func_mbstowcs_works=no],
1350 [gcc_cv_func_mbstowcs_works=yes])])
b503c1a2 1351 if test x$gcc_cv_func_mbstowcs_works = xyes; then
1352 AC_DEFINE(HAVE_WORKING_MBSTOWCS, 1,
1353 [Define this macro if mbstowcs does not crash when its
1354 first argument is NULL.])
1355 fi
1356fi
1357
478a5aa8 1358AC_CHECK_TYPE(ssize_t, int)
1d5a5c71 1359AC_CHECK_TYPE(caddr_t, char *)
33a62e3f 1360
749dea2a 1361GCC_AC_FUNC_MMAP_BLACKLIST
f1959ea2 1362
1363case "${host}" in
8f966bdb 1364*-*-*vms*)
0d4639d6 1365 # Under VMS, vfork works very differently than on Unix. The standard test
8f966bdb 1366 # won't work, and it isn't easily adaptable. It makes more sense to
1367 # just force it.
1368 ac_cv_func_vfork_works=yes
1369 ;;
f1959ea2 1370esac
11e66330 1371AC_FUNC_FORK
0a0a425e 1372
2b15d2ba 1373AM_ICONV
6678cb4e 1374
c6976b58 1375# Until we have in-tree GNU iconv:
1376LIBICONV_DEP=
29890f2e 1377if test -f "$LTLIBICONV"; then
1378 LIBICONV_DEP=$LTLIBICONV
1379fi
c6976b58 1380AC_SUBST(LIBICONV_DEP)
1381
1382AM_LC_MESSAGES
7093ff41 1383
ac31415f 1384AM_LANGINFO_CODESET
1385
3c014a93 1386# We will need to find libiberty.h and ansidecl.h
1387saved_CFLAGS="$CFLAGS"
f67e1abf 1388CFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/../include $GMPINC"
f4245e06 1389saved_CXXFLAGS="$CXXFLAGS"
f67e1abf 1390CXXFLAGS="$CXXFLAGS -I${srcdir} -I${srcdir}/../include $GMPINC"
c20b03af 1391
1392# gcc_AC_CHECK_DECLS doesn't support overloaded functions, so use the
1393# normal autoconf function for these. But force definition of
1394# HAVE_DECL_BASENAME like gcc_AC_CHECK_DECLS does, to suppress the bizarre
1395# basename handling in libiberty.h.
1396AC_CHECK_DECLS([basename(const char*), strstr(const char*,const char*)], , ,[
1397#undef HAVE_DECL_BASENAME
1398#define HAVE_DECL_BASENAME 1
1399#include "ansidecl.h"
1400#include "system.h"])
1401
93da3efe 1402gcc_AC_CHECK_DECLS(getenv atol atoll asprintf sbrk abort atof getcwd getwd \
c20b03af 1403 madvise stpcpy strnlen strsignal strverscmp \
5b6507b0 1404 strtol strtoul strtoll strtoull setenv unsetenv \
9b1f316f 1405 errno snprintf vsnprintf vasprintf malloc realloc calloc \
c20b03af 1406 free getopt clock getpagesize ffs gcc_UNLOCKED_FUNCS, , ,[
673b6e5a 1407#include "ansidecl.h"
3c014a93 1408#include "system.h"])
7014838c 1409
07c927cb 1410gcc_AC_CHECK_DECLS(getrlimit setrlimit getrusage, , ,[
673b6e5a 1411#include "ansidecl.h"
3c014a93 1412#include "system.h"
436f5383 1413#ifdef HAVE_SYS_RESOURCE_H
1414#include <sys/resource.h>
1415#endif
1416])
1417
11e66330 1418AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
c1b9d008 1419#include "ansidecl.h"
1420#include "system.h"
1421#ifdef HAVE_SYS_RESOURCE_H
1422#include <sys/resource.h>
1423#endif
11e66330 1424]], [[rlim_t l = 0;]])],[],[AC_DEFINE([rlim_t],[long],
dea92435 1425[Define to `long' if <sys/resource.h> doesn't define.])])
c1b9d008 1426
d71e0d30 1427# On AIX 5.2, <ldfcn.h> conflicts with <fcntl.h>, as both define incompatible
1428# FREAD and FWRITE macros. Fortunately, for GCC's single usage of ldgetname
1429# in collect2.c, <fcntl.h> isn't visible, but the configure test below needs
1430# to undef these macros to get the correct value for HAVE_DECL_LDGETNAME.
31a83412 1431gcc_AC_CHECK_DECLS(ldgetname, , ,[
1432#include "ansidecl.h"
1433#include "system.h"
1434#ifdef HAVE_LDFCN_H
d71e0d30 1435#undef FREAD
1436#undef FWRITE
31a83412 1437#include <ldfcn.h>
1438#endif
1439])
1440
c770a4cb 1441gcc_AC_CHECK_DECLS(times, , ,[
1442#include "ansidecl.h"
1443#include "system.h"
1444#ifdef HAVE_SYS_TIMES_H
1445#include <sys/times.h>
1446#endif
1447])
1448
168c58e0 1449gcc_AC_CHECK_DECLS(sigaltstack, , ,[
1450#include "ansidecl.h"
1451#include "system.h"
1452#include <signal.h>
1453])
1454
c770a4cb 1455# More time-related stuff.
1456AC_CACHE_CHECK(for struct tms, ac_cv_struct_tms, [
11e66330 1457AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
c770a4cb 1458#include "ansidecl.h"
1459#include "system.h"
1460#ifdef HAVE_SYS_TIMES_H
1461#include <sys/times.h>
1462#endif
11e66330 1463]], [[struct tms tms;]])],[ac_cv_struct_tms=yes],[ac_cv_struct_tms=no])])
c770a4cb 1464if test $ac_cv_struct_tms = yes; then
1465 AC_DEFINE(HAVE_STRUCT_TMS, 1,
1466 [Define if <sys/times.h> defines struct tms.])
1467fi
1468
1469# use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
1470# revisit after autoconf 2.50.
1471AC_CACHE_CHECK(for clock_t, gcc_cv_type_clock_t, [
11e66330 1472AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
c770a4cb 1473#include "ansidecl.h"
1474#include "system.h"
11e66330 1475]], [[clock_t x;]])],[gcc_cv_type_clock_t=yes],[gcc_cv_type_clock_t=no])])
c770a4cb 1476if test $gcc_cv_type_clock_t = yes; then
1477 AC_DEFINE(HAVE_CLOCK_T, 1,
1478 [Define if <time.h> defines clock_t.])
1479fi
1480
3d2ab4bc 1481# Check if F_SETLKW is supported by fcntl.
1482AC_CACHE_CHECK(for F_SETLKW, ac_cv_f_setlkw, [
1483AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1484#include <fcntl.h>]], [[
1485struct flock fl;
1486fl.l_whence = 0;
1487fl.l_start = 0;
1488fl.l_len = 0;
1489fl.l_pid = 0;
1490return fcntl (1, F_SETLKW, &fl);]])],
1491[ac_cv_f_setlkw=yes],[ac_cv_f_setlkw=no])])
1492if test $ac_cv_f_setlkw = yes; then
1493 AC_DEFINE(HOST_HAS_F_SETLKW, 1,
1494 [Define if F_SETLKW supported by fcntl.])
1495fi
1496
f4245e06 1497# Restore CFLAGS, CXXFLAGS from before the gcc_AC_NEED_DECLARATIONS tests.
3c014a93 1498CFLAGS="$saved_CFLAGS"
f4245e06 1499CXXFLAGS="$saved_CXXFLAGS"
3c014a93 1500
a729d1c3 1501# mkdir takes a single argument on some systems.
f9708620 1502gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
a729d1c3 1503
01dc27ef 1504# File extensions
1505manext='.1'
1506objext='.o'
01dc27ef 1507AC_SUBST(manext)
1508AC_SUBST(objext)
01dc27ef 1509
805e22b2 1510# With Setjmp/Longjmp based exception handling.
1511AC_ARG_ENABLE(sjlj-exceptions,
bc6c87c1 1512[AS_HELP_STRING([--enable-sjlj-exceptions],
1513 [arrange to use setjmp/longjmp exception handling])],
d4f869a6 1514[case $target in
1515 *-*-hpux10*)
1516 if test $enableval != yes; then
1517 AC_MSG_WARN([dwarf2 exceptions not supported, sjlj exceptions forced])
1518 enableval=yes
1519 fi
1520 ;;
1521esac
1522force_sjlj_exceptions=yes],
1523[case $target in
1524 *-*-hpux10*)
1525 force_sjlj_exceptions=yes
1526 enableval=yes
1527 ;;
369d6f24 1528 lm32*-*-*)
1529 force_sjlj_exceptions=yes
1530 enableval=yes
1531 ;;
d4f869a6 1532 *)
1533 force_sjlj_exceptions=no
1534 ;;
1535esac])
1536if test $force_sjlj_exceptions = yes; then
1537 sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
1538 AC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
1539 [Define 0/1 to force the choice for exception handling model.])
1540fi
805e22b2 1541
7349ace9 1542# --------------------------------------------------------
1543# Build, host, and target specific configuration fragments
1544# --------------------------------------------------------
1545
eab1a815 1546# Collect build-machine-specific information.
056ccd8f 1547. ${srcdir}/config.build || exit 1
eab1a815 1548
973f8bf3 1549# Collect host-machine-specific information.
056ccd8f 1550. ${srcdir}/config.host || exit 1
973f8bf3 1551
eb1bd38b 1552target_gtfiles=
973f8bf3 1553
1554# Collect target-machine-specific information.
056ccd8f 1555. ${srcdir}/config.gcc || exit 1
01dc27ef 1556
1557extra_objs="${host_extra_objs} ${extra_objs}"
69eb04f7 1558extra_gcc_objs="${host_extra_gcc_objs} ${extra_gcc_objs}"
01dc27ef 1559
1560# Default the target-machine variables that were not explicitly set.
bf3637a9 1561if test x"$tm_file" = x
01dc27ef 1562then tm_file=$cpu_type/$cpu_type.h; fi
1563
2a8be21e 1564if test x"$extra_headers" = x
01dc27ef 1565then extra_headers=; fi
1566
bf3637a9 1567if test x$md_file = x
0579e60e 1568then md_file=$cpu_type/$cpu_type.md; fi
01dc27ef 1569
bf3637a9 1570if test x$out_file = x
01dc27ef 1571then out_file=$cpu_type/$cpu_type.c; fi
1572
bf3637a9 1573if test x"$tmake_file" = x
01dc27ef 1574then tmake_file=$cpu_type/t-$cpu_type
1575fi
1576
35f51475 1577# Support --enable-initfini-array.
1578if test x$enable_initfini_array != xno; then
1579 tm_file="${tm_file} initfini-array.h"
1580fi
1581
27b15aee 1582if test x"$dwarf2" = xyes
b65d2e3c 1583then tm_file="$tm_file tm-dwarf2.h"
27b15aee 1584fi
1585
01dc27ef 1586# Say what files are being used for the output code and MD file.
83b8e55b 1587echo "Using \`$srcdir/config/$out_file' for machine-specific logic."
01dc27ef 1588echo "Using \`$srcdir/config/$md_file' as machine description file."
1589
83b8e55b 1590# If any of the xm_file variables contain nonexistent files, warn
e1688c3e 1591# about them and drop them.
1592
83b8e55b 1593bx=
1594for x in $build_xm_file; do
1595 if test -f $srcdir/config/$x
1596 then bx="$bx $x"
83b8e55b 1597 else AC_MSG_WARN($srcdir/config/$x does not exist.)
1598 fi
1599done
1600build_xm_file="$bx"
1601
1602hx=
1603for x in $host_xm_file; do
1604 if test -f $srcdir/config/$x
1605 then hx="$hx $x"
83b8e55b 1606 else AC_MSG_WARN($srcdir/config/$x does not exist.)
1607 fi
1608done
1609host_xm_file="$hx"
1610
1611tx=
1612for x in $xm_file; do
1613 if test -f $srcdir/config/$x
1614 then tx="$tx $x"
83b8e55b 1615 else AC_MSG_WARN($srcdir/config/$x does not exist.)
1616 fi
1617done
1618xm_file="$tx"
1619
01dc27ef 1620count=a
1621for f in $tm_file; do
1622 count=${count}x
1623done
bf3637a9 1624if test $count = ax; then
01dc27ef 1625 echo "Using \`$srcdir/config/$tm_file' as target machine macro file."
1626else
1627 echo "Using the following target machine macro files:"
1628 for f in $tm_file; do
1629 echo " $srcdir/config/$f"
1630 done
1631fi
1632
3f28a032 1633if test x$use_long_long_for_widest_fast_int = xyes; then
1634 AC_DEFINE(USE_LONG_LONG_FOR_WIDEST_FAST_INT, 1,
1c8ad86a 1635[Define to 1 if the 'long long' type is wider than 'long' but still
3f28a032 1636efficiently supported by the host hardware.])
1637fi
1638
8ffcff2e 1639gnu_ld_bool=`if test x"$gnu_ld" = x"yes"; then echo 1; else echo 0; fi`
1640AC_DEFINE_UNQUOTED(HAVE_GNU_LD, $gnu_ld_bool, [Define to 1 if using GNU ld.])
1641
1642gnu_as_bool=`if test x"$gas" = x"yes"; then echo 1; else echo 0; fi`
1643AC_DEFINE_UNQUOTED(HAVE_GNU_AS, $gnu_as_bool, [Define to 1 if using GNU as.])
1644
01dc27ef 1645count=a
1646for f in $host_xm_file; do
1647 count=${count}x
1648done
83b8e55b 1649if test $count = a; then
1650 :
1651elif test $count = ax; then
01dc27ef 1652 echo "Using \`$srcdir/config/$host_xm_file' as host machine macro file."
1653else
1654 echo "Using the following host machine macro files:"
1655 for f in $host_xm_file; do
1656 echo " $srcdir/config/$f"
1657 done
1658fi
b197fbcf 1659echo "Using ${out_host_hook_obj} for host machine hooks."
01dc27ef 1660
bf3637a9 1661if test "$host_xm_file" != "$build_xm_file"; then
01dc27ef 1662 count=a
1663 for f in $build_xm_file; do
1664 count=${count}x
1665 done
83b8e55b 1666 if test $count = a; then
1667 :
1668 elif test $count = ax; then
01dc27ef 1669 echo "Using \`$srcdir/config/$build_xm_file' as build machine macro file."
1670 else
1671 echo "Using the following build machine macro files:"
1672 for f in $build_xm_file; do
1673 echo " $srcdir/config/$f"
1674 done
1675 fi
1676fi
1677
638454a1 1678if test -n "$configured_native_system_header_dir"; then
1679 native_system_header_dir=$configured_native_system_header_dir
1680fi
1681NATIVE_SYSTEM_HEADER_DIR="$native_system_header_dir"
1682AC_SUBST(NATIVE_SYSTEM_HEADER_DIR)
1683
168c58e0 1684case ${host} in
84eba009 1685 powerpc*-*-darwin*)
168c58e0 1686 AC_CACHE_CHECK([whether mcontext_t fields have underscores],
1687 gcc_cv_mcontext_underscores,
f00f02a3 1688 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
267a6571 1689#include <sys/cdefs.h>
679f19b4 1690#include <sys/signal.h>
168c58e0 1691#include <ucontext.h>
1692int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; }
f00f02a3 1693])],
168c58e0 1694 gcc_cv_mcontext_underscores=no, gcc_cv_mcontext_underscores=yes))
1695 if test $gcc_cv_mcontext_underscores = yes; then
1696 AC_DEFINE(HAS_MCONTEXT_T_UNDERSCORES,,dnl
1697 [mcontext_t fields start with __])
1698 fi
1699 ;;
1700esac
1701
d976f534 1702# ---------
1703# Threading
1704# ---------
1705
267d993c 1706# Check if a valid thread package
334c8279 1707case ${enable_threads} in
267d993c 1708 "" | no)
1709 # No threads
1710 target_thread_file='single'
1711 ;;
1712 yes)
1713 # default
1714 target_thread_file='single'
1715 ;;
fe5ef4a0 1716 aix | dce | lynx | mipssde | posix | rtems | \
3f25492e 1717 single | tpf | vxworks | win32)
334c8279 1718 target_thread_file=${enable_threads}
267d993c 1719 ;;
1720 *)
334c8279 1721 echo "${enable_threads} is an unknown thread package" 1>&2
267d993c 1722 exit 1
1723 ;;
1724esac
1725
1726if test x${thread_file} = x; then
1727 # No thread file set by target-specific clauses in config.gcc,
1728 # so use file chosen by default logic above
1729 thread_file=${target_thread_file}
01dc27ef 1730fi
01dc27ef 1731
d976f534 1732# --------
1733# UNSORTED
1734# --------
1735
d9ab9cb9 1736use_cxa_atexit=no
bc5ae993 1737if test x$enable___cxa_atexit = xyes || \
1738 test x$enable___cxa_atexit = x -a x$default_use_cxa_atexit = xyes; then
d9ab9cb9 1739 if test x$host = x$target; then
d91ef9b0 1740 case $host in
1741 # mingw32 doesn't have __cxa_atexit but uses atexit registration
1742 # keyed to flag_use_cxa_atexit
1743 *-*-mingw32*)
1744 use_cxa_atexit=yes
1745 ;;
a8af2dd5 1746 powerpc-ibm-aix*)
1747 use_cxa_atexit=yes
1748 ;;
d91ef9b0 1749 *)
1750 AC_CHECK_FUNC(__cxa_atexit,[use_cxa_atexit=yes],
1751 [echo "__cxa_atexit can't be enabled on this target"])
55a5bb1e 1752 ;;
d91ef9b0 1753 esac
d9ab9cb9 1754 else
1755 # We can't check for __cxa_atexit when building a cross, so assume
1756 # it is available
1757 use_cxa_atexit=yes
1758 fi
1759 if test x$use_cxa_atexit = xyes; then
3bf418bd 1760 AC_DEFINE(DEFAULT_USE_CXA_ATEXIT, 2,
d9ab9cb9 1761 [Define if you want to use __cxa_atexit, rather than atexit, to
1762 register C++ destructors for local statics and global objects.
1763 This is essential for fully standards-compliant handling of
1764 destructors, but requires __cxa_atexit in libc.])
1765 fi
bc5ae993 1766fi
1767
6f432b58 1768# Look for a file containing extra machine modes.
b5ccaa7b 1769if test -n "$extra_modes" && test -f $srcdir/config/$extra_modes; then
1770 extra_modes_file='$(srcdir)'/config/${extra_modes}
6f432b58 1771 AC_SUBST(extra_modes_file)
4dcab8b7 1772 AC_DEFINE_UNQUOTED(EXTRA_MODES_FILE, "config/$extra_modes",
6f432b58 1773 [Define to the name of a file containing a list of extra machine modes
1774 for this architecture.])
6f432b58 1775fi
1776
ff05e09e 1777# Convert extra_options into a form suitable for Makefile use.
1778extra_opt_files=
755fa783 1779all_opt_files=
ff05e09e 1780for f in $extra_options; do
1781 extra_opt_files="$extra_opt_files \$(srcdir)/config/$f"
755fa783 1782 all_opt_files="$all_opt_files $srcdir/config/$f"
ff05e09e 1783done
1784AC_SUBST(extra_opt_files)
1785
764fc592 1786# auto-host.h is the file containing items generated by autoconf and is
0dbd1c74 1787# the first file included by config.h.
805e22b2 1788# If host=build, it is correct to have bconfig include auto-host.h
58b16c1a 1789# as well. If host!=build, we are in error and need to do more
1790# work to find out the build config parameters.
bf3637a9 1791if test x$host = x$build
58b16c1a 1792then
d826737c 1793 build_auto=auto-host.h
764fc592 1794else
1795 # We create a subdir, then run autoconf in the subdir.
1796 # To prevent recursion we set host and build for the new
1797 # invocation of configure to the build for this invocation
1798 # of configure.
1799 tempdir=build.$$
1800 rm -rf $tempdir
1801 mkdir $tempdir
1802 cd $tempdir
1803 case ${srcdir} in
e868f582 1804 /* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
764fc592 1805 *) realsrcdir=../${srcdir};;
1806 esac
18350b2e 1807 # Clearing GMPINC is necessary to prevent host headers being
1808 # used by the build compiler. Defining GENERATOR_FILE stops
1809 # system.h from including gmp.h.
fc5104b7 1810 CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
18350b2e 1811 CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
1812 LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
1813 GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \
fc5104b7 1814 ${realsrcdir}/configure \
1f3fcf32 1815 --enable-languages=${enable_languages-all} \
ab3470ec 1816 --target=$target_alias --host=$build_alias --build=$build_alias
764fc592 1817
1818 # We just finished tests for the build machine, so rename
1819 # the file auto-build.h in the gcc directory.
1820 mv auto-host.h ../auto-build.h
1821 cd ..
1822 rm -rf $tempdir
d826737c 1823 build_auto=auto-build.h
58b16c1a 1824fi
2b59cb05 1825AC_SUBST(build_subdir)
58b16c1a 1826
d826737c 1827tm_file="${tm_file} defaults.h"
805e22b2 1828tm_p_file="${tm_p_file} tm-preds.h"
03385ed3 1829tm_d_file="${tm_d_file} defaults.h"
805e22b2 1830host_xm_file="auto-host.h ansidecl.h ${host_xm_file}"
1831build_xm_file="${build_auto} ansidecl.h ${build_xm_file}"
4b0e3ddb 1832# We don't want ansidecl.h in target files, write code there in ISO/GNU C.
18320123 1833# put this back in temporarily.
fcd42b1e 1834xm_file="auto-host.h ansidecl.h ${xm_file}"
4a7d7a8b 1835
7349ace9 1836# --------
1837# UNSORTED
1838# --------
1839
14ac9144 1840changequote(,)dnl
9371935c 1841# Compile in configure arguments.
6e11eb2c 1842if test -f configargs.h ; then
9371935c 1843 # Being re-configured.
8bffa377 1844 gcc_config_arguments=`grep configuration_arguments configargs.h | sed -e 's/.*"\([^"]*\)".*/\1/'`
f48b6632 1845 gcc_reconf_arguments=`echo "$gcc_config_arguments" | sed -e 's/^.*\( : (reconfigured) .*$\)/\1/'`
1846 if [ "$gcc_reconf_arguments" != " : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS" ]; then
1847 gcc_config_arguments="$gcc_config_arguments : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS"
1848 fi
9371935c 1849else
1850 gcc_config_arguments="$TOPLEVEL_CONFIGURE_ARGUMENTS"
1851fi
5df533c9 1852
1853# Double all backslashes and backslash all quotes to turn
1854# gcc_config_arguments into a C string.
1855sed -e 's/\\/\\\\/g; s/"/\\"/g' <<EOF >conftest.out
1856$gcc_config_arguments
1857EOF
1858gcc_config_arguments_str=`cat conftest.out`
1859rm -f conftest.out
1860
9371935c 1861cat > configargs.h <<EOF
1862/* Generated automatically. */
5df533c9 1863static const char configuration_arguments[] = "$gcc_config_arguments_str";
6d72c630 1864static const char thread_model[] = "$thread_file";
7dd97ab6 1865
1866static const struct {
1867 const char *name, *value;
1868} configure_default_options[] = $configure_default_options;
9371935c 1869EOF
bf3637a9 1870changequote([,])dnl
01dc27ef 1871
e8ad34e4 1872changequote(,)dnl
6ac2286b 1873gcc_BASEVER=`cat $srcdir/BASE-VER`
1874gcc_DEVPHASE=`cat $srcdir/DEV-PHASE`
1875gcc_DATESTAMP=`cat $srcdir/DATESTAMP`
e8ad34e4 1876if test -f $srcdir/REVISION ; then
6ac2286b 1877 gcc_REVISION=`cat $srcdir/REVISION`
e8ad34e4 1878else
1879 gcc_REVISION=""
1880fi
1881cat > plugin-version.h <<EOF
1882#include "configargs.h"
1883
7fed55f3 1884#define GCCPLUGIN_VERSION_MAJOR `echo $gcc_BASEVER | sed -e 's/^\([0-9]*\).*$/\1/'`
1885#define GCCPLUGIN_VERSION_MINOR `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.\([0-9]*\).*$/\1/'`
1886#define GCCPLUGIN_VERSION_PATCHLEVEL `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$/\1/'`
1887#define GCCPLUGIN_VERSION (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR)
1888
e8ad34e4 1889static char basever[] = "$gcc_BASEVER";
1890static char datestamp[] = "$gcc_DATESTAMP";
1891static char devphase[] = "$gcc_DEVPHASE";
1892static char revision[] = "$gcc_REVISION";
1893
1894/* FIXME plugins: We should make the version information more precise.
1895 One way to do is to add a checksum. */
1896
1897static struct plugin_gcc_version gcc_version = {basever, datestamp,
1898 devphase, revision,
1899 configuration_arguments};
1900EOF
1901changequote([,])dnl
1902
0812bb06 1903# Determine what GCC version number to use in filesystem paths.
1904GCC_BASE_VER
1905
be2828ce 1906# Internationalization
c6976b58 1907ZW_GNU_GETTEXT_SISTER_DIR
c5ab9ed2 1908
c6976b58 1909# If LIBINTL contains LIBICONV, then clear LIBICONV so we don't get
1910# -liconv on the link line twice.
1911case "$LIBINTL" in *$LIBICONV*)
1912 LIBICONV= ;;
1913esac
be2828ce 1914
197f58fa 1915AC_ARG_ENABLE(secureplt,
bc6c87c1 1916[AS_HELP_STRING([--enable-secureplt],
1917 [enable -msecure-plt by default for PowerPC])],
197f58fa 1918[], [])
1919
15296a7b 1920AC_ARG_ENABLE(mingw-wildcard,
1921[AS_HELP_STRING([--enable-mingw-wildcard],
1922 [Set whether to expand wildcard on command-line.
1923 Default to platform configuration])],
1924[],[enable_mingw_wildcard=platform])
1925AS_IF([test x"$enable_mingw_wildcard" != xplatform ],
1926 [AC_DEFINE_UNQUOTED(MINGW_DOWILDCARD,
1927 $(test x"$enable_mingw_wildcard" = xno; echo $?),
1928 [Value to set mingw's _dowildcard to.])])
1929
ee018eb1 1930AC_ARG_ENABLE(large-address-aware,
1931[AS_HELP_STRING([--enable-large-address-aware],
1932 [Link mingw executables with --large-address-aware])])
1933AS_IF([test x"$enable_large_address_aware" = xyes],
1934 [AC_DEFINE([MINGW_DEFAULT_LARGE_ADDR_AWARE], 1,
1935 [Define if we should link mingw executables with --large-address-aware])])
1936
a2beb429 1937AC_ARG_ENABLE(leading-mingw64-underscores,
1938 AS_HELP_STRING([--enable-leading-mingw64-underscores],
bc6c87c1 1939 [enable leading underscores on 64 bit mingw targets]),
a2beb429 1940 [],[])
1941AS_IF([ test x"$enable_leading_mingw64_underscores" = xyes ],
1942 [AC_DEFINE(USE_MINGW64_LEADING_UNDERSCORES, 1,
1943 [Define if we should use leading underscore on 64 bit mingw targets])])
1944
144c3e90 1945AC_ARG_ENABLE(cld,
bc6c87c1 1946[AS_HELP_STRING([--enable-cld], [enable -mcld by default for 32bit x86])], [],
144c3e90 1947[enable_cld=no])
1948
fc00a76a 1949AC_ARG_ENABLE(frame-pointer,
bc6c87c1 1950[AS_HELP_STRING([--enable-frame-pointer],
fe9e2b07 1951 [enable -fno-omit-frame-pointer by default for x86])], [],
fc00a76a 1952[
1953case $target_os in
0df8904a 1954linux* | gnu* | darwin[[8912]]* | cygwin* | mingw*)
679a4995 1955 # Enable -fomit-frame-pointer by default for these systems with DWARF2.
fc00a76a 1956 enable_frame_pointer=no
1957 ;;
1958*)
1959 enable_frame_pointer=yes
1960 ;;
1961esac
1962])
1963
fe9e2b07 1964case $target in
1965i[[34567]]86-*-* | x86_64-*-*)
1966 if test "x$enable_cld" = xyes; then
1967 tm_defines="${tm_defines} USE_IX86_CLD=1"
1968 fi
1969 if test "x$enable_frame_pointer" = xyes; then
1970 tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1"
1971 fi
1972 ;;
1973esac
1974
778a2833 1975# Windows32 Registry support for specifying GCC installation paths.
1976AC_ARG_ENABLE(win32-registry,
bc6c87c1 1977[AS_HELP_STRING([--disable-win32-registry],
1978 [disable lookup of installation paths in the
1979 Registry on Windows hosts])
1980AS_HELP_STRING([--enable-win32-registry], [enable registry lookup (default)])
1981AS_HELP_STRING([--enable-win32-registry=KEY],
1982 [use KEY instead of GCC version as the last portion
1983 of the registry key])],,)
1af67e62 1984
45449d9f 1985case $host_os in
297677bc 1986 win32 | pe | cygwin* | mingw32*)
1af67e62 1987 if test "x$enable_win32_registry" != xno; then
1988 AC_SEARCH_LIBS(RegOpenKeyExA, advapi32,, [enable_win32_registry=no])
1989 fi
778a2833 1990
1af67e62 1991 if test "x$enable_win32_registry" != xno; then
1992 AC_DEFINE(ENABLE_WIN32_REGISTRY, 1,
1993 [Define to 1 if installation paths should be looked up in the Windows
1994 Registry. Ignored on non-Windows hosts.])
1995
1996 if test "x$enable_win32_registry" != xyes \
1997 && test "x$enable_win32_registry" != x; then
1998 AC_DEFINE_UNQUOTED(WIN32_REGISTRY_KEY, "$enable_win32_registry",
1999 [Define to be the last component of the Windows registry key under which
2000 to look for installation paths. The full key used will be
2001 HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}.
2002 The default is the GCC version number.])
2003 fi
2004 fi
778a2833 2005 ;;
2006esac
2007
cab2aaca 2008# Get an absolute path to the GCC top-level source directory
3354d061 2009holddir=`${PWDCMD-pwd}`
cab2aaca 2010cd $srcdir
3354d061 2011topdir=`${PWDCMD-pwd}`
cab2aaca 2012cd $holddir
2013
0045e563 2014# Conditionalize the makefile for this host machine.
a455468e 2015xmake_file=
2e222ce5 2016for f in ${host_xmake_file}
5a92ba2a 2017do
bf3637a9 2018 if test -f ${srcdir}/config/$f
5a92ba2a 2019 then
a455468e 2020 xmake_file="${xmake_file} \$(srcdir)/config/$f"
5a92ba2a 2021 fi
2022done
01dc27ef 2023
0045e563 2024# Conditionalize the makefile for this target machine.
a455468e 2025tmake_file_=
2e222ce5 2026for f in ${tmake_file}
5a92ba2a 2027do
bf3637a9 2028 if test -f ${srcdir}/config/$f
5a92ba2a 2029 then
a455468e 2030 tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
5a92ba2a 2031 fi
2032done
a455468e 2033tmake_file="${tmake_file_}"
4fc83d8e 2034
0045e563 2035out_object_file=`basename $out_file .c`.o
3e87b980 2036common_out_object_file=`basename $common_out_file .c`.o
4fc83d8e 2037
ff05e09e 2038tm_file_list="options.h"
a317e77e 2039tm_include_list="options.h insn-constants.h"
0045e563 2040for f in $tm_file; do
de5102fe 2041 case $f in
504cf784 2042 ./* )
2043 f=`echo $f | sed 's/^..//'`
2044 tm_file_list="${tm_file_list} $f"
2045 tm_include_list="${tm_include_list} $f"
2046 ;;
673b6e5a 2047 defaults.h )
4dcab8b7 2048 tm_file_list="${tm_file_list} \$(srcdir)/$f"
2049 tm_include_list="${tm_include_list} $f"
2050 ;;
2051 * )
2052 tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
2053 tm_include_list="${tm_include_list} config/$f"
2054 ;;
de5102fe 2055 esac
0045e563 2056done
01dc27ef 2057
83b8e55b 2058tm_p_file_list=
4dcab8b7 2059tm_p_include_list=
83b8e55b 2060for f in $tm_p_file; do
805e22b2 2061 case $f in
2062 tm-preds.h )
4dcab8b7 2063 tm_p_file_list="${tm_p_file_list} $f"
2064 tm_p_include_list="${tm_p_include_list} $f"
2065 ;;
2066 * )
2067 tm_p_file_list="${tm_p_file_list} \$(srcdir)/config/$f"
2068 tm_p_include_list="${tm_p_include_list} config/$f"
2069 esac
2070done
2071
03385ed3 2072tm_d_file_list=
2073tm_d_include_list="options.h insn-constants.h"
2074for f in $tm_d_file; do
2075 case $f in
2076 defaults.h )
2077 tm_d_file_list="${tm_d_file_list} \$(srcdir)/$f"
2078 tm_d_include_list="${tm_d_include_list} $f"
2079 ;;
2080 * )
2081 tm_d_file_list="${tm_d_file_list} \$(srcdir)/config/$f"
2082 tm_d_include_list="${tm_d_include_list} config/$f"
2083 ;;
2084 esac
2085done
2086
4dcab8b7 2087xm_file_list=
2088xm_include_list=
2089for f in $xm_file; do
2090 case $f in
2091 ansidecl.h )
2092 xm_file_list="${xm_file_list} \$(srcdir)/../include/$f"
2093 xm_include_list="${xm_include_list} $f"
2094 ;;
2095 auto-host.h )
2096 xm_file_list="${xm_file_list} $f"
2097 xm_include_list="${xm_include_list} $f"
2098 ;;
2099 * )
2100 xm_file_list="${xm_file_list} \$(srcdir)/config/$f"
2101 xm_include_list="${xm_include_list} config/$f"
2102 ;;
805e22b2 2103 esac
83b8e55b 2104done
2105
0045e563 2106host_xm_file_list=
4dcab8b7 2107host_xm_include_list=
0045e563 2108for f in $host_xm_file; do
de5102fe 2109 case $f in
673b6e5a 2110 ansidecl.h )
4dcab8b7 2111 host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/$f"
2112 host_xm_include_list="${host_xm_include_list} $f"
2113 ;;
1f3233d1 2114 auto-host.h )
4dcab8b7 2115 host_xm_file_list="${host_xm_file_list} $f"
2116 host_xm_include_list="${host_xm_include_list} $f"
2117 ;;
2118 * )
2119 host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
2120 host_xm_include_list="${host_xm_include_list} config/$f"
2121 ;;
de5102fe 2122 esac
0045e563 2123done
2124
2125build_xm_file_list=
2126for f in $build_xm_file; do
de5102fe 2127 case $f in
673b6e5a 2128 ansidecl.h )
4dcab8b7 2129 build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/$f"
2130 build_xm_include_list="${build_xm_include_list} $f"
2131 ;;
1f3233d1 2132 auto-build.h | auto-host.h )
4dcab8b7 2133 build_xm_file_list="${build_xm_file_list} $f"
2134 build_xm_include_list="${build_xm_include_list} $f"
2135 ;;
2136 * )
2137 build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
2138 build_xm_include_list="${build_xm_include_list} config/$f"
2139 ;;
de5102fe 2140 esac
0045e563 2141done
01dc27ef 2142
29d774d0 2143# Define macro CROSS_DIRECTORY_STRUCTURE in compilation if this is a
2144# cross-compiler which does not use the native headers and libraries.
0fc07c25 2145# Also use all.cross instead of all.internal and adjust SYSTEM_HEADER_DIR.
2146CROSS= AC_SUBST(CROSS)
2147ALL=all.internal AC_SUBST(ALL)
2148SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)' AC_SUBST(SYSTEM_HEADER_DIR)
1f87fb84 2149BUILD_SYSTEM_HEADER_DIR=$SYSTEM_HEADER_DIR AC_SUBST(BUILD_SYSTEM_HEADER_DIR)
5e368ffe 2150
1f87fb84 2151if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
2152 test x$build != x$host || test "x$with_build_sysroot" != x; then
2153 if test "x$with_build_sysroot" != x; then
2154 BUILD_SYSTEM_HEADER_DIR=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
2155 else
2156 BUILD_SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
2157 fi
5e368ffe 2158
1f87fb84 2159 if test x$host != x$target
2160 then
2161 CROSS="-DCROSS_DIRECTORY_STRUCTURE"
2162 ALL=all.cross
2163 SYSTEM_HEADER_DIR=$BUILD_SYSTEM_HEADER_DIR
2164 elif test "x$TARGET_SYSTEM_ROOT" != x; then
2165 SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
2166 fi
01dc27ef 2167
1f87fb84 2168 if test "x$with_build_sysroot" != "x"; then
2169 target_header_dir="${with_build_sysroot}${native_system_header_dir}"
185f440d 2170 elif test "x$with_sysroot" = x; then
2171 target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
185f440d 2172 elif test "x$with_sysroot" = xyes; then
2173 target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
2174 else
2175 target_header_dir="${with_sysroot}${native_system_header_dir}"
2176 fi
2177else
2178 target_header_dir=${native_system_header_dir}
2179fi
2180
81aabcf8 2181# If this is a cross-compiler that does not
2182# have its own set of headers then define
2183# inhibit_libc
2184
3caddd4e 2185# If this is using newlib, without having the headers available now,
2186# then define inhibit_libc in LIBGCC2_CFLAGS.
c872ef71 2187# This prevents libgcc2 from containing any code which requires libc
2188# support.
58a8c75f 2189: ${inhibit_libc=false}
3caddd4e 2190if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
2191 test x$with_newlib = xyes ; } &&
185f440d 2192 { test "x$with_headers" = xno || test ! -f "$target_header_dir/stdio.h"; } ; then
a99be165 2193 inhibit_libc=true
81aabcf8 2194fi
2195AC_SUBST(inhibit_libc)
2196
0fc07c25 2197# When building gcc with a cross-compiler, we need to adjust things so
2198# that the generator programs are still built with the native compiler.
f2397fc4 2199# Also, we cannot run fixincludes.
0fc07c25 2200
2201# These are the normal (build=host) settings:
58933515 2202CC_FOR_BUILD='$(CC)' AC_SUBST(CC_FOR_BUILD)
a44c8c3b 2203CXX_FOR_BUILD='$(CXX)' AC_SUBST(CXX_FOR_BUILD)
805e22b2 2204BUILD_CFLAGS='$(ALL_CFLAGS)' AC_SUBST(BUILD_CFLAGS)
a44c8c3b 2205BUILD_CXXFLAGS='$(ALL_CXXFLAGS)' AC_SUBST(BUILD_CXXFLAGS)
9841cd80 2206BUILD_LDFLAGS='$(LDFLAGS)' AC_SUBST(BUILD_LDFLAGS)
0fc07c25 2207STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_FIXINC)
4c05f6ec 2208
571e5fe1 2209BUILD_NO_PIE_CFLAGS='$(NO_PIE_CFLAGS)' AC_SUBST(BUILD_NO_PIE_CFLAGS)
2210BUILD_NO_PIE_FLAG='$(NO_PIE_FLAG)' AC_SUBST(BUILD_NO_PIE_FLAG)
2211
c19ee476 2212# And these apply if build != host, or we are generating coverage data
2213if test x$build != x$host || test "x$coverage_flags" != x
0045e563 2214then
4a867005 2215 BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
32ba5f0b 2216 BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
9841cd80 2217 BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
571e5fe1 2218
2219 NO_PIE_CFLAGS_FOR_BUILD=${NO_PIE_CFLAGS_FOR_BUILD-${NO_PIE_CFLAGS}}
2220 NO_PIE_FLAG_FOR_BUILD=${NO_PIE_FLAG_FOR_BUILD-${NO_PIE_FLAG}}
2221 BUILD_NO_PIE_CFLAGS='$(NO_PIE_CFLAGS_FOR_BUILD)'
2222 BUILD_NO_PIE_FLAG='$(NO_PIE_FLAG_FOR_BUILD)'
0045e563 2223fi
571e5fe1 2224AC_SUBST(NO_PIE_CFLAGS_FOR_BUILD)
2225AC_SUBST(NO_PIE_FLAG_FOR_BUILD)
01dc27ef 2226
33fd845b 2227# Expand extra_headers to include complete path.
2228# This substitutes for lots of t-* files.
2229extra_headers_list=
a78cd2c1 2230# Prepend $(srcdir)/config/${cpu_type}/ to every entry in extra_headers.
2231for file in ${extra_headers} ; do
2232 extra_headers_list="${extra_headers_list} \$(srcdir)/config/${cpu_type}/${file}"
2233done
33fd845b 2234
50388ca3 2235# If use_gcc_tgmath is set, append ginclude/tgmath.h.
2236if test x"$use_gcc_tgmath" = xyes
2237then extra_headers_list="${extra_headers_list} \$(srcdir)/ginclude/tgmath.h"
2238fi
2239
e08c7853 2240# Define collect2 in Makefile.
2241case $host_can_use_collect2 in
2242 no) collect2= ;;
2243 *) collect2='collect2$(exeext)' ;;
2244esac
2245AC_SUBST([collect2])
2246
0045e563 2247# Add a definition of USE_COLLECT2 if system wants one.
7349ace9 2248case $use_collect2 in
2249 no) use_collect2= ;;
2250 "") ;;
2251 *)
2252 host_xm_defines="${host_xm_defines} USE_COLLECT2"
2253 xm_defines="${xm_defines} USE_COLLECT2"
e08c7853 2254 case $host_can_use_collect2 in
2255 no)
2256 AC_MSG_ERROR([collect2 is required but cannot be built on this system])
2257 ;;
2258 esac
7349ace9 2259 ;;
2260esac
0045e563 2261
ca42e774 2262AC_DEFINE_UNQUOTED(LTOPLUGINSONAME,"${host_lto_plugin_soname}",
2263[Define to the name of the LTO plugin DSO that must be
2264 passed to the linker's -plugin=LIB option.])
2265
d8a2ca58 2266# ---------------------------
2267# Assembler & linker features
2268# ---------------------------
2269
794723c1 2270# During stage 2, ld is actually gcc/collect-ld, which is a small script to
2271# discern between when to use prev-ld/ld-new and when to use ld/ld-new.
2272# However when ld-new is first executed from the build tree, libtool will
2273# relink it as .libs/lt-ld-new, so that it can give it an RPATH that refers
2274# to the build tree. While doing this we need to use the previous-stage
2275# linker, or we have an infinite loop. The presence of a shell script as
2276# ld/ld-new, and the fact that the script *uses ld itself*, is what confuses
2277# the gcc/collect-ld script. So we need to know how libtool works, or
2278# exec-tool will fail.
2279
2280m4_defun([_LT_CONFIG_COMMANDS], [])
2281AC_PROG_LIBTOOL
2282AC_SUBST(objdir)
2283AC_SUBST(enable_fast_install)
2284
d2aaa43f 2285# Identify the assembler which will work hand-in-glove with the newly
2286# built GCC, so that we can examine its features. This is the assembler
2287# which will be driven by the driver program.
2288#
2289# If build != host, and we aren't building gas in-tree, we identify a
2290# build->target assembler and hope that it will have the same features
2291# as the host->target assembler we'll be using.
398f3874 2292gcc_cv_gas_major_version=
2293gcc_cv_gas_minor_version=
0a4f4d70 2294gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
c47832b1 2295
2296m4_pattern_allow([AS_FOR_TARGET])dnl
2297AS_VAR_SET_IF(gcc_cv_as,, [
f8b7dbdb 2298if test -x "$DEFAULT_ASSEMBLER"; then
2299 gcc_cv_as="$DEFAULT_ASSEMBLER"
e757a6a8 2300elif test -f $gcc_cv_as_gas_srcdir/configure.ac \
58220290 2301 && test -f ../gas/Makefile \
2302 && test x$build = x$host; then
c47832b1 2303 gcc_cv_as=../gas/as-new$build_exeext
2304elif test -x as$build_exeext; then
2305 # Build using assembler in the current directory.
2306 gcc_cv_as=./as$build_exeext
f3599371 2307elif ( set dummy $AS_FOR_TARGET; test -x $[2] ); then
c47832b1 2308 gcc_cv_as="$AS_FOR_TARGET"
2309else
2310 AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
2311fi])
2312
2313ORIGINAL_AS_FOR_TARGET=$gcc_cv_as
2314AC_SUBST(ORIGINAL_AS_FOR_TARGET)
bdbe7091 2315case "$ORIGINAL_AS_FOR_TARGET" in
2316 ./as | ./as$build_exeext) ;;
2317 *) AC_CONFIG_FILES(as:exec-tool.in, [chmod +x as]) ;;
2318esac
c47832b1 2319
2320AC_MSG_CHECKING(what assembler to use)
2321if test "$gcc_cv_as" = ../gas/as-new$build_exeext; then
58220290 2322 # Single tree build which includes gas. We want to prefer it
2323 # over whatever linker top-level may have detected, since
2324 # we'll use what we're building after installation anyway.
c47832b1 2325 AC_MSG_RESULT(newly built gas)
667fe30b 2326 in_tree_gas=yes
2327 _gcc_COMPUTE_GAS_VERSION
0dac358a 2328 in_tree_gas_is_elf=no
2329 if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
2330 || (grep 'obj_format = multi' ../gas/Makefile \
2331 && grep 'extra_objects =.* obj-elf' ../gas/Makefile) > /dev/null
2332 then
2333 in_tree_gas_is_elf=yes
2334 fi
c47832b1 2335else
2336 AC_MSG_RESULT($gcc_cv_as)
2337 in_tree_gas=no
398f3874 2338fi
2339
9b4ea463 2340default_ld=
2341AC_ARG_ENABLE(ld,
2342[[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
2343[case "${enableval}" in
2344 no)
2345 default_ld=ld.gold
2346 ;;
2347 esac])
2348
560d6bb9 2349install_gold_as_default=no
9b4ea463 2350AC_ARG_ENABLE(gold,
2351[[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
2352[case "${enableval}" in
2353 default)
2354 install_gold_as_default=yes
2355 ;;
2356 yes)
2357 if test x${default_ld} != x; then
2358 install_gold_as_default=yes
2359 fi
2360 ;;
2361 no)
2362 ;;
2363 *)
2364 AC_MSG_ERROR([invalid --enable-gold argument])
2365 ;;
560d6bb9 2366 esac])
9b4ea463 2367
d2aaa43f 2368# Identify the linker which will work hand-in-glove with the newly
2369# built GCC, so that we can examine its features. This is the linker
2370# which will be driven by the driver program.
2371#
2372# If build != host, and we aren't building gas in-tree, we identify a
2373# build->target linker and hope that it will have the same features
2374# as the host->target linker we'll be using.
0d6378a9 2375gcc_cv_gld_major_version=
2376gcc_cv_gld_minor_version=
2377gcc_cv_ld_gld_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/ld
9b4ea463 2378gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold
0d6378a9 2379gcc_cv_ld_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
c47832b1 2380
2381AS_VAR_SET_IF(gcc_cv_ld,, [
0d6378a9 2382if test -x "$DEFAULT_LINKER"; then
2383 gcc_cv_ld="$DEFAULT_LINKER"
9b4ea463 2384elif test $install_gold_as_default = yes \
2385 && test -f $gcc_cv_ld_gold_srcdir/configure.ac \
2386 && test -f ../gold/Makefile \
2387 && test x$build = x$host; then
2388 gcc_cv_ld=../gold/ld-new$build_exeext
e757a6a8 2389elif test -f $gcc_cv_ld_gld_srcdir/configure.ac \
58220290 2390 && test -f ../ld/Makefile \
2391 && test x$build = x$host; then
c47832b1 2392 gcc_cv_ld=../ld/ld-new$build_exeext
2393elif test -x collect-ld$build_exeext; then
2394 # Build using linker in the current directory.
2395 gcc_cv_ld=./collect-ld$build_exeext
f3599371 2396elif ( set dummy $LD_FOR_TARGET; test -x $[2] ); then
c47832b1 2397 gcc_cv_ld="$LD_FOR_TARGET"
2398else
2399 AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
2400fi])
2401
a93e9832 2402ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld
61f41b94 2403PLUGIN_LD_SUFFIX=`basename $gcc_cv_ld | sed -e "s,$target_alias-,,"`
eadecd28 2404# if the PLUGIN_LD is set ld-new, just have it as ld
2405# as that is the installed named.
71f006b8 2406if test x$PLUGIN_LD_SUFFIX = xld-new \
2407 || test x$PLUGIN_LD_SUFFIX = xcollect-ld ; then
eadecd28 2408 PLUGIN_LD_SUFFIX=ld
2409fi
a93e9832 2410AC_ARG_WITH(plugin-ld,
bc6c87c1 2411[AS_HELP_STRING([[--with-plugin-ld=[ARG]]], [specify the plugin linker])],
a93e9832 2412[if test x"$withval" != x; then
2413 ORIGINAL_PLUGIN_LD_FOR_TARGET="$withval"
8afc0d84 2414 PLUGIN_LD_SUFFIX="$withval"
a93e9832 2415 fi])
2416AC_SUBST(ORIGINAL_PLUGIN_LD_FOR_TARGET)
61f41b94 2417AC_DEFINE_UNQUOTED(PLUGIN_LD_SUFFIX, "$PLUGIN_LD_SUFFIX", [Specify plugin linker])
a93e9832 2418
c2ce8e07 2419# Check to see if we are using gold instead of ld
2420AC_MSG_CHECKING(whether we are using gold)
2421ld_is_gold=no
2422if test x$gcc_cv_ld != x; then
2423 if $gcc_cv_ld --version 2>/dev/null | sed 1q \
2424 | grep "GNU gold" > /dev/null; then
2425 ld_is_gold=yes
2426 fi
2427fi
2428AC_MSG_RESULT($ld_is_gold)
2429
e97f880e 2430AC_MSG_CHECKING(gold linker with split stack support as non default)
2431# Check to see if default ld is not gold, but gold is
2432# available and has support for split stack. If gcc was configured
2433# with gold then no checking is done.
2434#
2435if test x$ld_is_gold = xno && which ${gcc_cv_ld}.gold >/dev/null 2>&1; then
2436
2437# For platforms other than powerpc64*, enable as appropriate.
2438
2439 gold_non_default=no
2440 ld_gold=`which ${gcc_cv_ld}.gold`
2441# Make sure this gold has minimal split stack support
2442 if $ld_gold --help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
2443 ld_vers=`$ld_gold --version | sed 1q`
2444 gold_vers=`echo $ld_vers | sed -n \
2445 -e 's,^[[^)]]*[[ ]]\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*[[^)]]*\)) .*$,\1,p'`
2446 case $target in
2447# check that the gold version contains the complete split stack support
2448# on powerpc64 big and little endian
2449 powerpc64*-*-*)
2450 case "$gold_vers" in
2451 2.25.[[1-9]]*|2.2[[6-9]][[.0-9]]*|2.[[3-9]][[.0-9]]*|[[3-9]].[[.0-9]]*) gold_non_default=yes
2452 ;;
2453 *) gold_non_default=no
2454 ;;
2455 esac
2456 ;;
2457 esac
2458 fi
2459 if test $gold_non_default = yes; then
2460 AC_DEFINE(HAVE_GOLD_NON_DEFAULT_SPLIT_STACK, 1,
2461 [Define if the gold linker supports split stack and is available as a non-default])
2462 fi
2463fi
2464AC_MSG_RESULT($gold_non_default)
2465
c47832b1 2466ORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
2467AC_SUBST(ORIGINAL_LD_FOR_TARGET)
bdbe7091 2468case "$ORIGINAL_LD_FOR_TARGET" in
2469 ./collect-ld | ./collect-ld$build_exeext) ;;
2470 *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;;
2471esac
c47832b1 2472
2473AC_MSG_CHECKING(what linker to use)
c5f741b3 2474if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext \
2475 || test "$gcc_cv_ld" = ../gold/ld-new$build_exeext; then
58220290 2476 # Single tree build which includes ld. We want to prefer it
2477 # over whatever linker top-level may have detected, since
2478 # we'll use what we're building after installation anyway.
c47832b1 2479 AC_MSG_RESULT(newly built ld)
7349ace9 2480 in_tree_ld=yes
0dac358a 2481 in_tree_ld_is_elf=no
2482 if (grep 'EMUL = .*elf' ../ld/Makefile \
092f763e 2483 || grep 'EMUL = .*linux' ../ld/Makefile \
2484 || grep 'EMUL = .*lynx' ../ld/Makefile) > /dev/null; then
0dac358a 2485 in_tree_ld_is_elf=yes
c5f741b3 2486 elif test "$ld_is_gold" = yes; then
2487 in_tree_ld_is_elf=yes
0dac358a 2488 fi
e757a6a8 2489 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
0d6378a9 2490 do
2491changequote(,)dnl
06c2a8a3 2492 gcc_cv_gld_version=`sed -n -e 's/^[ ]*VERSION=[^0-9A-Za-z_]*\([0-9]*\.[0-9]*.*\)/VERSION=\1/p' < $f`
0d6378a9 2493 if test x$gcc_cv_gld_version != x; then
2494 break
2495 fi
2496 done
06c2a8a3 2497 case $gcc_cv_gld_version in
2498 VERSION=[0-9]*) ;;
2499changequote([,])dnl
2500 *) AC_MSG_ERROR([[cannot find version of in-tree linker]]) ;;
2501changequote(,)dnl
2502 esac
0d6378a9 2503 gcc_cv_gld_major_version=`expr "$gcc_cv_gld_version" : "VERSION=\([0-9]*\)"`
2504 gcc_cv_gld_minor_version=`expr "$gcc_cv_gld_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
2505changequote([,])dnl
9b4ea463 2506 ORIGINAL_LD_BFD_FOR_TARGET=../ld/ld-new$build_exeext
2507 ORIGINAL_LD_GOLD_FOR_TARGET=../gold/ld-new$build_exeext
c47832b1 2508else
2509 AC_MSG_RESULT($gcc_cv_ld)
2510 in_tree_ld=no
9b4ea463 2511 gcc_cvs_ld_program=`dirname $gcc_cv_ld`/`basename $gcc_cv_ld $host_exeext`
2512 ORIGINAL_LD_BFD_FOR_TARGET=${gcc_cvs_ld_program}.bfd$host_exeext
2513 ORIGINAL_LD_GOLD_FOR_TARGET=${gcc_cvs_ld_program}.gold$host_exeext
0d6378a9 2514fi
2515
9b4ea463 2516AC_SUBST(ORIGINAL_LD_BFD_FOR_TARGET)
2517AC_SUBST(ORIGINAL_LD_GOLD_FOR_TARGET)
2518
398f3874 2519# Figure out what nm we will be using.
37c5bbf8 2520gcc_cv_binutils_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/binutils
c47832b1 2521AS_VAR_SET_IF(gcc_cv_nm,, [
e757a6a8 2522if test -f $gcc_cv_binutils_srcdir/configure.ac \
13648950 2523 && test -f ../binutils/Makefile \
2524 && test x$build = x$host; then
f32e3360 2525 gcc_cv_nm=../binutils/nm-new$build_exeext
2526elif test -x nm$build_exeext; then
68c3d71c 2527 gcc_cv_nm=./nm$build_exeext
f3599371 2528elif ( set dummy $NM_FOR_TARGET; test -x $[2] ); then
c47832b1 2529 gcc_cv_nm="$NM_FOR_TARGET"
2530else
2531 AC_PATH_PROG(gcc_cv_nm, $NM_FOR_TARGET)
2532fi])
f32e3360 2533
f32e3360 2534AC_MSG_CHECKING(what nm to use)
c47832b1 2535if test "$gcc_cv_nm" = ../binutils/nm-new$build_exeext; then
2536 # Single tree build which includes binutils.
2537 AC_MSG_RESULT(newly built nm)
2538 in_tree_nm=yes
2539else
2540 AC_MSG_RESULT($gcc_cv_nm)
2541 in_tree_nm=no
2542fi
2543
2544ORIGINAL_NM_FOR_TARGET=$gcc_cv_nm
2545AC_SUBST(ORIGINAL_NM_FOR_TARGET)
bdbe7091 2546case "$ORIGINAL_NM_FOR_TARGET" in
2547 ./nm | ./nm$build_exeext) ;;
2548 *) AC_CONFIG_FILES(nm:exec-tool.in, [chmod +x nm]) ;;
2549esac
2550
398f3874 2551
74e387fc 2552# Figure out what objdump we will be using.
c47832b1 2553AS_VAR_SET_IF(gcc_cv_objdump,, [
e757a6a8 2554if test -f $gcc_cv_binutils_srcdir/configure.ac \
13648950 2555 && test -f ../binutils/Makefile \
2556 && test x$build = x$host; then
37c5bbf8 2557 # Single tree build which includes binutils.
f32e3360 2558 gcc_cv_objdump=../binutils/objdump$build_exeext
ae74ffb7 2559elif test -x objdump$build_exeext; then
2560 gcc_cv_objdump=./objdump$build_exeext
f3599371 2561elif ( set dummy $OBJDUMP_FOR_TARGET; test -x $[2] ); then
c47832b1 2562 gcc_cv_objdump="$OBJDUMP_FOR_TARGET"
2563else
2564 AC_PATH_PROG(gcc_cv_objdump, $OBJDUMP_FOR_TARGET)
2565fi])
ae74ffb7 2566
ae74ffb7 2567AC_MSG_CHECKING(what objdump to use)
c47832b1 2568if test "$gcc_cv_objdump" = ../binutils/objdump$build_exeext; then
2569 # Single tree build which includes binutils.
2570 AC_MSG_RESULT(newly built objdump)
2571elif test x$gcc_cv_objdump = x; then
2572 AC_MSG_RESULT(not found)
2573else
2574 AC_MSG_RESULT($gcc_cv_objdump)
2575fi
74e387fc 2576
8eac5d17 2577# Figure out what readelf we will be using.
2578AS_VAR_SET_IF(gcc_cv_readelf,, [
e757a6a8 2579if test -f $gcc_cv_binutils_srcdir/configure.ac \
8eac5d17 2580 && test -f ../binutils/Makefile \
2581 && test x$build = x$host; then
2582 # Single tree build which includes binutils.
2583 gcc_cv_readelf=../binutils/readelf$build_exeext
2584elif test -x readelf$build_exeext; then
2585 gcc_cv_readelf=./readelf$build_exeext
c5b80c25 2586elif ( set dummy $READELF_FOR_TARGET; test -x $[2] ); then
2587 gcc_cv_readelf="$READELF_FOR_TARGET"
8eac5d17 2588else
c5b80c25 2589 AC_PATH_PROG(gcc_cv_readelf, $READELF_FOR_TARGET)
8eac5d17 2590fi])
2591
2592AC_MSG_CHECKING(what readelf to use)
2593if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then
2594 # Single tree build which includes binutils.
2595 AC_MSG_RESULT(newly built readelf)
2596elif test x$gcc_cv_readelf = x; then
2597 AC_MSG_RESULT(not found)
2598else
2599 AC_MSG_RESULT($gcc_cv_readelf)
2600fi
2601
16706a2e 2602# Figure out what otool we will be using.
2603AS_VAR_SET_IF(gcc_cv_otool,, [
2604if test -x otool$build_exeext; then
2605 gcc_cv_otool=./otool$build_exeext
2606elif ( set dummy $OTOOL_FOR_TARGET; test -x $[2] ); then
2607 gcc_cv_otool="$OTOOL_FOR_TARGET"
2608else
2609 AC_PATH_PROG(gcc_cv_otool, $OTOOL_FOR_TARGET)
2610fi])
2611
2612AC_MSG_CHECKING(what otool to use)
2613if test x$gcc_cv_otool = x; then
2614 AC_MSG_RESULT(not found)
2615else
2616 AC_MSG_RESULT($gcc_cv_otool)
2617fi
2618
398f3874 2619# Figure out what assembler alignment features are present.
6d6c1801 2620gcc_GAS_CHECK_FEATURE([.balign and .p2align], gcc_cv_as_balign_and_p2align,
2621 [2,6,0],,
2622[.balign 4
2623.p2align 2],,
2624[AC_DEFINE(HAVE_GAS_BALIGN_AND_P2ALIGN, 1,
2625 [Define if your assembler supports .balign and .p2align.])])
2626
2627gcc_GAS_CHECK_FEATURE([.p2align with maximum skip], gcc_cv_as_max_skip_p2align,
2628 [2,8,0],,
2629 [.p2align 4,,7],,
2630[AC_DEFINE(HAVE_GAS_MAX_SKIP_P2ALIGN, 1,
2631 [Define if your assembler supports specifying the maximum number
2632 of bytes to skip when using the GAS .p2align command.])])
2633
4be92808 2634gcc_GAS_CHECK_FEATURE([.literal16], gcc_cv_as_literal16,
2635 [2,8,0],,
2636 [.literal16],,
2637[AC_DEFINE(HAVE_GAS_LITERAL16, 1,
2638 [Define if your assembler supports .literal16.])])
2639
6d6c1801 2640gcc_GAS_CHECK_FEATURE([working .subsection -1], gcc_cv_as_subsection_m1,
2641 [elf,2,9,0],,
2642 [conftest_label1: .word 0
b6d28b19 2643.subsection -1
2644conftest_label2: .word 0
6d6c1801 2645.previous],
2646 [if test x$gcc_cv_nm != x; then
2647 $gcc_cv_nm conftest.o | grep conftest_label1 > conftest.nm1
2648 $gcc_cv_nm conftest.o | grep conftest_label2 | sed -e 's/label2/label1/' > conftest.nm2
2649 if cmp conftest.nm1 conftest.nm2 > /dev/null 2>&1
2650 then :
2651 else gcc_cv_as_subsection_m1=yes
2652 fi
2653 rm -f conftest.nm1 conftest.nm2
2654 fi],
2655 [AC_DEFINE(HAVE_GAS_SUBSECTION_ORDERING, 1,
2656 [Define if your assembler supports .subsection and .subsection -1 starts
2657 emitting at the beginning of your section.])])
2658
2659gcc_GAS_CHECK_FEATURE([.weak], gcc_cv_as_weak,
2660 [2,2,0],,
2661 [ .weak foobar],,
2662[AC_DEFINE(HAVE_GAS_WEAK, 1, [Define if your assembler supports .weak.])])
2663
f4a30bd7 2664gcc_GAS_CHECK_FEATURE([.weakref], gcc_cv_as_weakref,
2665 [2,17,0],,
2666 [ .weakref foobar, barfnot],,
2667[AC_DEFINE(HAVE_GAS_WEAKREF, 1, [Define if your assembler supports .weakref.])])
2668
2455c36b 2669gcc_GAS_CHECK_FEATURE([.nsubspa comdat], gcc_cv_as_nsubspa_comdat,
2670 [2,15,91],,
2671 [ .SPACE $TEXT$
2672 .NSUBSPA $CODE$,COMDAT],,
2673[AC_DEFINE(HAVE_GAS_NSUBSPA_COMDAT, 1, [Define if your assembler supports .nsubspa comdat option.])])
2674
6d6c1801 2675# .hidden needs to be supported in both the assembler and the linker,
2676# because GNU LD versions before 2.12.1 have buggy support for STV_HIDDEN.
2677# This is irritatingly difficult to feature test for; we have to check the
2678# date string after the version number. If we've got an in-tree
2679# ld, we don't know its patchlevel version, so we set the baseline at 2.13
2680# to be safe.
2681# The gcc_GAS_CHECK_FEATURE call just sets a cache variable.
3b118414 2682case "${target}" in
2683 *-*-aix*)
2684 conftest_s=' .globl foobar,hidden'
2685 ;;
2686 *)
2687 conftest_s=' .hidden foobar
2688foobar:'
2689 ;;
2690esac
6d6c1801 2691gcc_GAS_CHECK_FEATURE([.hidden], gcc_cv_as_hidden,
3b118414 2692 [elf,2,13,0],, [$conftest_s])
b9099475 2693case "${target}" in
2694 *-*-darwin*)
2695 # Darwin as has some visibility support, though with a different syntax.
2696 gcc_cv_as_hidden=yes
2697 ;;
2698esac
6d6c1801 2699
85c0a25c 2700# gnu_indirect_function type is an extension proposed at
2701# http://groups.google/com/group/generic-abi/files. It allows dynamic runtime
2702# selection of function implementation
1c6e0788 2703AC_ARG_ENABLE(gnu-indirect-function,
2704 [AS_HELP_STRING([--enable-gnu-indirect-function],
2705 [enable the use of the @gnu_indirect_function to glibc systems])],
2706 [case $enable_gnu_indirect_function in
2707 yes | no) ;;
2708 *) AC_MSG_ERROR(['$enable_gnu_indirect_function' is an invalid value for --enable-gnu-indirect-function.
2709Valid choices are 'yes' and 'no'.]) ;;
2710 esac],
2711 [enable_gnu_indirect_function="$default_gnu_indirect_function"])
df9f2e40 2712
2713gif=`if test x$enable_gnu_indirect_function = xyes; then echo 1; else echo 0; fi`
2714AC_DEFINE_UNQUOTED(HAVE_GNU_INDIRECT_FUNCTION, $gif,
2715[Define if your system supports gnu indirect functions.])
2716
85c0a25c 2717
02bc02b1 2718changequote(,)dnl
2719if test $in_tree_ld != yes ; then
2720 ld_ver=`$gcc_cv_ld --version 2>/dev/null | sed 1q`
c5f741b3 2721 if echo "$ld_ver" | grep GNU > /dev/null; then
2722 if test x"$ld_is_gold" = xyes; then
2723 # GNU gold --version looks like this:
2724 #
2725 # GNU gold (GNU Binutils 2.21.51.20110225) 1.11
2726 #
2727 # We extract the binutils version which is more familiar and specific
2728 # than the gold version.
2729 ld_vers=`echo $ld_ver | sed -n \
2730 -e 's,^[^)]*[ ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
2731 else
2732 # GNU ld --version looks like this:
2733 #
2734 # GNU ld (GNU Binutils) 2.21.51.20110225
2735 ld_vers=`echo $ld_ver | sed -n \
2736 -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
2737 fi
02bc02b1 2738 ld_date=`echo $ld_ver | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
2739 ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
2740 ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
2741 ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
dfbfdd90 2742 else
2743 case "${target}" in
2744 *-*-solaris2*)
e1c571cf 2745 # Solaris 2 ld -V output looks like this for a regular version:
dfbfdd90 2746 #
e1c571cf 2747 # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1699
2748 #
2749 # but test versions add stuff at the end:
2750 #
2751 # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1701:onnv-ab196087-6931056-03/25/10
2752 #
e1c571cf 2753 # ld and ld.so.1 are guaranteed to be updated in lockstep, so ld version
2754 # numbers can be used in ld.so.1 feature checks even if a different
2755 # linker is configured.
dfbfdd90 2756 ld_ver=`$gcc_cv_ld -V 2>&1`
015164b9 2757 if echo "$ld_ver" | grep 'Solaris Link Editors' > /dev/null; then
dfbfdd90 2758 ld_vers=`echo $ld_ver | sed -n \
015164b9 2759 -e 's,^.*: 5\.[0-9][0-9]*-\([0-9]\.[0-9][0-9]*\).*$,\1,p'`
dfbfdd90 2760 ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
2761 ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
2762 fi
2763 ;;
2764 esac
02bc02b1 2765 fi
2766fi
2767changequote([,])dnl
2768
6d6c1801 2769AC_CACHE_CHECK(linker for .hidden support, gcc_cv_ld_hidden,
a6b57da2 2770[[if test $in_tree_ld = yes ; then
6d6c1801 2771 gcc_cv_ld_hidden=no
2772 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 \
2773 && test $in_tree_ld_is_elf = yes; then
2774 gcc_cv_ld_hidden=yes
2775 fi
2776else
2777 gcc_cv_ld_hidden=yes
c5f741b3 2778 if test x"$ld_is_gold" = xyes; then
2779 :
2780 elif echo "$ld_ver" | grep GNU > /dev/null; then
1305227a 2781 case "${target}" in
2782 mmix-knuth-mmixware)
2783 # The linker emits by default mmo, not ELF, so "no" is appropriate.
2784 gcc_cv_ld_hidden=no
2785 ;;
2786 esac
6d6c1801 2787 if test 0"$ld_date" -lt 20020404; then
2788 if test -n "$ld_date"; then
2789 # If there was date string, but was earlier than 2002-04-04, fail
2790 gcc_cv_ld_hidden=no
2791 elif test -z "$ld_vers"; then
2792 # If there was no date string nor ld version number, something is wrong
2793 gcc_cv_ld_hidden=no
2794 else
6d6c1801 2795 test -z "$ld_vers_patch" && ld_vers_patch=0
2796 if test "$ld_vers_major" -lt 2; then
2797 gcc_cv_ld_hidden=no
2798 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 12; then
2799 gcc_cv_ld_hidden="no"
2800 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 12 -a "$ld_vers_patch" -eq 0; then
2801 gcc_cv_ld_hidden=no
a985a485 2802 fi
6d6c1801 2803 fi
61ab9ea9 2804 fi
6d6c1801 2805 else
6f8f5d6c 2806 case "${target}" in
3b118414 2807 *-*-aix[789]*)
2808 gcc_cv_ld_hidden=yes
2809 ;;
b9099475 2810 *-*-darwin*)
2811 # Darwin ld has some visibility support.
2812 gcc_cv_ld_hidden=yes
2813 ;;
ecb7c90c 2814 hppa64*-*-hpux* | ia64*-*-hpux*)
6f8f5d6c 2815 gcc_cv_ld_hidden=yes
2816 ;;
0fd03648 2817 *-*-solaris2*)
cbbd336d 2818 # Support for .hidden in Sun ld appeared in Solaris 9 FCS, but
2819 # .symbolic was only added in Solaris 9 12/02.
8177d9d5 2820 gcc_cv_ld_hidden=yes
2821 ;;
6f8f5d6c 2822 *)
2823 gcc_cv_ld_hidden=no
2824 ;;
2825 esac
6d6c1801 2826 fi
a6b57da2 2827fi]])
6d6c1801 2828libgcc_visibility=no
e8c2499b 2829AC_SUBST(libgcc_visibility)
fcd42b1e 2830GCC_TARGET_TEMPLATE([HAVE_GAS_HIDDEN])
0b4b4686 2831if test $gcc_cv_as_hidden = yes && test $gcc_cv_ld_hidden = yes; then
6d6c1801 2832 libgcc_visibility=yes
2833 AC_DEFINE(HAVE_GAS_HIDDEN, 1,
2834 [Define if your assembler and linker support .hidden.])
2835fi
5be729c9 2836
e94830ac 2837AC_MSG_CHECKING(linker read-only and read-write section mixing)
2838gcc_cv_ld_ro_rw_mix=unknown
2839if test $in_tree_ld = yes ; then
2840 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 \
2841 && test $in_tree_ld_is_elf = yes; then
2842 gcc_cv_ld_ro_rw_mix=read-write
2843 fi
2844elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
2845 echo '.section myfoosect, "a"' > conftest1.s
2846 echo '.section myfoosect, "aw"' > conftest2.s
2847 echo '.byte 1' >> conftest2.s
2848 echo '.section myfoosect, "a"' > conftest3.s
2849 echo '.byte 0' >> conftest3.s
2850 if $gcc_cv_as -o conftest1.o conftest1.s > /dev/null 2>&1 \
2851 && $gcc_cv_as -o conftest2.o conftest2.s > /dev/null 2>&1 \
2852 && $gcc_cv_as -o conftest3.o conftest3.s > /dev/null 2>&1 \
2853 && $gcc_cv_ld -shared -o conftest1.so conftest1.o \
2854 conftest2.o conftest3.o > /dev/null 2>&1; then
2855 gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest1.so \
2856 | sed -e '/myfoosect/!d' -e N`
2857 if echo "$gcc_cv_ld_ro_rw_mix" | grep CONTENTS > /dev/null; then
2858 if echo "$gcc_cv_ld_ro_rw_mix" | grep READONLY > /dev/null; then
2859 gcc_cv_ld_ro_rw_mix=read-only
2860 else
2861 gcc_cv_ld_ro_rw_mix=read-write
2862 fi
2863 fi
2864 fi
2865changequote(,)dnl
2866 rm -f conftest.* conftest[123].*
2867changequote([,])dnl
2868fi
2869if test x$gcc_cv_ld_ro_rw_mix = xread-write; then
2870 AC_DEFINE(HAVE_LD_RO_RW_SECTION_MIXING, 1,
2871 [Define if your linker links a mix of read-only
2872 and read-write sections into a read-write section.])
2873fi
2874AC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)
2875
35f51475 2876gcc_AC_INITFINI_ARRAY
2877
6d6c1801 2878# Check if we have .[us]leb128, and support symbol arithmetic with it.
2879gcc_GAS_CHECK_FEATURE([.sleb128 and .uleb128], gcc_cv_as_leb128,
2880 [elf,2,11,0],,
2881[ .data
37a2e188 2882 .uleb128 L2 - L1
2883L1:
2884 .uleb128 1280
2885 .sleb128 -1010
6d6c1801 2886L2:],
a6b57da2 2887[[# GAS versions before 2.11 do not support uleb128,
6d6c1801 2888 # despite appearing to.
2889 # ??? There exists an elf-specific test that will crash
2890 # the assembler. Perhaps it's better to figure out whether
2891 # arbitrary sections are supported and try the test.
43557a8f 2892 as_ver=`$gcc_cv_as --version 2>/dev/null | sed 1q`
6d6c1801 2893 if echo "$as_ver" | grep GNU > /dev/null; then
b29dc614 2894 as_vers=`echo $as_ver | sed -n \
c7871c82 2895 -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
b29dc614 2896 as_major=`expr "$as_vers" : '\([0-9]*\)'`
2897 as_minor=`expr "$as_vers" : '[0-9]*\.\([0-9]*\)'`
6d6c1801 2898 if test $as_major -eq 2 && test $as_minor -lt 11
2899 then :
2900 else gcc_cv_as_leb128=yes
2901 fi
a6b57da2 2902 fi]],
6d6c1801 2903 [AC_DEFINE(HAVE_AS_LEB128, 1,
b4866769 2904 [Define if your assembler supports .sleb128 and .uleb128.])],
2905 [AC_DEFINE(HAVE_AS_LEB128, 0,
6d6c1801 2906 [Define if your assembler supports .sleb128 and .uleb128.])])
2907
d6a34f83 2908# Determine if an .eh_frame section is read-only.
2909gcc_fn_eh_frame_ro () {
2910 $gcc_cv_as $1 -o conftest.o conftest.s > /dev/null 2>&1 && \
2911 $gcc_cv_objdump -h conftest.o 2>/dev/null | \
2912 sed -e '/.eh_frame/!d' -e N | grep READONLY > /dev/null
2913}
2914
fb39ff6e 2915# Check if we have assembler support for unwind directives.
2916gcc_GAS_CHECK_FEATURE([cfi directives], gcc_cv_as_cfi_directive,
90deca2e 2917 ,,
fb39ff6e 2918[ .text
2919 .cfi_startproc
2920 .cfi_offset 0, 0
2921 .cfi_same_value 1
2922 .cfi_def_cfa 1, 2
2923 .cfi_escape 1, 2, 3, 4, 5
e94830ac 2924 .cfi_endproc],
2925[case "$target" in
2926 *-*-solaris*)
2927 # If the linker used on Solaris (like Sun ld) isn't capable of merging
2928 # read-only and read-write sections, we need to make sure that the
2929 # assembler used emits read-write .eh_frame sections.
d6a34f83 2930 if test "x$gcc_cv_ld_ro_rw_mix" = xread-write; then
2931 gcc_cv_as_cfi_directive=yes
2932 elif test "x$gcc_cv_objdump" = x; then
2933 # No objdump, err on the side of caution.
2934 gcc_cv_as_cfi_directive=no
2935 else
2936 if test x$gas = xyes; then
2937 as_32_opt="--32"
2938 as_64_opt="--64"
e94830ac 2939 else
d6a34f83 2940 as_32_opt="-m32"
2941 as_64_opt="-m64"
e94830ac 2942 fi
d6a34f83 2943 case "$target" in
2944 sparc*-*-solaris2.*)
2945 # On Solaris/SPARC, .eh_frame sections should always be read-write.
2946 if gcc_fn_eh_frame_ro $as_32_opt \
2947 || gcc_fn_eh_frame_ro $as_64_opt; then
2948 gcc_cv_as_cfi_directive=no
2949 else
2950 gcc_cv_as_cfi_directive=yes
2951 fi
2952 ;;
2953 i?86-*-solaris2.* | x86_64-*-solaris2.*)
2954 # On Solaris/x86, make sure that GCC and assembler agree on using
2955 # read-only .eh_frame sections for 64-bit.
2956 if gcc_fn_eh_frame_ro $as_32_opt; then
2957 gcc_cv_as_cfi_directive=no
2958 elif gcc_fn_eh_frame_ro $as_64_opt; then
2959 gcc_cv_as_cfi_directive=yes
2960 else
2961 gcc_cv_as_cfi_directive=no
2962 fi
2963 ;;
2964 esac
e94830ac 2965 fi
2966 ;;
2967 *-*-*)
2968 gcc_cv_as_cfi_directive=yes
2969 ;;
2970esac])
331fc3f2 2971if test $gcc_cv_as_cfi_directive = yes && test x$gcc_cv_objdump != x; then
8eac5d17 2972gcc_GAS_CHECK_FEATURE([working cfi advance], gcc_cv_as_cfi_advance_working,
2973 ,,
2974[ .text
2975 .cfi_startproc
2976 .cfi_adjust_cfa_offset 64
1bf24b5f 2977 .skip 75040, 0
8eac5d17 2978 .cfi_adjust_cfa_offset 128
2979 .cfi_endproc],
a6b57da2 2980[[
331fc3f2 2981if $gcc_cv_objdump -Wf conftest.o 2>/dev/null \
1bf24b5f 2982 | grep 'DW_CFA_advance_loc[24]:[ ][ ]*75040[ ]' >/dev/null; then
8eac5d17 2983 gcc_cv_as_cfi_advance_working=yes
2984fi
a6b57da2 2985]])
8eac5d17 2986else
331fc3f2 2987 # no objdump, err on the side of caution
f9a42338 2988 gcc_cv_as_cfi_advance_working=no
8eac5d17 2989fi
ff5f1a52 2990GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_DIRECTIVE)
fb39ff6e 2991AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_DIRECTIVE,
8eac5d17 2992 [`if test $gcc_cv_as_cfi_directive = yes \
2993 && test $gcc_cv_as_cfi_advance_working = yes; then echo 1; else echo 0; fi`],
3dcd5df1 2994 [Define 0/1 if your assembler supports CFI directives.])
2995
ff5f1a52 2996GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
3dcd5df1 2997gcc_GAS_CHECK_FEATURE([cfi personality directive],
90deca2e 2998 gcc_cv_as_cfi_personality_directive, ,,
3dcd5df1 2999[ .text
846a6223 3000 .cfi_startproc
3dcd5df1 3001 .cfi_personality 0, symbol
3002 .cfi_endproc])
3003AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE,
f00f02a3 3004 [`if test $gcc_cv_as_cfi_personality_directive = yes; then echo 1; else echo 0; fi`],
3dcd5df1 3005 [Define 0/1 if your assembler supports .cfi_personality.])
fb39ff6e 3006
033a2356 3007gcc_GAS_CHECK_FEATURE([cfi sections directive],
3008 gcc_cv_as_cfi_sections_directive, ,,
3009[ .text
3010 .cfi_sections .debug_frame, .eh_frame
3011 .cfi_startproc
331fc3f2 3012 .cfi_endproc],
3013[case $target_os in
297677bc 3014 win32 | pe | cygwin* | mingw32*)
331fc3f2 3015 # Need to check that we generated the correct relocation for the
3016 # .debug_frame section. This was fixed for binutils 2.21.
3017 gcc_cv_as_cfi_sections_directive=no
3018 if test "x$gcc_cv_objdump" != x; then
3019 if $gcc_cv_objdump -j .debug_frame -r conftest.o 2>/dev/null | \
3020 grep secrel > /dev/null; then
3021 gcc_cv_as_cfi_sections_directive=yes
3022 fi
3023 fi
3024 ;;
3025 *)
3026 gcc_cv_as_cfi_sections_directive=yes
3027 ;;
3028esac])
ff5f1a52 3029GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
033a2356 3030AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_SECTIONS_DIRECTIVE,
f00f02a3 3031 [`if test $gcc_cv_as_cfi_sections_directive = yes; then echo 1; else echo 0; fi`],
033a2356 3032 [Define 0/1 if your assembler supports .cfi_sections.])
3033
6d6c1801 3034# GAS versions up to and including 2.11.0 may mis-optimize
3035# .eh_frame data.
3036gcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,
3037 [elf,2,12,0],,
3038[ .text
c3f311c4 3039.LFB1:
3040 .4byte 0
3041.L1:
3042 .4byte 0
3043.LFE1:
3044 .section .eh_frame,"aw",@progbits
3045__FRAME_BEGIN__:
3046 .4byte .LECIE1-.LSCIE1
3047.LSCIE1:
3048 .4byte 0x0
3049 .byte 0x1
3050 .ascii "z\0"
3051 .byte 0x1
3052 .byte 0x78
3053 .byte 0x1a
3054 .byte 0x0
3055 .byte 0x4
3056 .4byte 1
3057 .p2align 1
3058.LECIE1:
3059.LSFDE1:
3060 .4byte .LEFDE1-.LASFDE1
3061.LASFDE1:
3062 .4byte .LASFDE1-__FRAME_BEGIN__
3063 .4byte .LFB1
3064 .4byte .LFE1-.LFB1
3065 .byte 0x4
3066 .4byte .LFE1-.LFB1
3067 .byte 0x4
3068 .4byte .L1-.LFB1
6d6c1801 3069.LEFDE1:],
6a8964db 3070[ dnl # For autoconf 2.5x, must protect trailing spaces with @&t@.
3071cat > conftest.lit <<EOF
c3f311c4 3072 0000 10000000 00000000 017a0001 781a0004 .........z..x...
3073 0010 01000000 12000000 18000000 00000000 ................
6a8964db 3074 0020 08000000 04080000 0044 .........D @&t@
82ebecf9 3075EOF
6a8964db 3076cat > conftest.big <<EOF
82ebecf9 3077 0000 00000010 00000000 017a0001 781a0004 .........z..x...
3078 0010 00000001 00000012 00000018 00000000 ................
6a8964db 3079 0020 00000008 04000000 0844 .........D @&t@
c3f311c4 3080EOF
6d6c1801 3081 # If the assembler didn't choke, and we can objdump,
3082 # and we got the correct data, then succeed.
a9e7d751 3083 # The text in the here-document typically retains its unix-style line
3084 # endings, while the output of objdump will use host line endings.
3085 # Therefore, use diff -b for the comparisons.
6d6c1801 3086 if test x$gcc_cv_objdump != x \
3087 && $gcc_cv_objdump -s -j .eh_frame conftest.o 2>/dev/null \
3088 | tail -3 > conftest.got \
a9e7d751 3089 && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \
3090 || diff -b conftest.big conftest.got > /dev/null 2>&1; }
6d6c1801 3091 then
3092 gcc_cv_as_eh_frame=yes
3093 elif AC_TRY_COMMAND($gcc_cv_as -o conftest.o --traditional-format /dev/null); then
3094 gcc_cv_as_eh_frame=buggy
3095 else
3096 # Uh oh, what do we do now?
3097 gcc_cv_as_eh_frame=no
3098 fi])
3099
3100if test $gcc_cv_as_eh_frame = buggy; then
3101 AC_DEFINE(USE_AS_TRADITIONAL_FORMAT, 1,
3102 [Define if your assembler mis-optimizes .eh_frame data.])
bb2821c0 3103fi
bb2821c0 3104
f575e216 3105# Test if the assembler supports the section flag 'e' or #exclude for
3106# specifying an excluded section.
3107gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_e,
3108 [2,22,51], [--fatal-warnings],
3109 [.section foo1,"e"
3110 .byte 0,0,0,0])
3111if test $gcc_cv_as_section_exclude_e = no; then
3112 case "${target}" in
3113 # Solaris as uses #exclude instead.
3114 *-*-solaris2*)
3115 case "${target}" in
3116 sparc*-*-solaris2*)
3117 conftest_s='.section "foo1", #exclude'
3118 ;;
3119 i?86-*-solaris2* | x86_64-*-solaris2*)
3120 conftest_s='.section foo1, #exclude'
3121 ;;
3122 esac
3123 ;;
3124 esac
3125 gcc_GAS_CHECK_FEATURE([section exclude flag], gcc_cv_as_section_exclude_hash,,,
3126 [$conftest_s
3127 .byte 0,0,0,0])
3128fi
3129AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_EXCLUDE,
3130 [`if test $gcc_cv_as_section_exclude_e = yes || test $gcc_cv_as_section_exclude_hash = yes; then echo 1; else echo 0; fi`],
3131[Define if your assembler supports specifying the exclude section flag.])
3132
6d6c1801 3133gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
3134 [elf,2,12,0], [--fatal-warnings],
cdb2d692 3135 [.section .rodata.str, "aMS", @progbits, 1])
537cd941 3136if test $gcc_cv_as_shf_merge = no; then
3137 gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
3138 [elf,2,12,0], [--fatal-warnings],
3139 [.section .rodata.str, "aMS", %progbits, 1])
3140fi
cdb2d692 3141AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
3142 [`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`],
3143[Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
6d6c1801 3144
fa948efa 3145gcc_cv_ld_aligned_shf_merge=yes
3146case "$target" in
fa948efa 3147 # SHF_MERGE support is broken in Solaris ld up to Solaris 11.3/SPARC for
3148 # alignment > 1.
3149 sparc*-*-solaris2.11*)
3150 if test x"$gnu_ld" = xno \
3151 && test "$ld_vers_major" -lt 2 && test "$ld_vers_minor" -lt 3159; then
3152 gcc_cv_ld_aligned_shf_merge=no
3153 fi
3154 ;;
3155esac
3156AC_DEFINE_UNQUOTED(HAVE_LD_ALIGNED_SHF_MERGE,
3157 [`if test $gcc_cv_ld_aligned_shf_merge = yes; then echo 1; else echo 0; fi`],
3158[Define 0/1 if your linker supports the SHF_MERGE flag with section alignment > 1.])
3159
ffebb4e7 3160gcc_GAS_CHECK_FEATURE([stabs directive], gcc_cv_as_stabs_directive, ,,
3161[.stabs "gcc2_compiled.",60,0,0,0],,
3162[AC_DEFINE(HAVE_AS_STABS_DIRECTIVE, 1,
3163 [Define if your assembler supports .stabs.])])
3164
3468b0d6 3165gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as)],
3166 gcc_cv_as_comdat_group,
2593b9be 3167 [elf,2,16,0], [--fatal-warnings],
537cd941 3168 [.section .text,"axG",@progbits,.foo,comdat])
3169if test $gcc_cv_as_comdat_group = yes; then
3170 gcc_cv_as_comdat_group_percent=no
3468b0d6 3171 gcc_cv_as_comdat_group_group=no
537cd941 3172else
3468b0d6 3173 gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as, %type)],
3174 gcc_cv_as_comdat_group_percent,
2593b9be 3175 [elf,2,16,0], [--fatal-warnings],
537cd941 3176 [.section .text,"axG",%progbits,.foo,comdat])
3468b0d6 3177 if test $gcc_cv_as_comdat_group_percent = yes; then
3178 gcc_cv_as_comdat_group_group=no
3179 else
3180 case "${target}" in
3181 # Sun as uses a completely different syntax.
3182 *-*-solaris2*)
3183 case "${target}" in
3184 sparc*-*-solaris2*)
3185 conftest_s='
3186 .group foo,".text%foo",#comdat
3187 .section ".text%foo", #alloc,#execinstr,#progbits
3188 .globl foo
3189 foo:
3190 '
3191 ;;
0fd03648 3192 i?86-*-solaris2* | x86_64-*-solaris2*)
3468b0d6 3193 conftest_s='
3194 .group foo,.text%foo,#comdat
3195 .section .text%foo, "ax", @progbits
3196 .globl foo
3197 foo:
3198 '
3199 ;;
3200 esac
3201 gcc_GAS_CHECK_FEATURE([COMDAT group support (Sun as, .group)],
3202 gcc_cv_as_comdat_group_group,
3203 ,, [$conftest_s])
3204 ;;
3205 esac
66924b3f 3206 if test -z "${gcc_cv_as_comdat_group_group+set}"; then
3207 gcc_cv_as_comdat_group_group=no
3208 fi
3468b0d6 3209 fi
537cd941 3210fi
c2ce8e07 3211if test x"$ld_is_gold" = xyes; then
3212 comdat_group=yes
3213elif test $in_tree_ld = yes ; then
e97d11c2 3214 comdat_group=no
3215 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 \
3216 && test $in_tree_ld_is_elf = yes; then
3217 comdat_group=yes
3218 fi
dfbfdd90 3219elif echo "$ld_ver" | grep GNU > /dev/null; then
2593b9be 3220 comdat_group=yes
3221 if test 0"$ld_date" -lt 20050308; then
3222 if test -n "$ld_date"; then
3223 # If there was date string, but was earlier than 2005-03-08, fail
3224 comdat_group=no
3225 elif test "$ld_vers_major" -lt 2; then
3226 comdat_group=no
3227 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
3228 comdat_group=no
3229 fi
3230 fi
f3424fe6 3231else
dfbfdd90 3232changequote(,)dnl
3233 case "${target}" in
3234 *-*-solaris2.1[1-9]*)
3468b0d6 3235 comdat_group=no
dfbfdd90 3236 # Sun ld has COMDAT group support since Solaris 9, but it doesn't
3237 # interoperate with GNU as until Solaris 11 build 130, i.e. ld
3238 # version 1.688.
3239 #
3468b0d6 3240 # If using Sun as for COMDAT group as emitted by GCC, one needs at
3241 # least ld version 1.2267.
3242 if test "$ld_vers_major" -gt 1; then
dfbfdd90 3243 comdat_group=yes
3468b0d6 3244 elif test "x$gas_flag" = xyes && test "$ld_vers_minor" -ge 1688; then
3245 comdat_group=yes
3246 elif test "$ld_vers_minor" -ge 2267; then
3247 comdat_group=yes
dfbfdd90 3248 fi
3249 ;;
3250 *)
3251 # Assume linkers other than GNU ld don't support COMDAT group.
3252 comdat_group=no
3253 ;;
3254 esac
3255changequote([,])dnl
f3424fe6 3256fi
dfbfdd90 3257# Allow overriding the automatic COMDAT group tests above.
3258AC_ARG_ENABLE(comdat,
3259 [AS_HELP_STRING([--enable-comdat], [enable COMDAT group support])],
3260 [comdat_group="$enable_comdat"])
f3424fe6 3261if test $comdat_group = no; then
3262 gcc_cv_as_comdat_group=no
3263 gcc_cv_as_comdat_group_percent=no
3468b0d6 3264 gcc_cv_as_comdat_group_group=no
2593b9be 3265fi
3266AC_DEFINE_UNQUOTED(HAVE_COMDAT_GROUP,
3468b0d6 3267 [`if test $gcc_cv_as_comdat_group = yes \
3268 || test $gcc_cv_as_comdat_group_percent = yes \
3269 || test $gcc_cv_as_comdat_group_group = yes; then echo 1; else echo 0; fi`],
2593b9be 3270[Define 0/1 if your assembler and linker support COMDAT groups.])
537cd941 3271
03cc6d54 3272# Restrict this test to Solaris/x86: other targets define this statically.
3273case "${target}" in
3274 i?86-*-solaris2* | x86_64-*-solaris2*)
3275 AC_MSG_CHECKING(support for hidden thunks in linkonce sections)
3276 if test $in_tree_ld = yes || echo "$ld_ver" | grep GNU > /dev/null; then
3277 hidden_linkonce=yes
3278 else
3279 case "${target}" in
3280 # Full support for hidden thunks in linkonce sections only appeared in
3281 # Solaris 11/OpenSolaris.
3282 *-*-solaris2.1[[1-9]]*)
3283 hidden_linkonce=yes
3284 ;;
3285 *)
3286 hidden_linkonce=no
3287 ;;
3288 esac
3289 fi
3290 AC_MSG_RESULT($hidden_linkonce)
3291 AC_DEFINE_UNQUOTED(USE_HIDDEN_LINKONCE,
3292 [`if test $hidden_linkonce = yes; then echo 1; else echo 0; fi`],
3293 [Define 0/1 if your linker supports hidden thunks in linkonce sections.])
3294 ;;
3295esac
3296
b2bf47a6 3297gcc_GAS_CHECK_FEATURE([line table is_stmt support],
3298 gcc_cv_as_is_stmt,
3299 [2,16,92],,
3300[ .text
3301 .file 1 "conf.c"
3302 .loc 1 1 0 is_stmt 1],,
3303[AC_DEFINE(HAVE_GAS_LOC_STMT, 1,
3304 [Define if your assembler supports the .loc is_stmt sub-directive.])])
3305
d01c707b 3306gcc_GAS_CHECK_FEATURE([line table discriminator support],
3307 gcc_cv_as_discriminator,
3308 [2,19,51],,
3309[ .text
3310 .file 1 "conf.c"
3311 .loc 1 1 0 discriminator 1],,
3312[AC_DEFINE(HAVE_GAS_DISCRIMINATOR, 1,
3313 [Define if your assembler supports the .loc discriminator sub-directive.])])
3314
c656b8fd 3315# Thread-local storage - the check is heavily parameterized.
2d6788fe 3316conftest_s=
3317tls_first_major=
3318tls_first_minor=
527d5be8 3319tls_as_opt=
2d6788fe 3320case "$target" in
3321changequote(,)dnl
5f7b9df8 3322 alpha*-*-*)
3323 conftest_s='
3324 .section ".tdata","awT",@progbits
3325foo: .long 25
3326 .text
3327 ldq $27,__tls_get_addr($29) !literal!1
3328 lda $16,foo($29) !tlsgd!1
3329 jsr $26,($27),__tls_get_addr !lituse_tlsgd!1
3330 ldq $27,__tls_get_addr($29) !literal!2
3331 lda $16,foo($29) !tlsldm!2
3332 jsr $26,($27),__tls_get_addr !lituse_tlsldm!2
3333 ldq $1,foo($29) !gotdtprel
3334 ldah $2,foo($29) !dtprelhi
3335 lda $3,foo($2) !dtprello
3336 lda $4,foo($29) !dtprel
3337 ldq $1,foo($29) !gottprel
3338 ldah $2,foo($29) !tprelhi
3339 lda $3,foo($2) !tprello
3340 lda $4,foo($29) !tprel'
3341 tls_first_major=2
3342 tls_first_minor=13
07a23b4e 3343 tls_as_opt=--fatal-warnings
5f7b9df8 3344 ;;
4260aeee 3345 arc*-*-*)
3346 conftest_s='
3347 add_s r0,r0, @foo@tpoff'
3348 tls_first_major=2
3349 tls_first_minor=23
3350 ;;
10178ded 3351 cris-*-*|crisv32-*-*)
3352 conftest_s='
3353 .section ".tdata","awT",@progbits
3354x: .long 25
3355 .text
3356 move.d x:IE,$r10
3357 nop'
3358 tls_first_major=2
3359 tls_first_minor=20
3360 tls_as_opt=--fatal-warnings
3361 ;;
cfd199cb 3362 frv*-*-*)
3363 conftest_s='
3364 .section ".tdata","awT",@progbits
3365x: .long 25
3366 .text
3367 call #gettlsoff(x)'
3368 tls_first_major=2
3369 tls_first_minor=14
3370 ;;
716b2c5a 3371 hppa*-*-linux*)
3372 conftest_s='
3373t1: .reg %r20
3374t2: .reg %r21
3375gp: .reg %r19
3376 .section ".tdata","awT",@progbits
3377foo: .long 25
3378 .text
3379 .align 4
3380 addil LT%foo-$tls_gdidx$,gp
3381 ldo RT%foo-$tls_gdidx$(%r1),%arg0
3382 b __tls_get_addr
3383 nop
3384 addil LT%foo-$tls_ldidx$,gp
3385 b __tls_get_addr
3386 ldo RT%foo-$tls_ldidx$(%r1),%arg0
3387 addil LR%foo-$tls_dtpoff$,%ret0
3388 ldo RR%foo-$tls_dtpoff$(%r1),%t1
3389 mfctl %cr27,%t1
3390 addil LT%foo-$tls_ieoff$,gp
3391 ldw RT%foo-$tls_ieoff$(%r1),%t2
3392 add %t1,%t2,%t3
3393 mfctl %cr27,%t1
3394 addil LR%foo-$tls_leoff$,%t1
3395 ldo RR%foo-$tls_leoff$(%r1),%t2'
3396 tls_first_major=2
3397 tls_first_minor=15
3398 tls_as_opt=--fatal-warnings
3399 ;;
f655717d 3400 arm*-*-*)
3401 conftest_s='
3402 .section ".tdata","awT",%progbits
3403foo: .long 25
3404 .text
3405.word foo(gottpoff)
3406.word foo(tpoff)
3407.word foo(tlsgd)
3408.word foo(tlsldm)
3409.word foo(tlsldo)'
3410 tls_first_major=2
3411 tls_first_minor=17
3412 ;;
cb648ea4 3413 i[34567]86-*-* | x86_64-*-*)
7d070520 3414 case "$target" in
0fd03648 3415 i[34567]86-*-solaris2.* | x86_64-*-solaris2.*)
7d070520 3416 on_solaris=yes
14f27bc6 3417 ;;
7d070520 3418 *)
3419 on_solaris=no
3420 ;;
3421 esac
3422 if test x$on_solaris = xyes && test x$gas_flag = xno; then
3423 conftest_s='
3424 .section .tdata,"awt",@progbits'
3425 tls_first_major=0
3426 tls_first_minor=0
e727a9cd 3427 tls_section_flag=t
7d070520 3428changequote([,])dnl
3429 AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
3430[Define to the flag used to mark TLS sections if the default (`T') doesn't work.])
3431changequote(,)dnl
3432 else
3433 conftest_s='
3434 .section ".tdata","awT",@progbits'
3435 tls_first_major=2
3436 tls_first_minor=14
e727a9cd 3437 tls_section_flag=T
7d070520 3438 tls_as_opt="--fatal-warnings"
3439 fi
cb648ea4 3440 case "$target" in
3441 i[34567]86-*-*)
3442 conftest_s="$conftest_s
2d6788fe 3443foo: .long 25
3444 .text
3445 movl %gs:0, %eax
7d070520 3446 leal foo@tlsgd(,%ebx,1), %eax
3447 leal foo@tlsldm(%ebx), %eax
3448 leal foo@dtpoff(%eax), %edx
3449 movl foo@gottpoff(%ebx), %eax
3450 subl foo@gottpoff(%ebx), %eax
3451 addl foo@gotntpoff(%ebx), %eax
3452 movl foo@indntpoff, %eax
3453 movl \$foo@tpoff, %eax
3454 subl \$foo@tpoff, %eax
3455 leal foo@ntpoff(%ecx), %eax"
cb648ea4 3456 ;;
3457 x86_64-*-*)
3458 if test x$on_solaris = xyes; then
3459 case $gas_flag in
3460 yes) tls_as_opt="$tls_as_opt --64" ;;
3461 no) tls_as_opt="$tls_as_opt -xarch=amd64" ;;
3462 esac
3463 fi
3464 conftest_s="$conftest_s
29d8dd5c 3465foo: .long 25
3466 .text
3467 movq %fs:0, %rax
cb648ea4 3468 leaq foo@tlsgd(%rip), %rdi
3469 leaq foo@tlsld(%rip), %rdi
3470 leaq foo@dtpoff(%rax), %rdx
3471 movq foo@gottpoff(%rip), %rax
3472 movq \$foo@tpoff, %rax"
3473 ;;
3474 esac
3475 ;;
c87e09ad 3476 ia64-*-*)
3477 conftest_s='
3478 .section ".tdata","awT",@progbits
3479foo: data8 25
3480 .text
3481 addl r16 = @ltoff(@dtpmod(foo#)), gp
3482 addl r17 = @ltoff(@dtprel(foo#)), gp
3483 addl r18 = @ltoff(@tprel(foo#)), gp
3484 addl r19 = @dtprel(foo#), gp
3485 adds r21 = @dtprel(foo#), r13
3486 movl r23 = @dtprel(foo#)
3487 addl r20 = @tprel(foo#), gp
3488 adds r22 = @tprel(foo#), r13
3489 movl r24 = @tprel(foo#)'
3490 tls_first_major=2
3491 tls_first_minor=13
07a23b4e 3492 tls_as_opt=--fatal-warnings
c87e09ad 3493 ;;
4eae25aa 3494 microblaze*-*-*)
3495 conftest_s='
3496 .section .tdata,"awT",@progbits
3497x:
3498 .word 2
3499 .text
3500 addik r5,r20,x@TLSGD
3501 addik r5,r20,x@TLSLDM'
3502 tls_first_major=2
3503 tls_first_minor=20
3504 tls_as_opt='--fatal-warnings'
3505 ;;
42bdde4b 3506 mips*-*-*)
3507 conftest_s='
3508 .section .tdata,"awT",@progbits
3509x:
3510 .word 2
3511 .text
3512 addiu $4, $28, %tlsgd(x)
3513 addiu $4, $28, %tlsldm(x)
3514 lui $4, %dtprel_hi(x)
3515 addiu $4, $4, %dtprel_lo(x)
3516 lw $4, %gottprel(x)($28)
3517 lui $4, %tprel_hi(x)
3518 addiu $4, $4, %tprel_lo(x)'
3519 tls_first_major=2
3520 tls_first_minor=16
3521 tls_as_opt='-32 --fatal-warnings'
3522 ;;
869bde6b 3523 m68k-*-*)
3524 conftest_s='
3525 .section .tdata,"awT",@progbits
3526x:
3527 .word 2
3528 .text
3529foo:
3530 move.l x@TLSGD(%a5),%a0
3531 move.l x@TLSLDM(%a5),%a0
3532 move.l x@TLSLDO(%a5),%a0
3533 move.l x@TLSIE(%a5),%a0
3534 move.l x@TLSLE(%a5),%a0'
3535 tls_first_major=2
3536 tls_first_minor=19
3537 tls_as_opt='--fatal-warnings'
3538 ;;
de65406d 3539 nios2-*-*)
3540 conftest_s='
3541 .section ".tdata","awT",@progbits'
3542 tls_first_major=2
3543 tls_first_minor=23
3544 tls_as_opt="--fatal-warnings"
3545 ;;
16878cba 3546 aarch64*-*-*)
3547 conftest_s='
3548 .section ".tdata","awT",%progbits
3549foo: .long 25
3550 .text
3551 adrp x0, :tlsgd:x
3552 add x0, x0, #:tlsgd_lo12:x
3553 bl __tls_get_addr
3554 nop'
3555 tls_first_major=2
3556 tls_first_minor=20
3557 tls_as_opt='--fatal-warnings'
3558 ;;
d61fdfe7 3559 or1k*-*-*)
3560 conftest_s='
3561 .section ".tdata","awT",@progbits
3562foo: .long 25
3563 .text
3564 l.movhi r3, tpoffha(foo)
3565 l.add r3, r3, r10
3566 l.lwz r4, tpofflo(foo)(r3)'
3567 tls_first_major=2
3568 tls_first_minor=30
3569 tls_as_opt=--fatal-warnings
3570 ;;
e69effa4 3571 powerpc-ibm-aix*)
3572 conftest_s='
3573 .extern __get_tpointer
3574 .toc
3575LC..1:
3576 .tc a[TC],a[TL]@le
3577 .csect .text[PR]
3578.tlstest:
3579 lwz 9,LC..1(2)
3580 bla __get_tpointer
3581 lwzx 3,9,3
3582 .globl a
3583 .csect a[TL],4
3584a:
3585 .space 4'
3586 tls_first_major=0
3587 tls_first_minor=0
3588 ;;
e0b071f6 3589 powerpc64*-*-*)
9b552c45 3590 conftest_s='
3591 .section ".tdata","awT",@progbits
3592 .align 3
3593ld0: .space 8
3594ld1: .space 8
3595x1: .space 8
3596x2: .space 8
3597x3: .space 8
3598 .text
3599 addi 3,2,ld0@got@tlsgd
3600 bl .__tls_get_addr
3601 nop
3602 addi 3,2,ld1@toc
3603 bl .__tls_get_addr
3604 nop
3605 addi 3,2,x1@got@tlsld
3606 bl .__tls_get_addr
3607 nop
3608 addi 9,3,x1@dtprel
3609 bl .__tls_get_addr
3610 nop
3611 addis 9,3,x2@dtprel@ha
3612 addi 9,9,x2@dtprel@l
3613 bl .__tls_get_addr
3614 nop
3615 ld 9,x3@got@dtprel(2)
3616 add 9,9,3
3617 bl .__tls_get_addr
3618 nop'
3619 tls_first_major=2
3620 tls_first_minor=14
07a23b4e 3621 tls_as_opt="-a64 --fatal-warnings"
9b552c45 3622 ;;
15ba1c5f 3623 powerpc*-*-*)
3624 conftest_s='
3625 .section ".tdata","awT",@progbits
3626 .align 2
3627ld0: .space 4
3628ld1: .space 4
3629x1: .space 4
3630x2: .space 4
3631x3: .space 4
3632 .text
3633 addi 3,31,ld0@got@tlsgd
3634 bl __tls_get_addr
3635 addi 3,31,x1@got@tlsld
3636 bl __tls_get_addr
3637 addi 9,3,x1@dtprel
3638 addis 9,3,x2@dtprel@ha
3639 addi 9,9,x2@dtprel@l
3640 lwz 9,x3@got@tprel(31)
3641 add 9,9,x@tls
3642 addi 9,2,x1@tprel
3643 addis 9,2,x2@tprel@ha
3644 addi 9,9,x2@tprel@l'
3645 tls_first_major=2
3646 tls_first_minor=14
3647 tls_as_opt="-a32 --fatal-warnings"
3648 ;;
fb55f581 3649 riscv*-*-*)
3650 conftest_s='
3651 .section .tdata,"awT",@progbits
3652x: .word 2
3653 .text
3654 la.tls.gd a0,x
3655 call __tls_get_addr'
3656 tls_first_major=2
3657 tls_first_minor=21
3658 tls_as_opt='--fatal-warnings'
3659 ;;
be00aaa8 3660 s390-*-*)
3661 conftest_s='
3662 .section ".tdata","awT",@progbits
3663foo: .long 25
3664 .text
3665 .long foo@TLSGD
3666 .long foo@TLSLDM
3667 .long foo@DTPOFF
3668 .long foo@NTPOFF
3669 .long foo@GOTNTPOFF
3670 .long foo@INDNTPOFF
3671 l %r1,foo@GOTNTPOFF(%r12)
3672 l %r1,0(%r1):tls_load:foo
3673 bas %r14,0(%r1,%r13):tls_gdcall:foo
3674 bas %r14,0(%r1,%r13):tls_ldcall:foo'
3675 tls_first_major=2
3676 tls_first_minor=14
07a23b4e 3677 tls_as_opt="-m31 --fatal-warnings"
be00aaa8 3678 ;;
3679 s390x-*-*)
3680 conftest_s='
3681 .section ".tdata","awT",@progbits
3682foo: .long 25
3683 .text
3684 .quad foo@TLSGD
3685 .quad foo@TLSLDM
3686 .quad foo@DTPOFF
3687 .quad foo@NTPOFF
3688 .quad foo@GOTNTPOFF
3689 lg %r1,foo@GOTNTPOFF(%r12)
3690 larl %r1,foo@INDNTPOFF
3691 brasl %r14,__tls_get_offset@PLT:tls_gdcall:foo
3692 brasl %r14,__tls_get_offset@PLT:tls_ldcall:foo'
3693 tls_first_major=2
3694 tls_first_minor=14
07a23b4e 3695 tls_as_opt="-m64 -Aesame --fatal-warnings"
be00aaa8 3696 ;;
f12debca 3697 sh-*-* | sh[123456789lbe]*-*-*)
ae852eea 3698 conftest_s='
3699 .section ".tdata","awT",@progbits
3700foo: .long 25
3701 .text
3702 .long foo@TLSGD
3703 .long foo@TLSLDM
3704 .long foo@DTPOFF
3705 .long foo@GOTTPOFF
3706 .long foo@TPOFF'
3707 tls_first_major=2
3708 tls_first_minor=13
07a23b4e 3709 tls_as_opt=--fatal-warnings
ae852eea 3710 ;;
05b3a83f 3711 sparc*-*-*)
07a23b4e 3712 case "$target" in
3713 sparc*-sun-solaris2.*)
3714 on_solaris=yes
3715 ;;
3716 *)
3717 on_solaris=no
3718 ;;
3719 esac
3720 if test x$on_solaris = xyes && test x$gas_flag = xno; then
3721 conftest_s='
eedcd8ac 3722 .section ".tdata",#alloc,#write,#tls'
07a23b4e 3723 tls_first_major=0
3724 tls_first_minor=0
3725 else
3726 conftest_s='
eedcd8ac 3727 .section ".tdata","awT",@progbits'
3728 tls_first_major=2
3729 tls_first_minor=14
3730 tls_as_opt="-32 --fatal-warnings"
3731 fi
3732 conftest_s="$conftest_s
05b3a83f 3733foo: .long 25
3734 .text
3735 sethi %tgd_hi22(foo), %o0
3736 add %o0, %tgd_lo10(foo), %o1
3737 add %l7, %o1, %o0, %tgd_add(foo)
3738 call __tls_get_addr, %tgd_call(foo)
3739 sethi %tldm_hi22(foo), %l1
3740 add %l1, %tldm_lo10(foo), %l2
3741 add %l7, %l2, %o0, %tldm_add(foo)
3742 call __tls_get_addr, %tldm_call(foo)
3743 sethi %tldo_hix22(foo), %l3
3744 xor %l3, %tldo_lox10(foo), %l4
3745 add %o0, %l4, %l5, %tldo_add(foo)
3746 sethi %tie_hi22(foo), %o3
3747 add %o3, %tie_lo10(foo), %o3
3748 ld [%l7 + %o3], %o2, %tie_ld(foo)
3749 add %g7, %o2, %o4, %tie_add(foo)
3750 sethi %tle_hix22(foo), %l1
3751 xor %l1, %tle_lox10(foo), %o5
eedcd8ac 3752 ld [%g7 + %o5], %o1"
05b3a83f 3753 ;;
7ce78e23 3754 tilepro*-*-*)
3755 conftest_s='
3756 .section ".tdata","awT",@progbits
3757foo: .long 25
3758 .text
3759 addli r0, zero, tls_gd(foo)
3760 auli r0, zero, tls_gd_ha16(foo)
3761 addli r0, r0, tls_gd_lo16(foo)
3762 jal __tls_get_addr
3763 addli r0, zero, tls_ie(foo)
3764 auli r0, r0, tls_ie_ha16(foo)
3765 addli r0, r0, tls_ie_lo16(foo)'
3766 tls_first_major=2
3767 tls_first_minor=22
3768 tls_as_opt="--fatal-warnings"
3769 ;;
3770 tilegx*-*-*)
3771 conftest_s='
3772 .section ".tdata","awT",@progbits
3773foo: .long 25
3774 .text
3775 shl16insli r0, zero, hw0_last_tls_gd(foo)
3776 shl16insli r0, zero, hw1_last_tls_gd(foo)
3777 shl16insli r0, r0, hw0_tls_gd(foo)
3778 jal __tls_get_addr
3779 shl16insli r0, zero, hw1_last_tls_ie(foo)
3780 shl16insli r0, r0, hw0_tls_ie(foo)'
3781 tls_first_major=2
3782 tls_first_minor=22
3783 tls_as_opt="--fatal-warnings"
3784 ;;
c656b8fd 3785 xtensa*-*-*)
3786 conftest_s='
3787 .section ".tdata","awT",@progbits
3788foo: .long 25
3789 .text
3790 movi a8, foo@TLSFUNC
3791 movi a10, foo@TLSARG
3792 callx8.tls a8, foo@TLSCALL'
3793 tls_first_major=2
3794 tls_first_minor=19
3795 ;;
05b3a83f 3796changequote([,])dnl
2d6788fe 3797esac
c024e802 3798set_have_as_tls=no
3799if test "x$enable_tls" = xno ; then
3800 : # TLS explicitly disabled.
3801elif test "x$enable_tls" = xyes ; then
3802 set_have_as_tls=yes # TLS explicitly enabled.
3803elif test -z "$tls_first_major"; then
6d6c1801 3804 : # If we don't have a check, assume no support.
3805else
3806 gcc_GAS_CHECK_FEATURE(thread-local storage support, gcc_cv_as_tls,
07a23b4e 3807 [$tls_first_major,$tls_first_minor,0], [$tls_as_opt], [$conftest_s],,
c024e802 3808 [set_have_as_tls=yes])
3809fi
3810if test $set_have_as_tls = yes ; then
3811 AC_DEFINE(HAVE_AS_TLS, 1,
eedcd8ac 3812 [Define if your assembler and linker support thread-local storage.])
2d6788fe 3813fi
6d6c1801 3814
3815# Target-specific assembler checks.
2d6788fe 3816
79f90e2b 3817AC_MSG_CHECKING(linker -Bstatic/-Bdynamic option)
3818gcc_cv_ld_static_dynamic=no
e6937b3a 3819gcc_cv_ld_static_option='-Bstatic'
3820gcc_cv_ld_dynamic_option='-Bdynamic'
79f90e2b 3821if test $in_tree_ld = yes ; then
1301d110 3822 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
79f90e2b 3823 gcc_cv_ld_static_dynamic=yes
3824 fi
3825elif test x$gcc_cv_ld != x; then
92ff09c4 3826 # Check if linker supports -Bstatic/-Bdynamic option
f50c2ca3 3827 if $gcc_cv_ld --help 2>&1 | grep -- -Bstatic > /dev/null \
3828 && $gcc_cv_ld --help 2>&1 | grep -- -Bdynamic > /dev/null; then
92ff09c4 3829 gcc_cv_ld_static_dynamic=yes
3830 else
3831 case "$target" in
82163b89 3832 # AIX ld uses -b flags
3833 *-*-aix4.[[23]]* | *-*-aix[[5-9]]*)
3834 gcc_cv_ld_static_dynamic=yes
3835 gcc_cv_ld_static_option="-bstatic"
3836 gcc_cv_ld_dynamic_option="-bdynamic"
3837 ;;
098bbbe5 3838 # HP-UX ld uses -a flags to select between shared and archive.
3839 *-*-hpux*)
3840 if test x"$gnu_ld" = xno; then
3841 gcc_cv_ld_static_dynamic=yes
3842 gcc_cv_ld_static_option="-aarchive_shared"
3843 gcc_cv_ld_dynamic_option="-adefault"
3844 fi
3845 ;;
92ff09c4 3846 # Solaris 2 ld always supports -Bstatic/-Bdynamic.
3847 *-*-solaris2*)
3848 gcc_cv_ld_static_dynamic=yes
3849 ;;
3850 esac
3851 fi
79f90e2b 3852fi
3853if test x"$gcc_cv_ld_static_dynamic" = xyes; then
3854 AC_DEFINE(HAVE_LD_STATIC_DYNAMIC, 1,
e6937b3a 3855[Define if your linker supports -Bstatic/-Bdynamic or equivalent options.])
3856 AC_DEFINE_UNQUOTED(LD_STATIC_OPTION, "$gcc_cv_ld_static_option",
3857[Define to the linker option to disable use of shared objects.])
3858 AC_DEFINE_UNQUOTED(LD_DYNAMIC_OPTION, "$gcc_cv_ld_dynamic_option",
3859[Define to the linker option to enable use of shared objects.])
79f90e2b 3860fi
3861AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
3862
7176d366 3863AC_MSG_CHECKING(linker --version-script option)
3864gcc_cv_ld_version_script=no
3865ld_version_script_option=''
3866if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
3867 gcc_cv_ld_version_script=yes
3868 ld_version_script_option='--version-script'
3869elif test x$gcc_cv_ld != x; then
3870 case "$target" in
3871 # Solaris 2 ld always supports -M. It also supports a subset of
3872 # --version-script since Solaris 11.4, but requires
3873 # -z gnu-version-script-compat to activate.
3874 *-*-solaris2*)
3875 gcc_cv_ld_version_script=yes
3876 ld_version_script_option='-M'
3877 ;;
3878 esac
3879fi
3880# Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
3881AC_MSG_RESULT($gcc_cv_ld_version_script)
3882AC_SUBST(ld_version_script_option)
3883
3884AC_MSG_CHECKING(linker soname option)
3885gcc_cv_ld_soname=no
3886if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
3887 gcc_cv_ld_soname=yes
3888 ld_soname_option='-soname'
3889elif test x$gcc_cv_ld != x; then
3890 case "$target" in
3891 *-*-darwin*)
3892 gcc_cv_ld_soname=yes
3893 ld_soname_option='-install_name'
3894 ;;
8fe7c804 3895 # Solaris 2 ld always supports -h. It also supports --soname for GNU
3896 # ld compatiblity since some Solaris 10 update.
3897 *-*-solaris2*)
3898 gcc_cv_ld_soname=yes
3899 ld_soname_option='-h'
3900 ;;
7176d366 3901 esac
3902fi
3903# Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
3904AC_MSG_RESULT($gcc_cv_ld_soname)
3905AC_SUBST(ld_soname_option)
3906
9c948bc2 3907if test x"$demangler_in_ld" = xyes; then
3908 AC_MSG_CHECKING(linker --demangle support)
3909 gcc_cv_ld_demangle=no
3910 if test $in_tree_ld = yes; then
3911 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 \
3912 gcc_cv_ld_demangle=yes
3913 fi
3914 elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
3915 # Check if the GNU linker supports --demangle option
f50c2ca3 3916 if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
9c948bc2 3917 gcc_cv_ld_demangle=yes
3918 fi
3919 fi
3920 if test x"$gcc_cv_ld_demangle" = xyes; then
3921 AC_DEFINE(HAVE_LD_DEMANGLE, 1,
3922[Define if your linker supports --demangle option.])
3923 fi
3924 AC_MSG_RESULT($gcc_cv_ld_demangle)
3925fi
3926
de4d280b 3927AC_MSG_CHECKING(linker plugin support)
c5f741b3 3928gcc_cv_lto_plugin=0
98de5262 3929if test -f liblto_plugin.la; then
1dc619a1 3930 save_ld_ver="$ld_ver"
3931 save_ld_vers_major="$ld_vers_major"
3932 save_ld_vers_minor="$ld_vers_minor"
3933 save_ld_is_gold="$ld_is_gold"
3934
3935 ld_is_gold=no
c5f741b3 3936
1dc619a1 3937 if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" = x"$gcc_cv_ld"; then
3938 ld_ver="GNU ld"
3939 # FIXME: ld_is_gold?
3940 ld_vers_major="$gcc_cv_gld_major_version"
3941 ld_vers_minor="$gcc_cv_gld_minor_version"
3942 else
3943 # Determine plugin linker version.
3944 # FIXME: Partial duplicate from above, generalize.
3945changequote(,)dnl
3946 ld_ver=`$ORIGINAL_PLUGIN_LD_FOR_TARGET --version 2>/dev/null | sed 1q`
3947 if echo "$ld_ver" | grep GNU > /dev/null; then
3948 if echo "$ld_ver" | grep "GNU gold" > /dev/null; then
3949 ld_is_gold=yes
3950 ld_vers=`echo $ld_ver | sed -n \
3951 -e 's,^[^)]*[ ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
3952 else
3953 ld_vers=`echo $ld_ver | sed -n \
3954 -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
3955 fi
3956 ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
3957 ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
c5f741b3 3958 fi
1dc619a1 3959changequote([,])dnl
3960 fi
3961
3962 # Determine plugin support.
3963 if echo "$ld_ver" | grep GNU > /dev/null; then
c5f741b3 3964 # Require GNU ld or gold 2.21+ for plugin support by default.
3965 if test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 21; then
3966 gcc_cv_lto_plugin=2
3967 # Allow -fuse-linker-plugin to enable plugin support in GNU gold 2.20.
3968 elif test "$ld_is_gold" = yes -a "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 20; then
3969 gcc_cv_lto_plugin=1
de4d280b 3970 fi
de4d280b 3971 fi
1dc619a1 3972
3973 ld_ver="$save_ld_ver"
3974 ld_vers_major="$save_ld_vers_major"
3975 ld_vers_minor="$save_ld_vers_minor"
3976 ld_is_gold="$save_ld_is_gold"
de4d280b 3977fi
c5f741b3 3978AC_DEFINE_UNQUOTED(HAVE_LTO_PLUGIN, $gcc_cv_lto_plugin,
3979 [Define to the level of your linker's plugin support.])
de4d280b 3980AC_MSG_RESULT($gcc_cv_lto_plugin)
3981
aaa50706 3982# Target OS-specific assembler checks.
3983
3984case "$target_os" in
3985 darwin*)
3986 gcc_GAS_CHECK_FEATURE([-mmacosx-version-min option],
3987 gcc_cv_as_mmacosx_version_min,,
3988 [-mmacosx-version-min=10.1], [.text],,
3989 [AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1,
3990 [Define if your Mac OS X assembler supports the -mmacos-version-min option.])])
3991 ;;
3992esac
3993
3994# Target CPU-specific assembler checks.
3995
0d6378a9 3996case "$target" in
891f2090 3997 aarch64*-*-*)
3998 gcc_GAS_CHECK_FEATURE([-mabi option], gcc_cv_as_aarch64_mabi,,
3999 [-mabi=lp64], [.text],,,)
4000 if test x$gcc_cv_as_aarch64_mabi = xyes; then
4001 AC_DEFINE(HAVE_AS_MABI_OPTION, 1,
4002 [Define if your assembler supports the -mabi option.])
4003 else
4004 if test x$with_abi = xilp32; then
4005 AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4006 Upgrade the Assembler.])
4007 fi
4008 if test x"$with_multilib_list" = xdefault; then
4009 TM_MULTILIB_CONFIG=lp64
4010 else
4011 aarch64_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
4012 for aarch64_multilib in ${aarch64_multilibs}; do
4013 case ${aarch64_multilib} in
4014 ilp32)
4015 AC_MSG_ERROR([Assembler does not support -mabi=ilp32.\
4016 Upgrade the Assembler.])
4017 ;;
4018 *)
4019 ;;
4020 esac
4021 done
4022 fi
4023 fi
d65d3062 4024 # Check if we have binutils support for relocations types needed by -fpic
4025 gcc_GAS_CHECK_FEATURE([-fpic relocs], gcc_cv_as_aarch64_picreloc,,,
4026 [
4027 .text
4028 ldr x0, [[x2, #:gotpage_lo15:globalsym]]
4029 ],,[AC_DEFINE(HAVE_AS_SMALL_PIC_RELOCS, 1,
4030 [Define if your assembler supports relocs needed by -fpic.])])
559dff77 4031 # Enable Branch Target Identification Mechanism and Return Address
4032 # Signing by default.
4033 AC_ARG_ENABLE(standard-branch-protection,
4034 [
4035AS_HELP_STRING([--enable-standard-branch-protection],
4036 [enable Branch Target Identification Mechanism and Return Address Signing by default for AArch64])
4037AS_HELP_STRING([--disable-standard-branch-protection],
4038 [disable Branch Target Identification Mechanism and Return Address Signing by default for AArch64])
4039 ],
4040 [
4041 case $enableval in
4042 yes)
4043 tm_defines="${tm_defines} TARGET_ENABLE_BTI=1 TARGET_ENABLE_PAC_RET=1"
4044 ;;
4045 no)
4046 ;;
4047 *)
4048 AC_MSG_ERROR(['$enableval' is an invalid value for --enable-standard-branch-protection.\
4049 Valid choices are 'yes' and 'no'.])
4050 ;;
4051 esac
4052 ],
4053 [])
c71e113d 4054 # Enable default workaround for AArch64 Cortex-A53 erratum 835769.
4055 AC_ARG_ENABLE(fix-cortex-a53-835769,
4056 [
4057AS_HELP_STRING([--enable-fix-cortex-a53-835769],
4058 [enable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4059AS_HELP_STRING([--disable-fix-cortex-a53-835769],
4060 [disable workaround for AArch64 Cortex-A53 erratum 835769 by default])
4061 ],
4062 [
4063 case $enableval in
4064 yes)
4065 tm_defines="${tm_defines} TARGET_FIX_ERR_A53_835769_DEFAULT=1"
4066 ;;
4067 no)
4068 ;;
4069 *)
4070 AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-835769.\
4071 Valid choices are 'yes' and 'no'.])
4072 ;;
4073
4074 esac
4075 ],
4076 [])
3de2f3c9 4077 # Enable default workaround for AArch64 Cortex-A53 erratum 843419.
4078 AC_ARG_ENABLE(fix-cortex-a53-843419,
4079 [
4080AS_HELP_STRING([--enable-fix-cortex-a53-843419],
4081 [enable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4082AS_HELP_STRING([--disable-fix-cortex-a53-843419],
4083 [disable workaround for AArch64 Cortex-A53 erratum 843419 by default])
4084 ],
4085 [
4086 case $enableval in
4087 yes)
4088 tm_defines="${tm_defines} TARGET_FIX_ERR_A53_843419_DEFAULT=1"
4089 ;;
4090 no)
4091 ;;
4092 *)
4093 AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-843419.\
4094 Valid choices are 'yes' and 'no'.])
4095 ;;
4096
4097 esac
4098 ],
4099 [])
891f2090 4100 ;;
4101
8626dbb9 4102 # All TARGET_ABI_OSF targets.
126b6848 4103 alpha*-*-linux* | alpha*-*-*bsd*)
6d6c1801 4104 gcc_GAS_CHECK_FEATURE([explicit relocation support],
4105 gcc_cv_as_alpha_explicit_relocs, [2,12,0],,
4106[ .set nomacro
8626dbb9 4107 .text
4108 extbl $3, $2, $3 !lituse_bytoff!1
4109 ldq $2, a($29) !literal!1
4110 ldq $4, b($29) !literal!2
4111 ldq_u $3, 0($2) !lituse_base!1
4112 ldq $27, f($29) !literal!5
4113 jsr $26, ($27), f !lituse_jsr!5
4114 ldah $29, 0($26) !gpdisp!3
4115 lda $0, c($29) !gprel
4116 ldah $1, d($29) !gprelhigh
4117 lda $1, d($1) !gprellow
6d6c1801 4118 lda $29, 0($29) !gpdisp!3],,
4119 [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
4120 [Define if your assembler supports explicit relocations.])])
592222c2 4121 gcc_GAS_CHECK_FEATURE([jsrdirect relocation support],
4122 gcc_cv_as_alpha_jsrdirect_relocs, [2,16,90],,
4123[ .set nomacro
4124 .text
4125 ldq $27, a($29) !literal!1
4126 jsr $26, ($27), a !lituse_jsrdirect!1],,
4127 [AC_DEFINE(HAVE_AS_JSRDIRECT_RELOCS, 1,
4128 [Define if your assembler supports the lituse_jsrdirect relocation.])])
8626dbb9 4129 ;;
4c335027 4130
fb51f994 4131 avr-*-*)
4132 gcc_GAS_CHECK_FEATURE([--mlink-relax option], gcc_cv_as_avr_mlink_relax,,
4133 [--mlink-relax], [.text],,
4134 [AC_DEFINE(HAVE_AS_AVR_MLINK_RELAX_OPTION, 1,
4135 [Define if your avr assembler supports --mlink-relax option.])])
4136
4137 gcc_GAS_CHECK_FEATURE([-mrmw option], gcc_cv_as_avr_mrmw,,
4138 [-mrmw], [.text],,
4139 [AC_DEFINE(HAVE_AS_AVR_MRMW_OPTION, 1,
4140 [Define if your avr assembler supports -mrmw option.])])
02bfce13 4141
056f86e8 4142 gcc_GAS_CHECK_FEATURE([__gcc_isr pseudo instruction],
4143 gcc_cv_as_avr_mgccisr,,
4144 [-mgcc-isr], [.text
4145 __gcc_isr 1
4146 __gcc_isr 2
4147 __gcc_isr 0,r24
4148 ],,
4149 [AC_DEFINE(HAVE_AS_AVR_MGCCISR_OPTION, 1,
4150 [Define if your avr assembler supports -mgcc-isr option.])])
4151
02bfce13 4152 # Check how default linker description file implements .rodata for
4153 # avrxmega3 (PR21472). avr-gcc assumes .rodata is *not* loaded to
4154 # RAM so avr-gcc skips __do_copy_data for .rodata objects.
4155 AC_MSG_CHECKING(binutils for avrxmega3 .rodata support)
4156 cat > conftest.s <<EOF
4157 .section .rodata,"a",@progbits
4158 .global xxvaryy
4159 ;; avr-nm should print "... R xxvaryy", not "... D xxvaryy".
4160 xxvaryy:
4161 .word 1
4162EOF
4163 rm -f conftest.nm
4164 AC_TRY_COMMAND([$gcc_cv_as -mmcu=avrxmega3 conftest.s -o conftest.o])
4165 AC_TRY_COMMAND([$gcc_cv_ld -mavrxmega3 conftest.o -o conftest.elf])
4166 AC_TRY_COMMAND([$gcc_cv_nm conftest.elf > conftest.nm])
d557a46f 4167 if test -s conftest.nm
02bfce13 4168 then
4169 if grep ' R xxvaryy' conftest.nm > /dev/null; then
4170 AC_MSG_RESULT(yes)
d557a46f 4171 AC_DEFINE(HAVE_LD_AVR_AVRXMEGA3_RODATA_IN_FLASH, 1,
4172 [Define if your default avr linker script for avrxmega3 leaves .rodata in flash.])
02bfce13 4173 else
4174 AC_MSG_RESULT(no: avrxmega3 .rodata located in RAM)
4175 echo "$as_me: nm output was" >&AS_MESSAGE_LOG_FD
4176 cat conftest.nm >&AS_MESSAGE_LOG_FD
02bfce13 4177 avr_ld_ver="`$gcc_cv_ld -v | sed -e 's:^.* ::'`"
d557a46f 4178 AC_MSG_WARN([[support for avrxmega3 .rodata in flash needs Binutils 2.29 or higher (have $avr_ld_ver)]])
02bfce13 4179 fi
4180 else
4181 AC_MSG_RESULT(test failed)
4182 echo "$as_me: failed program was" >&AS_MESSAGE_LOG_FD
4183 cat conftest.s >&AS_MESSAGE_LOG_FD
d557a46f 4184 AC_MSG_WARN([[see `config.log' for details]])
02bfce13 4185 fi
d557a46f 4186 rm -f conftest.s conftest.o conftest.elf conftest.nm
fb51f994 4187 ;;
4188
ce4d6134 4189 cris-*-*)
4190 gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
4191 gcc_cv_as_cris_no_mul_bug,[2,15,91],
4192 [-no-mul-bug-abort], [.text],,
4193 [AC_DEFINE(HAVE_AS_NO_MUL_BUG_ABORT_OPTION, 1,
4194 [Define if your assembler supports the -no-mul-bug-abort option.])])
4195 ;;
4196
6d6c1801 4197 sparc*-*-*)
6d6c1801 4198 gcc_GAS_CHECK_FEATURE([-relax option], gcc_cv_as_sparc_relax,,
4199 [-relax], [.text],,
4200 [AC_DEFINE(HAVE_AS_RELAX_OPTION, 1,
4201 [Define if your assembler supports -relax option.])])
4202
2f1e7d0b 4203 gcc_GAS_CHECK_FEATURE([GOTDATA_OP relocs],
4204 gcc_cv_as_sparc_gotdata_op,,
4205 [-K PIC],
4206[.text
d958c180 4207.align 4
2f1e7d0b 4208foo:
4209 nop
4210bar:
4211 sethi %gdop_hix22(foo), %g1
4212 xor %g1, %gdop_lox10(foo), %g1
4213 ld [[%l7 + %g1]], %g2, %gdop(foo)],
4214 [if test x$gcc_cv_ld != x \
dd84455f 4215 && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
dc360156 4216 if test x$gcc_cv_objdump != x; then
4217 if $gcc_cv_objdump -s -j .text conftest 2> /dev/null \
4218 | grep ' 03000004 82186004 c405c001'> /dev/null 2>&1; then
dd84455f 4219 gcc_cv_as_sparc_gotdata_op=no
dc360156 4220 else
dd84455f 4221 gcc_cv_as_sparc_gotdata_op=yes
dd84455f 4222 fi
dd84455f 4223 fi
2f1e7d0b 4224 fi
4225 rm -f conftest],
4226 [AC_DEFINE(HAVE_AS_SPARC_GOTDATA_OP, 1,
4227 [Define if your assembler and linker support GOTDATA_OP relocs.])])
4228
6d6c1801 4229 gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs],
4230 gcc_cv_as_sparc_ua_pcrel,,
4231 [-K PIC],
4232[.text
4233foo:
4234 nop
4235.data
4236.align 4
4237.byte 0
4238.uaword %r_disp32(foo)],
4239 [if test x$gcc_cv_ld != x \
4240 && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
4241 gcc_cv_as_sparc_ua_pcrel=yes
4242 fi
4243 rm -f conftest],
4244 [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
66e333b1 4245 [Define if your assembler and linker support unaligned PC relative relocs.])
e715c863 4246
6d6c1801 4247 gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs against hidden symbols],
4248 gcc_cv_as_sparc_ua_pcrel_hidden,,
4249 [-K PIC],
4250[.data
4251.align 4
4252.byte 0x31
4253.uaword %r_disp32(foo)
4254.byte 0x32, 0x33, 0x34
4255.global foo
4256.hidden foo
4257foo:
4258.skip 4],
4259 [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4260 && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
4261 && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
4262 | grep ' 31000000 07323334' > /dev/null 2>&1; then
4263 if $gcc_cv_objdump -R conftest 2> /dev/null \
4264 | grep 'DISP32' > /dev/null 2>&1; then
4265 :
5a49bf3e 4266 else
6d6c1801 4267 gcc_cv_as_sparc_ua_pcrel_hidden=yes
0569c094 4268 fi
6d6c1801 4269 fi
4270 rm -f conftest],
4271 [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL_HIDDEN, 1,
4272 [Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])])
4273 ]) # unaligned pcrel relocs
4274
4275 gcc_GAS_CHECK_FEATURE([offsetable %lo()],
4276 gcc_cv_as_sparc_offsetable_lo10,,
4277 [-xarch=v9],
4278[.text
4279 or %g1, %lo(ab) + 12, %g1
4280 or %g1, %lo(ab + 12), %g1],
4281 [if test x$gcc_cv_objdump != x \
7908b1a1 4282 && $gcc_cv_objdump -s -j .text conftest.o 2> /dev/null \
6d6c1801 4283 | grep ' 82106000 82106000' > /dev/null 2>&1; then
19f7ae9a 4284 gcc_cv_as_sparc_offsetable_lo10=yes
6d6c1801 4285 fi],
4286 [AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
4287 [Define if your assembler supports offsetable %lo().])])
0468cf8f 4288
4289 gcc_GAS_CHECK_FEATURE([FMAF, HPC, and VIS 3.0 instructions],
4290 gcc_cv_as_sparc_fmaf,,
4291 [-xarch=v9d],
4292 [.text
d7112989 4293 .register %g2, #scratch
4294 .register %g3, #scratch
0468cf8f 4295 .align 4
4296 fmaddd %f0, %f2, %f4, %f6
4297 addxccc %g1, %g2, %g3
4298 fsrl32 %f2, %f4, %f8
4299 fnaddd %f10, %f12, %f14],,
4300 [AC_DEFINE(HAVE_AS_FMAF_HPC_VIS3, 1,
4301 [Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions.])])
6c940e8d 4302
4303 gcc_GAS_CHECK_FEATURE([SPARC4 instructions],
4304 gcc_cv_as_sparc_sparc4,,
4305 [-xarch=sparc4],
4306 [.text
4307 .register %g2, #scratch
4308 .register %g3, #scratch
4309 .align 4
4310 cxbe %g2, %g3, 1f
43111: cwbneg %g2, %g3, 1f
43121: sha1
4313 md5
4314 aes_kexpand0 %f4, %f6, %f8
4315 des_round %f38, %f40, %f42, %f44
4316 camellia_f %f54, %f56, %f58, %f60
4317 kasumi_fi_xor %f46, %f48, %f50, %f52],,
4318 [AC_DEFINE(HAVE_AS_SPARC4, 1,
4319 [Define if your assembler supports SPARC4 instructions.])])
cbd3655d 4320
7e1786b2 4321 gcc_GAS_CHECK_FEATURE([SPARC5 and VIS 4.0 instructions],
4322 gcc_cv_as_sparc_sparc5,,
4323 [-xarch=sparc5],
4324 [.text
4325 .register %g2, #scratch
4326 .register %g3, #scratch
4327 .align 4
4328 subxc %g1, %g2, %g3
4329 fpadd8 %f0, %f2, %f4],,
4330 [AC_DEFINE(HAVE_AS_SPARC5_VIS4, 1,
4331 [Define if your assembler supports SPARC5 and VIS 4.0 instructions.])])
4332
95f09db7 4333 gcc_GAS_CHECK_FEATURE([SPARC6 instructions],
4334 gcc_cv_as_sparc_sparc6,,
4335 [-xarch=sparc6],
4336 [.text
4337 .register %g2, #scratch
4338 .register %g3, #scratch
4339 .align 4
4340 rd %entropy, %g1
4341 fpsll64x %f0, %f2, %f4],,
4342 [AC_DEFINE(HAVE_AS_SPARC6, 1,
4343 [Define if your assembler supports SPARC6 instructions.])])
4344
cbd3655d 4345 gcc_GAS_CHECK_FEATURE([LEON instructions],
4346 gcc_cv_as_sparc_leon,,
4347 [-Aleon],
4348 [.text
4349 .register %g2, #scratch
4350 .register %g3, #scratch
4351 .align 4
4352 smac %g2, %g3, %g1
4353 umac %g2, %g3, %g1
51494e08 4354 casa [[%g2]] 0xb, %g3, %g1],,
cbd3655d 4355 [AC_DEFINE(HAVE_AS_LEON, 1,
4356 [Define if your assembler supports LEON instructions.])])
d300bd48 4357 ;;
4358
4359changequote(,)dnl
96b9fbc1 4360 i[34567]86-*-* | x86_64-*-*)
d300bd48 4361changequote([,])dnl
dd9d9ac2 4362 case $target_os in
4363 cygwin*)
4364 # Full C++ conformance when using a shared libstdc++-v3 requires some
4365 # support from the Cygwin DLL, which in more recent versions exports
4366 # wrappers to aid in interposing and redirecting operators new, delete,
4367 # etc., as per n2800 #17.6.4.6 [replacement.functions]. Check if we
4368 # are configuring for a version of Cygwin that exports the wrappers.
8f3115a2 4369 if test x$host = x$target && test x$host_cpu = xi686; then
dd9d9ac2 4370 AC_CHECK_FUNC([__wrap__Znaj],[gcc_ac_cygwin_dll_wrappers=yes],[gcc_ac_cygwin_dll_wrappers=no])
4371 else
4372 # Can't check presence of libc functions during cross-compile, so
4373 # we just have to assume we're building for an up-to-date target.
4374 gcc_ac_cygwin_dll_wrappers=yes
4375 fi
4376 AC_DEFINE_UNQUOTED(USE_CYGWIN_LIBSTDCXX_WRAPPERS,
4377 [`if test $gcc_ac_cygwin_dll_wrappers = yes; then echo 1; else echo 0; fi`],
4378 [Define if you want to generate code by default that assumes that the
4379 Cygwin DLL exports wrappers to support libstdc++ function replacement.])
4380 esac
1f10d387 4381 case $target_os in
6905db52 4382 cygwin* | pe | mingw32*)
7b897de3 4383 # Recent binutils allows the three-operand form of ".comm" on PE. This
4384 # definition is used unconditionally to initialise the default state of
4385 # the target option variable that governs usage of the feature.
4386 gcc_GAS_CHECK_FEATURE([.comm with alignment], gcc_cv_as_comm_has_align,
4387 [2,19,52],,[.comm foo,1,32])
4388 AC_DEFINE_UNQUOTED(HAVE_GAS_ALIGNED_COMM,
4389 [`if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi`],
4390 [Define if your assembler supports specifying the alignment
4391 of objects allocated using the GAS .comm command.])
1f10d387 4392 # Used for DWARF 2 in PE
4393 gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
4394 gcc_cv_as_ix86_pe_secrel32,
4395 [2,15,91],,
4396[.text
4397foo: nop
4398.data
4399 .secrel32 foo],
4400 [if test x$gcc_cv_ld != x \
4401 && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
4402 gcc_cv_as_ix86_pe_secrel32=yes
4403 fi
4404 rm -f conftest],
4405 [AC_DEFINE(HAVE_GAS_PE_SECREL32_RELOC, 1,
4406 [Define if your assembler and linker support 32-bit section relative relocs via '.secrel32 label'.])])
4d992eb6 4407 # Test if the assembler supports the extended form of the .section
4408 # directive that specifies section alignment. LTO support uses this,
4409 # but normally only after installation, so we warn but don't fail the
4410 # configure if LTO is enabled but the assembler does not support it.
4411 gcc_GAS_CHECK_FEATURE([.section with alignment], gcc_cv_as_section_has_align,
4412 [2,20,1],-fatal-warnings,[.section lto_test,"dr0"])
4413 if test x$gcc_cv_as_section_has_align != xyes; then
4414 case ",$enable_languages," in
4415 *,lto,*)
4416 AC_MSG_WARN([LTO for $target requires binutils >= 2.20.1, but version found appears insufficient; LTO will not work until binutils is upgraded.])
4417 ;;
4418 esac
4419 fi
1f10d387 4420 ;;
4421 esac
4422
9bc1196f 4423 gcc_GAS_CHECK_FEATURE([-xbrace_comment], gcc_cv_as_ix86_xbrace_comment,,
4424 [-xbrace_comment=no], [.text],,
4425 [AC_DEFINE(HAVE_AS_XBRACE_COMMENT_OPTION, 1,
4426 [Define if your assembler supports -xbrace_comment option.])])
4427
6d6c1801 4428 gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
6cc62ffa 4429 gcc_cv_as_ix86_filds,,,
b3f7a353 4430 [filds (%ebp); fists (%ebp)],,
6cc62ffa 4431 [AC_DEFINE(HAVE_AS_IX86_FILDS, 1,
4432 [Define if your assembler uses filds and fists mnemonics.])])
4433
4434 gcc_GAS_CHECK_FEATURE([fildq and fistpq mnemonics],
4435 gcc_cv_as_ix86_fildq,,,
b3f7a353 4436 [fildq (%ebp); fistpq (%ebp)],,
6cc62ffa 4437 [AC_DEFINE(HAVE_AS_IX86_FILDQ, 1,
4438 [Define if your assembler uses fildq and fistq mnemonics.])])
6d6c1801 4439
65cce9df 4440 gcc_GAS_CHECK_FEATURE([cmov syntax],
4441 gcc_cv_as_ix86_cmov_sun_syntax,,,
4442 [cmovl.l %edx, %eax],,
4443 [AC_DEFINE(HAVE_AS_IX86_CMOV_SUN_SYNTAX, 1,
4444 [Define if your assembler supports the Sun syntax for cmov.])])
4445
97f2677a 4446 gcc_GAS_CHECK_FEATURE([ffreep mnemonic],
4447 gcc_cv_as_ix86_ffreep,,,
4448 [ffreep %st(1)],,
4449 [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
4450 [Define if your assembler supports the ffreep mnemonic.])])
4451
05157f42 4452 gcc_GAS_CHECK_FEATURE([.quad directive],
4453 gcc_cv_as_ix86_quad,,,
4454 [.quad 0],,
4455 [AC_DEFINE(HAVE_AS_IX86_QUAD, 1,
4456 [Define if your assembler supports the .quad directive.])])
4457
735630ef 4458 gcc_GAS_CHECK_FEATURE([sahf mnemonic],
4459 gcc_cv_as_ix86_sahf,,,
5a079549 4460 [.code64
4461 sahf],,
735630ef 4462 [AC_DEFINE(HAVE_AS_IX86_SAHF, 1,
5a079549 4463 [Define if your assembler supports the sahf mnemonic in 64bit mode.])])
735630ef 4464
9e2820ab 4465 gcc_GAS_CHECK_FEATURE([interunit movq mnemonic],
4466 gcc_cv_as_ix86_interunit_movq,,,
4467 [.code64
4468 movq %mm0, %rax
f17a6c34 4469 movq %rax, %xmm0])
4470 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_INTERUNIT_MOVQ,
4471 [`if test $gcc_cv_as_ix86_interunit_movq = yes; then echo 1; else echo 0; fi`],
4472 [Define if your assembler supports interunit movq mnemonic.])
9e2820ab 4473
7f738025 4474 gcc_GAS_CHECK_FEATURE([hle prefixes],
4475 gcc_cv_as_ix86_hle,,,
92ff811e 4476 [lock xacquire cmpxchg %esi, (%ecx)],,
7f738025 4477 [AC_DEFINE(HAVE_AS_IX86_HLE, 1,
4478 [Define if your assembler supports HLE prefixes.])])
4479
5a5324bc 4480 gcc_GAS_CHECK_FEATURE([swap suffix],
4481 gcc_cv_as_ix86_swap,,,
4482 [movl.s %esp, %ebp],,
4483 [AC_DEFINE(HAVE_AS_IX86_SWAP, 1,
4484 [Define if your assembler supports the swap suffix.])])
4485
95792072 4486 gcc_GAS_CHECK_FEATURE([different section symbol subtraction],
4487 gcc_cv_as_ix86_diff_sect_delta,,,
4488 [.section .rodata
4489.L1:
4490 .long .L2-.L1
4491 .long .L3-.L1
4492 .text
4493.L3: nop
4494.L2: nop],,
4495 [AC_DEFINE(HAVE_AS_IX86_DIFF_SECT_DELTA, 1,
4496 [Define if your assembler supports the subtraction of symbols in different sections.])])
4497
fa1a7502 4498 gcc_GAS_CHECK_FEATURE([rep and lock prefix],
4499 gcc_cv_as_ix86_rep_lock_prefix,,,
4500 [rep movsl
948e3eac 4501 rep ret
4502 rep nop
4503 rep bsf %ecx, %eax
4504 rep bsr %ecx, %eax
44ddfc4c 4505 lock addl %edi, (%eax,%esi)
66d2fcdf 4506 lock orl $0, (%esp)],,
4507 [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
4508 [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
fa1a7502 4509
e786f3a4 4510 gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
4511 gcc_cv_as_ix86_ud2,,,
4512 [ud2],,
4513 [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
4514 [Define if your assembler supports the 'ud2' mnemonic.])])
4515
a55c79f0 4516 # Enforce 32-bit output with gas and gld.
4517 if test x$gas = xyes; then
4518 as_ix86_gas_32_opt="--32"
4519 fi
4520 if echo "$ld_ver" | grep GNU > /dev/null; then
4521 if $gcc_cv_ld -V 2>/dev/null | grep elf_i386_sol2 > /dev/null; then
4522 ld_ix86_gld_32_opt="-melf_i386_sol2"
4523 else
4524 ld_ix86_gld_32_opt="-melf_i386"
4525 fi
4526 fi
4527
04a4c50e 4528 gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
a55c79f0 4529 gcc_cv_as_ix86_tlsgdplt,,
4530 [$as_ix86_gas_32_opt],
31d2f7ca 4531 [call tls_gd@tlsgdplt],
4532 [if test x$gcc_cv_ld != x \
a55c79f0 4533 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
31d2f7ca 4534 gcc_cv_as_ix86_tlsgdplt=yes
4535 fi
4536 rm -f conftest],
04a4c50e 4537 [AC_DEFINE(HAVE_AS_IX86_TLSGDPLT, 1,
31d2f7ca 4538 [Define if your assembler and linker support @tlsgdplt.])])
04a4c50e 4539
fcc29059 4540 conftest_s='
4541 .section .tdata,"aw'$tls_section_flag'",@progbits
4542tls_ld:
4543 .section .text,"ax",@progbits
4544 call tls_ld@tlsldmplt'
a55c79f0 4545
04a4c50e 4546 gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM_PLT reloc],
a55c79f0 4547 gcc_cv_as_ix86_tlsldmplt,,
4548 [$as_ix86_gas_32_opt],
fcc29059 4549 [$conftest_s],
31d2f7ca 4550 [if test x$gcc_cv_ld != x \
a55c79f0 4551 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o -G > /dev/null 2>&1; then
31d2f7ca 4552 gcc_cv_as_ix86_tlsldmplt=yes
4553 fi
e727a9cd 4554 rm -f conftest])
4555 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDMPLT,
4556 [`if test $gcc_cv_as_ix86_tlsldmplt = yes; then echo 1; else echo 0; fi`],
4557 [Define to 1 if your assembler and linker support @tlsldmplt.])
4558
e727a9cd 4559 conftest_s='
4560 .section .text,"ax",@progbits
4561 .globl _start
4562 .type _start, @function
4563_start:
4564 leal value@tlsldm(%ebx), %eax
4565 call ___tls_get_addr@plt
4566
4567 .section .tdata,"aw'$tls_section_flag'",@progbits
4568 .type value, @object
4569value:'
4570 gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM reloc],
4571 gcc_cv_as_ix86_tlsldm,,
eaf77c2b 4572 [$as_ix86_gas_32_opt],
e727a9cd 4573 [$conftest_s],
4574 [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
eaf77c2b 4575 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o $ld_tls_libs -lc > /dev/null 2>&1; then
e727a9cd 4576 if $gcc_cv_objdump -d conftest 2>/dev/null | grep nop > /dev/null \
4577 || dis conftest 2>/dev/null | grep nop > /dev/null; then
4578 gcc_cv_as_ix86_tlsldm=yes
4579 fi
4580 fi
4581 rm -f conftest])
4582 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLSLDM,
4583 [`if test $gcc_cv_as_ix86_tlsldm = yes; then echo 1; else echo 0; fi`],
4584 [Define to 1 if your assembler and linker support @tlsldm.])
04a4c50e 4585
6fb2f181 4586 conftest_s='
4587 .data
4588bar:
4589 .byte 1
4590 .text
4591 .global _start
4592_start:
4593 cmpl $0, bar@GOT
4594 jmp *_start@GOT'
4595 gcc_GAS_CHECK_FEATURE([R_386_GOT32X reloc],
4596 gcc_cv_as_ix86_got32x,,
eaf77c2b 4597 [$as_ix86_gas_32_opt],
6fb2f181 4598 [$conftest_s],
4599 [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
4600 && test x$gcc_cv_readelf != x \
4601 && $gcc_cv_readelf --relocs --wide conftest.o 2>&1 \
4602 | grep R_386_GOT32X > /dev/null 2>&1 \
eaf77c2b 4603 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
6fb2f181 4604 if $gcc_cv_objdump -dw conftest 2>&1 \
4605 | grep 0xffffff > /dev/null 2>&1; then
4606 gcc_cv_as_ix86_got32x=no
4607 else
4608 gcc_cv_as_ix86_got32x=yes
4609 fi
4610 fi
4611 rm -f conftest])
4612 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_GOT32X,
4613 [`if test x"$gcc_cv_as_ix86_got32x" = xyes; then echo 1; else echo 0; fi`],
4614 [Define 0/1 if your assembler and linker support @GOT.])
a55c79f0 4615
4616 gcc_GAS_CHECK_FEATURE([GOTOFF in data],
4617 gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
4618 [$as_ix86_gas_32_opt],
4619[ .text
4620.L0:
4621 nop
4622 .data
4623 .long .L0@GOTOFF])
4624 AC_DEFINE_UNQUOTED(HAVE_AS_GOTOFF_IN_DATA,
4625 [`if test $gcc_cv_as_ix86_gotoff_in_data = yes; then echo 1; else echo 0; fi`],
4626 [Define true if the assembler supports '.long foo@GOTOFF'.])
4627
c7f16cfa 4628 conftest_s='
4629 .section .text,"ax",@progbits
4630 .globl _start
4631 .type _start, @function
4632_start:
4633 leal ld@tlsldm(%ecx), %eax
4634 call *___tls_get_addr@GOT(%ecx)
4635 leal gd@tlsgd(%ecx), %eax
4636 call *___tls_get_addr@GOT(%ecx)
4637
4638 .section .tdata,"aw'$tls_section_flag'",@progbits
4639 .type ld, @object
4640ld:
4641 .byte 0
4642 .globl gd
4643 .type gd, @object
4644gd:
4645 .byte 0'
4646 gcc_GAS_CHECK_FEATURE([calling ___tls_get_addr via GOT],
4647 gcc_cv_as_ix86_tls_get_addr_via_got,,
4648 [$as_ix86_gas_32_opt],
4649 [$conftest_s],
4650 [if test x$gcc_cv_ld != x \
4651 && $gcc_cv_ld $ld_ix86_gld_32_opt -o conftest conftest.o > /dev/null 2>&1; then
4652 gcc_cv_as_ix86_tls_get_addr_via_got=yes
4653 fi
4654 rm -f conftest])
4655 AC_DEFINE_UNQUOTED(HAVE_AS_IX86_TLS_GET_ADDR_GOT,
4656 [`if test x"$gcc_cv_as_ix86_tls_get_addr_via_got" = xyes; then echo 1; else echo 0; fi`],
4657 [Define 0/1 if your assembler and linker support calling ___tls_get_addr via GOT.])
d300bd48 4658 ;;
0cc4b4a2 4659
4660 ia64*-*-*)
6d6c1801 4661 gcc_GAS_CHECK_FEATURE([ltoffx and ldxmov relocs],
4662 gcc_cv_as_ia64_ltoffx_ldxmov_relocs, [2,14,0],,
13f3d840 4663[ .text
0cc4b4a2 4664 addl r15 = @ltoffx(x#), gp
4665 ;;
c49718af 4666 ld8.mov r16 = [[r15]], x#
4667],,
6d6c1801 4668 [AC_DEFINE(HAVE_AS_LTOFFX_LDXMOV_RELOCS, 1,
4669 [Define if your assembler supports ltoffx and ldxmov relocations.])])
4670
0cc4b4a2 4671 ;;
6d6c1801 4672
24880e5b 4673 powerpc*-*-*)
2f6cdf65 4674
6d6c1801 4675 case $target in
cd0c3d24 4676 *-*-darwin*)
4677 gcc_GAS_CHECK_FEATURE([.machine directive support],
4678 gcc_cv_as_machine_directive,,,
4679 [ .machine ppc7400])
4680 if test x$gcc_cv_as_machine_directive != xyes; then
4681 echo "*** This target requires an assembler supporting \".machine\"" >&2
4682 echo you can get it from: ftp://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg >&2
4683 test x$build = x$target && exit 1
4684 fi
2f6cdf65 4685 ;;
4686 esac
4687
4688 case $target in
4689 *-*-aix*) conftest_s=' .machine "pwr5"
4690 .csect .text[[PR]]
4691 mfcr 3,128';;
4692 *-*-darwin*) conftest_s=' .text
3ba829c3 4693 mfcr r3,128';;
ce1a729a 4694 *) conftest_s=' .machine power4
4adb2d8e 4695 .text
3ba829c3 4696 mfcr 3,128';;
6d6c1801 4697 esac
6d6c1801 4698
4699 gcc_GAS_CHECK_FEATURE([mfcr field support],
4700 gcc_cv_as_powerpc_mfcrf, [2,14,0],,
4701 [$conftest_s],,
4702 [AC_DEFINE(HAVE_AS_MFCRF, 1,
4703 [Define if your assembler supports mfcr field.])])
a8bb341c 4704
197f58fa 4705 case $target in
4706 *-*-aix*) conftest_s=' .csect .text[[PR]]
4707LCF..0:
4708 addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';;
4709 *-*-darwin*)
4710 conftest_s=' .text
4711LCF0:
4712 addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';;
4713 *) conftest_s=' .text
4714.LCF0:
4715 addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
4716 esac
4717
34fe62ca 4718 gcc_GAS_CHECK_FEATURE([rel16 relocs],
4719 gcc_cv_as_powerpc_rel16, [2,17,0], -a32,
4720 [$conftest_s],,
4721 [AC_DEFINE(HAVE_AS_REL16, 1,
4722 [Define if your assembler supports R_PPC_REL16 relocs.])])
4723
94f7a54b 4724 case $target in
4725 *-*-aix*) conftest_s=' .machine "pwr7"
4726 .csect .text[[PR]]
4727 lxvd2x 1,2,3';;
4728 *) conftest_s=' .machine power7
4729 .text
4730 lxvd2x 1,2,3';;
4731 esac
4732
4733 gcc_GAS_CHECK_FEATURE([vector-scalar support],
9c878e1b 4734 gcc_cv_as_powerpc_vsx, [2,19,2], -a32,
94f7a54b 4735 [$conftest_s],,
4736 [AC_DEFINE(HAVE_AS_VSX, 1,
4737 [Define if your assembler supports VSX instructions.])])
4738
6c7d78e4 4739 gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
4740 gcc_cv_as_powerpc_gnu_attribute, [2,18,0],,
4741 [.gnu_attribute 4,1],,
4742 [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
4743 [Define if your assembler supports .gnu_attribute.])])
d46ea878 4744
4745 gcc_GAS_CHECK_FEATURE([tls marker support],
4746 gcc_cv_as_powerpc_tls_markers, [2,20,0],,
4747 [ bl __tls_get_addr(x@tlsgd)],,
4748 [AC_DEFINE(HAVE_AS_TLS_MARKERS, 1,
4749 [Define if your assembler supports arg info for __tls_get_addr.])])
1a9c54a3 4750
4dcc3863 4751 gcc_GAS_CHECK_FEATURE([prologue entry point marker support],
4752 gcc_cv_as_powerpc_entry_markers, [2,26,0],-a64 --fatal-warnings,
4753 [ .reloc .,R_PPC64_ENTRY; nop],,
4754 [AC_DEFINE(HAVE_AS_ENTRY_MARKERS, 1,
4755 [Define if your assembler supports the R_PPC64_ENTRY relocation.])])
4756
5969e425 4757 gcc_GAS_CHECK_FEATURE([plt sequence marker support],
4758 gcc_cv_as_powerpc_pltseq_markers, [2,31,0],-a32 --fatal-warnings,
4759 [ .reloc .,R_PPC_PLTSEQ; nop],,
4760 [AC_DEFINE(HAVE_AS_PLTSEQ, 1,
4761 [Define if your assembler supports R_PPC*_PLTSEQ relocations.])])
4762
1a9c54a3 4763 case $target in
4764 *-*-aix*)
36302ce3 4765 gcc_GAS_CHECK_FEATURE([AIX .ref support],
e2f5cc8a 4766 gcc_cv_as_aix_ref, [2,21,0],,
1a9c54a3 4767 [ .csect stuff[[rw]]
4768 stuff:
4769 .long 1
4770 .extern sym
4771 .ref sym
4772 ],,
4773 [AC_DEFINE(HAVE_AS_REF, 1,
4774 [Define if your assembler supports .ref])])
d6723bcd 4775
36302ce3 4776 gcc_GAS_CHECK_FEATURE([AIX DWARF location lists section support],
67429b36 4777 gcc_cv_as_aix_dwloc, [2,21,0],,
36302ce3 4778 [ .dwsect 0xA0000
4779 Lframe..0:
d6cef2f9 4780 .vbyte 4,Lframe..0
67429b36 4781 ],,
4782 [AC_DEFINE(HAVE_XCOFF_DWARF_EXTRAS, 1,
36302ce3 4783 [Define if your assembler supports AIX debug frame section label reference.])])
67429b36 4784 ;;
4785 esac
4786 ;;
4787
6d6c1801 4788 mips*-*-*)
4789 gcc_GAS_CHECK_FEATURE([explicit relocation support],
4790 gcc_cv_as_mips_explicit_relocs, [2,14,0],,
4791[ lw $4,%gp_rel(foo)($4)],,
4792 [if test x$target_cpu_default = x
4793 then target_cpu_default=MASK_EXPLICIT_RELOCS
4794 else target_cpu_default="($target_cpu_default)|MASK_EXPLICIT_RELOCS"
4795 fi])
67429b36 4796
f863d3e3 4797 gcc_GAS_CHECK_FEATURE([-mno-shared support],
4798 gcc_cv_as_mips_no_shared, [2,16,0], [-mno-shared], [nop],,
4799 [AC_DEFINE(HAVE_AS_NO_SHARED, 1,
4800 [Define if the assembler understands -mno-shared.])])
0fd6d684 4801
4802 gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
4803 gcc_cv_as_mips_gnu_attribute, [2,18,0],,
4804 [.gnu_attribute 4,1],,
4805 [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
4806 [Define if your assembler supports .gnu_attribute.])])
c9eabb6d 4807
f2b55aea 4808 gcc_GAS_CHECK_FEATURE([.module support],
d745b466 4809 gcc_cv_as_mips_dot_module,,[-32],
4810 [.module mips2
4811 .module fp=xx],,
f2b55aea 4812 [AC_DEFINE(HAVE_AS_DOT_MODULE, 1,
4813 [Define if your assembler supports .module.])])
4814 if test x$gcc_cv_as_mips_dot_module = xno \
4815 && test x$with_fp_32 != x; then
4816 AC_MSG_ERROR(
4817 [Requesting --with-fp-32= requires assembler support for .module.])
4818 fi
4819
ff9c1bc1 4820 gcc_GAS_CHECK_FEATURE([.micromips support],
bcba791d 4821 gcc_cv_as_micromips_support,,[--fatal-warnings],
ff9c1bc1 4822 [.set micromips],,
4823 [AC_DEFINE(HAVE_GAS_MICROMIPS, 1,
4824 [Define if your assembler supports the .set micromips directive])])
4825
c9eabb6d 4826 gcc_GAS_CHECK_FEATURE([.dtprelword support],
4827 gcc_cv_as_mips_dtprelword, [2,18,0],,
4828 [.section .tdata,"awT",@progbits
4829x:
4830 .word 2
4831 .text
4832 .dtprelword x+0x8000],,
4833 [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
4834 [Define if your assembler supports .dtprelword.])])
ca30e0b9 4835
3e60fdb7 4836 gcc_GAS_CHECK_FEATURE([DSPR1 mult with four accumulators support],
4837 gcc_cv_as_mips_dspr1_mult,,,
4838[ .set mips32r2
4839 .set nodspr2
4840 .set dsp
4841 madd $ac3,$4,$5
4842 maddu $ac3,$4,$5
4843 msub $ac3,$4,$5
4844 msubu $ac3,$4,$5
4845 mult $ac3,$4,$5
4846 multu $ac3,$4,$5],,
4847 [AC_DEFINE(HAVE_AS_DSPR1_MULT, 1,
4848 [Define if your assembler supports DSPR1 mult.])])
4849
ca30e0b9 4850 AC_MSG_CHECKING(assembler and linker for explicit JALR relocation)
4851 gcc_cv_as_ld_jalr_reloc=no
4852 if test $gcc_cv_as_mips_explicit_relocs = yes; then
4853 if test $in_tree_ld = yes ; then
4854 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 \
4855 && test $in_tree_ld_is_elf = yes; then
4856 gcc_cv_as_ld_jalr_reloc=yes
4857 fi
4858 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
4859 echo ' .ent x' > conftest.s
aab5ced3 4860 echo 'x: lw $2,%got_disp(y)($3)' >> conftest.s
4861 echo ' lw $25,%call16(y)($28)' >> conftest.s
ca30e0b9 4862 echo ' .reloc 1f,R_MIPS_JALR,y' >> conftest.s
4863 echo '1: jalr $25' >> conftest.s
4864 echo ' .reloc 1f,R_MIPS_JALR,x' >> conftest.s
4865 echo '1: jalr $25' >> conftest.s
4866 echo ' .end x' >> conftest.s
4867 if $gcc_cv_as -o conftest.o conftest.s >/dev/null 2>&AS_MESSAGE_LOG_FD \
4868 && $gcc_cv_ld -shared -o conftest.so conftest.o >/dev/null 2>&AS_MESSAGE_LOG_FD; then
b1383b01 4869 if $gcc_cv_objdump -d conftest.so | grep jalr >/dev/null 2>&1 \
4870 && $gcc_cv_objdump -d conftest.so | grep "bal.*<x>" >/dev/null 2>&1; then
ca30e0b9 4871 gcc_cv_as_ld_jalr_reloc=yes
4872 fi
4873 fi
4874 rm -f conftest.*
4875 fi
4876 fi
4877 if test $gcc_cv_as_ld_jalr_reloc = yes; then
4878 if test x$target_cpu_default = x; then
4879 target_cpu_default=MASK_RELAX_PIC_CALLS
4880 else
4881 target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
4882 fi
4883 fi
4884 AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
c4cf26ad 4885
4886 AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
4887 [gcc_cv_ld_mips_personality_relaxation],
4888 [gcc_cv_ld_mips_personality_relaxation=no
4889 if test $in_tree_ld = yes ; then
4890 if test "$gcc_cv_gld_major_version" -eq 2 \
4891 -a "$gcc_cv_gld_minor_version" -ge 21 \
4892 -o "$gcc_cv_gld_major_version" -gt 2; then
4893 gcc_cv_ld_mips_personality_relaxation=yes
4894 fi
4895 elif test x$gcc_cv_as != x \
4896 -a x$gcc_cv_ld != x \
4897 -a x$gcc_cv_readelf != x ; then
4898 cat > conftest.s <<EOF
4899 .cfi_startproc
4900 .cfi_personality 0x80,indirect_ptr
4901 .ent test
4902test:
4903 nop
4904 .end test
4905 .cfi_endproc
4906
4907 .section .data,"aw",@progbits
4908indirect_ptr:
4909 .dc.a personality
4910EOF
4911 if $gcc_cv_as -KPIC -o conftest.o conftest.s > /dev/null 2>&1 \
4912 && $gcc_cv_ld -o conftest conftest.o -shared > /dev/null 2>&1; then
4913 if $gcc_cv_readelf -d conftest 2>&1 \
4914 | grep TEXTREL > /dev/null 2>&1; then
4915 :
4916 elif $gcc_cv_readelf --relocs conftest 2>&1 \
4917 | grep 'R_MIPS_REL32 *$' > /dev/null 2>&1; then
4918 :
4919 else
4920 gcc_cv_ld_mips_personality_relaxation=yes
4921 fi
4922 fi
4923 fi
4924 rm -f conftest.s conftest.o conftest])
4925 if test x$gcc_cv_ld_mips_personality_relaxation = xyes; then
4926 AC_DEFINE(HAVE_LD_PERSONALITY_RELAXATION, 1,
4927 [Define if your linker can relax absolute .eh_frame personality
4928pointers into PC-relative form.])
4929 fi
0bd32132 4930
4931 gcc_GAS_CHECK_FEATURE([-mnan= support],
4932 gcc_cv_as_mips_nan,,
4933 [-mnan=2008],,,
4934 [AC_DEFINE(HAVE_AS_NAN, 1,
4935 [Define if the assembler understands -mnan=.])])
4936 if test x$gcc_cv_as_mips_nan = xno \
4937 && test x$with_nan != x; then
4938 AC_MSG_ERROR(
4939 [Requesting --with-nan= requires assembler support for -mnan=])
4940 fi
c8aeaa6d 4941 ;;
93b27baa 4942 riscv*-*-*)
4943 gcc_GAS_CHECK_FEATURE([.attribute support],
4944 gcc_cv_as_riscv_attribute, [2,32,0],,
4945 [.attribute stack_align,4],,
4946 [AC_DEFINE(HAVE_AS_RISCV_ATTRIBUTE, 1,
4947 [Define if your assembler supports .attribute.])])
4948 ;;
6b7cfb9c 4949 s390*-*-*)
4950 gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
4951 gcc_cv_as_s390_gnu_attribute, [2,18,0],,
4952 [.gnu_attribute 8,1],,
4953 [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
4954 [Define if your assembler supports .gnu_attribute.])])
7a0cee35 4955 gcc_GAS_CHECK_FEATURE([.machine and .machinemode support],
4956 gcc_cv_as_s390_machine_machinemode, [2,24,0],,
4957 [ .machinemode push
4958 .machinemode pop
4959 .machine push
4960 .machine pop],,
4961 [AC_DEFINE(HAVE_AS_MACHINE_MACHINEMODE, 1,
4962 [Define if your assembler supports .machine and .machinemode.])])
4963 gcc_GAS_CHECK_FEATURE([architecture modifiers support],
4964 gcc_cv_as_s390_architecture_modifiers, [2,26,0],,
4965 [ .machine z13+vx ],,
4966 [AC_DEFINE(HAVE_AS_ARCHITECTURE_MODIFIERS, 1,
4967 [Define if your assembler supports architecture modifiers.])])
f0075e6e 4968 gcc_GAS_CHECK_FEATURE([vector load/store alignment hints],
4969 gcc_cv_as_s390_vector_loadstore_alignment_hints, [2,31,0],,
4970 [ vl %v24,0(%r15),3 ],,
4971 [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS, 1,
4972 [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument.])])
4973
6b7cfb9c 4974 ;;
c8aeaa6d 4975esac
4976
4977# Mips and HP-UX need the GNU assembler.
4978# Linux on IA64 might be able to use the Intel assembler.
6d6c1801 4979
c8aeaa6d 4980case "$target" in
4981 mips*-*-* | *-*-hpux* )
6e930e6c 4982 if test x$gas_flag = xyes \
4983 || test x"$host" != x"$build" \
4984 || test ! -x "$gcc_cv_as" \
4985 || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
4986 :
4987 else
4988 echo "*** This configuration requires the GNU assembler" >&2
4989 exit 1
4990 fi
6d6c1801 4991 ;;
4992esac
c8aeaa6d 4993
142cf471 4994# ??? Not all targets support dwarf2 debug_line, even within a version
4995# of gas. Moreover, we need to emit a valid instruction to trigger any
4996# info to the output file. So, as supported targets are added to gas 2.11,
4997# add some instruction here to (also) show we expect this might work.
4998# ??? Once 2.11 is released, probably need to add first known working
4999# version to the per-target configury.
5b80c8e4 5000case "$cpu_type" in
9399b971 5001 aarch64 | alpha | arc | arm | avr | bfin | cris | csky | i386 | m32c | m68k \
d71996db 5002 | microblaze | mips | nds32 | nios2 | pa | riscv | rs6000 | score | sparc | spu \
d7d03008 5003 | tilegx | tilepro | visium | xstormy16 | xtensa)
142cf471 5004 insn="nop"
5005 ;;
5b80c8e4 5006 ia64 | s390)
142cf471 5007 insn="nop 0"
5008 ;;
5b80c8e4 5009 mmix)
482662fd 5010 insn="swym 0"
5011 ;;
6d6c1801 5012esac
5013if test x"$insn" != x; then
5014 conftest_s="\
5015 .file 1 \"conftest.s\"
5016 .loc 1 3 0
5017 $insn"
5018 gcc_GAS_CHECK_FEATURE([dwarf2 debug_line support],
5019 gcc_cv_as_dwarf2_debug_line,
5020 [elf,2,11,0],, [$conftest_s],
1b33a244 5021 [if test x$gcc_cv_objdump != x \
5022 && $gcc_cv_objdump -h conftest.o 2> /dev/null \
5023 | grep debug_line > /dev/null 2>&1; then
6d6c1801 5024 gcc_cv_as_dwarf2_debug_line=yes
0b135c47 5025 elif test x$gcc_cv_otool != x \
5026 && $gcc_cv_otool -l conftest.o 2> /dev/null \
5027 | grep debug_line > /dev/null 2>&1; then
5028 gcc_cv_as_dwarf2_debug_line=yes
6d6c1801 5029 fi])
5030
5031# The .debug_line file table must be in the exact order that
5032# we specified the files, since these indices are also used
5033# by DW_AT_decl_file. Approximate this test by testing if
5034# the assembler bitches if the same index is assigned twice.
5035 gcc_GAS_CHECK_FEATURE([buggy dwarf2 .file directive],
5036 gcc_cv_as_dwarf2_file_buggy,,,
5037[ .file 1 "foo.s"
5038 .file 1 "bar.s"])
5039
5040 if test $gcc_cv_as_dwarf2_debug_line = yes \
5041 && test $gcc_cv_as_dwarf2_file_buggy = no; then
7b0db09c 5042 AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1,
6d6c1801 5043 [Define if your assembler supports dwarf2 .file/.loc directives,
4a82352a 5044 and preserves file table indices exactly as given.])
7b0db09c 5045
5046 if test $gcc_cv_as_leb128 = yes; then
5047 conftest_s="\
5048 .file 1 \"conftest.s\"
5049 .loc 1 3 0 view .LVU1
5050 $insn
5051 .data
5052 .uleb128 .LVU1
5053 .uleb128 .LVU1
5054"
5055 gcc_GAS_CHECK_FEATURE([dwarf2 debug_view support],
5056 gcc_cv_as_dwarf2_debug_view,
5057 [elf,2,27,0],,[$conftest_s],,
5058 [AC_DEFINE(HAVE_AS_DWARF2_DEBUG_VIEW, 1,
5059 [Define if your assembler supports views in dwarf2 .loc directives.])])
5060 fi
6d6c1801 5061 fi
5062
5063 gcc_GAS_CHECK_FEATURE([--gdwarf2 option],
5064 gcc_cv_as_gdwarf2_flag,
5065 [elf,2,11,0], [--gdwarf2], [$insn],,
5066 [AC_DEFINE(HAVE_AS_GDWARF2_DEBUG_FLAG, 1,
5067[Define if your assembler supports the --gdwarf2 option.])])
5068
5069 gcc_GAS_CHECK_FEATURE([--gstabs option],
5070 gcc_cv_as_gstabs_flag,
3efb5d22 5071 [elf,2,11,0], [--gstabs], [$insn],,
6d6c1801 5072 [AC_DEFINE(HAVE_AS_GSTABS_DEBUG_FLAG, 1,
5073[Define if your assembler supports the --gstabs option.])])
5f1f2de5 5074
5075 gcc_GAS_CHECK_FEATURE([--debug-prefix-map option],
5076 gcc_cv_as_debug_prefix_map_flag,
22ff3bfb 5077 [2,18,0], [--debug-prefix-map /a=/b], [$insn],,
5f1f2de5 5078 [AC_DEFINE(HAVE_AS_DEBUG_PREFIX_MAP, 1,
5079[Define if your assembler supports the --debug-prefix-map option.])])
142cf471 5080fi
1a6f9700 5081
4185c905 5082gcc_GAS_CHECK_FEATURE([compressed debug sections],
8151105d 5083 gcc_cv_as_compress_debug,,,,
4185c905 5084 [# gas compiled without zlib cannot compress debug sections and warns
5085 # about it, but still exits successfully. So check for this, too.
5086 if $gcc_cv_as --compress-debug-sections -o conftest.o conftest.s 2>&1 | grep -i warning > /dev/null
5087 then
5088 gcc_cv_as_compress_debug=0
8151105d 5089 # Since binutils 2.26, gas supports --compress-debug-sections=type,
5090 # defaulting to the ELF gABI format.
5091 elif $gcc_cv_as --compress-debug-sections=zlib-gnu -o conftest.o conftest.s > /dev/null 2>&1
5092 then
5093 gcc_cv_as_compress_debug=2
5094 gcc_cv_as_compress_debug_option="--compress-debug-sections"
5095 gcc_cv_as_no_compress_debug_option="--nocompress-debug-sections"
5096 # Before binutils 2.26, gas only supported --compress-debug-options and
5097 # emitted the traditional GNU format.
4185c905 5098 elif $gcc_cv_as --compress-debug-sections -o conftest.o conftest.s > /dev/null 2>&1
5099 then
5100 gcc_cv_as_compress_debug=1
5101 gcc_cv_as_compress_debug_option="--compress-debug-sections"
5102 gcc_cv_as_no_compress_debug_option="--nocompress-debug-sections"
5103 else
5104 gcc_cv_as_compress_debug=0
4185c905 5105 fi])
5106AC_DEFINE_UNQUOTED(HAVE_AS_COMPRESS_DEBUG, $gcc_cv_as_compress_debug,
5107[Define to the level of your assembler's compressed debug section support.])
5108AC_DEFINE_UNQUOTED(AS_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_compress_debug_option",
5109[Define to the assembler option to enable compressed debug sections.])
5110AC_DEFINE_UNQUOTED(AS_NO_COMPRESS_DEBUG_OPTION, "$gcc_cv_as_no_compress_debug_option",
5111[Define to the assembler option to disable compressed debug sections.])
5112
a65d7dd0 5113gcc_GAS_CHECK_FEATURE([.lcomm with alignment], gcc_cv_as_lcomm_with_alignment,
5114 ,,
5115[.lcomm bar,4,16],,
5116[AC_DEFINE(HAVE_GAS_LCOMM_WITH_ALIGNMENT, 1,
5117 [Define if your assembler supports .lcomm with an alignment field.])])
5118
4543a554 5119if test x$with_sysroot = x && test x$host = x$target \
5120 && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" \
5121 && test "$prefix" != "NONE"; then
5122 AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
5123[Define to PREFIX/include if cpp should also search that directory.])
5124fi
5125
4543a554 5126# Determine the version of glibc, if any, used on the target.
5127AC_MSG_CHECKING([for target glibc version])
5128AC_ARG_WITH([glibc-version],
5129 [AS_HELP_STRING([--with-glibc-version=M.N],
5130 [assume GCC used with glibc version M.N or later])], [
5131if [echo "$with_glibc_version" | grep '^[0-9][0-9]*\.[0-9][0-9]*$']; then
5132 glibc_version_major=`echo "$with_glibc_version" | sed -e 's/\..*//'`
5133 glibc_version_minor=`echo "$with_glibc_version" | sed -e 's/.*\.//'`
5134else
5135 AC_MSG_ERROR([option --with-glibc-version requires a version number M.N])
5136fi], [
5137glibc_version_major=0
5138glibc_version_minor=0
5139[if test -f $target_header_dir/features.h \
5140 && glibc_version_major_define=`$EGREP '^[ ]*#[ ]*define[ ]+__GLIBC__[ ]+[0-9]' $target_header_dir/features.h` \
5141 && glibc_version_minor_define=`$EGREP '^[ ]*#[ ]*define[ ]+__GLIBC_MINOR__[ ]+[0-9]' $target_header_dir/features.h`; then
5142 glibc_version_major=`echo "$glibc_version_major_define" | sed -e 's/.*__GLIBC__[ ]*//'`
5143 glibc_version_minor=`echo "$glibc_version_minor_define" | sed -e 's/.*__GLIBC_MINOR__[ ]*//'`
5144fi]])
5145AC_MSG_RESULT([$glibc_version_major.$glibc_version_minor])
6eb68b8f 5146AC_DEFINE_UNQUOTED([TARGET_GLIBC_MAJOR], [$glibc_version_major],
5147[GNU C Library major version number used on the target, or 0.])
5148AC_DEFINE_UNQUOTED([TARGET_GLIBC_MINOR], [$glibc_version_minor],
5149[GNU C Library minor version number used on the target, or 0.])
4543a554 5150
924907a3 5151AC_ARG_ENABLE(gnu-unique-object,
d9d975ae 5152 [AS_HELP_STRING([--enable-gnu-unique-object],
5153 [enable the use of the @gnu_unique_object ELF extension on glibc systems])],
924907a3 5154 [case $enable_gnu_unique_object in
5155 yes | no) ;;
5156 *) AC_MSG_ERROR(['$enable_gnu_unique_object' is an invalid value for --enable-gnu-unique-object.
5157Valid choices are 'yes' and 'no'.]) ;;
5158 esac],
5159 [gcc_GAS_CHECK_FEATURE([gnu_unique_object], gcc_cv_as_gnu_unique_object,
5160 [elf,2,19,52],,
4eb5a747 5161 [.type foo, '$target_type_format_char'gnu_unique_object],,
5162# We need to unquote above to to use the definition from config.gcc.
924907a3 5163# Also check for ld.so support, i.e. glibc 2.11 or higher.
4543a554 5164 [GCC_GLIBC_VERSION_GTE_IFELSE([2], [11], [enable_gnu_unique_object=yes], )]
5165 )])
924907a3 5166if test x$enable_gnu_unique_object = xyes; then
5167 AC_DEFINE(HAVE_GAS_GNU_UNIQUE_OBJECT, 1,
5168 [Define if your assembler supports @gnu_unique_object.])
5169fi
5170
a8971681 5171AC_CACHE_CHECK([assembler for tolerance to line number 0],
5172 [gcc_cv_as_line_zero],
5173 [gcc_cv_as_line_zero=no
5174 if test $in_tree_gas = yes; then
95cd4953 5175 gcc_GAS_VERSION_GTE_IFELSE(2, 16, 91, [gcc_cv_as_line_zero=yes])
a8971681 5176 elif test "x$gcc_cv_as" != x; then
5177 { echo '# 1 "test.s" 1'; echo '# 0 "" 2'; } > conftest.s
5178 if AC_TRY_COMMAND([$gcc_cv_as -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD 2>conftest.out]) &&
5179 test "x`cat conftest.out`" = x
5180 then
5181 gcc_cv_as_line_zero=yes
5182 else
5183 echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
5184 cat conftest.s >&AS_MESSAGE_LOG_FD
5185 echo "configure: error output was" >&AS_MESSAGE_LOG_FD
5186 cat conftest.out >&AS_MESSAGE_LOG_FD
5187 fi
5188 rm -f conftest.o conftest.s conftest.out
5189 fi])
5190if test "x$gcc_cv_as_line_zero" = xyes; then
5191 AC_DEFINE([HAVE_AS_LINE_ZERO], 1,
5192[Define if the assembler won't complain about a line such as # 0 "" 2.])
5193fi
5194
655e3fb1 5195AC_MSG_CHECKING(support for thin archives)
5196thin_archive_support=no
5197echo 'int main (void) { return 0; }' > conftest.c
5198if ($AR --version | sed 1q | grep "GNU ar" \
5199 && $CC $CFLAGS -c conftest.c \
5200 && $AR rcT conftest.a conftest.o \
5201 && $CC $CFLAGS $LDFLAGS -o conftest conftest.a) >/dev/null 2>&1; then
5202 thin_archive_support=yes
5203fi
5204rm -f conftest.c conftest.o conftest.a conftest
5205AC_MSG_RESULT($thin_archive_support)
5206AC_SUBST(thin_archive_support)
5207
0d6378a9 5208AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
5209gcc_cv_ld_eh_frame_hdr=no
7349ace9 5210if test $in_tree_ld = yes ; then
0dac358a 5211 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 \
5212 && test $in_tree_ld_is_elf = yes; then
0d6378a9 5213 gcc_cv_ld_eh_frame_hdr=yes
5214 fi
5215elif test x$gcc_cv_ld != x; then
bdd793b2 5216 if echo "$ld_ver" | grep GNU > /dev/null; then
5217 # Check if linker supports --eh-frame-hdr option
f50c2ca3 5218 if $gcc_cv_ld --help 2>&1 | grep eh-frame-hdr > /dev/null; then
bdd793b2 5219 gcc_cv_ld_eh_frame_hdr=yes
5220 fi
5221 else
5222 case "$target" in
5223 *-*-solaris2*)
839ff241 5224 # Sun ld has various bugs in .eh_frame_hdr support before version 1.2251.
5225 if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2251; then
bdd793b2 5226 gcc_cv_ld_eh_frame_hdr=yes
5227 fi
5228 ;;
5229 esac
5230 fi
0d6378a9 5231fi
fcd42b1e 5232GCC_TARGET_TEMPLATE([HAVE_LD_EH_FRAME_HDR])
0d6378a9 5233if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then
5234 AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1,
bdd793b2 5235[Define if your linker supports .eh_frame_hdr.])
0d6378a9 5236fi
5237AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr)
5238
75d28287 5239AC_MSG_CHECKING(linker CIEv3 in .eh_frame support)
5240gcc_cv_ld_eh_frame_ciev3=no
5241if test $in_tree_ld = yes ; then
5242 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 \
5243 && test $in_tree_ld_is_elf = yes; then
5244 gcc_cv_ld_eh_frame_ciev3=yes
5245 fi
5246elif test x$gcc_cv_ld != x; then
5247 if echo "$ld_ver" | grep GNU > /dev/null; then
5248 gcc_cv_ld_eh_frame_ciev3=yes
5249 if test 0"$ld_date" -lt 20040513; then
5250 if test -n "$ld_date"; then
5251 # If there was date string, but was earlier than 2004-05-13, fail
5252 gcc_cv_ld_eh_frame_ciev3=no
5253 elif test "$ld_vers_major" -lt 2; then
5254 gcc_cv_ld_eh_frame_ciev3=no
5255 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
5256 gcc_cv_ld_eh_frame_ciev3=no
5257 fi
5258 fi
5259 else
5260 case "$target" in
5261 *-*-solaris2*)
5262 # Sun ld added support for CIE v3 in .eh_frame in Solaris 11.1.
5263 if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2324; then
5264 gcc_cv_ld_eh_frame_ciev3=yes
5265 fi
5266 ;;
5267 esac
5268 fi
5269fi
5270AC_DEFINE_UNQUOTED(HAVE_LD_EH_FRAME_CIEV3,
5271 [`if test x"$gcc_cv_ld_eh_frame_ciev3" = xyes; then echo 1; else echo 0; fi`],
5272 [Define 0/1 if your linker supports CIE v3 in .eh_frame.])
5273AC_MSG_RESULT($gcc_cv_ld_eh_frame_ciev3)
5274
c3ce66b0 5275AC_MSG_CHECKING(linker position independent executable support)
5276gcc_cv_ld_pie=no
5277if test $in_tree_ld = yes ; then
80fc7cb7 5278 case "$target" in
5279 # Full PIE support on Solaris was only introduced in gld 2.26.
5280 *-*-solaris2*) gcc_gld_pie_min_version=26 ;;
5281 *) gcc_gld_pie_min_version=15 ;;
5282 esac
5283 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 \
0dac358a 5284 && test $in_tree_ld_is_elf = yes; then
c3ce66b0 5285 gcc_cv_ld_pie=yes
5286 fi
5287elif test x$gcc_cv_ld != x; then
80fc7cb7 5288 # Check if linker supports -pie option
f50c2ca3 5289 if $gcc_cv_ld --help 2>&1 | grep -- -pie > /dev/null; then
80fc7cb7 5290 gcc_cv_ld_pie=yes
5291 case "$target" in
5292 *-*-solaris2*)
5293 if echo "$ld_ver" | grep GNU > /dev/null \
5294 && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 26; then
5295 gcc_cv_ld_pie=no
5296 fi
5297 ;;
5298 esac
5299 else
5300 case "$target" in
5301 *-*-solaris2.1[[1-9]]*)
9273bda7 5302 # Solaris 11.3 added PIE support.
80fc7cb7 5303 if $gcc_cv_ld -z help 2>&1 | grep -- type.*pie > /dev/null; then
5304 gcc_cv_ld_pie=yes
c3ce66b0 5305 fi
80fc7cb7 5306 ;;
5307 esac
5308 fi
c3ce66b0 5309fi
5310if test x"$gcc_cv_ld_pie" = xyes; then
5311 AC_DEFINE(HAVE_LD_PIE, 1,
80fc7cb7 5312[Define if your linker supports PIE option.])
c3ce66b0 5313fi
5314AC_MSG_RESULT($gcc_cv_ld_pie)
130f2334 5315
5316AC_MSG_CHECKING(linker PIE support with copy reloc)
5317gcc_cv_ld_pie_copyreloc=no
5318if test $gcc_cv_ld_pie = yes ; then
5319 if test $in_tree_ld = yes ; then
5320 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
5321 gcc_cv_ld_pie_copyreloc=yes
5322 fi
5323 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
5324 # Check if linker supports -pie option with copy reloc
5325 case "$target" in
5326 i?86-*-linux* | x86_64-*-linux*)
5327 cat > conftest1.s <<EOF
5328 .globl a_glob
5329 .data
5330 .type a_glob, @object
5331 .size a_glob, 4
5332a_glob:
5333 .long 2
5334EOF
5335 cat > conftest2.s <<EOF
5336 .text
5337 .globl main
5338 .type main, @function
5339main:
5340 movl %eax, a_glob(%rip)
5341 .size main, .-main
32f62b18 5342 .globl ptr
5343 .section .data.rel,"aw",@progbits
5344 .type ptr, @object
5345ptr:
5346 .quad a_glob
130f2334 5347EOF
5348 if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
5349 && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
5350 && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
5351 && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
5352 gcc_cv_ld_pie_copyreloc=yes
5353 fi
5354 rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
5355 ;;
5356 esac
5357 fi
130f2334 5358fi
8271b807 5359AC_DEFINE_UNQUOTED(HAVE_LD_PIE_COPYRELOC,
5360 [`if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`],
5361 [Define 0/1 if your linker supports -pie option with copy reloc.])
130f2334 5362AC_MSG_RESULT($gcc_cv_ld_pie_copyreloc)
c3ce66b0 5363
0a011112 5364AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
5365gcc_cv_ld_eh_gc_sections=no
5366if test $in_tree_ld = yes ; then
5367 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 \
5368 && test $in_tree_ld_is_elf = yes; then
5369 gcc_cv_ld_eh_gc_sections=yes
5370 fi
5371elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
5372 cat > conftest.s <<EOF
5373 .section .text
5374.globl _start
5375 .type _start, @function
5376_start:
5377 .long foo
5378 .size _start, .-_start
5379 .section .text.foo,"ax",@progbits
5380 .type foo, @function
5381foo:
5382 .long 0
5383 .size foo, .-foo
5384 .section .gcc_except_table.foo,"a",@progbits
5385.L0:
5386 .long 0
5387 .section .eh_frame,"a",@progbits
5388 .long .L0
5389EOF
5390 if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
5391 if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
5392 | grep "gc-sections option ignored" > /dev/null; then
5393 gcc_cv_ld_eh_gc_sections=no
a6898883 5394 elif $gcc_cv_objdump -h conftest 2> /dev/null \
5395 | grep gcc_except_table > /dev/null; then
0a011112 5396 gcc_cv_ld_eh_gc_sections=yes
c8aaf000 5397 # If no COMDAT groups, the compiler will emit .gnu.linkonce.t. sections.
5398 if test x$gcc_cv_as_comdat_group != xyes; then
5399 gcc_cv_ld_eh_gc_sections=no
5400 cat > conftest.s <<EOF
5401 .section .text
5402.globl _start
5403 .type _start, @function
5404_start:
5405 .long foo
5406 .size _start, .-_start
5407 .section .gnu.linkonce.t.foo,"ax",@progbits
5408 .type foo, @function
5409foo:
5410 .long 0
5411 .size foo, .-foo
5412 .section .gcc_except_table.foo,"a",@progbits
5413.L0:
5414 .long 0
5415 .section .eh_frame,"a",@progbits
5416 .long .L0
5417EOF
5418 if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
5419 if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
5420 | grep "gc-sections option ignored" > /dev/null; then
5421 gcc_cv_ld_eh_gc_sections=no
a6898883 5422 elif $gcc_cv_objdump -h conftest 2> /dev/null \
5423 | grep gcc_except_table > /dev/null; then
c8aaf000 5424 gcc_cv_ld_eh_gc_sections=yes
5425 fi
5426 fi
5427 fi
0a011112 5428 fi
5429 fi
5430 rm -f conftest.s conftest.o conftest
5431fi
c8aaf000 5432case "$target" in
5433 hppa*-*-linux*)
5434 # ??? This apparently exposes a binutils bug with PC-relative relocations.
5435 gcc_cv_ld_eh_gc_sections=no
5436 ;;
5437esac
0a011112 5438if test x$gcc_cv_ld_eh_gc_sections = xyes; then
5439 AC_DEFINE(HAVE_LD_EH_GC_SECTIONS, 1,
5440 [Define if your linker supports garbage collection of
5441 sections in presence of EH frames.])
5442fi
5443AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections)
5444
34edf61b 5445AC_MSG_CHECKING(linker EH garbage collection of sections bug)
5446gcc_cv_ld_eh_gc_sections_bug=no
5447if test $in_tree_ld = yes ; then
5448 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 \
5449 && test $in_tree_ld_is_elf = yes; then
5450 gcc_cv_ld_eh_gc_sections_bug=yes
5451 fi
5452elif 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
5453 gcc_cv_ld_eh_gc_sections_bug=yes
5454 cat > conftest.s <<EOF
5455 .section .text
5456.globl _start
5457 .type _start, @function
5458_start:
5459 .long foo
5460 .size _start, .-_start
5461 .section .text.startup.foo,"ax",@progbits
5462 .type foo, @function
5463foo:
5464 .long 0
5465 .size foo, .-foo
5466 .section .gcc_except_table.foo,"a",@progbits
5467.L0:
5468 .long 0
5469 .section .eh_frame,"a",@progbits
5470 .long .L0
5471EOF
5472 if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
5473 if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
5474 | grep "gc-sections option ignored" > /dev/null; then
5475 :
5476 elif $gcc_cv_objdump -h conftest 2> /dev/null \
5477 | grep gcc_except_table > /dev/null; then
5478 gcc_cv_ld_eh_gc_sections_bug=no
5479 fi
5480 fi
5481 rm -f conftest.s conftest.o conftest
5482fi
5483if test x$gcc_cv_ld_eh_gc_sections_bug = xyes; then
5484 AC_DEFINE(HAVE_LD_EH_GC_SECTIONS_BUG, 1,
5485 [Define if your linker has buggy garbage collection of
5486 sections support when .text.startup.foo like sections are used.])
5487fi
5488AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections_bug)
5489
4185c905 5490AC_MSG_CHECKING(linker for compressed debug sections)
5491# gold/gld support compressed debug sections since binutils 2.19/2.21
8151105d 5492# In binutils 2.26, gld gained support for the ELF gABI format.
4185c905 5493if test $in_tree_ld = yes ; then
5494 gcc_cv_ld_compress_debug=0
5495 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 19 -o "$gcc_cv_gld_major_version" -gt 2 \
5496 && test $in_tree_ld_is_elf = yes && test $ld_is_gold = yes; then
5497 gcc_cv_ld_compress_debug=2
5498 gcc_cv_ld_compress_debug_option="--compress-debug-sections"
8151105d 5499 elif test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 26 -o "$gcc_cv_gld_major_version" -gt 2 \
5500 && test $in_tree_ld_is_elf = yes && test $ld_is_gold = no; then
5501 gcc_cv_ld_compress_debug=3
5502 gcc_cv_ld_compress_debug_option="--compress-debug-sections"
4185c905 5503 elif test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 21 -o "$gcc_cv_gld_major_version" -gt 2 \
5504 && test $in_tree_ld_is_elf = yes; then
5505 gcc_cv_ld_compress_debug=1
5506 fi
5507elif echo "$ld_ver" | grep GNU > /dev/null; then
8151105d 5508 if test "$ld_vers_major" -lt 2 \
5509 || test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 21; then
5510 gcc_cv_ld_compress_debug=0
5511 elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 26; then
5512 gcc_cv_ld_compress_debug=1
5513 else
5514 gcc_cv_ld_compress_debug=3
5515 gcc_cv_ld_compress_debug_option="--compress-debug-sections"
4185c905 5516 fi
5517 if test $ld_is_gold = yes; then
5518 gcc_cv_ld_compress_debug=2
5519 gcc_cv_ld_compress_debug_option="--compress-debug-sections"
5520 fi
5521else
5522changequote(,)dnl
5523 case "${target}" in
5524 *-*-solaris2*)
5525 # Introduced in Solaris 11.2.
5526 if $gcc_cv_ld --help 2>&1 | grep -- '-z compress-sections' > /dev/null; then
5527 gcc_cv_ld_compress_debug=3
5528 gcc_cv_ld_compress_debug_option="-z compress-sections"
5529 else
5530 gcc_cv_ld_compress_debug=0
5531 fi
5532 ;;
5533 *)
5534 # Assume linkers other than GNU ld don't support compessed debug
5535 # sections.
5536 gcc_cv_ld_compress_debug=0
5537 ;;
5538 esac
5539changequote([,])dnl
5540fi
5541AC_DEFINE_UNQUOTED(HAVE_LD_COMPRESS_DEBUG, $gcc_cv_ld_compress_debug,
5542[Define to the level of your linker's compressed debug section support.])
5543AC_DEFINE_UNQUOTED(LD_COMPRESS_DEBUG_OPTION, "$gcc_cv_ld_compress_debug_option",
5544[Define to the linker option to enable compressed debug sections.])
5545AC_MSG_RESULT($gcc_cv_ld_compress_debug)
5546
6afab66e 5547if test x"$ld64_flag" = x"yes"; then
5548
5549 # Set defaults for possibly untestable items.
5550 gcc_cv_ld64_export_dynamic=0
5551
5552 if test "$build" = "$host"; then
5553 darwin_try_test=1
5554 else
5555 darwin_try_test=0
5556 fi
5557
5558 # On Darwin, because of FAT library support, it is often possible to execute
5559 # exes from compatible archs even when the host differs from the build system.
5560 case "$build","$host" in
5561 x86_64-*-darwin*,i?86-*-darwin* | powerpc64*-*-darwin*,powerpc*-*-darwin*)
5562 darwin_try_test=1;;
5563 *) ;;
5564 esac
5565
5566 # If the configurer specified a minimum ld64 version to be supported, then use
5567 # that to determine feature support.
5568 if test x"${gcc_cv_ld64_version}" != x; then
188f3056 5569 AC_MSG_CHECKING(ld64 specified version)
5570 gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'`
6afab66e 5571 AC_MSG_RESULT($gcc_cv_ld64_major)
5572 if test "$gcc_cv_ld64_major" -ge 236; then
5573 gcc_cv_ld64_export_dynamic=1
5574 fi
5575 elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
5576 # If the version was not specified, try to find it.
5577 AC_MSG_CHECKING(linker version)
5578 if test x"${gcc_cv_ld64_version}" = x; then
5579 gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | grep ld64 | sed s/.*ld64-// | awk '{print $1}'`
5580 fi
5581 AC_MSG_RESULT($gcc_cv_ld64_version)
5582
5583 AC_MSG_CHECKING(linker for -export_dynamic support)
5584 gcc_cv_ld64_export_dynamic=1
5585 if $gcc_cv_ld -export_dynamic < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
5586 gcc_cv_ld64_export_dynamic=0
5587 fi
5588 AC_MSG_RESULT($gcc_cv_ld64_export_dynamic)
5589 fi
5590
5591 if test x"${gcc_cv_ld64_version}" != x; then
5592 AC_DEFINE_UNQUOTED(LD64_VERSION, "${gcc_cv_ld64_version}",
5593 [Define to ld64 version.])
5594 fi
5595
5596 AC_DEFINE_UNQUOTED(LD64_HAS_EXPORT_DYNAMIC, $gcc_cv_ld64_export_dynamic,
5597 [Define to 1 if ld64 supports '-export_dynamic'.])
5598fi
5599
d8a2ca58 5600# --------
5601# UNSORTED
5602# --------
5603
11a4b5d2 5604AC_CACHE_CHECK(linker --as-needed support,
5605gcc_cv_ld_as_needed,
5606[gcc_cv_ld_as_needed=no
8aaed91d 5607gcc_cv_ld_as_needed_option='--as-needed'
5608gcc_cv_ld_no_as_needed_option='--no-as-needed'
6a40149e 5609if test $in_tree_ld = yes ; then
5610 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 \
5611 && test $in_tree_ld_is_elf = yes; then
5612 gcc_cv_ld_as_needed=yes
305fd725 5613 if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 28; then
5614 gcc_cv_ld_as_needed_option='--push-state --as-needed'
5615 gcc_cv_ld_no_as_needed_option='--pop-state'
5616 fi
6a40149e 5617 fi
5618elif test x$gcc_cv_ld != x; then
f50c2ca3 5619 # Check if linker supports --as-needed and --no-as-needed options
5620 if $gcc_cv_ld --help 2>&1 | grep as-needed > /dev/null; then
5621 gcc_cv_ld_as_needed=yes
305fd725 5622 if $gcc_cv_ld --help 2>&1 | grep push-state > /dev/null \
5623 && $gcc_cv_ld --help 2>&1 | grep pop-state > /dev/null \
5624 && echo "$ld_ver" | grep GNU > /dev/null \
5625 && test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 28; then
5626 # Use these options only when both ld.bfd and ld.gold support
5627 # --push-state/--pop-state, which unfortunately wasn't added
5628 # at the same time.
5629 gcc_cv_ld_as_needed_option='--push-state --as-needed'
5630 gcc_cv_ld_no_as_needed_option='--pop-state'
5631 fi
f50c2ca3 5632 fi
5633 case "$target:$gnu_ld" in
5634 *-*-solaris2*:no)
5635 # Solaris 2 ld always supports -z ignore/-z record. Prefer the native
5636 # forms.
5637 gcc_cv_ld_as_needed=yes
5638 gcc_cv_ld_as_needed_option="-z ignore"
5639 gcc_cv_ld_no_as_needed_option="-z record"
5640 ;;
5641 esac
6a40149e 5642fi
a861c00f 5643# --as-needed/-z ignore can only be used if libgcc_s.so.1 uses
5644# dl_iterate_phdr, i.e. since Solaris 11.
5645case "$target" in
5646 *-*-solaris2.1[[1-9]]*)
5647 case "$target" in
5648 i?86-*-* | x86_64-*-*)
5649 if echo "$ld_ver" | grep GNU > /dev/null; then
5650 # Doesn't work with gld on Solaris/x86 due to PR ld/12320.
5651 gcc_cv_ld_as_needed=no
5652 fi
5653 ;;
5654 esac
5655 ;;
5656 *-*-solaris2*)
5657 gcc_cv_ld_as_needed=no
5658 ;;
5659esac
11a4b5d2 5660])
6a40149e 5661if test x"$gcc_cv_ld_as_needed" = xyes; then
5662 AC_DEFINE(HAVE_LD_AS_NEEDED, 1,
8aaed91d 5663[Define if your linker supports --as-needed/--no-as-needed or equivalent options.])
5664 AC_DEFINE_UNQUOTED(LD_AS_NEEDED_OPTION, "$gcc_cv_ld_as_needed_option",
5665[Define to the linker option to ignore unused dependencies.])
5666 AC_DEFINE_UNQUOTED(LD_NO_AS_NEEDED_OPTION, "$gcc_cv_ld_no_as_needed_option",
5667[Define to the linker option to keep unused dependencies.])
6a40149e 5668fi
6a40149e 5669
53037a4d 5670AC_MSG_CHECKING(linker mapfile support for clearing hardware capabilities)
5671saved_LDFLAGS="$LDFLAGS"
5672for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
5673 LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
f00f02a3 5674 AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
53037a4d 5675 [gcc_cv_ld_clearcap=yes; break], [gcc_cv_ld_clearcap=no])
5676done
5677LDFLAGS="$saved_LDFLAGS"
5678if test "x$gcc_cv_ld_clearcap" = xyes; then
5679 AC_DEFINE([HAVE_LD_CLEARCAP], 1,
5680[Define if the linker supports clearing hardware capabilities via mapfile.])
5681 AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/$clearcap_map])
5682fi
5683AC_MSG_RESULT($gcc_cv_ld_clearcap)
5684
2789368d 5685case "$target" in
5686 powerpc*-*-*)
5687 case "$target" in
5688 *le-*-linux*)
5689 emul_name="-melf32lppc"
5690 ;;
5691 *)
5692 emul_name="-melf32ppc"
5693 ;;
5694 esac
5695 AC_CACHE_CHECK(linker .gnu.attributes long double support,
5696 gcc_cv_ld_ppc_attr,
5697 [gcc_cv_ld_ppc_attr=no
5698 if test x"$ld_is_gold" = xyes; then
5699 gcc_cv_ld_ppc_attr=yes
5700 elif test $in_tree_ld = yes ; then
5701 if test "$gcc_cv_gld_major_version" -eq 2 \
5702 -a "$gcc_cv_gld_minor_version" -ge 28 \
5703 -o "$gcc_cv_gld_major_version" -gt 2; then
5704 gcc_cv_ld_ppc_attr=yes
5705 fi
5706 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
5707 # check that merging the long double .gnu_attribute doesn't warn
5708 cat > conftest1.s <<EOF
5709 .gnu_attribute 4,1
5710EOF
5711 cat > conftest2.s <<EOF
5712 .gnu_attribute 4,9
5713EOF
5714 if $gcc_cv_as -a32 -o conftest1.o conftest1.s > /dev/null 2>&1 \
5715 && $gcc_cv_as -a32 -o conftest2.o conftest2.s > /dev/null 2>&1 \
5716 && $gcc_cv_ld $emul_name -r -o conftest.o conftest1.o conftest2.o > /dev/null 2> conftest.err \
5717 && test ! -s conftest.err; then
5718 gcc_cv_ld_ppc_attr=yes
5719 fi
5720 rm -f conftest.err conftest.o conftest1.o conftest2.o conftest1.s conftest2.s
5721 fi
5722 ])
5723 if test x$gcc_cv_ld_ppc_attr = xyes; then
5724 AC_DEFINE(HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE, 1,
5725 [Define if your PowerPC linker has .gnu.attributes long double support.])
5726 fi
5727 ;;
5728esac
5729
4de3052c 5730case "$target:$tm_file" in
2ac000bb 5731 powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
5732 case "$target" in
7c291732 5733 *le-*-linux*)
5734 emul_name="-melf64lppc"
5735 ;;
2ac000bb 5736 *-*-linux*)
5737 emul_name="-melf64ppc"
5738 ;;
5739 *-*-freebsd*)
5740 emul_name="-melf64ppc_fbsd"
5741 ;;
5742 esac
66ebfa67 5743 AC_CACHE_CHECK(linker support for omitting dot symbols,
5744 gcc_cv_ld_no_dot_syms,
5745 [gcc_cv_ld_no_dot_syms=no
8caed8e3 5746 if test x"$ld_is_gold" = xyes; then
5747 gcc_cv_ld_no_dot_syms=yes
5748 elif test $in_tree_ld = yes ; then
66ebfa67 5749 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
5750 gcc_cv_ld_no_dot_syms=yes
5751 fi
5752 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
5753 cat > conftest1.s <<EOF
5754 .text
5755 bl .foo
5756EOF
5757 cat > conftest2.s <<EOF
5758 .section ".opd","aw"
5759 .align 3
5760 .globl foo
5761 .type foo,@function
5762foo:
5763 .quad .LEfoo,.TOC.@tocbase,0
5764 .text
5765.LEfoo:
5766 blr
5767 .size foo,.-.LEfoo
5768EOF
5769 if $gcc_cv_as -a64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
5770 && $gcc_cv_as -a64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
2ac000bb 5771 && $gcc_cv_ld $emul_name -o conftest conftest1.o conftest2.o > /dev/null 2>&1; then
66ebfa67 5772 gcc_cv_ld_no_dot_syms=yes
5773 fi
5774 rm -f conftest conftest1.o conftest2.o conftest1.s conftest2.s
5775 fi
5776 ])
5777 if test x"$gcc_cv_ld_no_dot_syms" = xyes; then
5778 AC_DEFINE(HAVE_LD_NO_DOT_SYMS, 1,
5779 [Define if your PowerPC64 linker only needs function descriptor syms.])
5780 fi
72350d7b 5781
5782 AC_CACHE_CHECK(linker large toc support,
5783 gcc_cv_ld_large_toc,
5784 [gcc_cv_ld_large_toc=no
8caed8e3 5785 if test x"$ld_is_gold" = xyes; then
5786 gcc_cv_ld_large_toc=yes
5787 elif test $in_tree_ld = yes ; then
72350d7b 5788 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
5789 gcc_cv_ld_large_toc=yes
5790 fi
5791 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
5792 cat > conftest.s <<EOF
5793 .section ".tbss","awT",@nobits
5794 .align 3
5795ie0: .space 8
5796 .global _start
5797 .text
5798_start:
5799 addis 9,13,ie0@got@tprel@ha
5800 ld 9,ie0@got@tprel@l(9)
5801EOF
5802 if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
2ac000bb 5803 && $gcc_cv_ld $emul_name --no-toc-sort -o conftest conftest.o > /dev/null 2>&1; then
72350d7b 5804 gcc_cv_ld_large_toc=yes
5805 fi
5806 rm -f conftest conftest.o conftest.s
5807 fi
5808 ])
5809 if test x"$gcc_cv_ld_large_toc" = xyes; then
5810 AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
5811 [Define if your PowerPC64 linker supports a large TOC.])
5812 fi
029eed15 5813
5814 AC_CACHE_CHECK(linker toc pointer alignment,
5815 gcc_cv_ld_toc_align,
5816 [if test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_nm != x; then
5817 cat > conftest.s <<EOF
5818 .global _start
5819 .text
5820_start:
5821 addis 9,2,x@got@ha
5822 .section .data.rel.ro,"aw",@progbits
5823 .p2align 16
5824 .space 32768
5825x: .quad .TOC.
5826EOF
5827 if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
2e139797 5828 && $gcc_cv_ld $emul_name -z norelro -o conftest conftest.o > /dev/null 2>&1; then
029eed15 5829 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)) }'`
5830 fi
5831 rm -f conftest conftest.o conftest.s
5832 fi
5833 ])
5834 if test -n "$gcc_cv_ld_toc_align" && test $gcc_cv_ld_toc_align -gt 8; then
5835 AC_DEFINE_UNQUOTED(POWERPC64_TOC_POINTER_ALIGNMENT, $gcc_cv_ld_toc_align,
5836 [Define to .TOC. alignment forced by your linker.])
5837 fi
66ebfa67 5838 ;;
5839esac
5840
0a2ab8cc 5841case "$target" in
5842 *-*-aix*)
5843 AC_CACHE_CHECK(linker large toc support,
5844 gcc_cv_ld_large_toc,
5845 [gcc_cv_ld_large_toc=no
5846 if test x$gcc_cv_as != x ; then
5847 cat > conftest.s <<EOF
5848 .toc
5849LC..1:
5850 .tc a[[TC]],a[[RW]]
5851 .extern a[[RW]]
5852 .csect .text[[PR]]
5853.largetoctest:
5854 addis 9,LC..1@u(2)
5855 ld 3,LC..1@l(9)
5856EOF
5857 if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1; then
5858 gcc_cv_ld_large_toc=yes
5859 fi
5860 rm -f conftest conftest.o conftest.s
5861 fi
5862 ])
5863 if test x"$gcc_cv_ld_large_toc" = xyes; then
5864 AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
15ba1c5f 5865 [Define if your PowerPC64 linker supports a large TOC.])
0a2ab8cc 5866 fi
5867 ;;
5868esac
5869
8271b966 5870AC_CACHE_CHECK(linker --build-id support,
5871 gcc_cv_ld_buildid,
5872 [gcc_cv_ld_buildid=no
5873 if test $in_tree_ld = yes ; then
5874 if test "$gcc_cv_gld_major_version" -eq 2 -a \
5875 "$gcc_cv_gld_minor_version" -ge 18 -o \
5876 "$gcc_cv_gld_major_version" -gt 2 \
5877 && test $in_tree_ld_is_elf = yes; then
5878 gcc_cv_ld_buildid=yes
5879 fi
5880 elif test x$gcc_cv_ld != x; then
f50c2ca3 5881 if $gcc_cv_ld --help 2>&1 | grep build-id > /dev/null; then
8271b966 5882 gcc_cv_ld_buildid=yes
5883 fi
5884 fi])
5885if test x"$gcc_cv_ld_buildid" = xyes; then
5886 AC_DEFINE(HAVE_LD_BUILDID, 1,
5887 [Define if your linker supports --build-id.])
5888fi
5889
5890AC_ARG_ENABLE(linker-build-id,
bc6c87c1 5891[AS_HELP_STRING([--enable-linker-build-id],
5892 [compiler will always pass --build-id to linker])],
8271b966 5893[],
5894enable_linker_build_id=no)
5895
5896if test x"$enable_linker_build_id" = xyes; then
5897 if test x"$gcc_cv_ld_buildid" = xyes; then
5898 AC_DEFINE(ENABLE_LD_BUILDID, 1,
5899 [Define if gcc should always pass --build-id to linker.])
5900 else
5901 AC_MSG_WARN(--build-id is not supported by your linker; --enable-linker-build-id ignored)
5902 fi
5903fi
5904
477b521a 5905# In binutils 2.21, GNU ld gained support for new emulations fully
5906# supporting the Solaris 2 ABI. Detect their presence in the linker used.
5907AC_CACHE_CHECK(linker *_sol2 emulation support,
5908 gcc_cv_ld_sol2_emulation,
5909 [gcc_cv_ld_sol2_emulation=no
5910 if test $in_tree_ld = yes ; then
5911 if test "$gcc_cv_gld_major_version" -eq 2 -a \
5912 "$gcc_cv_gld_minor_version" -ge 21 -o \
5913 "$gcc_cv_gld_major_version" -gt 2 \
5914 && test $in_tree_ld_is_elf = yes; then
5915 gcc_cv_ld_sol2_emulation=yes
5916 fi
5917 elif test x$gcc_cv_ld != x; then
5918 if $gcc_cv_ld -V 2>/dev/null | sed -e '1,/Supported emulations/d;q' | \
5919 grep _sol2 > /dev/null; then
5920 gcc_cv_ld_sol2_emulation=yes
5921 fi
5922 fi])
5923if test x"$gcc_cv_ld_sol2_emulation" = xyes; then
5924 AC_DEFINE(HAVE_LD_SOL2_EMULATION, 1,
5925 [Define if your linker supports the *_sol2 emulations.])
5926fi
5927
b6bcc48f 5928AC_CACHE_CHECK(linker --sysroot support,
5929 gcc_cv_ld_sysroot,
5930 [gcc_cv_ld_sysroot=no
5931 if test $in_tree_ld = yes ; then
5932 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
93b26f8a 5933 gcc_cv_ld_sysroot=yes
b6bcc48f 5934 fi
5935 elif test x$gcc_cv_ld != x; then
f50c2ca3 5936 if $gcc_cv_ld --help 2>&1 | grep sysroot > /dev/null; then
b6bcc48f 5937 gcc_cv_ld_sysroot=yes
5938 fi
5939 fi])
5940if test x"$gcc_cv_ld_sysroot" = xyes; then
5941 AC_DEFINE(HAVE_LD_SYSROOT, 1,
5942 [Define if your linker supports --sysroot.])
5943fi
5944
ba24ad38 5945case $target in
5946*-*-solaris2*)
5947 # Check for system-provided CRTs on Solaris 11.x and Solaris 12.
5948 AC_CACHE_CHECK([system-provided CRTs on Solaris],
5949 gcc_cv_solaris_crts,
5950 [gcc_cv_solaris_crts=no
5951 if test x$host != x$target; then
5952 if test "x$with_sysroot" = xyes; then
5953 target_sysroot="${test_exec_prefix}/${target_noncanonical}/sys-root"
5954 else
5955 target_sysroot="${with_sysroot}"
5956 fi
5957 fi
5958 target_libdir="$target_sysroot/usr/lib"
5959 # At the time they were added, gcrt1.o became a symlink for backwards
5960 # compatibility on x86, while crt1.o was added on sparc, so check for that.
5961 case $target in
5962 i?86-*-solaris2* | x86_64-*-solaris2*)
5963 if test -h "$target_libdir/gcrt1.o"; then gcc_cv_solaris_crts=yes; fi
5964 ;;
5965 sparc*-*-solaris2*)
5966 if test -f "$target_libdir/crt1.o"; then gcc_cv_solaris_crts=yes; fi
5967 ;;
5968 esac])
5969 ;;
5970esac
5971if test x$gcc_cv_solaris_crts = xyes; then
5972 AC_DEFINE(HAVE_SOLARIS_CRTS, 1,
5973 [Define if the system-provided CRTs are present on Solaris.])
5974fi
5975
9815bd97 5976AC_ARG_ENABLE(libssp,
5977[AS_HELP_STRING([--enable-libssp], [enable linking against libssp])],
5978[case "${enableval}" in
5979 yes|no)
5980 ;;
5981 *)
5982 AC_MSG_ERROR([unknown libssp setting $enableval])
5983 ;;
5984esac], [])
5985
0d55f4d0 5986# Test for stack protector support in target C library.
66740228 5987AC_CACHE_CHECK(__stack_chk_fail in target C library,
9815bd97 5988 gcc_cv_libc_provides_ssp,
5989 [gcc_cv_libc_provides_ssp=no
5990 if test "x$enable_libssp" = "xno"; then
5991 gcc_cv_libc_provides_ssp=yes
5992 elif test "x$enable_libssp" = "xyes"; then
5993 gcc_cv_libc_provides_ssp=no
5994 else
66740228 5995 case "$target" in
a9173cea 5996 *-*-musl*)
5997 # All versions of musl provide stack protector
5998 gcc_cv_libc_provides_ssp=yes;;
79573034 5999 *-*-linux* | *-*-kfreebsd*-gnu)
4543a554 6000 # glibc 2.4 and later provides __stack_chk_fail and
0d55f4d0 6001 # either __stack_chk_guard, or TLS access to stack guard canary.
4543a554 6002 GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_libc_provides_ssp=yes], [
6003 [if test -f $target_header_dir/features.h \
47cbc7da 6004 && $EGREP '^[ ]*#[ ]*define[ ]+__GNU_LIBRARY__[ ]+([1-9][0-9]|[6-9])' \
bdd793b2 6005 $target_header_dir/features.h > /dev/null; then
4543a554 6006 if $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC__[ ]+1' \
bdd793b2 6007 $target_header_dir/features.h > /dev/null && \
6008 test -f $target_header_dir/bits/uClibc_config.h && \
47cbc7da 6009 $EGREP '^[ ]*#[ ]*define[ ]+__UCLIBC_HAS_SSP__[ ]+1' \
bdd793b2 6010 $target_header_dir/bits/uClibc_config.h > /dev/null; then
e214b635 6011 gcc_cv_libc_provides_ssp=yes
0d55f4d0 6012 fi
e54ce707 6013 # all versions of Bionic support stack protector
6014 elif test -f $target_header_dir/sys/cdefs.h \
6015 && $EGREP '^[ ]*#[ ]*define[ ]+__BIONIC__[ ]+1' \
6016 $target_header_dir/sys/cdefs.h > /dev/null; then
6017 gcc_cv_libc_provides_ssp=yes
4543a554 6018 fi]])
66740228 6019 ;;
75bfea25 6020 *-*-gnu*)
6021 # Avoid complicated tests (see
6022 # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
6023 # simply assert that glibc does provide this, which is true for all
6024 # realistically usable GNU/Hurd configurations.
a9173cea 6025 # All supported versions of musl provide it as well
75bfea25 6026 gcc_cv_libc_provides_ssp=yes;;
26271dee 6027 *-*-darwin* | *-*-freebsd* | *-*-netbsd*)
66740228 6028 AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
6029 [echo "no __stack_chk_fail on this target"])
6030 ;;
9815bd97 6031 *) gcc_cv_libc_provides_ssp=no ;;
6032 esac
6033 fi])
66740228 6034
0d55f4d0 6035if test x$gcc_cv_libc_provides_ssp = xyes; then
6036 AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
6037 [Define if your target C library provides stack protector support])
6038fi
6039
6957b94e 6040# Check whether --enable-default-ssp was given.
6041AC_ARG_ENABLE(default-ssp,
6042[AS_HELP_STRING([--enable-default-ssp],
6043 [enable Stack Smashing Protection as default])],[
6044if test x$gcc_cv_libc_provides_ssp = xyes; then
6045 case "$target" in
6046 ia64*-*-*) enable_default_ssp=no ;;
6047 *) enable_default_ssp=$enableval ;;
6048 esac
6049else
6050 enable_default_ssp=no
6051fi],
6052enable_default_ssp=no)
605b00ec 6053if test x$enable_default_ssp = xyes ; then
6957b94e 6054 AC_DEFINE(ENABLE_DEFAULT_SSP, 1,
6055 [Define if your target supports default stack protector and it is enabled.])
6056fi
6057AC_SUBST([enable_default_ssp])
6058
f77bcf96 6059# Test for <sys/sdt.h> on the target.
6060GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H])
6061AC_MSG_CHECKING(sys/sdt.h in the target C library)
6062have_sys_sdt_h=no
6063if test -f $target_header_dir/sys/sdt.h; then
28c54e7d 6064 have_sys_sdt_h=yes
f77bcf96 6065 AC_DEFINE(HAVE_SYS_SDT_H, 1,
6066 [Define if your target C library provides sys/sdt.h])
6067fi
6068AC_MSG_RESULT($have_sys_sdt_h)
6069
2dde0cc6 6070# Check if TFmode long double should be used by default or not.
6071# Some glibc targets used DFmode long double, but with glibc 2.4
6072# and later they can use TFmode.
6073case "$target" in
8c3bf67d 6074 powerpc*-*-linux* | \
2dde0cc6 6075 sparc*-*-linux* | \
6076 s390*-*-linux* | \
6077 alpha*-*-linux*)
6078 AC_ARG_WITH(long-double-128,
bc6c87c1 6079 [AS_HELP_STRING([--with-long-double-128],
6080 [use 128-bit long double by default])],
2dde0cc6 6081 gcc_cv_target_ldbl128="$with_long_double_128",
4543a554 6082 [GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_target_ldbl128=yes], [
6083 [gcc_cv_target_ldbl128=no
2dde0cc6 6084 grep '^[ ]*#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
bdd793b2 6085 $target_header_dir/bits/wordsize.h > /dev/null 2>&1 \
dfce740a 6086 && gcc_cv_target_ldbl128=yes
4543a554 6087 ]])])
2dde0cc6 6088 ;;
6089esac
6090if test x$gcc_cv_target_ldbl128 = xyes; then
6091 AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
6092 [Define if TFmode long double should be the default])
6093fi
6094
b95c28c7 6095# Check if TFmode long double target should use the IBM extended double or IEEE
6096# 128-bit floating point formats if long doubles are 128-bits long. The long
6097# double type can only be switched on powerpc64 bit Linux systems where VSX is
6098# supported. Other PowerPC systems do not build the IEEE 128-bit emulator in
6099# libgcc.
6100AC_ARG_WITH([long-double-format],
6101 [AS_HELP_STRING([--with-long-double-format={ieee,ibm}]
6102 [Specify whether PowerPC long double uses IEEE or IBM format])],[
6103case "$target:$with_long_double_format" in
6104 powerpc64le-*-linux*:ieee | powerpc64le-*-linux*:ibm)
6105 :
6106 ;;
6107 powerpc64-*-linux*:ieee | powerpc64-*-linux*:ibm)
6108 # IEEE 128-bit emulation is only built on 64-bit VSX Linux systems
6109 case "$with_cpu" in
6110 power7 | power8 | power9 | power1*)
6111 :
6112 ;;
6113 *)
6114 AC_MSG_ERROR([Configuration option --with-long-double-format is only \
6115supported if the default cpu is power7 or newer])
6116 with_long_double_format=""
6117 ;;
6118 esac
6119 ;;
6120 xpowerpc64*-*-linux*:*)
6121 AC_MSG_ERROR([--with-long-double-format argument should be ibm or ieee])
6122 with_long_double_format=""
6123 ;;
6124 *)
6125 AC_MSG_ERROR([Configure option --with-long-double-format is only supported \
6126on 64-bit PowerPC VSX Linux systems])
6127 with_long_double_format=""
6128 ;;
6129esac],
6130 [])
6131
62752e71 6132# Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP
6133# values in the TCB. Currently, only GLIBC 2.23 and later support this.
6134gcc_cv_libc_provides_hwcap_in_tcb=no
6135case "$target" in
6136 powerpc*-*-linux*)
6137 GCC_GLIBC_VERSION_GTE_IFELSE([2], [23], [gcc_cv_libc_provides_hwcap_in_tcb=yes], )
6138 ;;
6139esac
6140if test x$gcc_cv_libc_provides_hwcap_in_tcb = xyes; then
6141 AC_DEFINE(TARGET_LIBC_PROVIDES_HWCAP_IN_TCB, 1,
6142 [Define if your target C Library provides the AT_HWCAP value in the TCB])
6143fi
6144
bdd793b2 6145AC_MSG_CHECKING(dl_iterate_phdr in target C library)
6146gcc_cv_target_dl_iterate_phdr=unknown
6147case "$target" in
0fd03648 6148 *-*-solaris2*)
bdd793b2 6149 # <link.h> needs both a dl_iterate_phdr declaration and support for
6150 # compilation with largefile support.
6151 if grep dl_iterate_phdr $target_header_dir/link.h > /dev/null 2>&1 \
6152 && grep 'large file capable' $target_header_dir/link.h > /dev/null 2>&1; then
6153 gcc_cv_target_dl_iterate_phdr=yes
6154 else
6155 gcc_cv_target_dl_iterate_phdr=no
6156 fi
6157 ;;
463553db 6158 *-*-dragonfly* | *-*-freebsd*)
6159 if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
6160 gcc_cv_target_dl_iterate_phdr=yes
6161 else
6162 gcc_cv_target_dl_iterate_phdr=no
6163 fi
6164 ;;
a9173cea 6165 *-linux-musl*)
6166 gcc_cv_target_dl_iterate_phdr=yes
6167 ;;
bdd793b2 6168esac
6169GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
6170if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
6171 AC_DEFINE(TARGET_DL_ITERATE_PHDR, 1,
6172[Define if your target C library provides the `dl_iterate_phdr' function.])
6173fi
6174AC_MSG_RESULT($gcc_cv_target_dl_iterate_phdr)
6175
5cc13354 6176# We no longer support different GC mechanisms. Emit an error if
6177# the user configures with --with-gc.
772580ce 6178AC_ARG_WITH(gc,
bc6c87c1 6179[AS_HELP_STRING([--with-gc={page,zone}],
5cc13354 6180 [this option is not supported anymore. It used to choose
6181 the garbage collection mechanism to use with the compiler])],
6182[AC_MSG_ERROR([Configure option --with-gc is only supported up to GCC 4.7.x])],
6183[])
772580ce 6184
7ab76cec 6185# Libraries to use on the host. This will normally be set by the top
6186# level Makefile. Here we simply capture the value for our Makefile.
6187if test -z "${HOST_LIBS+set}"; then
6188 HOST_LIBS=
6189fi
6190AC_SUBST(HOST_LIBS)
6191
add841d2 6192# Use the system's zlib library.
92827dbf 6193AM_ZLIB
add841d2 6194
c5ab9ed2 6195dnl Very limited version of automake's enable-maintainer-mode
6196
6197AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
6198 dnl maintainer-mode is disabled by default
6199 AC_ARG_ENABLE(maintainer-mode,
bc6c87c1 6200[AS_HELP_STRING([--enable-maintainer-mode],
6201 [enable make rules and dependencies not useful
6202 (and sometimes confusing) to the casual installer])],
c5ab9ed2 6203 maintainer_mode=$enableval,
6204 maintainer_mode=no)
6205
6206AC_MSG_RESULT($maintainer_mode)
6207
6208if test "$maintainer_mode" = "yes"; then
6209 MAINT=''
6210else
6211 MAINT='#'
6212fi
6213AC_SUBST(MAINT)dnl
6214
be5f9e46 6215dnl Whether to prevent multiple front-ends from linking at the same time
6216
6217AC_MSG_CHECKING([whether to avoid linking multiple front-ends at once])
6218 AC_ARG_ENABLE(link-mutex,
6219[AS_HELP_STRING([--enable-link-mutex],
6220 [avoid linking multiple front-ends at once to avoid thrashing
6221 on the build machine])],
6222 do_link_mutex=$enableval,
6223 do_link_mutex=no)
6224AC_MSG_RESULT($do_link_mutex)
6225
6226if test "$do_link_mutex" = "yes"; then
6227 DO_LINK_MUTEX=true
6228else
6229 DO_LINK_MUTEX=false
6230fi
6231AC_SUBST(DO_LINK_MUTEX)
6232
d8a2ca58 6233# --------------
6234# Language hooks
6235# --------------
6236
a4ac0141 6237# Make empty files to contain the specs and options for each language.
6238# Then add #include lines to for a compiler that has specs and/or options.
6239
26526d23 6240subdirs=
3272db82 6241lang_opt_files=
a4ac0141 6242lang_specs_files=
c3cc26e1 6243lang_tree_files=
a4ac0141 6244# These (without "all_") are set in each config-lang.in.
6245# `language' must be a single word so is spelled singularly.
6246all_languages=
a4ac0141 6247all_compilers=
210263ee 6248all_outputs='Makefile'
a4ac0141 6249# List of language makefile fragments.
a455468e 6250all_lang_makefrags=
570af75a 6251# Additional files for gengtype
eb1bd38b 6252all_gtfiles="$target_gtfiles"
a4ac0141 6253
26526d23 6254# These are the languages that are set in --enable-languages,
6255# and are available in the GCC tree.
6256all_selected_languages=
6257
a4ac0141 6258# Add the language fragments.
6259# Languages are added via two mechanisms. Some information must be
6260# recorded in makefile variables, these are defined in config-lang.in.
6261# We accumulate them and plug them into the main Makefile.
6262# The other mechanism is a set of hooks for each of the main targets
6263# like `clean', `install', etc.
6264
a4ac0141 6265language_hooks="Make-hooks"
6266
26526d23 6267for lang in ${srcdir}/*/config-lang.in
a4ac0141 6268do
26526d23 6269changequote(,)dnl
5dee13c2 6270 test "$lang" = "${srcdir}/*/config-lang.in" && continue
6271
26526d23 6272 lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang`
6273 if test "x$lang_alias" = x
6274 then
6275 echo "$lang doesn't set \$language." 1>&2
6276 exit 1
6277 fi
6278 subdir="`echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`"
6279 subdirs="$subdirs $subdir"
de4e1ab6 6280
6281 # $gcc_subdir is where the gcc integration files are to be found
6282 # for a language, both for internal compiler purposes (compiler
6283 # sources implementing front-end to GCC tree converters), and for
6284 # build infrastructure purposes (Make-lang.in, etc.)
6285 #
6286 # This will be <subdir> (relative to $srcdir) if a line like
6287 # gcc_subdir="<subdir>" or gcc_subdir=<subdir>
6288 # is found in <langdir>/config-lang.in, and will remain <langdir>
6289 # otherwise.
6290 #
6291 # Except for the language alias (fetched above), the regular
6292 # "config-lang.in" contents are always retrieved from $gcc_subdir,
6293 # so a <langdir>/config-lang.in setting gcc_subdir typically sets
6294 # only this and the language alias.
6295
6296 gcc_subdir=`sed -n -e 's,^gcc_subdir=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^gcc_subdir=\([^ ]*\).*$,\1,p' $lang`
6297 if [ "$gcc_subdir" = "" ]; then
6298 gcc_subdir="$subdir"
6299 fi
6300
26526d23 6301 case ",$enable_languages," in
6302 *,$lang_alias,*)
6303 all_selected_languages="$all_selected_languages $lang_alias"
de4e1ab6 6304 if test -f $srcdir/$gcc_subdir/lang-specs.h; then
6305 lang_specs_files="$lang_specs_files $srcdir/$gcc_subdir/lang-specs.h"
26526d23 6306 fi
6307 ;;
6308 esac
6309changequote([,])dnl
6310
26526d23 6311 language=
6312 boot_language=
6313 compilers=
26526d23 6314 outputs=
6315 gtfiles=
5dee13c2 6316 subdir_requires=
de4e1ab6 6317 . ${srcdir}/$gcc_subdir/config-lang.in
26526d23 6318 if test "x$language" = x
6319 then
de4e1ab6 6320 echo "${srcdir}/$gcc_subdir/config-lang.in doesn't set \$language." 1>&2
26526d23 6321 exit 1
6322 fi
5dee13c2 6323
6324 ok=:
6325 case ",$enable_languages," in
6326 *,$lang_alias,*) ;;
6327 *)
6328 for i in $subdir_requires; do
3891e7d9 6329 test -f "${srcdir}/$i/config-lang.in" && continue
5dee13c2 6330 ok=false
6331 break
6332 done
6333 ;;
6334 esac
6335 $ok || continue
6336
de4e1ab6 6337 all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$gcc_subdir/Make-lang.in"
6338 if test -f $srcdir/$gcc_subdir/lang.opt; then
6339 lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt"
755fa783 6340 all_opt_files="$all_opt_files $srcdir/$gcc_subdir/lang.opt"
5dee13c2 6341 fi
de4e1ab6 6342 if test -f $srcdir/$gcc_subdir/$subdir-tree.def; then
6343 lang_tree_files="$lang_tree_files $srcdir/$gcc_subdir/$subdir-tree.def"
5dee13c2 6344 fi
26526d23 6345 all_languages="$all_languages $language"
26526d23 6346 all_compilers="$all_compilers $compilers"
26526d23 6347 all_outputs="$all_outputs $outputs"
570af75a 6348 all_gtfiles="$all_gtfiles [[$subdir]] $gtfiles"
7bfefa9d 6349 case ",$enable_languages," in
6350 *,lto,*)
6351 AC_DEFINE(ENABLE_LTO, 1, [Define to enable LTO support.])
6352 enable_lto=yes
6353 AC_SUBST(enable_lto)
6354 ;;
6355 *) ;;
6356 esac
a4ac0141 6357done
6358
21fa82cb 6359check_languages=
26526d23 6360for language in $all_selected_languages
21fa82cb 6361do
26526d23 6362 check_languages="$check_languages check-$language"
21fa82cb 6363done
6364
bdb69048 6365selftest_languages=
6366for language in $all_selected_languages
6367do
6368 selftest_languages="$selftest_languages selftest-$language"
6369done
6370
d5cd09c5 6371# We link each language in with a set of hooks, reached indirectly via
26526d23 6372# lang.${target}. Only do so for selected languages.
a4ac0141 6373
6374rm -f Make-hooks
6375touch Make-hooks
ae6555f9 6376target_list="all.cross start.encap rest.encap tags \
fb433b0b 6377 install-common install-man install-info install-pdf install-html dvi \
6378 pdf html uninstall info man srcextra srcman srcinfo \
c02b6f4e 6379 mostlyclean clean distclean maintainer-clean install-plugin"
26526d23 6380
a4ac0141 6381for t in $target_list
6382do
6383 x=
26526d23 6384 for lang in $all_selected_languages
a4ac0141 6385 do
26526d23 6386 x="$x $lang.$t"
a4ac0141 6387 done
6388 echo "lang.$t: $x" >> Make-hooks
6389done
6390
755fa783 6391# --------
6392# Option include files
6393# --------
6394
6395${AWK} -f $srcdir/opt-include.awk $all_opt_files > option-includes.mk
6396option_includes="option-includes.mk"
6397AC_SUBST_FILE(option_includes)
6398
d8a2ca58 6399# --------
6400# UNSORTED
6401# --------
6402
49d87238 6403# Create .gdbinit.
80a1cc00 6404
49d87238 6405echo "dir ." > .gdbinit
6406echo "dir ${srcdir}" >> .gdbinit
6407if test x$gdb_needs_out_file_path = xyes
6408then
6409 echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
6410fi
6411if test "x$subdirs" != x; then
6412 for s in $subdirs
6413 do
6414 echo "dir ${srcdir}/$s" >> .gdbinit
6415 done
80a1cc00 6416fi
49d87238 6417echo "source ${srcdir}/gdbinit.in" >> .gdbinit
b86afe72 6418echo "python import sys; sys.path.append('${srcdir}'); import gdbhooks" >> .gdbinit
80a1cc00 6419
a31beac3 6420# Put a breakpoint on __asan_report_error to help with debugging buffer
6421# overflow.
6422case "$CFLAGS" in
6423*-fsanitize=address*)
6424 echo "source ${srcdir}/gdbasan.in" >> .gdbinit
6425 ;;
6426esac
6427
fc5f9e0c 6428gcc_tooldir='$(libsubdir)/$(libsubdir_to_prefix)$(target_noncanonical)'
f22b529a 6429AC_SUBST(gcc_tooldir)
066520ea 6430AC_SUBST(dollar)
f22b529a 6431
074386b8 6432# Find a directory in which to install a shared libgcc.
6433
6434AC_ARG_ENABLE(version-specific-runtime-libs,
bc6c87c1 6435[AS_HELP_STRING([--enable-version-specific-runtime-libs],
6436 [specify that runtime libraries should be
6437 installed in a compiler-specific directory])])
074386b8 6438
01dc27ef 6439# Substitute configuration variables
6440AC_SUBST(subdirs)
776c30b8 6441AC_SUBST(srcdir)
01dc27ef 6442AC_SUBST(all_compilers)
1f3233d1 6443AC_SUBST(all_gtfiles)
a455468e 6444AC_SUBST(all_lang_makefrags)
434bb88d 6445AC_SUBST(all_languages)
26526d23 6446AC_SUBST(all_selected_languages)
434bb88d 6447AC_SUBST(build_exeext)
6448AC_SUBST(build_install_headers_dir)
6449AC_SUBST(build_xm_file_list)
4dcab8b7 6450AC_SUBST(build_xm_include_list)
83b8e55b 6451AC_SUBST(build_xm_defines)
fbf9447e 6452AC_SUBST(build_file_translate)
21fa82cb 6453AC_SUBST(check_languages)
bdb69048 6454AC_SUBST(selftest_languages)
434bb88d 6455AC_SUBST(cpp_install_dir)
a455468e 6456AC_SUBST(xmake_file)
6457AC_SUBST(tmake_file)
f555bf81 6458AC_SUBST(TM_ENDIAN_CONFIG)
6459AC_SUBST(TM_MULTILIB_CONFIG)
6460AC_SUBST(TM_MULTILIB_EXCEPTIONS_CONFIG)
69eb04f7 6461AC_SUBST(extra_gcc_objs)
ac0366be 6462AC_SUBST(user_headers_inc_next_pre)
6463AC_SUBST(user_headers_inc_next_post)
434bb88d 6464AC_SUBST(extra_headers_list)
01dc27ef 6465AC_SUBST(extra_objs)
434bb88d 6466AC_SUBST(extra_programs)
434bb88d 6467AC_SUBST(float_h_file)
9371935c 6468AC_SUBST(gcc_config_arguments)
434bb88d 6469AC_SUBST(gcc_gxx_include_dir)
36ddd5fe 6470AC_SUBST(gcc_gxx_include_dir_add_sysroot)
434bb88d 6471AC_SUBST(host_exeext)
01dc27ef 6472AC_SUBST(host_xm_file_list)
4dcab8b7 6473AC_SUBST(host_xm_include_list)
83b8e55b 6474AC_SUBST(host_xm_defines)
b197fbcf 6475AC_SUBST(out_host_hook_obj)
434bb88d 6476AC_SUBST(install)
3272db82 6477AC_SUBST(lang_opt_files)
434bb88d 6478AC_SUBST(lang_specs_files)
c3cc26e1 6479AC_SUBST(lang_tree_files)
01dc27ef 6480AC_SUBST(local_prefix)
434bb88d 6481AC_SUBST(md_file)
6482AC_SUBST(objc_boehm_gc)
6483AC_SUBST(out_file)
6484AC_SUBST(out_object_file)
3e87b980 6485AC_SUBST(common_out_file)
6486AC_SUBST(common_out_object_file)
434bb88d 6487AC_SUBST(tm_file_list)
4dcab8b7 6488AC_SUBST(tm_include_list)
8d4f8d46 6489AC_SUBST(tm_defines)
83b8e55b 6490AC_SUBST(tm_p_file_list)
4dcab8b7 6491AC_SUBST(tm_p_include_list)
03385ed3 6492AC_SUBST(tm_d_file_list)
6493AC_SUBST(tm_d_include_list)
4dcab8b7 6494AC_SUBST(xm_file_list)
6495AC_SUBST(xm_include_list)
8b24e546 6496AC_SUBST(xm_defines)
f3449a3c 6497AC_SUBST(use_gcc_stdint)
8daa9e98 6498AC_SUBST(c_target_objs)
6499AC_SUBST(cxx_target_objs)
32006f36 6500AC_SUBST(fortran_target_objs)
03385ed3 6501AC_SUBST(d_target_objs)
83b8e55b 6502AC_SUBST(target_cpu_default)
01dc27ef 6503
01dc27ef 6504AC_SUBST_FILE(language_hooks)
6505
ba4dfdb7 6506# Echo link setup.
6507if test x${build} = x${host} ; then
6508 if test x${host} = x${target} ; then
6509 echo "Links are now set up to build a native compiler for ${target}." 1>&2
6510 else
6511 echo "Links are now set up to build a cross-compiler" 1>&2
6512 echo " from ${host} to ${target}." 1>&2
6513 fi
01dc27ef 6514else
ba4dfdb7 6515 if test x${host} = x${target} ; then
6516 echo "Links are now set up to build (on ${build}) a native compiler" 1>&2
6517 echo " for ${target}." 1>&2
6518 else
6519 echo "Links are now set up to build (on ${build}) a cross-compiler" 1>&2
6520 echo " from ${host} to ${target}." 1>&2
6521 fi
01dc27ef 6522fi
6523
4ee9c684 6524AC_ARG_VAR(GMPLIBS,[How to link GMP])
6525AC_ARG_VAR(GMPINC,[How to find GMP include files])
6526
71130ef8 6527AC_ARG_VAR(ISLLIBS,[How to link isl])
6528AC_ARG_VAR(ISLINC,[How to find isl include files])
429cca51 6529if test "x${ISLLIBS}" != "x" ; then
6530 AC_DEFINE(HAVE_isl, 1, [Define if isl is in use.])
6531fi
255b6be7 6532
ab103e33 6533GCC_ENABLE_PLUGINS
9227b6fc 6534AC_SUBST(pluginlibs)
6535AC_SUBST(enable_plugin)
6536if test x"$enable_plugin" = x"yes"; then
6537 AC_DEFINE(ENABLE_PLUGIN, 1, [Define to enable plugin support.])
6538fi
6539
d9d975ae 6540
2bd17377 6541# Enable --enable-host-shared
6542AC_ARG_ENABLE(host-shared,
6543[AS_HELP_STRING([--enable-host-shared],
6544 [build host code as shared libraries])],
6545[PICFLAG=-fPIC], [PICFLAG=])
6546AC_SUBST(enable_host_shared)
6547AC_SUBST(PICFLAG)
6548
6549
d9d975ae 6550AC_ARG_ENABLE(libquadmath-support,
6551[AS_HELP_STRING([--disable-libquadmath-support],
6552 [disable libquadmath support for Fortran])],
6553ENABLE_LIBQUADMATH_SUPPORT=$enableval,
6554ENABLE_LIBQUADMATH_SUPPORT=yes)
6555if test "${ENABLE_LIBQUADMATH_SUPPORT}" != "no" ; then
6556 AC_DEFINE(ENABLE_LIBQUADMATH_SUPPORT, 1,
6557 [Define to 1 to enable libquadmath support])
6558fi
6559
6560
3cb9bbfa 6561# Specify what hash style to use by default.
6562AC_ARG_WITH([linker-hash-style],
6563[AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
6564 [specify the linker hash style])],
6565[case x"$withval" in
6566 xsysv)
6567 LINKER_HASH_STYLE=sysv
6568 ;;
6569 xgnu)
6570 LINKER_HASH_STYLE=gnu
6571 ;;
6572 xboth)
6573 LINKER_HASH_STYLE=both
6574 ;;
6575 *)
6576 AC_MSG_ERROR([$withval is an invalid option to --with-linker-hash-style])
6577 ;;
6578 esac],
6579[LINKER_HASH_STYLE=''])
6580if test x"${LINKER_HASH_STYLE}" != x; then
6581 AC_DEFINE_UNQUOTED(LINKER_HASH_STYLE, "$LINKER_HASH_STYLE",
6582 [The linker hash style])
6583fi
6584
809ccc6c 6585# Specify what should be the default of -fdiagnostics-color option.
6586AC_ARG_WITH([diagnostics-color],
6587[AC_HELP_STRING([--with-diagnostics-color={never,auto,auto-if-env,always}],
6588 [specify the default of -fdiagnostics-color option
6589 auto-if-env stands for -fdiagnostics-color=auto if
6590 GCC_COLOR environment variable is present and
6591 -fdiagnostics-color=never otherwise])],
6592[case x"$withval" in
6593 xnever)
6594 DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_NO
6595 ;;
6596 xauto)
6597 DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO
6598 ;;
6599 xauto-if-env)
6600 DIAGNOSTICS_COLOR_DEFAULT=-1
6601 ;;
6602 xalways)
6603 DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_YES
6604 ;;
6605 *)
6606 AC_MSG_ERROR([$withval is an invalid option to --with-diagnostics-color])
6607 ;;
6608 esac],
6609[DIAGNOSTICS_COLOR_DEFAULT=DIAGNOSTICS_COLOR_AUTO])
6610AC_DEFINE_UNQUOTED(DIAGNOSTICS_COLOR_DEFAULT, $DIAGNOSTICS_COLOR_DEFAULT,
6611 [The default for -fdiagnostics-color option])
6612
863e76f9 6613# Generate gcc-driver-name.h containing GCC_DRIVER_NAME for the benefit
6614# of jit/jit-playback.c.
124c259e 6615gcc_driver_version=`eval "${get_gcc_base_ver} $srcdir/BASE-VER"`
6616echo "gcc_driver_version: ${gcc_driver_version}"
863e76f9 6617cat > gcc-driver-name.h <<EOF
124c259e 6618#define GCC_DRIVER_NAME "${target_noncanonical}-gcc-${gcc_driver_version}${exeext}"
863e76f9 6619EOF
6620
e9abca4f 6621# Check whether --enable-default-pie was given.
6622AC_ARG_ENABLE(default-pie,
6623[AS_HELP_STRING([--enable-default-pie],
6624 [enable Position Independent Executable as default])],
6625enable_default_pie=$enableval,
6626enable_default_pie=no)
605b00ec 6627if test x$enable_default_pie = xyes ; then
e9abca4f 6628 AC_DEFINE(ENABLE_DEFAULT_PIE, 1,
6629 [Define if your target supports default PIE and it is enabled.])
6630fi
6631AC_SUBST([enable_default_pie])
6632
6633# Check if -fno-PIE works.
6634AC_CACHE_CHECK([for -fno-PIE option],
6635 [gcc_cv_c_no_fpie],
ba637bab 6636 [saved_CXXFLAGS="$CXXFLAGS"
6637 CXXFLAGS="$CXXFLAGS -fno-PIE"
f00f02a3 6638 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
e9abca4f 6639 [gcc_cv_c_no_fpie=yes],
6640 [gcc_cv_c_no_fpie=no])
ba637bab 6641 CXXFLAGS="$saved_CXXFLAGS"])
e9abca4f 6642if test "$gcc_cv_c_no_fpie" = "yes"; then
6643 NO_PIE_CFLAGS="-fno-PIE"
6644fi
6645AC_SUBST([NO_PIE_CFLAGS])
6646
6647# Check if -no-pie works.
6648AC_CACHE_CHECK([for -no-pie option],
6649 [gcc_cv_no_pie],
6650 [saved_LDFLAGS="$LDFLAGS"
6651 LDFLAGS="$LDFLAGS -no-pie"
f00f02a3 6652 AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
e9abca4f 6653 [gcc_cv_no_pie=yes],
6654 [gcc_cv_no_pie=no])
6655 LDFLAGS="$saved_LDFLAGS"])
6656if test "$gcc_cv_no_pie" = "yes"; then
6657 NO_PIE_FLAG="-no-pie"
6658fi
6659AC_SUBST([NO_PIE_FLAG])
6660
3a1e60cb 6661# Check linker supports '-z bndplt'
6662ld_bndplt_support=no
6663AC_MSG_CHECKING(linker -z bndplt option)
6664if test x"$ld_is_gold" = xno; then
6665 if test $in_tree_ld = yes ; then
6666 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
6667 ld_bndplt_support=yes
6668 fi
6669 elif test x$gcc_cv_ld != x; then
6670 # Check if linker supports -a bndplt option
f50c2ca3 6671 if $gcc_cv_ld --help 2>&1 | grep -- '-z bndplt' > /dev/null; then
3a1e60cb 6672 ld_bndplt_support=yes
6673 fi
6674 fi
6675fi
6676if test x"$ld_bndplt_support" = xyes; then
6677 AC_DEFINE(HAVE_LD_BNDPLT_SUPPORT, 1,
6678 [Define if your linker supports -z bndplt])
6679fi
6680AC_MSG_RESULT($ld_bndplt_support)
6681
74e22921 6682# Check linker supports '--push-state'/'--pop-state'
6683ld_pushpopstate_support=no
6684AC_MSG_CHECKING(linker --push-state/--pop-state options)
6685if test x"$ld_is_gold" = xno; then
6686 if test $in_tree_ld = yes ; then
6687 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
6688 ld_pushpopstate_support=yes
6689 fi
6690 elif test x$gcc_cv_ld != x; then
6691 # Check if linker supports --push-state/--pop-state options
f50c2ca3 6692 if $gcc_cv_ld --help 2>&1 | grep -- '--push-state' > /dev/null; then
74e22921 6693 ld_pushpopstate_support=yes
6694 fi
6695 fi
6696fi
6697if test x"$ld_pushpopstate_support" = xyes; then
6698 AC_DEFINE(HAVE_LD_PUSHPOPSTATE_SUPPORT, 1,
6699 [Define if your linker supports --push-state/--pop-state])
6700fi
6701AC_MSG_RESULT($ld_pushpopstate_support)
6702
01dc27ef 6703# Configure the subdirectories
6704# AC_CONFIG_SUBDIRS($subdirs)
6705
6706# Create the Makefile
4fc83d8e 6707# and configure language subdirectories
1211e6bc 6708AC_CONFIG_FILES($all_outputs)
6709
6710AC_CONFIG_COMMANDS([default],
805483cf 6711[
00ba4d3e 6712case ${CONFIG_HEADERS} in
6713 *auto-host.h:config.in*)
6714 echo > cstamp-h ;;
805483cf 6715esac
a455468e 6716# Make sure all the subdirs exist.
3e87b980 6717for d in $subdirs doc build common c-family
a455468e 6718do
a455468e 6719 test -d $d || mkdir $d
a455468e 6720done
a1a7e9d5 6721],
26be379c 6722[subdirs='$subdirs'])
1211e6bc 6723AC_OUTPUT
755fa783 6724