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