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