OSDN Git Service

compiler: No error if shift operand inherits interface type.
[pf3gnuchains/gcc-fork.git] / gcc / configure.ac
1 # configure.ac for GCC
2 # Process this file with autoconf to generate a configuration script.
3
4 # Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
5 # 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
6
7 #This file is part of GCC.
8
9 #GCC is free software; you can redistribute it and/or modify it under
10 #the terms of the GNU General Public License as published by the Free
11 #Software Foundation; either version 3, or (at your option) any later
12 #version.
13
14 #GCC is distributed in the hope that it will be useful, but WITHOUT
15 #ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 #FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 #for more details.
18
19 #You should have received a copy of the GNU General Public License
20 #along with GCC; see the file COPYING3.  If not see
21 #<http://www.gnu.org/licenses/>.
22
23 # --------------------------------
24 # Initialization and sanity checks
25 # --------------------------------
26
27 AC_PREREQ(2.64)
28 AC_INIT
29 AC_CONFIG_SRCDIR(tree.c)
30 AC_CONFIG_HEADER(auto-host.h:config.in)
31
32 gcc_version=`cat $srcdir/BASE-VER`
33
34 # Determine the host, build, and target systems
35 AC_CANONICAL_BUILD
36 AC_CANONICAL_HOST
37 AC_CANONICAL_TARGET
38
39 # Determine the noncanonical target name, for directory use.
40 ACX_NONCANONICAL_TARGET
41
42 # Determine the target- and build-specific subdirectories
43 GCC_TOPLEV_SUBDIRS
44
45 # Set program_transform_name
46 AC_ARG_PROGRAM
47
48 # Check for bogus environment variables.
49 # Test if LIBRARY_PATH contains the notation for the current directory
50 # since this would lead to problems installing/building glibc.
51 # LIBRARY_PATH contains the current directory if one of the following
52 # is true:
53 # - one of the terminals (":" and ";") is the first or last sign
54 # - two terminals occur directly after each other
55 # - the path contains an element with a dot in it
56 AC_MSG_CHECKING(LIBRARY_PATH variable)
57 changequote(,)dnl
58 case ${LIBRARY_PATH} in
59   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
60     library_path_setting="contains current directory"
61     ;;
62   *)
63     library_path_setting="ok"
64     ;;
65 esac
66 changequote([,])dnl
67 AC_MSG_RESULT($library_path_setting)
68 if test "$library_path_setting" != "ok"; then
69 AC_MSG_ERROR([
70 *** LIBRARY_PATH shouldn't contain the current directory when
71 *** building gcc. Please change the environment variable
72 *** and run configure again.])
73 fi
74
75 # Test if GCC_EXEC_PREFIX contains the notation for the current directory
76 # since this would lead to problems installing/building glibc.
77 # GCC_EXEC_PREFIX contains the current directory if one of the following
78 # is true:
79 # - one of the terminals (":" and ";") is the first or last sign
80 # - two terminals occur directly after each other
81 # - the path contains an element with a dot in it
82 AC_MSG_CHECKING(GCC_EXEC_PREFIX variable)
83 changequote(,)dnl
84 case ${GCC_EXEC_PREFIX} in
85   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
86     gcc_exec_prefix_setting="contains current directory"
87     ;;
88   *)
89     gcc_exec_prefix_setting="ok"
90     ;;
91 esac
92 changequote([,])dnl
93 AC_MSG_RESULT($gcc_exec_prefix_setting)
94 if test "$gcc_exec_prefix_setting" != "ok"; then
95 AC_MSG_ERROR([
96 *** GCC_EXEC_PREFIX shouldn't contain the current directory when
97 *** building gcc. Please change the environment variable
98 *** and run configure again.])
99 fi
100
101 # -----------
102 # Directories
103 # -----------
104
105 # Specify the local prefix
106 local_prefix=
107 AC_ARG_WITH(local-prefix,
108 [AS_HELP_STRING([--with-local-prefix=DIR],
109                 [specifies directory to put local include])],
110 [case "${withval}" in
111 yes)    AC_MSG_ERROR(bad value ${withval} given for local include directory prefix) ;;
112 no)     ;;
113 *)      local_prefix=$with_local_prefix ;;
114 esac])
115
116 # Default local prefix if it is empty
117 if test x$local_prefix = x; then
118         local_prefix=/usr/local
119 fi
120
121 # Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
122 # passed in by the toplevel make and thus we'd get different behavior
123 # depending on where we built the sources.
124 gcc_gxx_include_dir=
125 # Specify the g++ header file directory
126 AC_ARG_WITH(gxx-include-dir,
127 [AS_HELP_STRING([--with-gxx-include-dir=DIR],
128                 [specifies directory to put g++ header files])],
129 [case "${withval}" in
130 yes)    AC_MSG_ERROR(bad value ${withval} given for g++ include directory) ;;
131 no)     ;;
132 *)      gcc_gxx_include_dir=$with_gxx_include_dir ;;
133 esac])
134
135 # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
136 if test x${gcc_gxx_include_dir} = x; then
137   if test x${enable_version_specific_runtime_libs} = xyes; then
138     gcc_gxx_include_dir='${libsubdir}/include/c++'
139   else
140     libstdcxx_incdir='include/c++/$(version)'
141     if test x$host != x$target; then
142        libstdcxx_incdir="$target_alias/$libstdcxx_incdir"
143     fi
144     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
145   fi
146 fi
147
148 gcc_gxx_include_dir_add_sysroot=0
149 if test "${with_sysroot+set}" = set; then
150   gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
151   if test "${gcc_gxx_without_sysroot}"; then
152     gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
153     gcc_gxx_include_dir_add_sysroot=1
154   fi
155 fi
156
157 AC_ARG_WITH(cpp_install_dir,
158 [AC_HELP_STRING([--with-cpp-install-dir=DIR],
159                 [install the user visible C preprocessor in DIR
160                  (relative to PREFIX) as well as PREFIX/bin])],
161 [if test x$withval = xyes; then
162   AC_MSG_ERROR([option --with-cpp-install-dir requires an argument])
163 elif test x$withval != xno; then
164   cpp_install_dir=$withval
165 fi])
166
167 # We would like to our source tree to be readonly.  However when releases or
168 # pre-releases are generated, the flex/bison generated files as well as the 
169 # various formats of manuals need to be included along with the rest of the
170 # sources.  Therefore we have --enable-generated-files-in-srcdir to do 
171 # just that.
172
173 AC_MSG_CHECKING([whether to place generated files in the source directory])
174   dnl generated-files-in-srcdir is disabled by default
175   AC_ARG_ENABLE(generated-files-in-srcdir, 
176     [AS_HELP_STRING([--enable-generated-files-in-srcdir],
177                     [put copies of generated files in source dir
178                      intended for creating source tarballs for users
179                      without texinfo bison or flex])],
180       generated_files_in_srcdir=$enableval,
181       generated_files_in_srcdir=no)
182
183 AC_MSG_RESULT($generated_files_in_srcdir)
184
185 if test "$generated_files_in_srcdir" = "yes"; then
186   GENINSRC=''
187 else
188   GENINSRC='#'
189 fi
190 AC_SUBST(GENINSRC)
191
192 # -------------------
193 # Find default linker
194 # -------------------
195
196 # With GNU ld
197 AC_ARG_WITH(gnu-ld,
198 [AS_HELP_STRING([--with-gnu-ld], [arrange to work with GNU ld])],
199 gnu_ld_flag="$with_gnu_ld",
200 gnu_ld_flag=no)
201
202 # With pre-defined ld
203 AC_ARG_WITH(ld,
204 [AS_HELP_STRING([--with-ld], [arrange to use the specified ld (full pathname)])],
205 DEFAULT_LINKER="$with_ld")
206 if test x"${DEFAULT_LINKER+set}" = x"set"; then
207   if test ! -x "$DEFAULT_LINKER"; then
208     AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
209   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
210     gnu_ld_flag=yes
211   fi
212   AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
213         [Define to enable the use of a default linker.])
214 fi
215
216 AC_MSG_CHECKING([whether a default linker was specified])
217 if test x"${DEFAULT_LINKER+set}" = x"set"; then
218   if test x"$gnu_ld_flag" = x"no"; then
219     AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
220   else
221     AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
222   fi
223 else
224   AC_MSG_RESULT(no)
225 fi
226
227 # With demangler in GNU ld
228 AC_ARG_WITH(demangler-in-ld,
229 [AS_HELP_STRING([--with-demangler-in-ld], [try to use demangler in GNU ld])],
230 demangler_in_ld="$with_demangler_in_ld",
231 demangler_in_ld=yes)
232
233 # ----------------------
234 # Find default assembler
235 # ----------------------
236
237 # With GNU as
238 AC_ARG_WITH(gnu-as,
239 [AS_HELP_STRING([--with-gnu-as], [arrange to work with GNU as])],
240 gas_flag="$with_gnu_as",
241 gas_flag=no)
242
243 AC_ARG_WITH(as,
244 [AS_HELP_STRING([--with-as], [arrange to use the specified as (full pathname)])],
245 DEFAULT_ASSEMBLER="$with_as")
246 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
247   if test ! -x "$DEFAULT_ASSEMBLER"; then
248     AC_MSG_ERROR([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
249   elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
250     gas_flag=yes
251   fi
252   AC_DEFINE_UNQUOTED(DEFAULT_ASSEMBLER,"$DEFAULT_ASSEMBLER",
253         [Define to enable the use of a default assembler.])
254 fi
255
256 AC_MSG_CHECKING([whether a default assembler was specified])
257 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
258   if test x"$gas_flag" = x"no"; then
259     AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
260   else
261     AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
262   fi
263 else
264   AC_MSG_RESULT(no)
265 fi
266
267 # ---------------
268 # Find C compiler
269 # ---------------
270
271 # If a non-executable a.out is present (e.g. created by GNU as above even if
272 # invoked with -v only), the IRIX 6 native ld just overwrites the existing
273 # file, even when creating an executable, so an execution test fails.
274 # Remove possible default executable files to avoid this.
275 #
276 # FIXME: This really belongs into AC_PROG_CC and can be removed once
277 # Autoconf includes it.
278 rm -f a.out a.exe b.out
279
280 # Find the native compiler
281 AC_PROG_CC
282 AM_PROG_CC_C_O
283 AC_PROG_CXX
284 ACX_PROG_GNAT([-I"$srcdir"/ada])
285
286 # autoconf is lame and doesn't give us any substitution variable for this.
287 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
288   NO_MINUS_C_MINUS_O=yes
289 else
290   OUTPUT_OPTION='-o $@'
291 fi
292 AC_SUBST(NO_MINUS_C_MINUS_O)
293 AC_SUBST(OUTPUT_OPTION)
294
295 # Remove the -O2: for historical reasons, unless bootstrapping we prefer
296 # optimizations to be activated explicitly by the toplevel.
297 case "$CC" in
298   */prev-gcc/xgcc*) ;;
299   *) CFLAGS=`echo $CFLAGS | sed "s/-O[[s0-9]]* *//" ` ;;
300 esac
301 AC_SUBST(CFLAGS)
302
303 # Determine PICFLAG for target gnatlib.
304 GCC_PICFLAG_FOR_TARGET
305 AC_SUBST(PICFLAG_FOR_TARGET)
306
307 # -------------------------
308 # Check C compiler features
309 # -------------------------
310
311 AC_USE_SYSTEM_EXTENSIONS
312 AC_PROG_CPP
313 AC_C_INLINE
314
315 AC_SYS_LARGEFILE
316
317 # sizeof(char) is 1 by definition.
318 AC_CHECK_SIZEOF(void *)
319 AC_CHECK_SIZEOF(short)
320 AC_CHECK_SIZEOF(int)
321 AC_CHECK_SIZEOF(long)
322 AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
323 AC_CHECK_TYPES([__int64], [AC_CHECK_SIZEOF(__int64)])
324 GCC_STDINT_TYPES
325
326 # ---------------------
327 # Warnings and checking
328 # ---------------------
329
330 # Check $CC warning features (if it's GCC).
331 # We want to use -pedantic, but we don't want warnings about
332 # * 'long long'
333 # * variadic macros
334 # * overlong strings
335 # * C++11 narrowing conversions in { }
336 # So, we only use -pedantic if we can disable those warnings.
337
338 ACX_PROG_CC_WARNING_OPTS(
339         m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual])), [loose_warn])
340 ACX_PROG_CC_WARNING_OPTS(
341         m4_quote(m4_do([-Wstrict-prototypes -Wmissing-prototypes])),
342         [c_loose_warn])
343 ACX_PROG_CC_WARNING_OPTS(
344         m4_quote(m4_do([-Wmissing-format-attribute])), [strict_warn])
345 ACX_PROG_CC_WARNING_OPTS(
346         m4_quote(m4_do([-Wold-style-definition -Wc++-compat])), [c_strict_warn])
347 ACX_PROG_CC_WARNING_ALMOST_PEDANTIC(
348         m4_quote(m4_do([-Wno-long-long -Wno-variadic-macros ], 
349                        [-Wno-overlength-strings])), [strict_warn])
350 ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual], [strict_warn])
351
352 # The above macros do nothing if the compiler is not GCC.  However, the
353 # Makefile has more goo to add other flags, so these variables are used
354 # to enable warnings only for GCC.
355 warn_cflags=
356 warn_cxxflags=
357 if test "x$GCC" = "xyes"; then
358   warn_cflags='$(GCC_WARN_CFLAGS)'
359   warn_cxxflags='$(GCC_WARN_CXXFLAGS)'
360 fi
361 AC_SUBST(warn_cflags)
362 AC_SUBST(warn_cxxflags)
363
364 # Disable exceptions and RTTI if building with g++
365 ACX_PROG_CC_WARNING_OPTS(
366         m4_quote(m4_do([-fno-exceptions -fno-rtti])), [noexception_flags])
367         
368 # Enable expensive internal checks
369 is_release=
370 if test x"`cat $srcdir/DEV-PHASE`" != xexperimental; then
371   is_release=yes
372 fi
373
374 AC_ARG_ENABLE(checking,
375 [AS_HELP_STRING([[--enable-checking[=LIST]]],
376                 [enable expensive run-time checks.  With LIST,
377                  enable only specific categories of checks.
378                  Categories are: yes,no,all,none,release.
379                  Flags are: assert,df,fold,gc,gcac,gimple,misc,
380                  rtlflag,rtl,runtime,tree,valgrind,types])],
381 [ac_checking_flags="${enableval}"],[
382 # Determine the default checks.
383 if test x$is_release = x ; then
384   ac_checking_flags=yes
385 else
386   ac_checking_flags=release
387 fi])
388 IFS="${IFS=     }"; ac_save_IFS="$IFS"; IFS="$IFS,"
389 for check in release $ac_checking_flags
390 do
391         case $check in
392         # these set all the flags to specific states
393         yes)            ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking= ;
394                         ac_fold_checking= ; ac_gc_checking=1 ;
395                         ac_gc_always_collect= ; ac_gimple_checking=1 ; ac_rtl_checking= ;
396                         ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
397                         ac_tree_checking=1 ; ac_valgrind_checking= ;
398                         ac_types_checking=1 ;;
399         no|none)        ac_assert_checking= ; ac_checking= ; ac_df_checking= ;
400                         ac_fold_checking= ; ac_gc_checking= ;
401                         ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
402                         ac_rtlflag_checking= ; ac_runtime_checking= ;
403                         ac_tree_checking= ; ac_valgrind_checking= ;
404                         ac_types_checking= ;;
405         all)            ac_assert_checking=1 ; ac_checking=1 ; ac_df_checking=1 ;
406                         ac_fold_checking=1 ; ac_gc_checking=1 ;
407                         ac_gc_always_collect=1 ; ac_gimple_checking=1 ; ac_rtl_checking=1 ;
408                         ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
409                         ac_tree_checking=1 ; ac_valgrind_checking= ;
410                         ac_types_checking=1 ;;
411         release)        ac_assert_checking=1 ; ac_checking= ; ac_df_checking= ;
412                         ac_fold_checking= ; ac_gc_checking= ;
413                         ac_gc_always_collect= ; ac_gimple_checking= ; ac_rtl_checking= ;
414                         ac_rtlflag_checking= ; ac_runtime_checking=1 ;
415                         ac_tree_checking= ; ac_valgrind_checking= ;
416                         ac_types_checking= ;;
417         # these enable particular checks
418         assert)         ac_assert_checking=1 ;;
419         df)             ac_df_checking=1 ;;
420         fold)           ac_fold_checking=1 ;;
421         gc)             ac_gc_checking=1 ;;
422         gcac)           ac_gc_always_collect=1 ;;
423         gimple)         ac_gimple_checking=1 ;;
424         misc)           ac_checking=1 ;;
425         rtl)            ac_rtl_checking=1 ;;
426         rtlflag)        ac_rtlflag_checking=1 ;;
427         runtime)        ac_runtime_checking=1 ;;
428         tree)           ac_tree_checking=1 ;;
429         types)          ac_types_checking=1 ;;
430         valgrind)       ac_valgrind_checking=1 ;;
431         *)      AC_MSG_ERROR(unknown check category $check) ;;
432         esac
433 done
434 IFS="$ac_save_IFS"
435
436 nocommon_flag=""
437 if test x$ac_checking != x ; then
438   AC_DEFINE(ENABLE_CHECKING, 1,
439 [Define if you want more run-time sanity checks.  This one gets a grab
440    bag of miscellaneous but relatively cheap checks.])
441   nocommon_flag=-fno-common
442 fi
443 AC_SUBST(nocommon_flag)
444 if test x$ac_df_checking != x ; then
445   AC_DEFINE(ENABLE_DF_CHECKING, 1,
446 [Define if you want more run-time sanity checks for dataflow.])
447 fi
448 if test x$ac_assert_checking != x ; then
449   AC_DEFINE(ENABLE_ASSERT_CHECKING, 1,
450 [Define if you want assertions enabled.  This is a cheap check.])
451 fi
452 if test x$ac_gimple_checking != x ; then
453   AC_DEFINE(ENABLE_GIMPLE_CHECKING, 1,
454 [Define if you want operations on GIMPLE (the basic data structure of
455 the high-level optimizers) to be checked for dynamic type safety at
456 runtime.  This is moderately expensive.])
457 fi
458 GCC_TARGET_TEMPLATE(ENABLE_RUNTIME_CHECKING)
459 if test x$ac_runtime_checking != x ; then
460   AC_DEFINE(ENABLE_RUNTIME_CHECKING, 1,
461 [Define if you want runtime assertions enabled.  This is a cheap check.])
462 fi
463 if test x$ac_tree_checking != x ; then
464   AC_DEFINE(ENABLE_TREE_CHECKING, 1,
465 [Define if you want all operations on trees (the basic data
466    structure of the front ends) to be checked for dynamic type safety
467    at runtime.  This is moderately expensive.  The tree browser debugging
468    routines will also be enabled by this option.
469    ])
470   TREEBROWSER=tree-browser.o
471 fi
472 if test x$ac_types_checking != x ; then
473   AC_DEFINE(ENABLE_TYPES_CHECKING, 1,
474 [Define if you want all gimple types to be verified after gimplifiation.
475    This is cheap.
476    ])
477 fi
478 AC_SUBST(TREEBROWSER)
479 if test x$ac_rtl_checking != x ; then
480   AC_DEFINE(ENABLE_RTL_CHECKING, 1,
481 [Define if you want all operations on RTL (the basic data structure
482    of the optimizer and back end) to be checked for dynamic type safety
483    at runtime.  This is quite expensive.])
484 fi
485 if test x$ac_rtlflag_checking != x ; then
486   AC_DEFINE(ENABLE_RTL_FLAG_CHECKING, 1,
487 [Define if you want RTL flag accesses to be checked against the RTL
488    codes that are supported for each access macro.  This is relatively
489    cheap.])
490 fi
491 if test x$ac_gc_checking != x ; then
492   AC_DEFINE(ENABLE_GC_CHECKING, 1,
493 [Define if you want the garbage collector to do object poisoning and
494    other memory allocation checks.  This is quite expensive.])
495 fi
496 if test x$ac_gc_always_collect != x ; then
497   AC_DEFINE(ENABLE_GC_ALWAYS_COLLECT, 1,
498 [Define if you want the garbage collector to operate in maximally
499    paranoid mode, validating the entire heap and collecting garbage at
500    every opportunity.  This is extremely expensive.])
501 fi
502 if test x$ac_fold_checking != x ; then
503   AC_DEFINE(ENABLE_FOLD_CHECKING, 1,
504 [Define if you want fold checked that it never destructs its argument.
505    This is quite expensive.])
506 fi
507 valgrind_path_defines=
508 valgrind_command=
509
510 dnl # This check AC_REQUIREs various stuff, so it *must not* be inside
511 dnl # an if statement.  This was the source of very frustrating bugs
512 dnl # in converting to autoconf 2.5x!
513 AC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
514
515 if test x$ac_valgrind_checking != x ; then
516   # It is certainly possible that there's valgrind but no valgrind.h.
517   # GCC relies on making annotations so we must have both.
518   AC_MSG_CHECKING(for VALGRIND_DISCARD in <valgrind/memcheck.h>)
519   AC_PREPROC_IFELSE([AC_LANG_SOURCE(
520     [[#include <valgrind/memcheck.h>
521 #ifndef VALGRIND_DISCARD
522 #error VALGRIND_DISCARD not defined
523 #endif]])],
524   [gcc_cv_header_valgrind_memcheck_h=yes],
525   [gcc_cv_header_valgrind_memcheck_h=no])
526   AC_MSG_RESULT($gcc_cv_header_valgrind_memcheck_h)
527   AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
528   AC_PREPROC_IFELSE([AC_LANG_SOURCE(
529     [[#include <memcheck.h>
530 #ifndef VALGRIND_DISCARD
531 #error VALGRIND_DISCARD not defined
532 #endif]])],
533   [gcc_cv_header_memcheck_h=yes],
534   [gcc_cv_header_memcheck_h=no])
535   AC_MSG_RESULT($gcc_cv_header_memcheck_h)
536   AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
537         [$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
538   if test "x$valgrind_path" = "x" \
539     || (test $have_valgrind_h = no \
540         && test $gcc_cv_header_memcheck_h = no \
541         && test $gcc_cv_header_valgrind_memcheck_h = no); then
542         AC_MSG_ERROR([*** Can't find both valgrind and valgrind/memcheck.h, memcheck.h or valgrind.h])
543   fi
544   valgrind_path_defines=-DVALGRIND_PATH='\"'$valgrind_path'\"'
545   valgrind_command="$valgrind_path -q"
546   AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
547 [Define if you want to run subprograms and generated programs
548    through valgrind (a memory checker).  This is extremely expensive.])
549   if test $gcc_cv_header_valgrind_memcheck_h = yes; then
550     AC_DEFINE(HAVE_VALGRIND_MEMCHECK_H, 1,
551         [Define if valgrind's valgrind/memcheck.h header is installed.])
552   fi
553   if test $gcc_cv_header_memcheck_h = yes; then
554     AC_DEFINE(HAVE_MEMCHECK_H, 1,
555         [Define if valgrind's memcheck.h header is installed.])
556   fi
557 fi
558 AC_SUBST(valgrind_path_defines)
559 AC_SUBST(valgrind_command)
560
561 # Enable code coverage collection
562 AC_ARG_ENABLE(coverage,
563 [AS_HELP_STRING([[--enable-coverage[=LEVEL]]],
564                 [enable compiler's code coverage collection.
565                  Use to measure compiler performance and locate
566                  unused parts of the compiler. With LEVEL, specify
567                  optimization. Values are opt, noopt,
568                  default is noopt])],
569 [case "${enableval}" in
570   yes|noopt)
571     coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O0"
572     ;;
573   opt)
574     coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O2"
575     ;;
576   no)
577     # a.k.a. --disable-coverage
578     coverage_flags=""
579     ;;
580   *)
581     AC_MSG_ERROR(unknown coverage setting $enableval)
582     ;;
583 esac],
584 [coverage_flags=""])
585 AC_SUBST(coverage_flags)
586
587 AC_ARG_ENABLE(gather-detailed-mem-stats, 
588 [AS_HELP_STRING([--enable-gather-detailed-mem-stats],
589                 [enable detailed memory allocation stats gathering])], [],
590 [enable_gather_detailed_mem_stats=no])
591 if test x$enable_gather_detailed_mem_stats = xyes ; then
592   AC_DEFINE(GATHER_STATISTICS, 1,
593         [Define to enable detailed memory allocation stats gathering.])
594 fi
595
596 # -------------------------------
597 # Miscenalleous configure options
598 # -------------------------------
599
600 # See if we are building gcc with C++.
601 AC_ARG_ENABLE(build-with-cxx,
602 [AS_HELP_STRING([--enable-build-with-cxx],
603                 [build with C++ compiler instead of C compiler])],
604 ENABLE_BUILD_WITH_CXX=$enableval,
605 ENABLE_BUILD_WITH_CXX=no)
606 AC_SUBST(ENABLE_BUILD_WITH_CXX)
607 if test "$ENABLE_BUILD_WITH_CXX" = "yes"; then
608   AC_DEFINE(ENABLE_BUILD_WITH_CXX, 1,
609             [Define if building with C++.])
610 fi
611
612 # With stabs
613 AC_ARG_WITH(stabs,
614 [AS_HELP_STRING([--with-stabs],
615                 [arrange to use stabs instead of host debug format])],
616 stabs="$with_stabs",
617 stabs=no)
618
619 # Determine whether or not multilibs are enabled.
620 AC_ARG_ENABLE(multilib,
621 [AS_HELP_STRING([--enable-multilib],
622                 [enable library support for multiple ABIs])],
623 [], [enable_multilib=yes])
624 AC_SUBST(enable_multilib)
625
626 # Enable __cxa_atexit for C++.
627 AC_ARG_ENABLE(__cxa_atexit,
628 [AS_HELP_STRING([--enable-__cxa_atexit], [enable __cxa_atexit for C++])],
629 [], [])
630
631 # Enable C extension for decimal float if target supports it.
632 GCC_AC_ENABLE_DECIMAL_FLOAT([$target])
633
634 dfp=`if test $enable_decimal_float != no; then echo 1; else echo 0; fi`
635 AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_FLOAT, $dfp,
636 [Define to 1 to enable decimal float extension to C.])
637
638 # Use default_decimal_float for dependency.
639 enable_decimal_float=$default_decimal_float
640
641 bid=`if test $enable_decimal_float = bid; then echo 1; else echo 0; fi`
642 AC_DEFINE_UNQUOTED(ENABLE_DECIMAL_BID_FORMAT, $bid,
643 [Define to 1 to specify that we are using the BID decimal floating
644 point format instead of DPD])
645
646 # Enable C extension for fixed-point arithmetic.
647 AC_ARG_ENABLE(fixed-point,
648 [AS_HELP_STRING([--enable-fixed-point],
649                 [enable fixed-point arithmetic extension to C])],
650 [],
651 [
652   case $target in
653     arm*)
654       enable_fixed_point=yes
655       ;;
656
657     mips*-*-*)
658       case $host in
659         mips*-sgi-irix*)
660           AC_MSG_WARN([fixed-point is not supported on IRIX, ignored])
661           enable_fixed_point=no
662           ;;
663         *)
664           enable_fixed_point=yes
665           ;;
666       esac
667       ;;
668     *)
669       AC_MSG_WARN([fixed-point is not supported for this target, ignored])
670       enable_fixed_point=no
671       ;;
672   esac
673 ])
674 AC_SUBST(enable_fixed_point)
675
676 fixedpoint=`if test $enable_fixed_point = yes; then echo 1; else echo 0; fi`
677 AC_DEFINE_UNQUOTED(ENABLE_FIXED_POINT, $fixedpoint,
678 [Define to 1 to enable fixed-point arithmetic extension to C.])
679
680 # Enable threads
681 # Pass with no value to take the default
682 # Pass with a value to specify a thread package
683 AC_ARG_ENABLE(threads,
684 [AS_HELP_STRING([[--enable-threads[=LIB]]],
685                 [enable thread usage for target GCC,
686                  using LIB thread package])],,
687 [enable_threads=''])
688
689 AC_ARG_ENABLE(tls,
690 [AS_HELP_STRING([--enable-tls],
691                 [enable or disable generation of tls code
692                  overriding the assembler check for tls support])],
693 [
694   case $enable_tls in
695     yes | no) ;;
696     *) AC_MSG_ERROR(['$enable_tls' is an invalid value for --enable-tls.
697 Valid choices are 'yes' and 'no'.]) ;;
698   esac
699 ], [enable_tls=''])
700
701 AC_ARG_ENABLE(objc-gc,
702 [AS_HELP_STRING([--enable-objc-gc],
703                 [enable the use of Boehm's garbage collector with
704                  the GNU Objective-C runtime])],
705 if test x$enable_objc_gc = xno; then
706         objc_boehm_gc=''
707 else
708         objc_boehm_gc=1
709 fi,
710 objc_boehm_gc='')
711
712 AC_ARG_WITH(dwarf2,
713 [AS_HELP_STRING([--with-dwarf2], [force the default debug format to be DWARF 2])],
714 dwarf2="$with_dwarf2",
715 dwarf2=no)
716
717 AC_ARG_ENABLE(shared,
718 [AS_HELP_STRING([--disable-shared], [don't provide a shared libgcc])],
719 [
720   case $enable_shared in
721   yes | no) ;;
722   *)
723     enable_shared=no
724     IFS="${IFS=         }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
725     for pkg in $enableval; do
726       if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
727         enable_shared=yes
728       fi
729     done
730     IFS="$ac_save_ifs"
731     ;;
732   esac
733 ], [enable_shared=yes])
734 AC_SUBST(enable_shared)
735
736 AC_ARG_WITH([native-system-header-dir],
737   [  --with-native-system-header-dir=dir
738                           use dir as the directory to look for standard
739                           system header files in.  Defaults to /usr/include.],
740 [
741  case ${with_native_system_header_dir} in
742  yes|no) AC_MSG_ERROR([bad value ${withval} given for --with-native-system-header-dir]) ;;
743  /* | [[A-Za-z]]:[[\\/]]*) ;;
744  *) AC_MSG_ERROR([--with-native-system-header-dir argument ${withval} must be an absolute directory]) ;;
745  esac
746  configured_native_system_header_dir="${withval}"
747 ], [configured_native_system_header_dir=])
748
749 AC_ARG_WITH(build-sysroot, 
750   [AS_HELP_STRING([--with-build-sysroot=sysroot],
751                   [use sysroot as the system root during the build])],
752   [if test x"$withval" != x ; then
753      SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
754    fi],
755   [SYSROOT_CFLAGS_FOR_TARGET=])
756 AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
757
758 AC_ARG_WITH(sysroot,
759 [AS_HELP_STRING([[--with-sysroot[=DIR]]],
760                 [search for usr/lib, usr/include, et al, within DIR])],
761 [
762  case ${with_sysroot} in
763  yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
764  *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
765  esac
766    
767  TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
768  CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
769         
770  if test "x$prefix" = xNONE; then
771   test_prefix=/usr/local
772  else
773   test_prefix=$prefix
774  fi
775  if test "x$exec_prefix" = xNONE; then
776   test_exec_prefix=$test_prefix
777  else
778   test_exec_prefix=$exec_prefix
779  fi
780  case ${TARGET_SYSTEM_ROOT} in
781  "${test_prefix}"|"${test_prefix}/"*|\
782  "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
783  '${prefix}'|'${prefix}/'*|\
784  '${exec_prefix}'|'${exec_prefix}/'*)
785    t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
786    TARGET_SYSTEM_ROOT_DEFINE="$t"
787    ;;
788  esac
789 ], [
790  TARGET_SYSTEM_ROOT=
791  TARGET_SYSTEM_ROOT_DEFINE=
792  CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
793 ])
794 AC_SUBST(TARGET_SYSTEM_ROOT)
795 AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
796 AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
797
798 AC_ARG_WITH(specs,
799   [AS_HELP_STRING([--with-specs=SPECS],
800                   [add SPECS to driver command-line processing])],
801   [CONFIGURE_SPECS=$withval],
802   [CONFIGURE_SPECS=]
803 )
804 AC_SUBST(CONFIGURE_SPECS)
805
806 ACX_PKGVERSION([GCC])
807 ACX_BUGURL([http://gcc.gnu.org/bugs.html])
808
809 # Sanity check enable_languages in case someone does not run the toplevel
810 # configure # script.
811 AC_ARG_ENABLE(languages,
812 [AS_HELP_STRING([--enable-languages=LIST], [specify which front-ends to build])],
813 [case ,${enable_languages}, in
814        ,,|,yes,)
815                 # go safe -- we cannot be much sure without the toplevel
816                 # configure's
817                 # analysis of which target libs are present and usable
818                 enable_languages=c
819                 ;;
820          *,all,*)
821                 AC_MSG_ERROR([only the toplevel supports --enable-languages=all])
822                 ;;
823         *,c,*)
824                 ;;
825         *)
826                 enable_languages=c,${enable_languages}
827                 ;;
828 esac],
829 [enable_languages=c])
830
831 AC_ARG_WITH(multilib-list,
832 [AS_HELP_STRING([--with-multilib-list], [select multilibs (SH and x86-64 only)])],
833 :,
834 with_multilib_list=default)
835
836 # -------------------------
837 # Checks for other programs
838 # -------------------------
839
840 AC_PROG_MAKE_SET
841
842 # Find some useful tools
843 AC_PROG_AWK
844 # We need awk to create options.c and options.h.
845 # Bail out if it's missing.
846 case ${AWK} in
847   "") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
848 esac
849
850 gcc_AC_PROG_LN_S
851 ACX_PROG_LN($LN_S)
852 AC_PROG_RANLIB
853 ranlib_flags=""
854 AC_SUBST(ranlib_flags)
855      
856 gcc_AC_PROG_INSTALL
857
858 # See if cmp has --ignore-initial.
859 gcc_AC_PROG_CMP_IGNORE_INITIAL
860
861 # See if we have the mktemp command.
862 AC_CHECK_PROG(have_mktemp_command, mktemp, yes, no)
863
864 # See if makeinfo has been installed and is modern enough
865 # that we can use it.
866 ACX_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
867   [GNU texinfo.* \([0-9][0-9.]*\)],
868   [4.[7-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
869 if test $gcc_cv_prog_makeinfo_modern = no; then
870   AC_MSG_WARN([
871 *** Makeinfo is missing or too old.
872 *** Info documentation will not be built.])
873   BUILD_INFO=
874 else
875   BUILD_INFO=info
876 fi
877 AC_SUBST(BUILD_INFO)
878
879 # Is pod2man recent enough to regenerate manpages?
880 AC_MSG_CHECKING([for recent Pod::Man])
881 if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
882   AC_MSG_RESULT(yes)
883   GENERATED_MANPAGES=generated-manpages
884 else
885   AC_MSG_RESULT(no)
886   GENERATED_MANPAGES=
887 fi
888 AC_SUBST(GENERATED_MANPAGES)
889
890 MISSING="${CONFIG_SHELL-/bin/sh} $ac_aux_dir/missing"
891
892 # How about lex?
893 dnl Don't use AC_PROG_LEX; we insist on flex.
894 dnl LEXLIB is not useful in gcc.
895 AC_CHECK_PROGS([FLEX], flex, [$MISSING flex])
896
897 # Bison?
898 AC_CHECK_PROGS([BISON], bison, [$MISSING bison])
899
900 # Binutils are not build modules, unlike bison/flex/makeinfo.  So we
901 # check for build == host before using them.
902
903 # NM
904 if test x${build} = x${host} && test -f $srcdir/../binutils/nm.c \
905   && test -d ../binutils ; then
906   NM='${objdir}/../binutils/nm-new'
907 else
908   AC_CHECK_PROG(NM, nm, nm, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing nm)
909 fi
910
911 # AR
912 if test x${build} = x${host} && test -f $srcdir/../binutils/ar.c \
913   && test -d ../binutils ; then
914   AR='${objdir}/../binutils/ar'
915 else
916   AC_CHECK_PROG(AR, ar, ar, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing ar)
917 fi
918
919
920 # --------------------
921 # Checks for C headers
922 # --------------------
923
924 # Need to reject headers which give warnings, so that the -Werror bootstrap
925 # works later. *sigh*  This needs to come before all header checks.
926 AC_PROG_CPP_WERROR
927
928 AC_HEADER_STDC
929 AC_HEADER_TIME
930 ACX_HEADER_STRING
931 AC_HEADER_SYS_WAIT
932 AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \
933                  fcntl.h unistd.h sys/file.h sys/time.h sys/mman.h \
934                  sys/resource.h sys/param.h sys/times.h sys/stat.h \
935                  direct.h malloc.h langinfo.h ldfcn.h locale.h wchar.h)
936
937 # Check for thread headers.
938 AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
939 AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
940
941 # These tests can't be done till we know if we have limits.h.
942 gcc_AC_C_CHAR_BIT
943 AC_C_BIGENDIAN
944
945 # ----------------------
946 # Checks for C++ headers
947 # ----------------------
948
949 dnl Autoconf will give an error in the configure script if there is no
950 dnl C++ preprocessor.  Hack to prevent that.
951 m4_pushdef([AC_MSG_ERROR], m4_defn([AC_MSG_WARN]))[]dnl
952 AC_PROG_CXXCPP
953 m4_popdef([AC_MSG_ERROR])[]dnl
954
955 AC_LANG_PUSH(C++)
956
957 AC_CHECK_HEADERS(unordered_map)
958 AC_CHECK_HEADERS(tr1/unordered_map)
959 AC_CHECK_HEADERS(ext/hash_map)
960
961 AC_LANG_POP(C++)
962
963 # --------
964 # UNSORTED
965 # --------
966
967
968 # These libraries may be used by collect2.
969 # We may need a special search path to get them linked.
970 AC_CACHE_CHECK(for collect2 libraries, gcc_cv_collect2_libs,
971 [save_LIBS="$LIBS"
972 for libs in '' -lld -lmld \
973                 '-L/usr/lib/cmplrs/cc2.11 -lmld' \
974                 '-L/usr/lib/cmplrs/cc3.11 -lmld'
975 do
976         LIBS="$libs"
977         AC_TRY_LINK_FUNC(ldopen,
978                 [gcc_cv_collect2_libs="$libs"; break])
979 done
980 LIBS="$save_LIBS"
981 test -z "$gcc_cv_collect2_libs" && gcc_cv_collect2_libs='none required'])
982 case $gcc_cv_collect2_libs in
983         "none required")        ;;
984         *)      COLLECT2_LIBS=$gcc_cv_collect2_libs ;;
985 esac
986 AC_SUBST(COLLECT2_LIBS)
987
988 # When building Ada code on Alpha, we need exc_resume which is usually in
989 # -lexc.  So test for it.
990 save_LIBS="$LIBS"
991 LIBS=
992 AC_SEARCH_LIBS(exc_resume, exc)
993 GNAT_LIBEXC="$LIBS"
994 LIBS="$save_LIBS"
995 AC_SUBST(GNAT_LIBEXC)
996
997 # To support -mcpu=native on Solaris/SPARC, we need libkstat.
998 save_LIBS="$LIBS"
999 LIBS=
1000 AC_SEARCH_LIBS(kstat_open, kstat)
1001 EXTRA_GCC_LIBS="$LIBS"
1002 LIBS="$save_LIBS"
1003 AC_SUBST(EXTRA_GCC_LIBS)
1004
1005 # Some systems put ldexp and frexp in libm instead of libc; assume
1006 # they're both in the same place.  jcf-dump needs them.
1007 save_LIBS="$LIBS"
1008 LIBS=
1009 AC_SEARCH_LIBS(ldexp, m)
1010 LDEXP_LIB="$LIBS"
1011 LIBS="$save_LIBS"
1012 AC_SUBST(LDEXP_LIB)
1013
1014 # Use <inttypes.h> only if it exists,
1015 # doesn't clash with <sys/types.h>, and declares intmax_t.
1016 AC_MSG_CHECKING(for inttypes.h)
1017 AC_CACHE_VAL(gcc_cv_header_inttypes_h,
1018 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1019 [[#include <sys/types.h>
1020 #include <inttypes.h>]],
1021   [[intmax_t i = -1;]])],
1022   [gcc_cv_header_inttypes_h=yes],
1023   [gcc_cv_header_inttypes_h=no])])
1024 AC_MSG_RESULT($gcc_cv_header_inttypes_h)
1025 if test $gcc_cv_header_inttypes_h = yes; then
1026   AC_DEFINE(HAVE_INTTYPES_H, 1,
1027         [Define if you have a working <inttypes.h> header file.])
1028 fi
1029
1030 dnl Disabled until we have a complete test for buggy enum bitfields.
1031 dnl gcc_AC_C_ENUM_BF_UNSIGNED
1032
1033 define(gcc_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
1034   ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl
1035   fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl
1036   fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
1037   putchar_unlocked putc_unlocked)
1038 AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoll atoq \
1039         sysconf strsignal getrusage nl_langinfo \
1040         gettimeofday mbstowcs wcswidth mmap setlocale \
1041         gcc_UNLOCKED_FUNCS madvise)
1042
1043 if test x$ac_cv_func_mbstowcs = xyes; then
1044   AC_CACHE_CHECK(whether mbstowcs works, gcc_cv_func_mbstowcs_works,
1045 [    AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
1046 int main()
1047 {
1048   mbstowcs(0, "", 0);
1049   return 0;
1050 }]])],
1051     [gcc_cv_func_mbstowcs_works=yes],
1052     [gcc_cv_func_mbstowcs_works=no],
1053     [gcc_cv_func_mbstowcs_works=yes])])
1054   if test x$gcc_cv_func_mbstowcs_works = xyes; then
1055     AC_DEFINE(HAVE_WORKING_MBSTOWCS, 1,
1056   [Define this macro if mbstowcs does not crash when its
1057    first argument is NULL.])
1058   fi
1059 fi
1060
1061 AC_CHECK_TYPE(ssize_t, int)
1062 AC_CHECK_TYPE(caddr_t, char *)
1063
1064 gcc_AC_FUNC_MMAP_BLACKLIST
1065
1066 case "${host}" in
1067 *-*-*vms*)
1068   # Under VMS, vfork works very differently than on Unix. The standard test 
1069   # won't work, and it isn't easily adaptable. It makes more sense to
1070   # just force it.
1071   ac_cv_func_vfork_works=yes
1072   ;;
1073 esac
1074 AC_FUNC_FORK
1075
1076 # g++ on Solaris 10+ defines _XOPEN_SOURCE=600, which exposes a different
1077 # iconv() prototype.
1078 AS_IF([test "$ENABLE_BUILD_WITH_CXX" = "yes"],
1079   [AC_LANG_PUSH([C++])
1080    AM_ICONV
1081    AC_LANG_POP([C++])],
1082   [AM_ICONV])
1083
1084 # Until we have in-tree GNU iconv:
1085 LIBICONV_DEP=
1086 AC_SUBST(LIBICONV_DEP)
1087
1088 AM_LC_MESSAGES
1089
1090 AM_LANGINFO_CODESET
1091
1092 # We will need to find libiberty.h and ansidecl.h
1093 saved_CFLAGS="$CFLAGS"
1094 CFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/../include"
1095 saved_CXXFLAGS="$CXXFLAGS"
1096 CXXFLAGS="$CXXFLAGS -I${srcdir} -I${srcdir}/../include"
1097 gcc_AC_CHECK_DECLS(getenv atol asprintf sbrk abort atof getcwd getwd \
1098         strsignal strstr stpcpy strverscmp \
1099         errno snprintf vsnprintf vasprintf malloc realloc calloc \
1100         free basename getopt clock getpagesize gcc_UNLOCKED_FUNCS, , ,[
1101 #include "ansidecl.h"
1102 #include "system.h"])
1103
1104 gcc_AC_CHECK_DECLS(getrlimit setrlimit getrusage, , ,[
1105 #include "ansidecl.h"
1106 #include "system.h"
1107 #ifdef HAVE_SYS_RESOURCE_H
1108 #include <sys/resource.h>
1109 #endif
1110 ])
1111
1112 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1113 #include "ansidecl.h"
1114 #include "system.h"
1115 #ifdef HAVE_SYS_RESOURCE_H
1116 #include <sys/resource.h>
1117 #endif
1118 ]], [[rlim_t l = 0;]])],[],[AC_DEFINE([rlim_t],[long],
1119 [Define to `long' if <sys/resource.h> doesn't define.])])
1120
1121 # On AIX 5.2, <ldfcn.h> conflicts with <fcntl.h>, as both define incompatible
1122 # FREAD and FWRITE macros.  Fortunately, for GCC's single usage of ldgetname
1123 # in collect2.c, <fcntl.h> isn't visible, but the configure test below needs
1124 # to undef these macros to get the correct value for HAVE_DECL_LDGETNAME.
1125 gcc_AC_CHECK_DECLS(ldgetname, , ,[
1126 #include "ansidecl.h"
1127 #include "system.h"
1128 #ifdef HAVE_LDFCN_H
1129 #undef FREAD
1130 #undef FWRITE
1131 #include <ldfcn.h>
1132 #endif
1133 ])
1134
1135 gcc_AC_CHECK_DECLS(times, , ,[
1136 #include "ansidecl.h"
1137 #include "system.h"
1138 #ifdef HAVE_SYS_TIMES_H
1139 #include <sys/times.h>
1140 #endif
1141 ])
1142
1143 gcc_AC_CHECK_DECLS(sigaltstack, , ,[
1144 #include "ansidecl.h"
1145 #include "system.h"
1146 #include <signal.h>
1147 ])
1148
1149 # g++ on Solaris 10+ defines _XOPEN_SOURCE=600, which hides the madvise()
1150 # prototype.
1151 AS_IF([test "$ENABLE_BUILD_WITH_CXX" = "yes"],
1152   [AC_LANG_PUSH([C++])
1153    gcc_AC_CHECK_DECLS(madvise, , ,[
1154      #include "ansidecl.h"
1155      #include "system.h"
1156    ])
1157    AC_LANG_POP([C++])],
1158   [gcc_AC_CHECK_DECLS(madvise, , ,[
1159      #include "ansidecl.h"
1160      #include "system.h"
1161    ])
1162 ])
1163
1164 # More time-related stuff.
1165 AC_CACHE_CHECK(for struct tms, ac_cv_struct_tms, [
1166 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1167 #include "ansidecl.h"
1168 #include "system.h"
1169 #ifdef HAVE_SYS_TIMES_H
1170 #include <sys/times.h>
1171 #endif
1172 ]], [[struct tms tms;]])],[ac_cv_struct_tms=yes],[ac_cv_struct_tms=no])])
1173 if test $ac_cv_struct_tms = yes; then
1174   AC_DEFINE(HAVE_STRUCT_TMS, 1,
1175   [Define if <sys/times.h> defines struct tms.])
1176 fi
1177
1178 # use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
1179 # revisit after autoconf 2.50.
1180 AC_CACHE_CHECK(for clock_t, gcc_cv_type_clock_t, [
1181 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1182 #include "ansidecl.h"
1183 #include "system.h"
1184 ]], [[clock_t x;]])],[gcc_cv_type_clock_t=yes],[gcc_cv_type_clock_t=no])])
1185 if test $gcc_cv_type_clock_t = yes; then
1186   AC_DEFINE(HAVE_CLOCK_T, 1,
1187   [Define if <time.h> defines clock_t.])
1188 fi
1189
1190 # Check if F_SETLKW is supported by fcntl.
1191 AC_CACHE_CHECK(for F_SETLKW, ac_cv_f_setlkw, [
1192 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1193 #include <fcntl.h>]], [[
1194 struct flock fl;
1195 fl.l_whence = 0;
1196 fl.l_start = 0;
1197 fl.l_len = 0;
1198 fl.l_pid = 0;
1199 return fcntl (1, F_SETLKW, &fl);]])],
1200 [ac_cv_f_setlkw=yes],[ac_cv_f_setlkw=no])])
1201 if test $ac_cv_f_setlkw = yes; then
1202   AC_DEFINE(HOST_HAS_F_SETLKW, 1,
1203   [Define if F_SETLKW supported by fcntl.])
1204 fi
1205
1206 # Restore CFLAGS, CXXFLAGS from before the gcc_AC_NEED_DECLARATIONS tests.
1207 CFLAGS="$saved_CFLAGS"
1208 CXXFLAGS="$saved_CXXFLAGS"
1209
1210 # mkdir takes a single argument on some systems. 
1211 gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
1212
1213 # File extensions
1214 manext='.1'
1215 objext='.o'
1216 AC_SUBST(manext)
1217 AC_SUBST(objext)
1218
1219 # With Setjmp/Longjmp based exception handling.
1220 AC_ARG_ENABLE(sjlj-exceptions,
1221 [AS_HELP_STRING([--enable-sjlj-exceptions],
1222                 [arrange to use setjmp/longjmp exception handling])],
1223 [case $target in
1224   *-*-hpux10*)
1225     if test $enableval != yes; then
1226       AC_MSG_WARN([dwarf2 exceptions not supported, sjlj exceptions forced])
1227       enableval=yes
1228     fi
1229     ;;
1230 esac
1231 force_sjlj_exceptions=yes],
1232 [case $target in
1233   *-*-hpux10*)
1234     force_sjlj_exceptions=yes
1235     enableval=yes
1236     ;;
1237   *)
1238     force_sjlj_exceptions=no
1239     ;;
1240 esac])
1241 if test $force_sjlj_exceptions = yes; then
1242   sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
1243   AC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
1244     [Define 0/1 to force the choice for exception handling model.])
1245 fi
1246
1247 # --------------------------------------------------------
1248 # Build, host, and target specific configuration fragments
1249 # --------------------------------------------------------
1250
1251 # Collect build-machine-specific information.
1252 . ${srcdir}/config.build
1253
1254 # Collect host-machine-specific information.
1255 . ${srcdir}/config.host
1256
1257 target_gtfiles=
1258
1259 # Collect target-machine-specific information.
1260 . ${srcdir}/config.gcc
1261
1262 extra_objs="${host_extra_objs} ${extra_objs}"
1263 extra_gcc_objs="${host_extra_gcc_objs} ${extra_gcc_objs}"
1264
1265 # Default the target-machine variables that were not explicitly set.
1266 if test x"$tm_file" = x
1267 then tm_file=$cpu_type/$cpu_type.h; fi
1268
1269 if test x"$extra_headers" = x
1270 then extra_headers=; fi
1271
1272 if test x$md_file = x
1273 then md_file=$cpu_type/$cpu_type.md; fi
1274
1275 if test x$out_file = x
1276 then out_file=$cpu_type/$cpu_type.c; fi
1277
1278 if test x"$tmake_file" = x
1279 then tmake_file=$cpu_type/t-$cpu_type
1280 fi
1281
1282 # Support --enable-initfini-array.
1283 if test x$enable_initfini_array != xno; then
1284   tm_file="${tm_file} initfini-array.h"
1285 fi
1286
1287 if test x"$dwarf2" = xyes
1288 then tm_file="$tm_file tm-dwarf2.h"
1289 fi
1290
1291 # Say what files are being used for the output code and MD file.
1292 echo "Using \`$srcdir/config/$out_file' for machine-specific logic."
1293 echo "Using \`$srcdir/config/$md_file' as machine description file."
1294
1295 # If any of the xm_file variables contain nonexistent files, warn
1296 # about them and drop them.
1297
1298 bx=
1299 for x in $build_xm_file; do
1300   if    test -f $srcdir/config/$x
1301   then      bx="$bx $x"
1302   else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1303   fi
1304 done
1305 build_xm_file="$bx"
1306
1307 hx=
1308 for x in $host_xm_file; do
1309   if    test -f $srcdir/config/$x
1310   then      hx="$hx $x"
1311   else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1312   fi
1313 done
1314 host_xm_file="$hx"
1315
1316 tx=
1317 for x in $xm_file; do
1318   if    test -f $srcdir/config/$x
1319   then      tx="$tx $x"
1320   else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1321   fi
1322 done
1323 xm_file="$tx"
1324
1325 count=a
1326 for f in $tm_file; do
1327         count=${count}x
1328 done
1329 if test $count = ax; then
1330         echo "Using \`$srcdir/config/$tm_file' as target machine macro file."
1331 else
1332         echo "Using the following target machine macro files:"
1333         for f in $tm_file; do
1334                 echo "  $srcdir/config/$f"
1335         done
1336 fi
1337
1338 if test x$need_64bit_hwint = xyes; then
1339         AC_DEFINE(NEED_64BIT_HOST_WIDE_INT, 1,
1340 [Define to 1 if HOST_WIDE_INT must be 64 bits wide (see hwint.h).])
1341 fi
1342
1343 if test x$use_long_long_for_widest_fast_int = xyes; then
1344         AC_DEFINE(USE_LONG_LONG_FOR_WIDEST_FAST_INT, 1,
1345 [Define to 1 if the 'long long' (or '__int64') is wider than 'long' but still
1346 efficiently supported by the host hardware.])
1347 fi
1348
1349 gnu_ld_bool=`if test x"$gnu_ld" = x"yes"; then echo 1; else echo 0; fi`
1350 AC_DEFINE_UNQUOTED(HAVE_GNU_LD, $gnu_ld_bool, [Define to 1 if using GNU ld.])
1351
1352 gnu_as_bool=`if test x"$gas" = x"yes"; then echo 1; else echo 0; fi`
1353 AC_DEFINE_UNQUOTED(HAVE_GNU_AS, $gnu_as_bool, [Define to 1 if using GNU as.])
1354
1355 count=a
1356 for f in $host_xm_file; do
1357         count=${count}x
1358 done
1359 if test $count = a; then
1360         :
1361 elif test $count = ax; then
1362         echo "Using \`$srcdir/config/$host_xm_file' as host machine macro file."
1363 else
1364         echo "Using the following host machine macro files:"
1365         for f in $host_xm_file; do
1366                 echo "  $srcdir/config/$f"
1367         done
1368 fi
1369 echo "Using ${out_host_hook_obj} for host machine hooks."
1370
1371 if test "$host_xm_file" != "$build_xm_file"; then
1372         count=a
1373         for f in $build_xm_file; do
1374                 count=${count}x
1375         done
1376         if test $count = a; then
1377                 :
1378         elif test $count = ax; then
1379                 echo "Using \`$srcdir/config/$build_xm_file' as build machine macro file."
1380         else
1381                 echo "Using the following build machine macro files:"
1382                 for f in $build_xm_file; do
1383                         echo "  $srcdir/config/$f"
1384                 done
1385         fi
1386 fi
1387
1388 if test -n "$configured_native_system_header_dir"; then
1389   native_system_header_dir=$configured_native_system_header_dir
1390 fi
1391 NATIVE_SYSTEM_HEADER_DIR="$native_system_header_dir"
1392 AC_SUBST(NATIVE_SYSTEM_HEADER_DIR)
1393
1394 case ${host} in
1395   powerpc*-*-darwin*)
1396     AC_CACHE_CHECK([whether mcontext_t fields have underscores],
1397       gcc_cv_mcontext_underscores,
1398       AC_COMPILE_IFELSE([
1399 #include <sys/cdefs.h>
1400 #include <sys/signal.h>
1401 #include <ucontext.h>
1402 int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; }
1403 ],
1404         gcc_cv_mcontext_underscores=no, gcc_cv_mcontext_underscores=yes))
1405       if test $gcc_cv_mcontext_underscores = yes; then
1406         AC_DEFINE(HAS_MCONTEXT_T_UNDERSCORES,,dnl
1407           [mcontext_t fields start with __])
1408       fi
1409     ;;
1410 esac
1411
1412 # ---------
1413 # Threading
1414 # ---------
1415
1416 # Check if a valid thread package
1417 case ${enable_threads} in
1418   "" | no)
1419     # No threads
1420     target_thread_file='single'
1421     ;;
1422   yes)
1423     # default
1424     target_thread_file='single'
1425     ;;
1426   aix | dce | lynx | mipssde | posix | rtems | \
1427   single | tpf | vxworks | win32)
1428     target_thread_file=${enable_threads}
1429     ;;
1430   *)
1431     echo "${enable_threads} is an unknown thread package" 1>&2
1432     exit 1
1433     ;;
1434 esac
1435
1436 if test x${thread_file} = x; then
1437   # No thread file set by target-specific clauses in config.gcc,
1438   # so use file chosen by default logic above
1439   thread_file=${target_thread_file}
1440 fi
1441
1442 # --------
1443 # UNSORTED
1444 # --------
1445
1446 use_cxa_atexit=no
1447 if test x$enable___cxa_atexit = xyes || \
1448    test x$enable___cxa_atexit = x -a x$default_use_cxa_atexit = xyes; then
1449   if test x$host = x$target; then
1450     case $host in
1451       # mingw32 doesn't have __cxa_atexit but uses atexit registration
1452       # keyed to flag_use_cxa_atexit
1453       *-*-mingw32*)
1454         use_cxa_atexit=yes
1455         ;;
1456       *)
1457         AC_CHECK_FUNC(__cxa_atexit,[use_cxa_atexit=yes],
1458           [echo "__cxa_atexit can't be enabled on this target"])
1459         ;;
1460     esac
1461   else
1462     # We can't check for __cxa_atexit when building a cross, so assume
1463     # it is available 
1464     use_cxa_atexit=yes
1465   fi
1466   if test x$use_cxa_atexit = xyes; then
1467     AC_DEFINE(DEFAULT_USE_CXA_ATEXIT, 2,
1468       [Define if you want to use __cxa_atexit, rather than atexit, to
1469       register C++ destructors for local statics and global objects.
1470       This is essential for fully standards-compliant handling of
1471       destructors, but requires __cxa_atexit in libc.])
1472   fi
1473 fi
1474
1475 # Look for a file containing extra machine modes.
1476 if test -n "$extra_modes" && test -f $srcdir/config/$extra_modes; then
1477   extra_modes_file='$(srcdir)'/config/${extra_modes}
1478   AC_SUBST(extra_modes_file)
1479   AC_DEFINE_UNQUOTED(EXTRA_MODES_FILE, "config/$extra_modes",
1480   [Define to the name of a file containing a list of extra machine modes
1481    for this architecture.])
1482 fi
1483
1484 # Convert extra_options into a form suitable for Makefile use.
1485 extra_opt_files=
1486 all_opt_files=
1487 for f in $extra_options; do
1488   extra_opt_files="$extra_opt_files \$(srcdir)/config/$f"
1489   all_opt_files="$all_opt_files $srcdir/config/$f"
1490 done
1491 AC_SUBST(extra_opt_files)
1492
1493 # auto-host.h is the file containing items generated by autoconf and is
1494 # the first file included by config.h.
1495 # If host=build, it is correct to have bconfig include auto-host.h
1496 # as well.  If host!=build, we are in error and need to do more 
1497 # work to find out the build config parameters.
1498 if test x$host = x$build
1499 then
1500         build_auto=auto-host.h
1501 else
1502         # We create a subdir, then run autoconf in the subdir.
1503         # To prevent recursion we set host and build for the new
1504         # invocation of configure to the build for this invocation
1505         # of configure. 
1506         tempdir=build.$$
1507         rm -rf $tempdir
1508         mkdir $tempdir
1509         cd $tempdir
1510         case ${srcdir} in
1511         /* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
1512         *) realsrcdir=../${srcdir};;
1513         esac
1514         saved_CFLAGS="${CFLAGS}"
1515         CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
1516         LDFLAGS="${LDFLAGS_FOR_BUILD}" \
1517         ${realsrcdir}/configure \
1518                 --enable-languages=${enable_languages-all} \
1519                 --target=$target_alias --host=$build_alias --build=$build_alias
1520         CFLAGS="${saved_CFLAGS}"
1521
1522         # We just finished tests for the build machine, so rename
1523         # the file auto-build.h in the gcc directory.
1524         mv auto-host.h ../auto-build.h
1525         cd ..
1526         rm -rf $tempdir
1527         build_auto=auto-build.h
1528 fi
1529 AC_SUBST(build_subdir)
1530
1531 tm_file="${tm_file} defaults.h"
1532 tm_p_file="${tm_p_file} tm-preds.h"
1533 host_xm_file="auto-host.h ansidecl.h ${host_xm_file}"
1534 build_xm_file="${build_auto} ansidecl.h ${build_xm_file}"
1535 # We don't want ansidecl.h in target files, write code there in ISO/GNU C.
1536 # put this back in temporarily.
1537 xm_file="auto-host.h ansidecl.h ${xm_file}"
1538
1539 # --------
1540 # UNSORTED
1541 # --------
1542
1543 changequote(,)dnl
1544 # Compile in configure arguments.
1545 if test -f configargs.h ; then
1546         # Being re-configured.
1547         gcc_config_arguments=`grep configuration_arguments configargs.h | sed -e 's/.*"\([^"]*\)".*/\1/'`
1548         gcc_config_arguments="$gcc_config_arguments : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS"
1549 else
1550         gcc_config_arguments="$TOPLEVEL_CONFIGURE_ARGUMENTS"
1551 fi
1552
1553 # Double all backslashes and backslash all quotes to turn
1554 # gcc_config_arguments into a C string.
1555 sed -e 's/\\/\\\\/g; s/"/\\"/g' <<EOF >conftest.out
1556 $gcc_config_arguments
1557 EOF
1558 gcc_config_arguments_str=`cat conftest.out`
1559 rm -f conftest.out
1560
1561 cat > configargs.h <<EOF
1562 /* Generated automatically. */
1563 static const char configuration_arguments[] = "$gcc_config_arguments_str";
1564 static const char thread_model[] = "$thread_file";
1565
1566 static const struct {
1567   const char *name, *value;
1568 } configure_default_options[] = $configure_default_options;
1569 EOF
1570 changequote([,])dnl
1571
1572 changequote(,)dnl
1573 gcc_BASEVER=`cat $srcdir/BASE-VER`
1574 gcc_DEVPHASE=`cat $srcdir/DEV-PHASE`
1575 gcc_DATESTAMP=`cat $srcdir/DATESTAMP`
1576 if test -f $srcdir/REVISION ; then
1577         gcc_REVISION=`cat $srcdir/REVISION`
1578 else
1579         gcc_REVISION=""
1580 fi
1581 cat > plugin-version.h <<EOF
1582 #include "configargs.h"
1583
1584 #define GCCPLUGIN_VERSION_MAJOR   `echo $gcc_BASEVER | sed -e 's/^\([0-9]*\).*$/\1/'`
1585 #define GCCPLUGIN_VERSION_MINOR   `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.\([0-9]*\).*$/\1/'`
1586 #define GCCPLUGIN_VERSION_PATCHLEVEL   `echo $gcc_BASEVER | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$/\1/'`
1587 #define GCCPLUGIN_VERSION  (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR)
1588
1589 static char basever[] = "$gcc_BASEVER";
1590 static char datestamp[] = "$gcc_DATESTAMP";
1591 static char devphase[] = "$gcc_DEVPHASE";
1592 static char revision[] = "$gcc_REVISION";
1593
1594 /* FIXME plugins: We should make the version information more precise.
1595    One way to do is to add a checksum. */
1596
1597 static struct plugin_gcc_version gcc_version = {basever, datestamp,
1598                                                 devphase, revision,
1599                                                 configuration_arguments};
1600 EOF
1601 changequote([,])dnl
1602
1603 # Internationalization
1604 ZW_GNU_GETTEXT_SISTER_DIR
1605
1606 # If LIBINTL contains LIBICONV, then clear LIBICONV so we don't get
1607 # -liconv on the link line twice.
1608 case "$LIBINTL" in *$LIBICONV*)
1609         LIBICONV= ;;
1610 esac
1611
1612 AC_ARG_ENABLE(secureplt,
1613 [AS_HELP_STRING([--enable-secureplt],
1614                 [enable -msecure-plt by default for PowerPC])],
1615 [], [])
1616
1617 AC_ARG_ENABLE(leading-mingw64-underscores,
1618   AS_HELP_STRING([--enable-leading-mingw64-underscores],
1619                  [enable leading underscores on 64 bit mingw targets]),
1620   [],[])
1621 AS_IF([ test x"$enable_leading_mingw64_underscores" = xyes ],
1622   [AC_DEFINE(USE_MINGW64_LEADING_UNDERSCORES, 1,
1623     [Define if we should use leading underscore on 64 bit mingw targets])])
1624
1625 AC_ARG_ENABLE(cld,
1626 [AS_HELP_STRING([--enable-cld], [enable -mcld by default for 32bit x86])], [],
1627 [enable_cld=no])
1628
1629 AC_ARG_ENABLE(frame-pointer,
1630 [AS_HELP_STRING([--enable-frame-pointer],
1631                 [enable -fno-omit-frame-pointer by default for 32bit x86])], [],
1632 [
1633 case $target_os in
1634 linux* | darwin[[8912]]*)
1635   # Enable -fomit-frame-pointer by default for Linux and Darwin with
1636   # DWARF2.
1637   enable_frame_pointer=no
1638   ;;
1639 *)
1640   enable_frame_pointer=yes
1641   ;;
1642 esac
1643 ])
1644
1645 # Windows32 Registry support for specifying GCC installation paths.
1646 AC_ARG_ENABLE(win32-registry,
1647 [AS_HELP_STRING([--disable-win32-registry],
1648                 [disable lookup of installation paths in the
1649                  Registry on Windows hosts])
1650 AS_HELP_STRING([--enable-win32-registry], [enable registry lookup (default)])
1651 AS_HELP_STRING([--enable-win32-registry=KEY],
1652                [use KEY instead of GCC version as the last portion
1653                 of the registry key])],,)
1654
1655 case $host_os in
1656   win32 | pe | cygwin* | mingw32* | uwin*)
1657     if test "x$enable_win32_registry" != xno; then
1658       AC_SEARCH_LIBS(RegOpenKeyExA, advapi32,, [enable_win32_registry=no])
1659     fi
1660
1661     if test "x$enable_win32_registry" != xno; then
1662       AC_DEFINE(ENABLE_WIN32_REGISTRY, 1,
1663   [Define to 1 if installation paths should be looked up in the Windows
1664    Registry. Ignored on non-Windows hosts.])
1665
1666       if test "x$enable_win32_registry" != xyes \
1667          && test "x$enable_win32_registry" != x; then
1668         AC_DEFINE_UNQUOTED(WIN32_REGISTRY_KEY, "$enable_win32_registry",
1669   [Define to be the last component of the Windows registry key under which
1670    to look for installation paths.  The full key used will be 
1671    HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}.
1672    The default is the GCC version number.])
1673       fi
1674     fi
1675   ;;
1676 esac
1677
1678 # Get an absolute path to the GCC top-level source directory
1679 holddir=`${PWDCMD-pwd}`
1680 cd $srcdir
1681 topdir=`${PWDCMD-pwd}`
1682 cd $holddir
1683
1684 # Conditionalize the makefile for this host machine.
1685 xmake_file=
1686 for f in ${host_xmake_file}
1687 do
1688         if test -f ${srcdir}/config/$f
1689         then
1690                 xmake_file="${xmake_file} \$(srcdir)/config/$f"
1691         fi
1692 done
1693
1694 # Conditionalize the makefile for this target machine.
1695 tmake_file_=
1696 for f in ${tmake_file}
1697 do
1698         if test -f ${srcdir}/config/$f
1699         then
1700                 tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
1701         fi
1702 done
1703 tmake_file="${tmake_file_}"
1704
1705 out_object_file=`basename $out_file .c`.o
1706 common_out_object_file=`basename $common_out_file .c`.o
1707
1708 tm_file_list="options.h"
1709 tm_include_list="options.h insn-constants.h"
1710 for f in $tm_file; do
1711   case $f in
1712     ./* )
1713        f=`echo $f | sed 's/^..//'`
1714        tm_file_list="${tm_file_list} $f"
1715        tm_include_list="${tm_include_list} $f"
1716        ;;
1717     defaults.h )
1718        tm_file_list="${tm_file_list} \$(srcdir)/$f"
1719        tm_include_list="${tm_include_list} $f"
1720        ;;
1721     * )
1722        tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
1723        tm_include_list="${tm_include_list} config/$f"
1724        ;;
1725   esac
1726 done
1727
1728 tm_p_file_list=
1729 tm_p_include_list=
1730 for f in $tm_p_file; do
1731   case $f in
1732     tm-preds.h )
1733        tm_p_file_list="${tm_p_file_list} $f"
1734        tm_p_include_list="${tm_p_include_list} $f"
1735        ;;
1736     * )
1737        tm_p_file_list="${tm_p_file_list} \$(srcdir)/config/$f"
1738        tm_p_include_list="${tm_p_include_list} config/$f"
1739   esac
1740 done
1741
1742 xm_file_list=
1743 xm_include_list=
1744 for f in $xm_file; do
1745   case $f in
1746     ansidecl.h )
1747        xm_file_list="${xm_file_list} \$(srcdir)/../include/$f"
1748        xm_include_list="${xm_include_list} $f"
1749        ;;
1750     auto-host.h )
1751        xm_file_list="${xm_file_list} $f"
1752        xm_include_list="${xm_include_list} $f"
1753        ;;
1754     * )
1755        xm_file_list="${xm_file_list} \$(srcdir)/config/$f"
1756        xm_include_list="${xm_include_list} config/$f"
1757        ;;
1758   esac
1759 done
1760
1761 host_xm_file_list=
1762 host_xm_include_list=
1763 for f in $host_xm_file; do
1764   case $f in
1765     ansidecl.h )
1766        host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/$f"
1767        host_xm_include_list="${host_xm_include_list} $f"
1768        ;;
1769     auto-host.h )
1770        host_xm_file_list="${host_xm_file_list} $f"
1771        host_xm_include_list="${host_xm_include_list} $f"
1772        ;;
1773     * )
1774        host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
1775        host_xm_include_list="${host_xm_include_list} config/$f"
1776        ;;
1777   esac
1778 done
1779
1780 build_xm_file_list=
1781 for f in $build_xm_file; do
1782   case $f in
1783     ansidecl.h )
1784        build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/$f"
1785        build_xm_include_list="${build_xm_include_list} $f"
1786        ;;
1787     auto-build.h | auto-host.h )
1788        build_xm_file_list="${build_xm_file_list} $f"
1789        build_xm_include_list="${build_xm_include_list} $f"
1790        ;;
1791     * )
1792        build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
1793        build_xm_include_list="${build_xm_include_list} config/$f"
1794        ;;
1795   esac
1796 done
1797
1798 # Define macro CROSS_DIRECTORY_STRUCTURE in compilation if this is a
1799 # cross-compiler which does not use the native headers and libraries.
1800 # Also use all.cross instead of all.internal and adjust SYSTEM_HEADER_DIR.
1801 CROSS=                                          AC_SUBST(CROSS)
1802 ALL=all.internal                                AC_SUBST(ALL)
1803 SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)' AC_SUBST(SYSTEM_HEADER_DIR)
1804
1805 if test "x$with_build_sysroot" != x; then
1806   build_system_header_dir=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
1807 else
1808   # This value is used, even on a native system, because 
1809   # CROSS_SYSTEM_HEADER_DIR is just 
1810   # $(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR).
1811   build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
1812 fi
1813
1814 if test x$host != x$target
1815 then
1816         CROSS="-DCROSS_DIRECTORY_STRUCTURE"
1817         ALL=all.cross
1818         SYSTEM_HEADER_DIR=$build_system_header_dir
1819         case "$host","$target" in
1820         # Darwin crosses can use the host system's libraries and headers,
1821         # because of the fat library support.  Of course, it must be the
1822         # same version of Darwin on both sides.  Allow the user to
1823         # just say --target=foo-darwin without a version number to mean
1824         # "the version on this system".
1825             *-*-darwin*,*-*-darwin*)
1826                 hostos=`echo $host | sed 's/.*-darwin/darwin/'`
1827                 targetos=`echo $target | sed 's/.*-darwin/darwin/'`
1828                 if test $hostos = $targetos -o $targetos = darwin ; then
1829                     CROSS=
1830                     SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'
1831                     with_headers=yes
1832                 fi
1833                 ;;
1834
1835             i?86-*-*,x86_64-*-* \
1836             | powerpc*-*-*,powerpc64*-*-*)
1837                 CROSS="$CROSS -DNATIVE_CROSS" ;;
1838         esac
1839
1840         case $target in
1841                 *-*-mingw*)
1842                         if test "x$with_headers" = x; then
1843                                 with_headers=yes
1844                         fi
1845                         ;;
1846                 *)
1847                         ;;
1848         esac
1849 elif test "x$TARGET_SYSTEM_ROOT" != x; then
1850         SYSTEM_HEADER_DIR=$build_system_header_dir 
1851 fi
1852
1853 # If this is a cross-compiler that does not
1854 # have its own set of headers then define
1855 # inhibit_libc
1856
1857 # If this is using newlib, without having the headers available now,
1858 # then define inhibit_libc in LIBGCC2_CFLAGS.
1859 # This prevents libgcc2 from containing any code which requires libc
1860 # support.
1861 : ${inhibit_libc=false}
1862 if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
1863        test x$with_newlib = xyes ; } &&
1864      { test "x$with_headers" = x || test "x$with_headers" = xno ; } ; then
1865        inhibit_libc=true
1866 fi
1867 AC_SUBST(inhibit_libc)
1868
1869 # When building gcc with a cross-compiler, we need to adjust things so
1870 # that the generator programs are still built with the native compiler.
1871 # Also, we cannot run fixincludes.
1872
1873 # These are the normal (build=host) settings:
1874 CC_FOR_BUILD='$(CC)'            AC_SUBST(CC_FOR_BUILD)
1875 BUILD_CFLAGS='$(ALL_CFLAGS)'    AC_SUBST(BUILD_CFLAGS)
1876 BUILD_LDFLAGS='$(LDFLAGS)'      AC_SUBST(BUILD_LDFLAGS)
1877 STMP_FIXINC=stmp-fixinc         AC_SUBST(STMP_FIXINC)
1878
1879 # And these apply if build != host, or we are generating coverage data
1880 if test x$build != x$host || test "x$coverage_flags" != x
1881 then
1882     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
1883     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
1884 fi
1885
1886 # Expand extra_headers to include complete path.
1887 # This substitutes for lots of t-* files.
1888 extra_headers_list=
1889 # Prepend $(srcdir)/config/${cpu_type}/ to every entry in extra_headers.
1890 for file in ${extra_headers} ; do
1891   extra_headers_list="${extra_headers_list} \$(srcdir)/config/${cpu_type}/${file}"
1892 done
1893
1894 # If use_gcc_tgmath is set, append ginclude/tgmath.h.
1895 if test x"$use_gcc_tgmath" = xyes
1896 then extra_headers_list="${extra_headers_list} \$(srcdir)/ginclude/tgmath.h"
1897 fi
1898
1899 # Define collect2 in Makefile.
1900 case $host_can_use_collect2 in
1901   no) collect2= ;;
1902   *) collect2='collect2$(exeext)' ;;
1903 esac
1904 AC_SUBST([collect2])
1905
1906 # Add a definition of USE_COLLECT2 if system wants one.
1907 case $use_collect2 in
1908   no) use_collect2= ;;
1909   "") ;;
1910   *) 
1911     host_xm_defines="${host_xm_defines} USE_COLLECT2"
1912     xm_defines="${xm_defines} USE_COLLECT2"
1913     case $host_can_use_collect2 in
1914       no)
1915         AC_MSG_ERROR([collect2 is required but cannot be built on this system])
1916         ;;
1917     esac
1918     ;;
1919 esac
1920
1921 AC_DEFINE_UNQUOTED(LTOPLUGINSONAME,"${host_lto_plugin_soname}",
1922 [Define to the name of the LTO plugin DSO that must be
1923   passed to the linker's -plugin=LIB option.])
1924
1925 # ---------------------------
1926 # Assembler & linker features
1927 # ---------------------------
1928
1929 # During stage 2, ld is actually gcc/collect-ld, which is a small script to
1930 # discern between when to use prev-ld/ld-new and when to use ld/ld-new.
1931 # However when ld-new is first executed from the build tree, libtool will
1932 # relink it as .libs/lt-ld-new, so that it can give it an RPATH that refers
1933 # to the build tree.  While doing this we need to use the previous-stage
1934 # linker, or we have an infinite loop.  The presence of a shell script as
1935 # ld/ld-new, and the fact that the script *uses ld itself*, is what confuses
1936 # the gcc/collect-ld script.  So we need to know how libtool works, or
1937 # exec-tool will fail.
1938
1939 m4_defun([_LT_CONFIG_COMMANDS], [])
1940 AC_PROG_LIBTOOL
1941 AC_SUBST(objdir)
1942 AC_SUBST(enable_fast_install)
1943
1944 # Identify the assembler which will work hand-in-glove with the newly
1945 # built GCC, so that we can examine its features.  This is the assembler
1946 # which will be driven by the driver program.
1947 #
1948 # If build != host, and we aren't building gas in-tree, we identify a
1949 # build->target assembler and hope that it will have the same features
1950 # as the host->target assembler we'll be using.
1951 gcc_cv_gas_major_version=
1952 gcc_cv_gas_minor_version=
1953 gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
1954
1955 m4_pattern_allow([AS_FOR_TARGET])dnl
1956 AS_VAR_SET_IF(gcc_cv_as,, [
1957 if test -x "$DEFAULT_ASSEMBLER"; then
1958         gcc_cv_as="$DEFAULT_ASSEMBLER"
1959 elif test -f $gcc_cv_as_gas_srcdir/configure.in \
1960      && test -f ../gas/Makefile \
1961      && test x$build = x$host; then
1962         gcc_cv_as=../gas/as-new$build_exeext
1963 elif test -x as$build_exeext; then
1964         # Build using assembler in the current directory.
1965         gcc_cv_as=./as$build_exeext
1966 elif ( set dummy $AS_FOR_TARGET; test -x $[2] ); then
1967         gcc_cv_as="$AS_FOR_TARGET"
1968 else
1969         AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
1970 fi])
1971
1972 ORIGINAL_AS_FOR_TARGET=$gcc_cv_as
1973 AC_SUBST(ORIGINAL_AS_FOR_TARGET)
1974 case "$ORIGINAL_AS_FOR_TARGET" in
1975   ./as | ./as$build_exeext) ;;
1976   *) AC_CONFIG_FILES(as:exec-tool.in, [chmod +x as]) ;;
1977 esac 
1978
1979 AC_MSG_CHECKING(what assembler to use)
1980 if test "$gcc_cv_as" = ../gas/as-new$build_exeext; then
1981   # Single tree build which includes gas.  We want to prefer it
1982   # over whatever linker top-level may have detected, since
1983   # we'll use what we're building after installation anyway.
1984   AC_MSG_RESULT(newly built gas)
1985   in_tree_gas=yes
1986   _gcc_COMPUTE_GAS_VERSION
1987   in_tree_gas_is_elf=no
1988   if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
1989      || (grep 'obj_format = multi' ../gas/Makefile \
1990          && grep 'extra_objects =.* obj-elf' ../gas/Makefile) > /dev/null
1991   then
1992     in_tree_gas_is_elf=yes
1993   fi
1994 else
1995   AC_MSG_RESULT($gcc_cv_as)
1996   in_tree_gas=no
1997 fi
1998
1999 # Identify the linker which will work hand-in-glove with the newly
2000 # built GCC, so that we can examine its features.  This is the linker
2001 # which will be driven by the driver program.
2002 #
2003 # If build != host, and we aren't building gas in-tree, we identify a
2004 # build->target linker and hope that it will have the same features
2005 # as the host->target linker we'll be using.
2006 gcc_cv_gld_major_version=
2007 gcc_cv_gld_minor_version=
2008 gcc_cv_ld_gld_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/ld
2009 gcc_cv_ld_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
2010
2011 AS_VAR_SET_IF(gcc_cv_ld,, [
2012 if test -x "$DEFAULT_LINKER"; then
2013         gcc_cv_ld="$DEFAULT_LINKER"
2014 elif test -f $gcc_cv_ld_gld_srcdir/configure.in \
2015      && test -f ../ld/Makefile \
2016      && test x$build = x$host; then
2017         gcc_cv_ld=../ld/ld-new$build_exeext
2018 elif test -x collect-ld$build_exeext; then
2019         # Build using linker in the current directory.
2020         gcc_cv_ld=./collect-ld$build_exeext
2021 elif ( set dummy $LD_FOR_TARGET; test -x $[2] ); then
2022         gcc_cv_ld="$LD_FOR_TARGET"
2023 else
2024         AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
2025 fi])
2026
2027 ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld
2028 PLUGIN_LD=`basename $gcc_cv_ld`
2029 AC_ARG_WITH(plugin-ld,
2030 [AS_HELP_STRING([[--with-plugin-ld=[ARG]]], [specify the plugin linker])],
2031 [if test x"$withval" != x; then
2032    ORIGINAL_PLUGIN_LD_FOR_TARGET="$withval"
2033    PLUGIN_LD="$withval"
2034  fi])
2035 AC_SUBST(ORIGINAL_PLUGIN_LD_FOR_TARGET)
2036 AC_DEFINE_UNQUOTED(PLUGIN_LD, "$PLUGIN_LD", [Specify plugin linker])
2037
2038 # Check to see if we are using gold instead of ld
2039 AC_MSG_CHECKING(whether we are using gold)
2040 ld_is_gold=no
2041 if test x$gcc_cv_ld != x; then
2042   if $gcc_cv_ld --version 2>/dev/null | sed 1q \
2043      | grep "GNU gold" > /dev/null; then
2044     ld_is_gold=yes
2045   fi
2046 fi
2047 AC_MSG_RESULT($ld_is_gold)
2048
2049 ORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
2050 AC_SUBST(ORIGINAL_LD_FOR_TARGET)
2051 case "$ORIGINAL_LD_FOR_TARGET" in
2052   ./collect-ld | ./collect-ld$build_exeext) ;;
2053   *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;;
2054 esac 
2055
2056 AC_MSG_CHECKING(what linker to use)
2057 if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext \
2058    || test "$gcc_cv_ld" = ../gold/ld-new$build_exeext; then
2059         # Single tree build which includes ld.  We want to prefer it
2060         # over whatever linker top-level may have detected, since
2061         # we'll use what we're building after installation anyway.
2062         AC_MSG_RESULT(newly built ld)
2063         in_tree_ld=yes
2064         in_tree_ld_is_elf=no
2065         if (grep 'EMUL = .*elf' ../ld/Makefile \
2066             || grep 'EMUL = .*linux' ../ld/Makefile \
2067             || grep 'EMUL = .*lynx' ../ld/Makefile) > /dev/null; then
2068           in_tree_ld_is_elf=yes
2069         elif test "$ld_is_gold" = yes; then
2070           in_tree_ld_is_elf=yes
2071         fi
2072         for f in $gcc_cv_ld_bfd_srcdir/configure $gcc_cv_ld_gld_srcdir/configure $gcc_cv_ld_gld_srcdir/configure.in $gcc_cv_ld_gld_srcdir/Makefile.in
2073         do
2074 changequote(,)dnl
2075                 gcc_cv_gld_version=`sed -n -e 's/^[     ]*\(VERSION=[0-9]*\.[0-9]*.*\)/\1/p' < $f`
2076                 if test x$gcc_cv_gld_version != x; then
2077                         break
2078                 fi
2079         done
2080         gcc_cv_gld_major_version=`expr "$gcc_cv_gld_version" : "VERSION=\([0-9]*\)"`
2081         gcc_cv_gld_minor_version=`expr "$gcc_cv_gld_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
2082 changequote([,])dnl
2083 else
2084         AC_MSG_RESULT($gcc_cv_ld)
2085         in_tree_ld=no
2086 fi
2087
2088 # Figure out what nm we will be using.
2089 gcc_cv_binutils_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/binutils
2090 AS_VAR_SET_IF(gcc_cv_nm,, [
2091 if test -f $gcc_cv_binutils_srcdir/configure.in \
2092      && test -f ../binutils/Makefile \
2093      && test x$build = x$host; then
2094         gcc_cv_nm=../binutils/nm-new$build_exeext
2095 elif test -x nm$build_exeext; then
2096         gcc_cv_nm=./nm$build_exeext
2097 elif ( set dummy $NM_FOR_TARGET; test -x $[2] ); then
2098         gcc_cv_nm="$NM_FOR_TARGET"
2099 else
2100         AC_PATH_PROG(gcc_cv_nm, $NM_FOR_TARGET)
2101 fi])
2102
2103 AC_MSG_CHECKING(what nm to use)
2104 if test "$gcc_cv_nm" = ../binutils/nm-new$build_exeext; then
2105         # Single tree build which includes binutils.
2106         AC_MSG_RESULT(newly built nm)
2107         in_tree_nm=yes
2108 else
2109         AC_MSG_RESULT($gcc_cv_nm)
2110         in_tree_nm=no
2111 fi
2112
2113 ORIGINAL_NM_FOR_TARGET=$gcc_cv_nm
2114 AC_SUBST(ORIGINAL_NM_FOR_TARGET)
2115 case "$ORIGINAL_NM_FOR_TARGET" in
2116   ./nm | ./nm$build_exeext) ;;
2117   *) AC_CONFIG_FILES(nm:exec-tool.in, [chmod +x nm]) ;;
2118 esac
2119
2120
2121 # Figure out what objdump we will be using.
2122 AS_VAR_SET_IF(gcc_cv_objdump,, [
2123 if test -f $gcc_cv_binutils_srcdir/configure.in \
2124      && test -f ../binutils/Makefile \
2125      && test x$build = x$host; then
2126         # Single tree build which includes binutils.
2127         gcc_cv_objdump=../binutils/objdump$build_exeext
2128 elif test -x objdump$build_exeext; then
2129         gcc_cv_objdump=./objdump$build_exeext
2130 elif ( set dummy $OBJDUMP_FOR_TARGET; test -x $[2] ); then
2131         gcc_cv_objdump="$OBJDUMP_FOR_TARGET"
2132 else
2133         AC_PATH_PROG(gcc_cv_objdump, $OBJDUMP_FOR_TARGET)
2134 fi])
2135
2136 AC_MSG_CHECKING(what objdump to use)
2137 if test "$gcc_cv_objdump" = ../binutils/objdump$build_exeext; then
2138         # Single tree build which includes binutils.
2139         AC_MSG_RESULT(newly built objdump)
2140 elif test x$gcc_cv_objdump = x; then
2141         AC_MSG_RESULT(not found)
2142 else
2143         AC_MSG_RESULT($gcc_cv_objdump)
2144 fi
2145
2146 # Figure out what readelf we will be using.
2147 AS_VAR_SET_IF(gcc_cv_readelf,, [
2148 if test -f $gcc_cv_binutils_srcdir/configure.in \
2149      && test -f ../binutils/Makefile \
2150      && test x$build = x$host; then
2151         # Single tree build which includes binutils.
2152         gcc_cv_readelf=../binutils/readelf$build_exeext
2153 elif test -x readelf$build_exeext; then
2154         gcc_cv_readelf=./readelf$build_exeext
2155 else
2156         AC_PATH_PROG(gcc_cv_readelf, readelf)
2157 fi])
2158
2159 AC_MSG_CHECKING(what readelf to use)
2160 if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then
2161         # Single tree build which includes binutils.
2162         AC_MSG_RESULT(newly built readelf)
2163 elif test x$gcc_cv_readelf = x; then
2164         AC_MSG_RESULT(not found)
2165 else
2166         AC_MSG_RESULT($gcc_cv_readelf)
2167 fi
2168
2169 # Figure out what assembler alignment features are present.
2170 gcc_GAS_CHECK_FEATURE([.balign and .p2align], gcc_cv_as_balign_and_p2align,
2171  [2,6,0],,
2172 [.balign 4
2173 .p2align 2],,
2174 [AC_DEFINE(HAVE_GAS_BALIGN_AND_P2ALIGN, 1,
2175   [Define if your assembler supports .balign and .p2align.])])
2176
2177 gcc_GAS_CHECK_FEATURE([.p2align with maximum skip], gcc_cv_as_max_skip_p2align,
2178  [2,8,0],,
2179  [.p2align 4,,7],,
2180 [AC_DEFINE(HAVE_GAS_MAX_SKIP_P2ALIGN, 1,
2181   [Define if your assembler supports specifying the maximum number
2182    of bytes to skip when using the GAS .p2align command.])])
2183
2184 gcc_GAS_CHECK_FEATURE([.literal16], gcc_cv_as_literal16,
2185  [2,8,0],,
2186  [.literal16],,
2187 [AC_DEFINE(HAVE_GAS_LITERAL16, 1,
2188   [Define if your assembler supports .literal16.])])
2189
2190 gcc_GAS_CHECK_FEATURE([working .subsection -1], gcc_cv_as_subsection_m1,
2191  [elf,2,9,0],,
2192  [conftest_label1: .word 0
2193 .subsection -1
2194 conftest_label2: .word 0
2195 .previous],
2196  [if test x$gcc_cv_nm != x; then
2197     $gcc_cv_nm conftest.o | grep conftest_label1 > conftest.nm1
2198     $gcc_cv_nm conftest.o | grep conftest_label2 | sed -e 's/label2/label1/' > conftest.nm2
2199     if cmp conftest.nm1 conftest.nm2 > /dev/null 2>&1
2200     then :
2201     else gcc_cv_as_subsection_m1=yes
2202     fi
2203     rm -f conftest.nm1 conftest.nm2
2204   fi],
2205  [AC_DEFINE(HAVE_GAS_SUBSECTION_ORDERING, 1,
2206   [Define if your assembler supports .subsection and .subsection -1 starts
2207    emitting at the beginning of your section.])])
2208
2209 gcc_GAS_CHECK_FEATURE([.weak], gcc_cv_as_weak,
2210  [2,2,0],,
2211  [      .weak foobar],,
2212 [AC_DEFINE(HAVE_GAS_WEAK, 1, [Define if your assembler supports .weak.])])
2213
2214 gcc_GAS_CHECK_FEATURE([.weakref], gcc_cv_as_weakref,
2215  [2,17,0],,
2216  [      .weakref foobar, barfnot],,
2217 [AC_DEFINE(HAVE_GAS_WEAKREF, 1, [Define if your assembler supports .weakref.])])
2218
2219 gcc_GAS_CHECK_FEATURE([.nsubspa comdat], gcc_cv_as_nsubspa_comdat,
2220  [2,15,91],,
2221  [      .SPACE $TEXT$
2222         .NSUBSPA $CODE$,COMDAT],,
2223 [AC_DEFINE(HAVE_GAS_NSUBSPA_COMDAT, 1, [Define if your assembler supports .nsubspa comdat option.])])
2224
2225 # .hidden needs to be supported in both the assembler and the linker,
2226 # because GNU LD versions before 2.12.1 have buggy support for STV_HIDDEN.
2227 # This is irritatingly difficult to feature test for; we have to check the
2228 # date string after the version number.  If we've got an in-tree
2229 # ld, we don't know its patchlevel version, so we set the baseline at 2.13
2230 # to be safe.
2231 # The gcc_GAS_CHECK_FEATURE call just sets a cache variable.
2232 gcc_GAS_CHECK_FEATURE([.hidden], gcc_cv_as_hidden,
2233  [elf,2,13,0],,
2234 [       .hidden foobar
2235 foobar:],[
2236 # Solaris 9/x86 as incorrectly emits an alias for a hidden symbol with
2237 # STV_HIDDEN, so disable .hidden support if so.
2238 case "${target}" in
2239   i?86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
2240     if test x$gcc_cv_as != x && test x$gcc_cv_objdump != x; then
2241       cat > conftest.s <<EOF
2242 .globl hidden
2243         .hidden hidden
2244 hidden:
2245 .globl default
2246         .set    default,hidden
2247 EOF
2248       if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
2249         && $gcc_cv_objdump -t conftest.o 2>/dev/null | \
2250         grep '\.hidden default' > /dev/null; then
2251         gcc_cv_as_hidden=no
2252       else
2253         gcc_cv_as_hidden=yes
2254       fi
2255     else
2256       # Assume bug is present if objdump is missing.
2257       gcc_cv_as_hidden=no
2258     fi
2259     ;;
2260   *)
2261     gcc_cv_as_hidden=yes
2262     ;;
2263 esac])
2264 case "${target}" in
2265   *-*-darwin*)
2266     # Darwin as has some visibility support, though with a different syntax.
2267     gcc_cv_as_hidden=yes
2268     ;;
2269 esac
2270
2271 # gnu_indirect_function type is an extension proposed at
2272 # http://groups.google/com/group/generic-abi/files. It allows dynamic runtime
2273 # selection of function implementation
2274 AC_ARG_ENABLE(gnu-indirect-function,
2275  [AS_HELP_STRING([--enable-gnu-indirect-function],
2276                  [enable the use of the @gnu_indirect_function to glibc systems])],
2277  [case $enable_gnu_indirect_function in
2278     yes | no) ;;
2279     *) AC_MSG_ERROR(['$enable_gnu_indirect_function' is an invalid value for --enable-gnu-indirect-function.
2280 Valid choices are 'yes' and 'no'.]) ;;
2281   esac],
2282  [enable_gnu_indirect_function="$default_gnu_indirect_function"])
2283 if test x$enable_gnu_indirect_function = xyes; then
2284   AC_DEFINE(HAVE_GNU_INDIRECT_FUNCTION, 1,
2285    [Define if your system supports gnu indirect functions.])
2286 fi
2287
2288 changequote(,)dnl
2289 if test $in_tree_ld != yes ; then
2290   ld_ver=`$gcc_cv_ld --version 2>/dev/null | sed 1q`
2291   if echo "$ld_ver" | grep GNU > /dev/null; then
2292     if test x"$ld_is_gold" = xyes; then
2293       # GNU gold --version looks like this:
2294       #
2295       # GNU gold (GNU Binutils 2.21.51.20110225) 1.11
2296       #
2297       # We extract the binutils version which is more familiar and specific
2298       # than the gold version.
2299       ld_vers=`echo $ld_ver | sed -n \
2300           -e 's,^[^)]*[  ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
2301     else
2302       # GNU ld --version looks like this:
2303       #
2304       # GNU ld (GNU Binutils) 2.21.51.20110225
2305       ld_vers=`echo $ld_ver | sed -n \
2306           -e 's,^.*[     ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
2307     fi
2308     ld_date=`echo $ld_ver | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
2309     ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
2310     ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
2311     ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
2312   else
2313     case "${target}" in
2314       *-*-solaris2*)
2315         # See acinclude.m4 (gcc_SUN_LD_VERSION) for the version number
2316         # format.
2317         #
2318         # Don't reuse gcc_gv_sun_ld_vers_* in case a linker other than
2319         # /usr/ccs/bin/ld has been configured.
2320         ld_ver=`$gcc_cv_ld -V 2>&1`
2321         if echo "$ld_ver" | grep 'Solaris Link Editors' > /dev/null; then
2322           ld_vers=`echo $ld_ver | sed -n \
2323             -e 's,^.*: 5\.[0-9][0-9]*-\([0-9]\.[0-9][0-9]*\).*$,\1,p'`
2324           ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
2325           ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
2326         fi
2327         ;;
2328     esac
2329   fi
2330 fi
2331 changequote([,])dnl
2332
2333 AC_CACHE_CHECK(linker for .hidden support, gcc_cv_ld_hidden,
2334 [[if test $in_tree_ld = yes ; then
2335   gcc_cv_ld_hidden=no
2336   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 \
2337      && test $in_tree_ld_is_elf = yes; then
2338      gcc_cv_ld_hidden=yes
2339   fi
2340 else
2341   gcc_cv_ld_hidden=yes
2342   if test x"$ld_is_gold" = xyes; then
2343     :
2344   elif echo "$ld_ver" | grep GNU > /dev/null; then
2345     if test 0"$ld_date" -lt 20020404; then
2346       if test -n "$ld_date"; then
2347         # If there was date string, but was earlier than 2002-04-04, fail
2348         gcc_cv_ld_hidden=no
2349       elif test -z "$ld_vers"; then
2350         # If there was no date string nor ld version number, something is wrong
2351         gcc_cv_ld_hidden=no
2352       else
2353         test -z "$ld_vers_patch" && ld_vers_patch=0
2354         if test "$ld_vers_major" -lt 2; then
2355           gcc_cv_ld_hidden=no
2356         elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 12; then
2357           gcc_cv_ld_hidden="no"
2358         elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 12 -a "$ld_vers_patch" -eq 0; then
2359           gcc_cv_ld_hidden=no
2360         fi
2361       fi
2362     fi
2363   else
2364     case "${target}" in
2365       *-*-darwin*)
2366         # Darwin ld has some visibility support.
2367         gcc_cv_ld_hidden=yes
2368         ;;
2369       hppa64*-*-hpux* | ia64*-*-hpux*)
2370         gcc_cv_ld_hidden=yes
2371         ;;
2372       *-*-solaris2.8*)
2373         # .hidden support was backported to Solaris 8, starting with ld
2374         # version 1.276.
2375         if test "$ld_vers_minor" -ge 276; then
2376           gcc_cv_ld_hidden=yes
2377         else
2378           gcc_cv_ld_hidden=no
2379         fi
2380         ;;
2381       *-*-solaris2.9* | *-*-solaris2.1[0-9]*)
2382         # Support for .hidden in Sun ld appeared in Solaris 9 FCS, but
2383         # .symbolic was only added in Solaris 9 12/02.
2384         gcc_cv_ld_hidden=yes
2385         ;;
2386       *)
2387         gcc_cv_ld_hidden=no
2388         ;;
2389     esac
2390   fi
2391 fi]])
2392 libgcc_visibility=no
2393 AC_SUBST(libgcc_visibility)
2394 GCC_TARGET_TEMPLATE([HAVE_GAS_HIDDEN])
2395 if test $gcc_cv_as_hidden = yes && test $gcc_cv_ld_hidden = yes; then
2396   libgcc_visibility=yes
2397   AC_DEFINE(HAVE_GAS_HIDDEN, 1,
2398   [Define if your assembler and linker support .hidden.])
2399 fi
2400
2401 AC_MSG_CHECKING(linker read-only and read-write section mixing)
2402 gcc_cv_ld_ro_rw_mix=unknown
2403 if test $in_tree_ld = yes ; then
2404   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 \
2405      && test $in_tree_ld_is_elf = yes; then
2406     gcc_cv_ld_ro_rw_mix=read-write
2407   fi
2408 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
2409   echo '.section myfoosect, "a"' > conftest1.s
2410   echo '.section myfoosect, "aw"' > conftest2.s
2411   echo '.byte 1' >> conftest2.s
2412   echo '.section myfoosect, "a"' > conftest3.s
2413   echo '.byte 0' >> conftest3.s
2414   if $gcc_cv_as -o conftest1.o conftest1.s > /dev/null 2>&1 \
2415      && $gcc_cv_as -o conftest2.o conftest2.s > /dev/null 2>&1 \
2416      && $gcc_cv_as -o conftest3.o conftest3.s > /dev/null 2>&1 \
2417      && $gcc_cv_ld -shared -o conftest1.so conftest1.o \
2418         conftest2.o conftest3.o > /dev/null 2>&1; then
2419     gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest1.so \
2420                          | sed -e '/myfoosect/!d' -e N`
2421     if echo "$gcc_cv_ld_ro_rw_mix" | grep CONTENTS > /dev/null; then
2422       if echo "$gcc_cv_ld_ro_rw_mix" | grep READONLY > /dev/null; then
2423         gcc_cv_ld_ro_rw_mix=read-only
2424       else
2425         gcc_cv_ld_ro_rw_mix=read-write
2426       fi
2427     fi
2428   fi
2429 changequote(,)dnl
2430   rm -f conftest.* conftest[123].*
2431 changequote([,])dnl
2432 fi
2433 if test x$gcc_cv_ld_ro_rw_mix = xread-write; then
2434         AC_DEFINE(HAVE_LD_RO_RW_SECTION_MIXING, 1,
2435   [Define if your linker links a mix of read-only
2436    and read-write sections into a read-write section.])
2437 fi
2438 AC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)
2439
2440 gcc_AC_INITFINI_ARRAY
2441
2442 # Check if we have .[us]leb128, and support symbol arithmetic with it.
2443 gcc_GAS_CHECK_FEATURE([.sleb128 and .uleb128], gcc_cv_as_leb128,
2444   [elf,2,11,0],,
2445 [       .data
2446         .uleb128 L2 - L1
2447 L1:
2448         .uleb128 1280
2449         .sleb128 -1010
2450 L2:],
2451 [[# GAS versions before 2.11 do not support uleb128,
2452   # despite appearing to.
2453   # ??? There exists an elf-specific test that will crash
2454   # the assembler.  Perhaps it's better to figure out whether
2455   # arbitrary sections are supported and try the test.
2456   as_ver=`$gcc_cv_as --version 2>/dev/null | sed 1q`
2457   if echo "$as_ver" | grep GNU > /dev/null; then
2458     as_vers=`echo $as_ver | sed -n \
2459         -e 's,^.*[       ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
2460     as_major=`expr "$as_vers" : '\([0-9]*\)'`
2461     as_minor=`expr "$as_vers" : '[0-9]*\.\([0-9]*\)'`
2462     if test $as_major -eq 2 && test $as_minor -lt 11
2463     then :
2464     else gcc_cv_as_leb128=yes
2465     fi
2466   fi]],
2467   [AC_DEFINE(HAVE_AS_LEB128, 1,
2468     [Define if your assembler supports .sleb128 and .uleb128.])])
2469
2470 # Check if we have assembler support for unwind directives.
2471 gcc_GAS_CHECK_FEATURE([cfi directives], gcc_cv_as_cfi_directive,
2472   ,,
2473 [       .text
2474         .cfi_startproc
2475         .cfi_offset 0, 0
2476         .cfi_same_value 1
2477         .cfi_def_cfa 1, 2
2478         .cfi_escape 1, 2, 3, 4, 5
2479         .cfi_endproc],
2480 [case "$target" in
2481   *-*-solaris*)
2482     # If the linker used on Solaris (like Sun ld) isn't capable of merging
2483     # read-only and read-write sections, we need to make sure that the
2484     # assembler used emits read-write .eh_frame sections.
2485     if test "x$gcc_cv_ld_ro_rw_mix" != xread-write; then
2486       if test "x$gcc_cv_objdump" != x; then
2487         if $gcc_cv_objdump -h conftest.o 2>/dev/null | \
2488                 sed -e /.eh_frame/!d -e N | grep READONLY > /dev/null; then
2489           gcc_cv_as_cfi_directive=no
2490         else
2491           case "$target" in
2492             i?86-*-solaris2.1[[0-9]]* | x86_64-*-solaris2.1[[0-9]]*)
2493               # On Solaris/x86, make sure that GCC and gas agree on using
2494               # read-only .eh_frame sections for 64-bit.
2495               if $gcc_cv_as --64 -o conftest.o conftest.s > /dev/null 2>&1 && \
2496                 $gcc_cv_objdump -h conftest.o 2>/dev/null | \
2497                         sed -e /.eh_frame/!d -e N | \
2498                         grep READONLY > /dev/null; then
2499                 gcc_cv_as_cfi_directive=yes
2500               else
2501                 gcc_cv_as_cfi_directive=no
2502               fi
2503               ;;
2504             *)
2505               gcc_cv_as_cfi_directive=yes
2506               ;;
2507           esac 
2508         fi
2509       else
2510         # no objdump, err on the side of caution
2511         gcc_cv_as_cfi_directive=no
2512       fi
2513     else
2514       gcc_cv_as_cfi_directive=yes
2515     fi
2516     ;;
2517   *-*-*)
2518     gcc_cv_as_cfi_directive=yes
2519     ;;
2520 esac])
2521 if test $gcc_cv_as_cfi_directive = yes && test x$gcc_cv_objdump != x; then
2522 gcc_GAS_CHECK_FEATURE([working cfi advance], gcc_cv_as_cfi_advance_working,
2523   ,,
2524 [       .text
2525         .cfi_startproc
2526         .cfi_adjust_cfa_offset 64
2527         .skip 75040, 0
2528         .cfi_adjust_cfa_offset 128
2529         .cfi_endproc],
2530 [[
2531 if $gcc_cv_objdump -Wf conftest.o 2>/dev/null \
2532     | grep 'DW_CFA_advance_loc[24]:[    ][      ]*75040[        ]' >/dev/null; then
2533    gcc_cv_as_cfi_advance_working=yes
2534 fi
2535 ]])
2536 else
2537   # no objdump, err on the side of caution
2538   gcc_cv_as_cfi_advance_working=no
2539 fi
2540 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_DIRECTIVE)
2541 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_DIRECTIVE,
2542   [`if test $gcc_cv_as_cfi_directive = yes \
2543        && test $gcc_cv_as_cfi_advance_working = yes; then echo 1; else echo 0; fi`],
2544   [Define 0/1 if your assembler supports CFI directives.])
2545
2546 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
2547 gcc_GAS_CHECK_FEATURE([cfi personality directive],
2548   gcc_cv_as_cfi_personality_directive, ,,
2549 [       .text
2550         .cfi_startproc
2551         .cfi_personality 0, symbol
2552         .cfi_endproc])
2553 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE,
2554   [`if test $gcc_cv_as_cfi_personality_directive = yes;
2555     then echo 1; else echo 0; fi`],
2556   [Define 0/1 if your assembler supports .cfi_personality.])
2557
2558 gcc_GAS_CHECK_FEATURE([cfi sections directive],
2559   gcc_cv_as_cfi_sections_directive, ,,
2560 [       .text
2561         .cfi_sections .debug_frame, .eh_frame
2562         .cfi_startproc
2563         .cfi_endproc],
2564 [case $target_os in
2565   win32 | pe | cygwin* | mingw32* | uwin*)
2566     # Need to check that we generated the correct relocation for the
2567     # .debug_frame section.  This was fixed for binutils 2.21.
2568     gcc_cv_as_cfi_sections_directive=no
2569     if test "x$gcc_cv_objdump" != x; then
2570      if $gcc_cv_objdump -j .debug_frame -r conftest.o 2>/dev/null | \
2571         grep secrel > /dev/null; then
2572       gcc_cv_as_cfi_sections_directive=yes
2573      fi
2574     fi
2575     ;;
2576   *)
2577     gcc_cv_as_cfi_sections_directive=yes
2578     ;;
2579 esac])
2580 GCC_TARGET_TEMPLATE(HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
2581 AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_SECTIONS_DIRECTIVE,
2582   [`if test $gcc_cv_as_cfi_sections_directive = yes;
2583     then echo 1; else echo 0; fi`],
2584   [Define 0/1 if your assembler supports .cfi_sections.])
2585
2586 # GAS versions up to and including 2.11.0 may mis-optimize
2587 # .eh_frame data.
2588 gcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,
2589   [elf,2,12,0],,
2590 [       .text
2591 .LFB1:
2592         .4byte  0
2593 .L1:
2594         .4byte  0
2595 .LFE1:
2596         .section        .eh_frame,"aw",@progbits
2597 __FRAME_BEGIN__:
2598         .4byte  .LECIE1-.LSCIE1
2599 .LSCIE1:
2600         .4byte  0x0
2601         .byte   0x1
2602         .ascii "z\0"
2603         .byte   0x1
2604         .byte   0x78
2605         .byte   0x1a
2606         .byte   0x0
2607         .byte   0x4
2608         .4byte  1
2609         .p2align 1
2610 .LECIE1:
2611 .LSFDE1:
2612         .4byte  .LEFDE1-.LASFDE1
2613 .LASFDE1:
2614         .4byte  .LASFDE1-__FRAME_BEGIN__
2615         .4byte  .LFB1
2616         .4byte  .LFE1-.LFB1
2617         .byte   0x4
2618         .4byte  .LFE1-.LFB1
2619         .byte   0x4
2620         .4byte  .L1-.LFB1
2621 .LEFDE1:],
2622 [  dnl # For autoconf 2.5x, must protect trailing spaces with @&t@.
2623 cat > conftest.lit <<EOF
2624  0000 10000000 00000000 017a0001 781a0004  .........z..x...
2625  0010 01000000 12000000 18000000 00000000  ................
2626  0020 08000000 04080000 0044               .........D      @&t@
2627 EOF
2628 cat > conftest.big <<EOF
2629  0000 00000010 00000000 017a0001 781a0004  .........z..x...
2630  0010 00000001 00000012 00000018 00000000  ................
2631  0020 00000008 04000000 0844               .........D      @&t@
2632 EOF
2633   # If the assembler didn't choke, and we can objdump,
2634   # and we got the correct data, then succeed.
2635   # The text in the here-document typically retains its unix-style line
2636   # endings, while the output of objdump will use host line endings.
2637   # Therefore, use diff -b for the comparisons.
2638   if test x$gcc_cv_objdump != x \
2639   && $gcc_cv_objdump -s -j .eh_frame conftest.o 2>/dev/null \
2640      | tail -3 > conftest.got \
2641   && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \
2642     || diff -b conftest.big conftest.got > /dev/null 2>&1; }
2643   then
2644     gcc_cv_as_eh_frame=yes
2645   elif AC_TRY_COMMAND($gcc_cv_as -o conftest.o --traditional-format /dev/null); then
2646     gcc_cv_as_eh_frame=buggy
2647   else
2648     # Uh oh, what do we do now?
2649     gcc_cv_as_eh_frame=no
2650   fi])
2651
2652 if test $gcc_cv_as_eh_frame = buggy; then
2653   AC_DEFINE(USE_AS_TRADITIONAL_FORMAT, 1,
2654   [Define if your assembler mis-optimizes .eh_frame data.])
2655 fi
2656
2657 gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
2658  [elf,2,12,0], [--fatal-warnings],
2659  [.section .rodata.str, "aMS", @progbits, 1])
2660 if test $gcc_cv_as_shf_merge = no; then
2661   gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
2662     [elf,2,12,0], [--fatal-warnings],
2663     [.section .rodata.str, "aMS", %progbits, 1])
2664 fi
2665 AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
2666   [`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`],
2667 [Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
2668
2669 gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as)],
2670  gcc_cv_as_comdat_group,
2671  [elf,2,16,0], [--fatal-warnings],
2672  [.section .text,"axG",@progbits,.foo,comdat])
2673 if test $gcc_cv_as_comdat_group = yes; then
2674   gcc_cv_as_comdat_group_percent=no
2675   gcc_cv_as_comdat_group_group=no
2676 else
2677  gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as, %type)],
2678    gcc_cv_as_comdat_group_percent,
2679    [elf,2,16,0], [--fatal-warnings],
2680    [.section .text,"axG",%progbits,.foo,comdat])
2681  if test $gcc_cv_as_comdat_group_percent = yes; then
2682    gcc_cv_as_comdat_group_group=no
2683  else
2684    case "${target}" in
2685      # Sun as uses a completely different syntax.
2686      *-*-solaris2*)
2687        case "${target}" in
2688          sparc*-*-solaris2*)
2689            conftest_s='
2690                .group foo,".text%foo",#comdat
2691                .section ".text%foo", #alloc,#execinstr,#progbits
2692                .globl foo
2693              foo:
2694              '
2695            ;;
2696          i?86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
2697            conftest_s='
2698                .group foo,.text%foo,#comdat
2699                .section .text%foo, "ax", @progbits
2700                .globl  foo
2701              foo:
2702              '
2703            ;;
2704        esac
2705        gcc_GAS_CHECK_FEATURE([COMDAT group support (Sun as, .group)],
2706          gcc_cv_as_comdat_group_group,
2707          ,, [$conftest_s])
2708        ;;
2709    esac
2710  fi
2711 fi
2712 if test x"$ld_is_gold" = xyes; then
2713   comdat_group=yes
2714 elif test $in_tree_ld = yes ; then
2715   comdat_group=no
2716   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 \
2717      && test $in_tree_ld_is_elf = yes; then
2718      comdat_group=yes
2719   fi
2720 elif echo "$ld_ver" | grep GNU > /dev/null; then
2721   comdat_group=yes
2722   if test 0"$ld_date" -lt 20050308; then
2723     if test -n "$ld_date"; then
2724       # If there was date string, but was earlier than 2005-03-08, fail
2725       comdat_group=no
2726     elif test "$ld_vers_major" -lt 2; then
2727       comdat_group=no
2728     elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
2729       comdat_group=no
2730     fi
2731   fi
2732 else
2733 changequote(,)dnl
2734   case "${target}" in
2735     *-*-solaris2.1[1-9]*)
2736       comdat_group=no
2737       # Sun ld has COMDAT group support since Solaris 9, but it doesn't
2738       # interoperate with GNU as until Solaris 11 build 130, i.e. ld
2739       # version 1.688.
2740       #
2741       # If using Sun as for COMDAT group as emitted by GCC, one needs at
2742       # least ld version 1.2267.
2743       if test "$ld_vers_major" -gt 1; then
2744         comdat_group=yes
2745       elif test "x$gas_flag" = xyes && test "$ld_vers_minor" -ge 1688; then
2746         comdat_group=yes
2747       elif test "$ld_vers_minor" -ge 2267; then
2748         comdat_group=yes
2749       fi
2750       ;;
2751     *)
2752       # Assume linkers other than GNU ld don't support COMDAT group.
2753       comdat_group=no
2754       ;;
2755   esac
2756 changequote([,])dnl
2757 fi
2758 # Allow overriding the automatic COMDAT group tests above.
2759 AC_ARG_ENABLE(comdat,
2760   [AS_HELP_STRING([--enable-comdat], [enable COMDAT group support])],
2761   [comdat_group="$enable_comdat"])
2762 if test $comdat_group = no; then
2763   gcc_cv_as_comdat_group=no
2764   gcc_cv_as_comdat_group_percent=no
2765   gcc_cv_as_comdat_group_group=no
2766 fi
2767 AC_DEFINE_UNQUOTED(HAVE_COMDAT_GROUP,
2768   [`if test $gcc_cv_as_comdat_group = yes \
2769     || test $gcc_cv_as_comdat_group_percent = yes \
2770     || test $gcc_cv_as_comdat_group_group = yes; then echo 1; else echo 0; fi`],
2771 [Define 0/1 if your assembler and linker support COMDAT groups.])
2772
2773 gcc_GAS_CHECK_FEATURE([line table discriminator support],
2774  gcc_cv_as_discriminator,
2775  [2,19,51],,
2776 [       .text
2777         .file 1 "conf.c"
2778         .loc 1 1 0 discriminator 1],,
2779 [AC_DEFINE(HAVE_GAS_DISCRIMINATOR, 1,
2780   [Define if your assembler supports the .loc discriminator sub-directive.])])
2781
2782 # Thread-local storage - the check is heavily parameterized.
2783 conftest_s=
2784 tls_first_major=
2785 tls_first_minor=
2786 tls_as_opt=
2787 case "$target" in
2788 changequote(,)dnl
2789   alpha*-*-*)
2790     conftest_s='
2791         .section ".tdata","awT",@progbits
2792 foo:    .long   25
2793         .text
2794         ldq     $27,__tls_get_addr($29)         !literal!1
2795         lda     $16,foo($29)                    !tlsgd!1
2796         jsr     $26,($27),__tls_get_addr        !lituse_tlsgd!1
2797         ldq     $27,__tls_get_addr($29)         !literal!2
2798         lda     $16,foo($29)                    !tlsldm!2
2799         jsr     $26,($27),__tls_get_addr        !lituse_tlsldm!2
2800         ldq     $1,foo($29)                     !gotdtprel
2801         ldah    $2,foo($29)                     !dtprelhi
2802         lda     $3,foo($2)                      !dtprello
2803         lda     $4,foo($29)                     !dtprel
2804         ldq     $1,foo($29)                     !gottprel
2805         ldah    $2,foo($29)                     !tprelhi
2806         lda     $3,foo($2)                      !tprello
2807         lda     $4,foo($29)                     !tprel'
2808         tls_first_major=2
2809         tls_first_minor=13
2810         tls_as_opt=--fatal-warnings
2811         ;;
2812   cris-*-*|crisv32-*-*)
2813     conftest_s='
2814         .section ".tdata","awT",@progbits
2815 x:      .long   25
2816         .text
2817         move.d x:IE,$r10
2818         nop'
2819         tls_first_major=2
2820         tls_first_minor=20
2821         tls_as_opt=--fatal-warnings
2822         ;;
2823   frv*-*-*)
2824     conftest_s='
2825         .section ".tdata","awT",@progbits
2826 x:      .long   25
2827         .text
2828         call    #gettlsoff(x)'
2829         tls_first_major=2
2830         tls_first_minor=14
2831         ;;
2832   hppa*-*-linux*)
2833     conftest_s='
2834 t1:     .reg    %r20
2835 t2:     .reg    %r21
2836 gp:     .reg    %r19
2837         .section ".tdata","awT",@progbits
2838 foo:    .long   25
2839         .text
2840         .align  4
2841         addil LT%foo-$tls_gdidx$,gp
2842         ldo RT%foo-$tls_gdidx$(%r1),%arg0
2843         b __tls_get_addr
2844         nop             
2845         addil LT%foo-$tls_ldidx$,gp
2846         b __tls_get_addr
2847         ldo RT%foo-$tls_ldidx$(%r1),%arg0
2848         addil LR%foo-$tls_dtpoff$,%ret0
2849         ldo RR%foo-$tls_dtpoff$(%r1),%t1
2850         mfctl %cr27,%t1                 
2851         addil LT%foo-$tls_ieoff$,gp
2852         ldw RT%foo-$tls_ieoff$(%r1),%t2
2853         add %t1,%t2,%t3                 
2854         mfctl %cr27,%t1                 
2855         addil LR%foo-$tls_leoff$,%t1
2856         ldo RR%foo-$tls_leoff$(%r1),%t2'
2857         tls_first_major=2
2858         tls_first_minor=15
2859         tls_as_opt=--fatal-warnings
2860         ;;
2861   arm*-*-*)
2862     conftest_s='
2863         .section ".tdata","awT",%progbits
2864 foo:    .long   25
2865         .text
2866 .word foo(gottpoff)
2867 .word foo(tpoff)
2868 .word foo(tlsgd)
2869 .word foo(tlsldm)
2870 .word foo(tlsldo)'
2871         tls_first_major=2
2872         tls_first_minor=17
2873         ;;
2874   i[34567]86-*-* | x86_64-*-solaris2.1[0-9]*)
2875     case "$target" in
2876       i[34567]86-*-solaris2.*)
2877         on_solaris=yes
2878         tga_func=___tls_get_addr
2879         ;;
2880       x86_64-*-solaris2.1[0-9]*)
2881         on_solaris=yes
2882         tga_func=__tls_get_addr
2883         ;;
2884       *)
2885         on_solaris=no
2886         ;;
2887     esac
2888     if test x$on_solaris = xyes && test x$gas_flag = xno; then
2889       conftest_s='
2890         .section .tdata,"awt",@progbits'
2891       tls_first_major=0
2892       tls_first_minor=0
2893 changequote([,])dnl
2894       AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
2895 [Define to the flag used to mark TLS sections if the default (`T') doesn't work.])
2896 changequote(,)dnl
2897     else
2898       conftest_s='
2899         .section ".tdata","awT",@progbits'
2900       tls_first_major=2
2901       tls_first_minor=14
2902       tls_as_opt="--fatal-warnings"
2903     fi
2904     conftest_s="$conftest_s
2905 foo:    .long   25
2906         .text
2907         movl    %gs:0, %eax
2908         leal    foo@tlsgd(,%ebx,1), %eax
2909         leal    foo@tlsldm(%ebx), %eax
2910         leal    foo@dtpoff(%eax), %edx
2911         movl    foo@gottpoff(%ebx), %eax
2912         subl    foo@gottpoff(%ebx), %eax
2913         addl    foo@gotntpoff(%ebx), %eax
2914         movl    foo@indntpoff, %eax
2915         movl    \$foo@tpoff, %eax
2916         subl    \$foo@tpoff, %eax
2917         leal    foo@ntpoff(%ecx), %eax"
2918     ;;
2919   x86_64-*-*)
2920     conftest_s='
2921         .section ".tdata","awT",@progbits
2922 foo:    .long   25
2923         .text
2924         movq    %fs:0, %rax
2925         leaq    foo@TLSGD(%rip), %rdi
2926         leaq    foo@TLSLD(%rip), %rdi
2927         leaq    foo@DTPOFF(%rax), %rdx
2928         movq    foo@GOTTPOFF(%rip), %rax
2929         movq    $foo@TPOFF, %rax'
2930         tls_first_major=2
2931         tls_first_minor=14
2932         tls_as_opt=--fatal-warnings
2933         ;;
2934   ia64-*-*)
2935     conftest_s='
2936         .section ".tdata","awT",@progbits
2937 foo:    data8   25
2938         .text
2939         addl    r16 = @ltoff(@dtpmod(foo#)), gp
2940         addl    r17 = @ltoff(@dtprel(foo#)), gp
2941         addl    r18 = @ltoff(@tprel(foo#)), gp
2942         addl    r19 = @dtprel(foo#), gp
2943         adds    r21 = @dtprel(foo#), r13
2944         movl    r23 = @dtprel(foo#)
2945         addl    r20 = @tprel(foo#), gp
2946         adds    r22 = @tprel(foo#), r13
2947         movl    r24 = @tprel(foo#)'
2948         tls_first_major=2
2949         tls_first_minor=13
2950         tls_as_opt=--fatal-warnings
2951         ;;
2952   mips*-*-*)
2953     conftest_s='
2954         .section .tdata,"awT",@progbits
2955 x:
2956         .word 2
2957         .text
2958         addiu $4, $28, %tlsgd(x)
2959         addiu $4, $28, %tlsldm(x)
2960         lui $4, %dtprel_hi(x)
2961         addiu $4, $4, %dtprel_lo(x)
2962         lw $4, %gottprel(x)($28)
2963         lui $4, %tprel_hi(x)
2964         addiu $4, $4, %tprel_lo(x)'
2965         tls_first_major=2
2966         tls_first_minor=16
2967         tls_as_opt='-32 --fatal-warnings'
2968         ;;
2969   m68k-*-*)
2970     conftest_s='
2971         .section .tdata,"awT",@progbits
2972 x:
2973         .word 2
2974         .text
2975 foo:
2976         move.l x@TLSGD(%a5),%a0
2977         move.l x@TLSLDM(%a5),%a0
2978         move.l x@TLSLDO(%a5),%a0
2979         move.l x@TLSIE(%a5),%a0
2980         move.l x@TLSLE(%a5),%a0'
2981         tls_first_major=2
2982         tls_first_minor=19
2983         tls_as_opt='--fatal-warnings'
2984         ;;
2985   powerpc-*-*)
2986     conftest_s='
2987         .section ".tdata","awT",@progbits
2988         .align 2
2989 ld0:    .space 4
2990 ld1:    .space 4
2991 x1:     .space 4
2992 x2:     .space 4
2993 x3:     .space 4
2994         .text
2995         addi 3,31,ld0@got@tlsgd
2996         bl __tls_get_addr
2997         addi 3,31,x1@got@tlsld
2998         bl __tls_get_addr
2999         addi 9,3,x1@dtprel
3000         addis 9,3,x2@dtprel@ha
3001         addi 9,9,x2@dtprel@l
3002         lwz 9,x3@got@tprel(31)
3003         add 9,9,x@tls
3004         addi 9,2,x1@tprel
3005         addis 9,2,x2@tprel@ha
3006         addi 9,9,x2@tprel@l'
3007         tls_first_major=2
3008         tls_first_minor=14
3009         tls_as_opt="-a32 --fatal-warnings"
3010         ;;
3011   powerpc64-*-*)
3012     conftest_s='
3013         .section ".tdata","awT",@progbits
3014         .align 3
3015 ld0:    .space 8
3016 ld1:    .space 8
3017 x1:     .space 8
3018 x2:     .space 8
3019 x3:     .space 8
3020         .text
3021         addi 3,2,ld0@got@tlsgd
3022         bl .__tls_get_addr
3023         nop
3024         addi 3,2,ld1@toc
3025         bl .__tls_get_addr
3026         nop
3027         addi 3,2,x1@got@tlsld
3028         bl .__tls_get_addr
3029         nop
3030         addi 9,3,x1@dtprel
3031         bl .__tls_get_addr
3032         nop
3033         addis 9,3,x2@dtprel@ha
3034         addi 9,9,x2@dtprel@l
3035         bl .__tls_get_addr
3036         nop
3037         ld 9,x3@got@dtprel(2)
3038         add 9,9,3
3039         bl .__tls_get_addr
3040         nop'
3041         tls_first_major=2
3042         tls_first_minor=14
3043         tls_as_opt="-a64 --fatal-warnings"
3044         ;;
3045   s390-*-*)
3046     conftest_s='
3047         .section ".tdata","awT",@progbits
3048 foo:    .long   25
3049         .text
3050         .long   foo@TLSGD
3051         .long   foo@TLSLDM
3052         .long   foo@DTPOFF
3053         .long   foo@NTPOFF
3054         .long   foo@GOTNTPOFF
3055         .long   foo@INDNTPOFF
3056         l       %r1,foo@GOTNTPOFF(%r12)
3057         l       %r1,0(%r1):tls_load:foo
3058         bas     %r14,0(%r1,%r13):tls_gdcall:foo
3059         bas     %r14,0(%r1,%r13):tls_ldcall:foo'
3060         tls_first_major=2
3061         tls_first_minor=14
3062         tls_as_opt="-m31 --fatal-warnings"
3063         ;;
3064   s390x-*-*)
3065     conftest_s='
3066         .section ".tdata","awT",@progbits
3067 foo:    .long   25
3068         .text
3069         .quad   foo@TLSGD
3070         .quad   foo@TLSLDM
3071         .quad   foo@DTPOFF
3072         .quad   foo@NTPOFF
3073         .quad   foo@GOTNTPOFF
3074         lg      %r1,foo@GOTNTPOFF(%r12)
3075         larl    %r1,foo@INDNTPOFF
3076         brasl   %r14,__tls_get_offset@PLT:tls_gdcall:foo
3077         brasl   %r14,__tls_get_offset@PLT:tls_ldcall:foo'
3078         tls_first_major=2
3079         tls_first_minor=14
3080         tls_as_opt="-m64 -Aesame --fatal-warnings"
3081         ;;
3082   sh-*-* | sh[34]-*-*)
3083     conftest_s='
3084         .section ".tdata","awT",@progbits
3085 foo:    .long   25
3086         .text
3087         .long   foo@TLSGD
3088         .long   foo@TLSLDM
3089         .long   foo@DTPOFF
3090         .long   foo@GOTTPOFF
3091         .long   foo@TPOFF'
3092         tls_first_major=2
3093         tls_first_minor=13
3094         tls_as_opt=--fatal-warnings
3095         ;;
3096   sparc*-*-*)
3097     case "$target" in
3098       sparc*-sun-solaris2.*)
3099         on_solaris=yes
3100         tga_func=__tls_get_addr
3101         ;;
3102       *)
3103         on_solaris=no
3104         ;;
3105     esac
3106     if test x$on_solaris = xyes && test x$gas_flag = xno; then
3107       conftest_s='
3108         .section ".tdata",#alloc,#write,#tls'
3109         tls_first_major=0
3110         tls_first_minor=0
3111     else
3112       conftest_s='
3113         .section ".tdata","awT",@progbits'
3114         tls_first_major=2
3115         tls_first_minor=14
3116         tls_as_opt="-32 --fatal-warnings"
3117     fi
3118     conftest_s="$conftest_s
3119 foo:    .long   25
3120         .text
3121         sethi   %tgd_hi22(foo), %o0
3122         add     %o0, %tgd_lo10(foo), %o1
3123         add     %l7, %o1, %o0, %tgd_add(foo)
3124         call    __tls_get_addr, %tgd_call(foo)
3125         sethi   %tldm_hi22(foo), %l1
3126         add     %l1, %tldm_lo10(foo), %l2
3127         add     %l7, %l2, %o0, %tldm_add(foo)
3128         call    __tls_get_addr, %tldm_call(foo)
3129         sethi   %tldo_hix22(foo), %l3
3130         xor     %l3, %tldo_lox10(foo), %l4
3131         add     %o0, %l4, %l5, %tldo_add(foo)
3132         sethi   %tie_hi22(foo), %o3
3133         add     %o3, %tie_lo10(foo), %o3
3134         ld      [%l7 + %o3], %o2, %tie_ld(foo)
3135         add     %g7, %o2, %o4, %tie_add(foo)
3136         sethi   %tle_hix22(foo), %l1
3137         xor     %l1, %tle_lox10(foo), %o5
3138         ld      [%g7 + %o5], %o1"
3139         ;;
3140   tilepro*-*-*)
3141       conftest_s='
3142         .section ".tdata","awT",@progbits
3143 foo:    .long   25
3144         .text
3145         addli   r0, zero, tls_gd(foo)
3146         auli    r0, zero, tls_gd_ha16(foo)
3147         addli   r0, r0, tls_gd_lo16(foo)
3148         jal     __tls_get_addr
3149         addli   r0, zero, tls_ie(foo)
3150         auli    r0, r0, tls_ie_ha16(foo)
3151         addli   r0, r0, tls_ie_lo16(foo)'
3152         tls_first_major=2
3153         tls_first_minor=22
3154         tls_as_opt="--fatal-warnings"
3155         ;;
3156   tilegx*-*-*)
3157       conftest_s='
3158         .section ".tdata","awT",@progbits
3159 foo:    .long   25
3160         .text
3161         shl16insli r0, zero, hw0_last_tls_gd(foo)
3162         shl16insli r0, zero, hw1_last_tls_gd(foo)
3163         shl16insli r0, r0,   hw0_tls_gd(foo)
3164         jal        __tls_get_addr
3165         shl16insli r0, zero, hw1_last_tls_ie(foo)
3166         shl16insli r0, r0,   hw0_tls_ie(foo)'
3167         tls_first_major=2
3168         tls_first_minor=22
3169         tls_as_opt="--fatal-warnings"
3170         ;;
3171   xtensa*-*-*)
3172     conftest_s='
3173         .section ".tdata","awT",@progbits
3174 foo:    .long   25
3175         .text
3176         movi    a8, foo@TLSFUNC
3177         movi    a10, foo@TLSARG
3178         callx8.tls a8, foo@TLSCALL'
3179         tls_first_major=2
3180         tls_first_minor=19
3181         ;;
3182 changequote([,])dnl
3183 esac
3184 set_have_as_tls=no
3185 if test "x$enable_tls" = xno ; then
3186   : # TLS explicitly disabled.
3187 elif test "x$enable_tls" = xyes ; then
3188   set_have_as_tls=yes # TLS explicitly enabled.
3189 elif test -z "$tls_first_major"; then
3190   : # If we don't have a check, assume no support.
3191 else
3192   gcc_GAS_CHECK_FEATURE(thread-local storage support, gcc_cv_as_tls,
3193   [$tls_first_major,$tls_first_minor,0], [$tls_as_opt], [$conftest_s],,
3194   [set_have_as_tls=yes])
3195 fi
3196 case "$target" in
3197   *-*-irix6*)
3198     # IRIX 6.5 rld and libc.so lack TLS support, so even if gas and gld
3199     # with TLS support are in use, native TLS cannot work.
3200     set_have_as_tls=no
3201     ;;
3202   *-*-osf*)
3203     # Tru64 UNIX loader and libc.so lack TLS support, so even if gas and
3204     # gld with TLS support are in use, native TLS cannot work.
3205     set_have_as_tls=no
3206     ;;
3207   # TLS was introduced in the Solaris 9 FCS release and backported to
3208   # Solaris 8 patches.  Support for GNU-style TLS on x86 was only
3209   # introduced in Solaris 9 4/04, replacing the earlier Sun style that Sun
3210   # ld and GCC don't support any longer.
3211   *-*-solaris2.*)
3212     AC_MSG_CHECKING(linker and ld.so.1 TLS support)
3213     ld_tls_support=no
3214     # Check ld and ld.so.1 TLS support.
3215     if echo "$ld_ver" | grep GNU > /dev/null; then
3216       # Assume all interesting versions of GNU ld have TLS support.
3217       # FIXME: still need ld.so.1 support, i.e. ld version checks below.
3218       ld_tls_support=yes
3219     else
3220       case "$target" in
3221         # Solaris 8/x86 ld has GNU style TLS support since version 1.280.
3222         i?86-*-solaris2.8)
3223           min_tls_ld_vers_minor=280
3224           ;;
3225         # Solaris 8/SPARC ld has TLS support since version 1.272.
3226         sparc*-*-solaris2.8)
3227           min_tls_ld_vers_minor=272
3228           ;;
3229         # Solaris 9/x86 ld has GNU style TLS support since version 1.374.
3230         i?86-*-solaris2.9)
3231           min_tls_ld_vers_minor=374
3232           ;;
3233         # Solaris 9/SPARC and Solaris 10+ ld have TLS support since FCS.
3234         sparc*-*-solaris2.9 | *-*-solaris2.1[[0-9]]*)
3235           min_tls_ld_vers_minor=343
3236           ;;
3237       esac
3238       if test "$ld_vers_major" -gt 1 || \
3239         test "$ld_vers_minor" -ge "$min_tls_ld_vers_minor"; then
3240         ld_tls_support=yes
3241       else
3242         set_have_as_tls=no
3243       fi
3244     fi
3245     AC_MSG_RESULT($ld_tls_support)
3246
3247     save_LIBS="$LIBS"
3248     save_LDFLAGS="$LDFLAGS"
3249     LIBS=
3250     LDFLAGS=
3251
3252     AC_MSG_CHECKING(alternate thread library)
3253     case "$target" in
3254       # TLS support was backported to Solaris 8 patches, but only lives in
3255       # the alternate thread library which became the default in Solaris 9. 
3256       # We want to always use that, irrespective of TLS support.
3257       *-*-solaris2.8)
3258         # Take multilib subdir into account.  There's no spec to handle
3259         # this.  The 64 symlink exists since Solaris 8.
3260         lwp_dir=/usr/lib/lwp
3261         lwp_spec="-L$lwp_dir%{m64:/64} -R$lwp_dir%{m64:/64}"
3262         LDFLAGS="-L$lwp_dir -R$lwp_dir"
3263         ;;
3264       *-*-solaris2*)
3265         lwp_dir="none"
3266         lwp_spec=""
3267         ;;
3268     esac    
3269     # Always define LIB_THREAD_LDFLAGS_SPEC, even without TLS support.
3270     AC_DEFINE_UNQUOTED(LIB_THREAD_LDFLAGS_SPEC, "$lwp_spec",
3271         [Define to the linker flags to use for -pthread.])
3272     AC_MSG_RESULT($lwp_dir)
3273
3274     AC_MSG_CHECKING(library containing $tga_func)
3275     # Before Solaris 10, __tls_get_addr (SPARC/x64) resp. ___tls_get_addr
3276     # (32-bit x86) only lived in libthread, so check for that.  Keep
3277     # set_have_as_tls if found, disable if not.
3278     AC_SEARCH_LIBS([$tga_func], [thread],, [set_have_as_tls=no])
3279     # Clear LIBS if we cannot support TLS.
3280     if test $set_have_as_tls = no; then
3281       LIBS=
3282     fi
3283     # Even without TLS support on Solaris 8, explicitly link with libthread
3284     # to guarantee that the alternate thread library is used.
3285     case "$target" in
3286       *-*-solaris2.8)
3287         LIBS=-lthread
3288         ;;
3289     esac
3290     # Always define LIB_TLS_SPEC, even without TLS support.
3291     AC_DEFINE_UNQUOTED(LIB_TLS_SPEC, "$LIBS",
3292         [Define to the library containing __tls_get_addr/___tls_get_addr.])
3293     AC_MSG_RESULT($LIBS)
3294
3295     LIBS="$save_LIBS"
3296     LDFLAGS="$save_LDFLAGS"
3297     ;;
3298 esac
3299 if test $set_have_as_tls = yes ; then
3300   AC_DEFINE(HAVE_AS_TLS, 1,
3301             [Define if your assembler and linker support thread-local storage.])
3302 fi
3303
3304 # Target-specific assembler checks.
3305
3306 AC_MSG_CHECKING(linker -Bstatic/-Bdynamic option)
3307 gcc_cv_ld_static_dynamic=no
3308 gcc_cv_ld_static_option='-Bstatic'
3309 gcc_cv_ld_dynamic_option='-Bdynamic'
3310 if test $in_tree_ld = yes ; then
3311   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
3312     gcc_cv_ld_static_dynamic=yes
3313   fi
3314 elif test x$gcc_cv_ld != x; then
3315   # Check if linker supports -Bstatic/-Bdynamic option
3316   if $gcc_cv_ld --help 2>/dev/null | grep -- -Bstatic > /dev/null \
3317      && $gcc_cv_ld --help 2>/dev/null | grep -- -Bdynamic > /dev/null; then
3318       gcc_cv_ld_static_dynamic=yes
3319   else
3320     case "$target" in
3321       # Tru64 UNIX support -noso/-so_archive instead of -Bstatic/-Bdynamic.
3322       alpha*-dec-osf*)
3323         gcc_cv_ld_static_dynamic=yes
3324         gcc_cv_ld_static_option="-noso"
3325         gcc_cv_ld_dynamic_option="-so_archive"
3326         ;;
3327       # HP-UX ld uses -a flags to select between shared and archive.
3328       *-*-hpux*)
3329         if test x"$gnu_ld" = xno; then
3330           gcc_cv_ld_static_dynamic=yes
3331           gcc_cv_ld_static_option="-aarchive_shared"
3332           gcc_cv_ld_dynamic_option="-adefault"
3333         fi
3334         ;;
3335       # IRIX 6 ld supports -Bstatic/-Bdynamic.
3336       mips-sgi-irix6*)
3337         gcc_cv_ld_static_dynamic=yes
3338         ;;
3339       # Solaris 2 ld always supports -Bstatic/-Bdynamic.
3340       *-*-solaris2*)
3341         gcc_cv_ld_static_dynamic=yes
3342         ;;
3343     esac
3344   fi
3345 fi
3346 if test x"$gcc_cv_ld_static_dynamic" = xyes; then
3347         AC_DEFINE(HAVE_LD_STATIC_DYNAMIC, 1,
3348 [Define if your linker supports -Bstatic/-Bdynamic or equivalent options.])
3349         AC_DEFINE_UNQUOTED(LD_STATIC_OPTION, "$gcc_cv_ld_static_option",
3350 [Define to the linker option to disable use of shared objects.])
3351         AC_DEFINE_UNQUOTED(LD_DYNAMIC_OPTION, "$gcc_cv_ld_dynamic_option",
3352 [Define to the linker option to enable use of shared objects.])
3353 fi
3354 AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
3355
3356 if test x"$demangler_in_ld" = xyes; then
3357   AC_MSG_CHECKING(linker --demangle support)
3358   gcc_cv_ld_demangle=no
3359   if test $in_tree_ld = yes; then
3360     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 \
3361       gcc_cv_ld_demangle=yes
3362     fi
3363   elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
3364     # Check if the GNU linker supports --demangle option
3365     if $gcc_cv_ld --help 2>/dev/null | grep no-demangle > /dev/null; then
3366       gcc_cv_ld_demangle=yes
3367     fi
3368   fi
3369   if test x"$gcc_cv_ld_demangle" = xyes; then
3370     AC_DEFINE(HAVE_LD_DEMANGLE, 1,
3371 [Define if your linker supports --demangle option.])
3372   fi
3373   AC_MSG_RESULT($gcc_cv_ld_demangle)
3374 fi
3375
3376 AC_MSG_CHECKING(linker plugin support)
3377 gcc_cv_lto_plugin=0
3378 if test -f liblto_plugin.la; then
3379   save_ld_ver="$ld_ver"
3380   save_ld_vers_major="$ld_vers_major"
3381   save_ld_vers_minor="$ld_vers_minor"
3382   save_ld_is_gold="$ld_is_gold"
3383
3384   ld_is_gold=no
3385
3386   if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" = x"$gcc_cv_ld"; then
3387     ld_ver="GNU ld"
3388     # FIXME: ld_is_gold?
3389     ld_vers_major="$gcc_cv_gld_major_version"
3390     ld_vers_minor="$gcc_cv_gld_minor_version"
3391   else
3392     # Determine plugin linker version.
3393     # FIXME: Partial duplicate from above, generalize.
3394 changequote(,)dnl
3395     ld_ver=`$ORIGINAL_PLUGIN_LD_FOR_TARGET --version 2>/dev/null | sed 1q`
3396     if echo "$ld_ver" | grep GNU > /dev/null; then
3397       if echo "$ld_ver" | grep "GNU gold" > /dev/null; then
3398         ld_is_gold=yes
3399         ld_vers=`echo $ld_ver | sed -n \
3400             -e 's,^[^)]*[        ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
3401       else
3402         ld_vers=`echo $ld_ver | sed -n \
3403             -e 's,^.*[   ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
3404       fi
3405       ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
3406       ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
3407     fi
3408 changequote([,])dnl
3409   fi
3410
3411   # Determine plugin support.
3412   if echo "$ld_ver" | grep GNU > /dev/null; then
3413     # Require GNU ld or gold 2.21+ for plugin support by default.
3414     if test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 21; then
3415       gcc_cv_lto_plugin=2
3416     # Allow -fuse-linker-plugin to enable plugin support in GNU gold 2.20.
3417     elif test "$ld_is_gold" = yes -a "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 20; then
3418       gcc_cv_lto_plugin=1
3419     fi
3420   fi
3421
3422   ld_ver="$save_ld_ver"
3423   ld_vers_major="$save_ld_vers_major"
3424   ld_vers_minor="$save_ld_vers_minor"
3425   ld_is_gold="$save_ld_is_gold"
3426 fi
3427 AC_DEFINE_UNQUOTED(HAVE_LTO_PLUGIN, $gcc_cv_lto_plugin,
3428   [Define to the level of your linker's plugin support.])
3429 AC_MSG_RESULT($gcc_cv_lto_plugin)
3430
3431 case "$target" in
3432   # All TARGET_ABI_OSF targets.
3433   alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
3434     gcc_GAS_CHECK_FEATURE([explicit relocation support],
3435         gcc_cv_as_alpha_explicit_relocs, [2,12,0],,
3436 [       .set nomacro
3437         .text
3438         extbl   $3, $2, $3      !lituse_bytoff!1
3439         ldq     $2, a($29)      !literal!1
3440         ldq     $4, b($29)      !literal!2
3441         ldq_u   $3, 0($2)       !lituse_base!1
3442         ldq     $27, f($29)     !literal!5
3443         jsr     $26, ($27), f   !lituse_jsr!5
3444         ldah    $29, 0($26)     !gpdisp!3
3445         lda     $0, c($29)      !gprel
3446         ldah    $1, d($29)      !gprelhigh
3447         lda     $1, d($1)       !gprellow
3448         lda     $29, 0($29)     !gpdisp!3],,
3449     [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
3450   [Define if your assembler supports explicit relocations.])])
3451     gcc_GAS_CHECK_FEATURE([jsrdirect relocation support],
3452         gcc_cv_as_alpha_jsrdirect_relocs, [2,16,90],,
3453 [       .set nomacro
3454         .text
3455         ldq     $27, a($29)     !literal!1
3456         jsr     $26, ($27), a   !lituse_jsrdirect!1],,
3457     [AC_DEFINE(HAVE_AS_JSRDIRECT_RELOCS, 1,
3458   [Define if your assembler supports the lituse_jsrdirect relocation.])])
3459     ;;
3460
3461   cris-*-*)
3462     gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
3463       gcc_cv_as_cris_no_mul_bug,[2,15,91],
3464       [-no-mul-bug-abort], [.text],,
3465       [AC_DEFINE(HAVE_AS_NO_MUL_BUG_ABORT_OPTION, 1,
3466                 [Define if your assembler supports the -no-mul-bug-abort option.])])
3467     ;;
3468
3469   sparc*-*-*)
3470     gcc_GAS_CHECK_FEATURE([.register], gcc_cv_as_sparc_register_op,,,
3471       [.register %g2, #scratch],,
3472       [AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
3473                 [Define if your assembler supports .register.])])
3474
3475     gcc_GAS_CHECK_FEATURE([-relax option], gcc_cv_as_sparc_relax,,
3476       [-relax], [.text],,
3477       [AC_DEFINE(HAVE_AS_RELAX_OPTION, 1,
3478                 [Define if your assembler supports -relax option.])])
3479
3480     gcc_GAS_CHECK_FEATURE([GOTDATA_OP relocs],
3481       gcc_cv_as_sparc_gotdata_op,,
3482       [-K PIC],
3483 [.text
3484 .align 4
3485 foo:
3486         nop
3487 bar:
3488         sethi %gdop_hix22(foo), %g1
3489         xor    %g1, %gdop_lox10(foo), %g1
3490         ld    [[%l7 + %g1]], %g2, %gdop(foo)],
3491       [if test x$gcc_cv_ld != x \
3492        && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
3493          if test x$gcc_cv_objdump != x; then
3494            if $gcc_cv_objdump -s -j .text conftest 2> /dev/null \
3495               | grep ' 03000004 82186004 c405c001'> /dev/null 2>&1; then
3496                gcc_cv_as_sparc_gotdata_op=no
3497            else
3498                gcc_cv_as_sparc_gotdata_op=yes
3499            fi
3500          fi
3501        fi
3502        rm -f conftest],
3503       [AC_DEFINE(HAVE_AS_SPARC_GOTDATA_OP, 1,
3504                 [Define if your assembler and linker support GOTDATA_OP relocs.])])
3505
3506     gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs],
3507       gcc_cv_as_sparc_ua_pcrel,,
3508       [-K PIC],
3509 [.text
3510 foo:
3511         nop
3512 .data
3513 .align 4
3514 .byte 0
3515 .uaword %r_disp32(foo)],
3516       [if test x$gcc_cv_ld != x \
3517        && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
3518          gcc_cv_as_sparc_ua_pcrel=yes
3519        fi
3520        rm -f conftest],
3521       [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
3522                 [Define if your assembler and linker support unaligned PC relative relocs.])
3523
3524       gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs against hidden symbols],
3525         gcc_cv_as_sparc_ua_pcrel_hidden,,
3526         [-K PIC],
3527 [.data
3528 .align 4
3529 .byte 0x31
3530 .uaword %r_disp32(foo)
3531 .byte 0x32, 0x33, 0x34
3532 .global foo
3533 .hidden foo
3534 foo:
3535 .skip 4],
3536         [if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
3537          && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
3538          && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
3539             | grep ' 31000000 07323334' > /dev/null 2>&1; then
3540             if $gcc_cv_objdump -R conftest 2> /dev/null \
3541                | grep 'DISP32' > /dev/null 2>&1; then
3542                 :
3543             else
3544                 gcc_cv_as_sparc_ua_pcrel_hidden=yes
3545             fi
3546          fi
3547          rm -f conftest],
3548          [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL_HIDDEN, 1,
3549                    [Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])])
3550     ]) # unaligned pcrel relocs
3551
3552     gcc_GAS_CHECK_FEATURE([offsetable %lo()],
3553       gcc_cv_as_sparc_offsetable_lo10,,
3554       [-xarch=v9],
3555 [.text
3556         or %g1, %lo(ab) + 12, %g1
3557         or %g1, %lo(ab + 12), %g1],
3558       [if test x$gcc_cv_objdump != x \
3559        && $gcc_cv_objdump -s -j .text conftest.o 2> /dev/null \
3560           | grep ' 82106000 82106000' > /dev/null 2>&1; then
3561          gcc_cv_as_sparc_offsetable_lo10=yes
3562        fi],
3563        [AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
3564                  [Define if your assembler supports offsetable %lo().])])
3565
3566     gcc_GAS_CHECK_FEATURE([FMAF, HPC, and VIS 3.0 instructions],
3567       gcc_cv_as_sparc_fmaf,,
3568       [-xarch=v9d],
3569       [.text
3570        .register %g2, #scratch
3571        .register %g3, #scratch
3572        .align 4
3573        fmaddd %f0, %f2, %f4, %f6
3574        addxccc %g1, %g2, %g3
3575        fsrl32 %f2, %f4, %f8
3576        fnaddd %f10, %f12, %f14],,
3577       [AC_DEFINE(HAVE_AS_FMAF_HPC_VIS3, 1,
3578                 [Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions.])])
3579     ;;
3580
3581 changequote(,)dnl
3582   i[34567]86-*-* | x86_64-*-*)
3583 changequote([,])dnl
3584     case $target_os in
3585       cygwin*)
3586         # Full C++ conformance when using a shared libstdc++-v3 requires some
3587         # support from the Cygwin DLL, which in more recent versions exports
3588         # wrappers to aid in interposing and redirecting operators new, delete,
3589         # etc., as per n2800 #17.6.4.6 [replacement.functions].  Check if we
3590         # are configuring for a version of Cygwin that exports the wrappers.
3591         if test x$host = x$target; then
3592           AC_CHECK_FUNC([__wrap__Znaj],[gcc_ac_cygwin_dll_wrappers=yes],[gcc_ac_cygwin_dll_wrappers=no])
3593         else
3594           # Can't check presence of libc functions during cross-compile, so
3595           # we just have to assume we're building for an up-to-date target.
3596           gcc_ac_cygwin_dll_wrappers=yes
3597         fi
3598         AC_DEFINE_UNQUOTED(USE_CYGWIN_LIBSTDCXX_WRAPPERS,
3599           [`if test $gcc_ac_cygwin_dll_wrappers = yes; then echo 1; else echo 0; fi`],
3600           [Define if you want to generate code by default that assumes that the
3601            Cygwin DLL exports wrappers to support libstdc++ function replacement.])
3602     esac
3603     case $target_os in
3604       cygwin* | pe | mingw32* | interix*)
3605         # Recent binutils allows the three-operand form of ".comm" on PE.  This
3606         # definition is used unconditionally to initialise the default state of
3607         # the target option variable that governs usage of the feature.
3608         gcc_GAS_CHECK_FEATURE([.comm with alignment], gcc_cv_as_comm_has_align,
3609          [2,19,52],,[.comm foo,1,32])
3610         AC_DEFINE_UNQUOTED(HAVE_GAS_ALIGNED_COMM,
3611           [`if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi`],
3612           [Define if your assembler supports specifying the alignment
3613            of objects allocated using the GAS .comm command.])
3614         # Used for DWARF 2 in PE
3615         gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
3616           gcc_cv_as_ix86_pe_secrel32,
3617           [2,15,91],,
3618 [.text
3619 foo:    nop
3620 .data
3621         .secrel32 foo],
3622           [if test x$gcc_cv_ld != x \
3623            && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
3624              gcc_cv_as_ix86_pe_secrel32=yes
3625            fi
3626            rm -f conftest],
3627           [AC_DEFINE(HAVE_GAS_PE_SECREL32_RELOC, 1,
3628             [Define if your assembler and linker support 32-bit section relative relocs via '.secrel32 label'.])])
3629         # Test if the assembler supports the extended form of the .section
3630         # directive that specifies section alignment.  LTO support uses this,
3631         # but normally only after installation, so we warn but don't fail the
3632         # configure if LTO is enabled but the assembler does not support it.
3633         gcc_GAS_CHECK_FEATURE([.section with alignment], gcc_cv_as_section_has_align,
3634           [2,20,1],-fatal-warnings,[.section lto_test,"dr0"])
3635         if test x$gcc_cv_as_section_has_align != xyes; then
3636           case ",$enable_languages," in
3637             *,lto,*)
3638               AC_MSG_WARN([LTO for $target requires binutils >= 2.20.1, but version found appears insufficient; LTO will not work until binutils is upgraded.])
3639               ;;
3640           esac
3641         fi
3642         # Test if the assembler supports the section flag 'e' for specifying
3643         # an excluded section.
3644         gcc_GAS_CHECK_FEATURE([.section with e], gcc_cv_as_section_has_e,
3645           [2,22,51],,
3646 [.section foo1,"e"
3647 .byte 0,0,0,0])
3648         AC_DEFINE_UNQUOTED(HAVE_GAS_SECTION_EXCLUDE,
3649           [`if test $gcc_cv_as_section_has_e = yes; then echo 1; else echo 0; fi`],
3650           [Define if your assembler supports specifying the section flag e.])
3651         ;;
3652     esac
3653
3654     gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
3655        gcc_cv_as_ix86_filds,,,
3656        [filds mem; fists mem],,
3657        [AC_DEFINE(HAVE_AS_IX86_FILDS, 1,
3658          [Define if your assembler uses filds and fists mnemonics.])])
3659
3660     gcc_GAS_CHECK_FEATURE([fildq and fistpq mnemonics],
3661        gcc_cv_as_ix86_fildq,,,
3662        [fildq mem; fistpq mem],,
3663        [AC_DEFINE(HAVE_AS_IX86_FILDQ, 1,
3664          [Define if your assembler uses fildq and fistq mnemonics.])])
3665
3666     gcc_GAS_CHECK_FEATURE([cmov syntax],
3667       gcc_cv_as_ix86_cmov_sun_syntax,,,
3668       [cmovl.l %edx, %eax],,
3669       [AC_DEFINE(HAVE_AS_IX86_CMOV_SUN_SYNTAX, 1,
3670         [Define if your assembler supports the Sun syntax for cmov.])])
3671
3672     gcc_GAS_CHECK_FEATURE([ffreep mnemonic],
3673       gcc_cv_as_ix86_ffreep,,,
3674       [ffreep %st(1)],,
3675       [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
3676         [Define if your assembler supports the ffreep mnemonic.])])
3677
3678     gcc_GAS_CHECK_FEATURE([.quad directive],
3679       gcc_cv_as_ix86_quad,,,
3680       [.quad 0],,
3681       [AC_DEFINE(HAVE_AS_IX86_QUAD, 1,
3682         [Define if your assembler supports the .quad directive.])])
3683
3684     gcc_GAS_CHECK_FEATURE([sahf mnemonic],
3685       gcc_cv_as_ix86_sahf,,,
3686       [.code64
3687        sahf],,
3688       [AC_DEFINE(HAVE_AS_IX86_SAHF, 1,
3689         [Define if your assembler supports the sahf mnemonic in 64bit mode.])])
3690
3691     gcc_GAS_CHECK_FEATURE([swap suffix],
3692       gcc_cv_as_ix86_swap,,,
3693       [movl.s %esp, %ebp],,
3694       [AC_DEFINE(HAVE_AS_IX86_SWAP, 1,
3695         [Define if your assembler supports the swap suffix.])])
3696
3697     gcc_GAS_CHECK_FEATURE([different section symbol subtraction],
3698       gcc_cv_as_ix86_diff_sect_delta,,,
3699       [.section .rodata
3700 .L1:
3701         .long .L2-.L1
3702         .long .L3-.L1
3703         .text
3704 .L3:    nop
3705 .L2:    nop],,
3706       [AC_DEFINE(HAVE_AS_IX86_DIFF_SECT_DELTA, 1,
3707         [Define if your assembler supports the subtraction of symbols in different sections.])])
3708
3709     # These two are used unconditionally by i386.[ch]; it is to be defined
3710     # to 1 if the feature is present, 0 otherwise.
3711     gcc_GAS_CHECK_FEATURE([GOTOFF in data],
3712         gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
3713 [       .text
3714 .L0:
3715         nop
3716         .data
3717         .long .L0@GOTOFF])
3718     AC_DEFINE_UNQUOTED(HAVE_AS_GOTOFF_IN_DATA,
3719       [`if test $gcc_cv_as_ix86_gotoff_in_data = yes; then echo 1; else echo 0; fi`],
3720       [Define true if the assembler supports '.long foo@GOTOFF'.])
3721
3722     gcc_GAS_CHECK_FEATURE([rep and lock prefix],
3723         gcc_cv_as_ix86_rep_lock_prefix,,,
3724         [rep movsl
3725          lock addl %edi, (%eax,%esi)
3726          lock orl $0, (%esp)],,
3727         [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
3728           [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
3729
3730     gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
3731         gcc_cv_as_ix86_tlsgdplt,,,
3732         [call    tls_gd@tlsgdplt],
3733         [if test x$gcc_cv_ld != x \
3734          && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
3735            gcc_cv_as_ix86_tlsgdplt=yes
3736          fi
3737          rm -f conftest],
3738       [AC_DEFINE(HAVE_AS_IX86_TLSGDPLT, 1,
3739         [Define if your assembler and linker support @tlsgdplt.])])
3740
3741     gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM_PLT reloc],
3742         gcc_cv_as_ix86_tlsldmplt,,,
3743         [tls_ld:
3744          call    tls_ld@tlsldmplt],
3745         [if test x$gcc_cv_ld != x \
3746          && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
3747            gcc_cv_as_ix86_tlsldmplt=yes
3748          fi
3749          rm -f conftest],
3750       [AC_DEFINE(HAVE_AS_IX86_TLSLDMPLT, 1,
3751         [Define if your assembler and linker support @tlsldmplt.])])
3752
3753     ;;
3754
3755   ia64*-*-*)
3756     gcc_GAS_CHECK_FEATURE([ltoffx and ldxmov relocs],
3757         gcc_cv_as_ia64_ltoffx_ldxmov_relocs, [2,14,0],,
3758 [       .text
3759         addl r15 = @ltoffx(x#), gp
3760         ;;
3761         ld8.mov r16 = [[r15]], x#],,
3762     [AC_DEFINE(HAVE_AS_LTOFFX_LDXMOV_RELOCS, 1,
3763           [Define if your assembler supports ltoffx and ldxmov relocations.])])
3764
3765     ;;
3766
3767   powerpc*-*-*)
3768     case $target in
3769       *-*-aix*) conftest_s='    .machine "pwr5"
3770         .csect .text[[PR]]
3771         mfcr 3,128';;
3772       *-*-darwin*)
3773         gcc_GAS_CHECK_FEATURE([.machine directive support],
3774           gcc_cv_as_machine_directive,,,
3775           [     .machine ppc7400])
3776         if test x$gcc_cv_as_machine_directive != xyes; then
3777           echo "*** This target requires an assembler supporting \".machine\"" >&2
3778           echo you can get it from: ftp://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg >&2
3779           test x$build = x$target && exit 1
3780         fi
3781         conftest_s='    .text
3782         mfcr r3,128';;
3783       *) conftest_s='   .machine power4
3784         .text
3785         mfcr 3,128';;
3786     esac
3787
3788     gcc_GAS_CHECK_FEATURE([mfcr field support],
3789       gcc_cv_as_powerpc_mfcrf, [2,14,0],,
3790       [$conftest_s],,
3791       [AC_DEFINE(HAVE_AS_MFCRF, 1,
3792           [Define if your assembler supports mfcr field.])])
3793
3794     case $target in
3795       *-*-aix*) conftest_s='    .machine "pwr5"
3796         .csect .text[[PR]]
3797         popcntb 3,3';;
3798       *) conftest_s='   .machine power5
3799         .text
3800         popcntb 3,3';;
3801     esac
3802
3803     gcc_GAS_CHECK_FEATURE([popcntb support],
3804       gcc_cv_as_powerpc_popcntb, [2,17,0],,
3805       [$conftest_s],,
3806       [AC_DEFINE(HAVE_AS_POPCNTB, 1,
3807           [Define if your assembler supports popcntb field.])])
3808
3809     case $target in
3810       *-*-aix*) conftest_s='    .machine "pwr5x"
3811         .csect .text[[PR]]
3812         frin 1,1';;
3813       *) conftest_s='   .machine power5
3814         .text
3815         frin 1,1';;
3816     esac
3817
3818     gcc_GAS_CHECK_FEATURE([fp round support],
3819       gcc_cv_as_powerpc_fprnd, [2,17,0],,
3820       [$conftest_s],,
3821       [AC_DEFINE(HAVE_AS_FPRND, 1,
3822           [Define if your assembler supports fprnd.])])
3823
3824     case $target in
3825       *-*-aix*) conftest_s='    .machine "pwr6"
3826         .csect .text[[PR]]
3827         mffgpr 1,3';;
3828       *) conftest_s='   .machine power6
3829         .text
3830         mffgpr 1,3';;
3831     esac
3832
3833     gcc_GAS_CHECK_FEATURE([move fp gpr support],
3834       gcc_cv_as_powerpc_mfpgpr, [2,19,2],,
3835       [$conftest_s],,
3836       [AC_DEFINE(HAVE_AS_MFPGPR, 1,
3837           [Define if your assembler supports mffgpr and mftgpr.])])
3838
3839     case $target in
3840       *-*-aix*) conftest_s='    .csect .text[[PR]]
3841 LCF..0:
3842         addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';;
3843       *-*-darwin*)
3844         conftest_s='    .text
3845 LCF0:
3846         addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';;
3847       *) conftest_s='   .text
3848 .LCF0:
3849         addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
3850     esac
3851
3852     gcc_GAS_CHECK_FEATURE([rel16 relocs],
3853       gcc_cv_as_powerpc_rel16, [2,17,0], -a32,
3854       [$conftest_s],,
3855       [AC_DEFINE(HAVE_AS_REL16, 1,
3856           [Define if your assembler supports R_PPC_REL16 relocs.])])
3857
3858     case $target in
3859       *-*-aix*) conftest_s='    .machine "pwr6"
3860         .csect .text[[PR]]
3861         cmpb 3,4,5';;
3862       *) conftest_s='   .machine power6
3863         .text
3864         cmpb 3,4,5';;
3865     esac
3866
3867     gcc_GAS_CHECK_FEATURE([compare bytes support],
3868       gcc_cv_as_powerpc_cmpb, [2,19,2], -a32,
3869       [$conftest_s],,
3870       [AC_DEFINE(HAVE_AS_CMPB, 1,
3871           [Define if your assembler supports cmpb.])])
3872
3873     case $target in
3874       *-*-aix*) conftest_s='    .machine "pwr6"
3875         .csect .text[[PR]]
3876         dadd 1,2,3';;
3877       *) conftest_s='   .machine power6
3878         .text
3879         dadd 1,2,3';;
3880     esac
3881
3882     gcc_GAS_CHECK_FEATURE([decimal float support],
3883       gcc_cv_as_powerpc_dfp, [2,19,2], -a32,
3884       [$conftest_s],,
3885       [AC_DEFINE(HAVE_AS_DFP, 1,
3886           [Define if your assembler supports DFP instructions.])])
3887
3888     case $target in
3889       *-*-aix*) conftest_s='    .machine "pwr7"
3890         .csect .text[[PR]]
3891         lxvd2x 1,2,3';;
3892       *) conftest_s='   .machine power7
3893         .text
3894         lxvd2x 1,2,3';;
3895     esac
3896
3897     gcc_GAS_CHECK_FEATURE([vector-scalar support],
3898       gcc_cv_as_powerpc_vsx, [2,19,2], -a32,
3899       [$conftest_s],,
3900       [AC_DEFINE(HAVE_AS_VSX, 1,
3901           [Define if your assembler supports VSX instructions.])])
3902
3903     case $target in
3904       *-*-aix*) conftest_s='    .machine "pwr7"
3905         .csect .text[[PR]]
3906         popcntd 3,3';;
3907       *) conftest_s='   .machine power7
3908         .text
3909         popcntd 3,3';;
3910     esac
3911
3912     gcc_GAS_CHECK_FEATURE([popcntd support],
3913       gcc_cv_as_powerpc_popcntd, [2,19,2], -a32,
3914       [$conftest_s],,
3915       [AC_DEFINE(HAVE_AS_POPCNTD, 1,
3916           [Define if your assembler supports POPCNTD instructions.])])
3917
3918     case $target in
3919       *-*-aix*) conftest_s='    .csect .text[[PR]]
3920         lwsync';;
3921       *) conftest_s='   .text
3922         lwsync';;
3923     esac
3924
3925     gcc_GAS_CHECK_FEATURE([lwsync support],
3926       gcc_cv_as_powerpc_lwsync, [2,19,2], -a32,
3927       [$conftest_s],,
3928       [AC_DEFINE(HAVE_AS_LWSYNC, 1,
3929           [Define if your assembler supports LWSYNC instructions.])])
3930
3931     case $target in
3932       *-*-aix*) conftest_s='    .machine "476"
3933         .csect .text[[PR]]
3934         dci 0';;
3935       *) conftest_s='   .machine "476"
3936         .text
3937         dci 0';;
3938     esac
3939
3940     gcc_GAS_CHECK_FEATURE([data cache invalidate support],
3941       gcc_cv_as_powerpc_dci, [9,99,0], -a32,
3942       [$conftest_s],,
3943       [AC_DEFINE(HAVE_AS_DCI, 1,
3944           [Define if your assembler supports the DCI/ICI instructions.])])
3945
3946     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
3947       gcc_cv_as_powerpc_gnu_attribute, [2,18,0],,
3948       [.gnu_attribute 4,1],,
3949       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
3950           [Define if your assembler supports .gnu_attribute.])])
3951
3952     gcc_GAS_CHECK_FEATURE([tls marker support],
3953       gcc_cv_as_powerpc_tls_markers, [2,20,0],,
3954       [ bl __tls_get_addr(x@tlsgd)],,
3955       [AC_DEFINE(HAVE_AS_TLS_MARKERS, 1,
3956           [Define if your assembler supports arg info for __tls_get_addr.])])
3957
3958     case $target in
3959       *-*-aix*)
3960         gcc_GAS_CHECK_FEATURE([.ref support],
3961           gcc_cv_as_aix_ref, [2.21.0],,
3962           [     .csect stuff[[rw]]
3963              stuff:
3964                 .long 1
3965                 .extern sym
3966                 .ref sym
3967           ],,
3968           [AC_DEFINE(HAVE_AS_REF, 1,
3969             [Define if your assembler supports .ref])])
3970         ;;
3971     esac
3972     ;;
3973
3974   mips*-*-*)
3975     gcc_GAS_CHECK_FEATURE([explicit relocation support],
3976       gcc_cv_as_mips_explicit_relocs, [2,14,0],,
3977 [       lw $4,%gp_rel(foo)($4)],,
3978       [if test x$target_cpu_default = x
3979        then target_cpu_default=MASK_EXPLICIT_RELOCS
3980        else target_cpu_default="($target_cpu_default)|MASK_EXPLICIT_RELOCS"
3981        fi])
3982     gcc_GAS_CHECK_FEATURE([-mno-shared support],
3983       gcc_cv_as_mips_no_shared, [2,16,0], [-mno-shared], [nop],,
3984       [AC_DEFINE(HAVE_AS_NO_SHARED, 1,
3985                  [Define if the assembler understands -mno-shared.])])
3986
3987     gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
3988       gcc_cv_as_mips_gnu_attribute, [2,18,0],,
3989       [.gnu_attribute 4,1],,
3990       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
3991           [Define if your assembler supports .gnu_attribute.])])
3992
3993     gcc_GAS_CHECK_FEATURE([.dtprelword support],
3994       gcc_cv_as_mips_dtprelword, [2,18,0],,
3995       [.section .tdata,"awT",@progbits
3996 x:
3997         .word 2
3998         .text
3999         .dtprelword x+0x8000],,
4000       [AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
4001           [Define if your assembler supports .dtprelword.])])
4002
4003     gcc_GAS_CHECK_FEATURE([DSPR1 mult with four accumulators support],
4004       gcc_cv_as_mips_dspr1_mult,,,
4005 [       .set    mips32r2
4006         .set    nodspr2
4007         .set    dsp
4008         madd    $ac3,$4,$5
4009         maddu   $ac3,$4,$5
4010         msub    $ac3,$4,$5
4011         msubu   $ac3,$4,$5
4012         mult    $ac3,$4,$5
4013         multu   $ac3,$4,$5],,
4014       [AC_DEFINE(HAVE_AS_DSPR1_MULT, 1,
4015           [Define if your assembler supports DSPR1 mult.])])
4016
4017     AC_MSG_CHECKING(assembler and linker for explicit JALR relocation)
4018     gcc_cv_as_ld_jalr_reloc=no
4019     if test $gcc_cv_as_mips_explicit_relocs = yes; then
4020       if test $in_tree_ld = yes ; then
4021         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 \
4022            && test $in_tree_ld_is_elf = yes; then
4023           gcc_cv_as_ld_jalr_reloc=yes
4024         fi
4025       elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
4026         echo '  .ent x' > conftest.s
4027         echo 'x:        ld $2,%got_disp(y)($3)' >> conftest.s
4028         echo '  ld $25,%call16(y)($28)' >> conftest.s
4029         echo '  .reloc  1f,R_MIPS_JALR,y' >> conftest.s
4030         echo '1:        jalr $25' >> conftest.s
4031         echo '  .reloc  1f,R_MIPS_JALR,x' >> conftest.s
4032         echo '1:        jalr $25' >> conftest.s
4033         echo '  .end x' >> conftest.s
4034         if $gcc_cv_as -o conftest.o conftest.s >/dev/null 2>&AS_MESSAGE_LOG_FD \
4035            && $gcc_cv_ld -shared -o conftest.so conftest.o >/dev/null 2>&AS_MESSAGE_LOG_FD; then
4036           if $gcc_cv_objdump -d conftest.so | grep jalr >/dev/null 2>&1 \
4037              && $gcc_cv_objdump -d conftest.so | grep "bal.*<x>" >/dev/null 2>&1; then
4038             gcc_cv_as_ld_jalr_reloc=yes
4039           fi
4040         fi
4041         rm -f conftest.*
4042       fi
4043     fi
4044     if test $gcc_cv_as_ld_jalr_reloc = yes; then
4045       if test x$target_cpu_default = x; then
4046         target_cpu_default=MASK_RELAX_PIC_CALLS
4047       else
4048         target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
4049       fi
4050     fi
4051     AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
4052
4053     AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
4054       [gcc_cv_ld_mips_personality_relaxation],
4055       [gcc_cv_ld_mips_personality_relaxation=no
4056        if test $in_tree_ld = yes ; then
4057          if test "$gcc_cv_gld_major_version" -eq 2 \
4058                  -a "$gcc_cv_gld_minor_version" -ge 21 \
4059                  -o "$gcc_cv_gld_major_version" -gt 2; then
4060            gcc_cv_ld_mips_personality_relaxation=yes
4061          fi
4062        elif test x$gcc_cv_as != x \
4063                  -a x$gcc_cv_ld != x \
4064                  -a x$gcc_cv_readelf != x ; then
4065          cat > conftest.s <<EOF
4066         .cfi_startproc
4067         .cfi_personality 0x80,indirect_ptr
4068         .ent test
4069 test:
4070         nop
4071         .end test
4072         .cfi_endproc
4073
4074         .section .data,"aw",@progbits
4075 indirect_ptr:
4076         .dc.a personality
4077 EOF
4078          if $gcc_cv_as -KPIC -o conftest.o conftest.s > /dev/null 2>&1 \
4079             && $gcc_cv_ld -o conftest conftest.o -shared > /dev/null 2>&1; then
4080            if $gcc_cv_readelf -d conftest 2>&1 \
4081               | grep TEXTREL > /dev/null 2>&1; then
4082              :
4083            elif $gcc_cv_readelf --relocs conftest 2>&1 \
4084                 | grep 'R_MIPS_REL32 *$' > /dev/null 2>&1; then
4085              :
4086            else
4087              gcc_cv_ld_mips_personality_relaxation=yes
4088            fi
4089          fi
4090        fi
4091        rm -f conftest.s conftest.o conftest])
4092     if test x$gcc_cv_ld_mips_personality_relaxation = xyes; then
4093             AC_DEFINE(HAVE_LD_PERSONALITY_RELAXATION, 1,
4094       [Define if your linker can relax absolute .eh_frame personality
4095 pointers into PC-relative form.])
4096     fi
4097     ;;
4098 esac
4099
4100 # Mips and HP-UX need the GNU assembler.
4101 # Linux on IA64 might be able to use the Intel assembler.
4102
4103 case "$target" in
4104   mips*-*-* | *-*-hpux* )
4105     if test x$gas_flag = xyes \
4106        || test x"$host" != x"$build" \
4107        || test ! -x "$gcc_cv_as" \
4108        || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
4109       :
4110     else
4111       echo "*** This configuration requires the GNU assembler" >&2
4112       exit 1
4113     fi
4114     ;;
4115 esac
4116
4117 # ??? Not all targets support dwarf2 debug_line, even within a version
4118 # of gas.  Moreover, we need to emit a valid instruction to trigger any
4119 # info to the output file.  So, as supported targets are added to gas 2.11,
4120 # add some instruction here to (also) show we expect this might work.
4121 # ??? Once 2.11 is released, probably need to add first known working
4122 # version to the per-target configury.
4123 case "$cpu_type" in
4124   alpha | arm | avr | bfin | cris | i386 | m32c | m68k | microblaze | mips \
4125   | pa | rs6000 | score | sparc | spu | tilegx | tilepro | xstormy16 | xtensa)
4126     insn="nop"
4127     ;;
4128   ia64 | s390)
4129     insn="nop 0"
4130     ;;
4131   mmix)
4132     insn="swym 0"
4133     ;;
4134 esac
4135 if test x"$insn" != x; then
4136  conftest_s="\
4137         .file 1 \"conftest.s\"
4138         .loc 1 3 0
4139         $insn"
4140  gcc_GAS_CHECK_FEATURE([dwarf2 debug_line support],
4141   gcc_cv_as_dwarf2_debug_line,
4142   [elf,2,11,0],, [$conftest_s],
4143   [if test x$gcc_cv_objdump != x \
4144    && $gcc_cv_objdump -h conftest.o 2> /dev/null \
4145       | grep debug_line > /dev/null 2>&1; then
4146      gcc_cv_as_dwarf2_debug_line=yes
4147    fi])
4148
4149 # The .debug_line file table must be in the exact order that
4150 # we specified the files, since these indices are also used
4151 # by DW_AT_decl_file.  Approximate this test by testing if
4152 # the assembler bitches if the same index is assigned twice.
4153  gcc_GAS_CHECK_FEATURE([buggy dwarf2 .file directive],
4154   gcc_cv_as_dwarf2_file_buggy,,,
4155 [       .file 1 "foo.s"
4156         .file 1 "bar.s"])
4157
4158  if test $gcc_cv_as_dwarf2_debug_line = yes \
4159  && test $gcc_cv_as_dwarf2_file_buggy = no; then
4160         AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1,
4161   [Define if your assembler supports dwarf2 .file/.loc directives,
4162    and preserves file table indices exactly as given.])
4163  fi
4164
4165  gcc_GAS_CHECK_FEATURE([--gdwarf2 option],
4166   gcc_cv_as_gdwarf2_flag,
4167   [elf,2,11,0], [--gdwarf2], [$insn],,
4168   [AC_DEFINE(HAVE_AS_GDWARF2_DEBUG_FLAG, 1,
4169 [Define if your assembler supports the --gdwarf2 option.])])
4170
4171  gcc_GAS_CHECK_FEATURE([--gstabs option],
4172   gcc_cv_as_gstabs_flag,
4173   [elf,2,11,0], [--gstabs], [$insn],
4174   [# The native Solaris 9/Intel assembler doesn't understand --gstabs
4175    # and warns about it, but still exits successfully.  So check for
4176    # this.
4177    if AC_TRY_COMMAND([$gcc_cv_as --gstabs -o conftest.o conftest.s 2>&1 | grep -i warning > /dev/null])
4178    then :
4179    else gcc_cv_as_gstabs_flag=yes
4180    fi],
4181   [AC_DEFINE(HAVE_AS_GSTABS_DEBUG_FLAG, 1,
4182 [Define if your assembler supports the --gstabs option.])])
4183
4184  gcc_GAS_CHECK_FEATURE([--debug-prefix-map option],
4185   gcc_cv_as_debug_prefix_map_flag,
4186   [2,18,0], [--debug-prefix-map /a=/b], [$insn],,
4187   [AC_DEFINE(HAVE_AS_DEBUG_PREFIX_MAP, 1,
4188 [Define if your assembler supports the --debug-prefix-map option.])])
4189 fi
4190
4191 gcc_GAS_CHECK_FEATURE([.lcomm with alignment], gcc_cv_as_lcomm_with_alignment,
4192  ,,
4193 [.lcomm bar,4,16],,
4194 [AC_DEFINE(HAVE_GAS_LCOMM_WITH_ALIGNMENT, 1,
4195   [Define if your assembler supports .lcomm with an alignment field.])])
4196
4197 AC_ARG_ENABLE(gnu-unique-object,
4198  [AS_HELP_STRING([--enable-gnu-unique-object],
4199    [enable the use of the @gnu_unique_object ELF extension on glibc systems])],
4200  [case $enable_gnu_unique_object in
4201     yes | no) ;;
4202     *) AC_MSG_ERROR(['$enable_gnu_unique_object' is an invalid value for --enable-gnu-unique-object.
4203 Valid choices are 'yes' and 'no'.]) ;;
4204   esac],
4205  [gcc_GAS_CHECK_FEATURE([gnu_unique_object], gcc_cv_as_gnu_unique_object,
4206    [elf,2,19,52],,
4207    [.type foo, '$target_type_format_char'gnu_unique_object],,
4208 # We need to unquote above to to use the definition from config.gcc.
4209 # Also check for ld.so support, i.e. glibc 2.11 or higher.
4210    [[if test x$host = x$build -a x$host = x$target &&
4211        ldd --version 2>/dev/null &&
4212        glibcver=`ldd --version 2>/dev/null | sed 's/.* //;q'`; then
4213       glibcmajor=`expr "$glibcver" : "\([0-9]*\)"`
4214       glibcminor=`expr "$glibcver" : "[2-9]*\.\([0-9]*\)"`
4215       glibcnum=`expr $glibcmajor \* 1000 + $glibcminor`
4216       if test "$glibcnum" -ge 2011 ; then
4217         enable_gnu_unique_object=yes
4218       fi
4219     fi]])])
4220 if test x$enable_gnu_unique_object = xyes; then
4221   AC_DEFINE(HAVE_GAS_GNU_UNIQUE_OBJECT, 1,
4222    [Define if your assembler supports @gnu_unique_object.])
4223 fi
4224
4225 AC_CACHE_CHECK([assembler for tolerance to line number 0],
4226  [gcc_cv_as_line_zero],
4227  [gcc_cv_as_line_zero=no
4228   if test $in_tree_gas = yes; then
4229     gcc_GAS_VERSION_GTE_IFELSE(2, 16, 91, [gcc_cv_as_line_zero=yes])
4230   elif test "x$gcc_cv_as" != x; then
4231     { echo '# 1 "test.s" 1'; echo '# 0 "" 2'; } > conftest.s
4232     if AC_TRY_COMMAND([$gcc_cv_as -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD 2>conftest.out]) &&
4233        test "x`cat conftest.out`" = x
4234     then
4235       gcc_cv_as_line_zero=yes
4236     else
4237       echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
4238       cat conftest.s >&AS_MESSAGE_LOG_FD
4239       echo "configure: error output was" >&AS_MESSAGE_LOG_FD
4240       cat conftest.out >&AS_MESSAGE_LOG_FD
4241     fi
4242     rm -f conftest.o conftest.s conftest.out
4243   fi])
4244 if test "x$gcc_cv_as_line_zero" = xyes; then
4245   AC_DEFINE([HAVE_AS_LINE_ZERO], 1,
4246 [Define if the assembler won't complain about a line such as # 0 "" 2.])
4247 fi
4248
4249 AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
4250 gcc_cv_ld_eh_frame_hdr=no
4251 if test $in_tree_ld = yes ; then
4252   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 \
4253      && test $in_tree_ld_is_elf = yes; then
4254     gcc_cv_ld_eh_frame_hdr=yes
4255   fi
4256 elif test x$gcc_cv_ld != x; then
4257   if echo "$ld_ver" | grep GNU > /dev/null; then
4258     # Check if linker supports --eh-frame-hdr option
4259     if $gcc_cv_ld --help 2>/dev/null | grep eh-frame-hdr > /dev/null; then
4260       gcc_cv_ld_eh_frame_hdr=yes
4261     fi
4262   else
4263     case "$target" in
4264       *-*-solaris2*)
4265         # Sun ld has various bugs in .eh_frame_hdr support before version 1.2251.
4266         if test "$ld_vers_major" -gt 1 || test "$ld_vers_minor" -ge 2251; then
4267           gcc_cv_ld_eh_frame_hdr=yes
4268         fi
4269         ;;
4270     esac
4271   fi
4272 fi
4273 GCC_TARGET_TEMPLATE([HAVE_LD_EH_FRAME_HDR])
4274 if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then
4275         AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1,
4276 [Define if your linker supports .eh_frame_hdr.])
4277 fi
4278 AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr)
4279
4280 AC_MSG_CHECKING(linker position independent executable support)
4281 gcc_cv_ld_pie=no
4282 if test $in_tree_ld = yes ; then
4283   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 \
4284      && test $in_tree_ld_is_elf = yes; then
4285     gcc_cv_ld_pie=yes
4286   fi
4287 elif test x$gcc_cv_ld != x; then
4288         # Check if linker supports -pie option
4289         if $gcc_cv_ld --help 2>/dev/null | grep -- -pie > /dev/null; then
4290                 gcc_cv_ld_pie=yes
4291         fi
4292 fi
4293 if test x"$gcc_cv_ld_pie" = xyes; then
4294         AC_DEFINE(HAVE_LD_PIE, 1,
4295 [Define if your linker supports -pie option.])
4296 fi
4297 AC_MSG_RESULT($gcc_cv_ld_pie)
4298
4299 AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
4300 gcc_cv_ld_eh_gc_sections=no
4301 if test $in_tree_ld = yes ; then
4302   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 \
4303      && test $in_tree_ld_is_elf = yes; then
4304     gcc_cv_ld_eh_gc_sections=yes
4305   fi
4306 elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
4307   cat > conftest.s <<EOF
4308         .section        .text
4309 .globl _start
4310         .type _start, @function
4311 _start:
4312         .long foo
4313         .size _start, .-_start
4314         .section        .text.foo,"ax",@progbits
4315         .type foo, @function
4316 foo:
4317         .long 0
4318         .size foo, .-foo
4319         .section        .gcc_except_table.foo,"a",@progbits
4320 .L0:
4321         .long 0
4322         .section        .eh_frame,"a",@progbits
4323         .long .L0
4324 EOF
4325   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
4326     if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
4327          | grep "gc-sections option ignored" > /dev/null; then
4328       gcc_cv_ld_eh_gc_sections=no
4329     elif $gcc_cv_objdump -h conftest 2> /dev/null \
4330          | grep gcc_except_table > /dev/null; then
4331       gcc_cv_ld_eh_gc_sections=yes
4332       # If no COMDAT groups, the compiler will emit .gnu.linkonce.t. sections.
4333       if test x$gcc_cv_as_comdat_group != xyes; then
4334         gcc_cv_ld_eh_gc_sections=no
4335         cat > conftest.s <<EOF
4336         .section        .text
4337 .globl _start
4338         .type _start, @function
4339 _start:
4340         .long foo
4341         .size _start, .-_start
4342         .section        .gnu.linkonce.t.foo,"ax",@progbits
4343         .type foo, @function
4344 foo:
4345         .long 0
4346         .size foo, .-foo
4347         .section        .gcc_except_table.foo,"a",@progbits
4348 .L0:
4349         .long 0
4350         .section        .eh_frame,"a",@progbits
4351         .long .L0
4352 EOF
4353         if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
4354           if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
4355                | grep "gc-sections option ignored" > /dev/null; then
4356             gcc_cv_ld_eh_gc_sections=no
4357           elif $gcc_cv_objdump -h conftest 2> /dev/null \
4358                | grep gcc_except_table > /dev/null; then
4359             gcc_cv_ld_eh_gc_sections=yes
4360           fi
4361         fi
4362       fi
4363     fi
4364   fi
4365   rm -f conftest.s conftest.o conftest
4366 fi
4367 case "$target" in
4368   hppa*-*-linux*)
4369     # ??? This apparently exposes a binutils bug with PC-relative relocations.
4370     gcc_cv_ld_eh_gc_sections=no
4371     ;;
4372 esac
4373 if test x$gcc_cv_ld_eh_gc_sections = xyes; then
4374         AC_DEFINE(HAVE_LD_EH_GC_SECTIONS, 1,
4375   [Define if your linker supports garbage collection of
4376    sections in presence of EH frames.])
4377 fi
4378 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections)
4379
4380 AC_MSG_CHECKING(linker EH garbage collection of sections bug)
4381 gcc_cv_ld_eh_gc_sections_bug=no
4382 if test $in_tree_ld = yes ; then
4383   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 \
4384      && test $in_tree_ld_is_elf = yes; then
4385     gcc_cv_ld_eh_gc_sections_bug=yes
4386   fi
4387 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
4388   gcc_cv_ld_eh_gc_sections_bug=yes
4389   cat > conftest.s <<EOF
4390         .section        .text
4391 .globl _start
4392         .type _start, @function
4393 _start:
4394         .long foo
4395         .size _start, .-_start
4396         .section        .text.startup.foo,"ax",@progbits
4397         .type foo, @function
4398 foo:
4399         .long 0
4400         .size foo, .-foo
4401         .section        .gcc_except_table.foo,"a",@progbits
4402 .L0:
4403         .long 0
4404         .section        .eh_frame,"a",@progbits
4405         .long .L0
4406 EOF
4407   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
4408     if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
4409          | grep "gc-sections option ignored" > /dev/null; then
4410       :
4411     elif $gcc_cv_objdump -h conftest 2> /dev/null \
4412          | grep gcc_except_table > /dev/null; then
4413       gcc_cv_ld_eh_gc_sections_bug=no
4414     fi
4415   fi
4416   rm -f conftest.s conftest.o conftest
4417 fi
4418 if test x$gcc_cv_ld_eh_gc_sections_bug = xyes; then
4419         AC_DEFINE(HAVE_LD_EH_GC_SECTIONS_BUG, 1,
4420   [Define if your linker has buggy garbage collection of
4421    sections support when .text.startup.foo like sections are used.])
4422 fi
4423 AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections_bug)
4424
4425 # --------
4426 # UNSORTED
4427 # --------
4428
4429 AC_CACHE_CHECK(linker --as-needed support,
4430 gcc_cv_ld_as_needed,
4431 [gcc_cv_ld_as_needed=no
4432 if test $in_tree_ld = yes ; then
4433   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 \
4434      && test $in_tree_ld_is_elf = yes; then
4435     gcc_cv_ld_as_needed=yes
4436   fi
4437 elif test x$gcc_cv_ld != x; then
4438         # Check if linker supports --as-needed and --no-as-needed options
4439         if $gcc_cv_ld --help 2>/dev/null | grep as-needed > /dev/null; then
4440                 gcc_cv_ld_as_needed=yes
4441         fi
4442 fi
4443 ])
4444 if test x"$gcc_cv_ld_as_needed" = xyes; then
4445         AC_DEFINE(HAVE_LD_AS_NEEDED, 1,
4446 [Define if your linker supports --as-needed and --no-as-needed options.])
4447 fi
4448
4449 case "$target:$tm_file" in
4450   powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
4451   case "$target" in
4452      *-*-linux*)
4453      emul_name="-melf64ppc"
4454       ;;
4455      *-*-freebsd*)
4456      emul_name="-melf64ppc_fbsd"
4457       ;;
4458   esac
4459     AC_CACHE_CHECK(linker support for omitting dot symbols,
4460     gcc_cv_ld_no_dot_syms,
4461     [gcc_cv_ld_no_dot_syms=no
4462     if test $in_tree_ld = yes ; then
4463       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
4464         gcc_cv_ld_no_dot_syms=yes
4465       fi
4466     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
4467       cat > conftest1.s <<EOF
4468         .text
4469         bl .foo
4470 EOF
4471       cat > conftest2.s <<EOF
4472         .section ".opd","aw"
4473         .align 3
4474         .globl foo
4475         .type foo,@function
4476 foo:
4477         .quad .LEfoo,.TOC.@tocbase,0
4478         .text
4479 .LEfoo:
4480         blr
4481         .size foo,.-.LEfoo
4482 EOF
4483       if $gcc_cv_as -a64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
4484          && $gcc_cv_as -a64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
4485          && $gcc_cv_ld $emul_name -o conftest conftest1.o conftest2.o > /dev/null 2>&1; then
4486         gcc_cv_ld_no_dot_syms=yes
4487       fi
4488       rm -f conftest conftest1.o conftest2.o conftest1.s conftest2.s
4489     fi
4490     ])
4491     if test x"$gcc_cv_ld_no_dot_syms" = xyes; then
4492       AC_DEFINE(HAVE_LD_NO_DOT_SYMS, 1,
4493     [Define if your PowerPC64 linker only needs function descriptor syms.])
4494     fi
4495
4496     AC_CACHE_CHECK(linker large toc support,
4497     gcc_cv_ld_large_toc,
4498     [gcc_cv_ld_large_toc=no
4499     if test $in_tree_ld = yes ; then
4500       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
4501         gcc_cv_ld_large_toc=yes
4502       fi
4503     elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
4504       cat > conftest.s <<EOF
4505         .section ".tbss","awT",@nobits
4506         .align 3
4507 ie0:    .space 8
4508         .global _start
4509         .text
4510 _start:
4511         addis 9,13,ie0@got@tprel@ha
4512         ld 9,ie0@got@tprel@l(9)
4513 EOF
4514       if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \
4515          && $gcc_cv_ld $emul_name --no-toc-sort -o conftest conftest.o > /dev/null 2>&1; then
4516         gcc_cv_ld_large_toc=yes
4517       fi
4518       rm -f conftest conftest.o conftest.s
4519     fi
4520     ])
4521     if test x"$gcc_cv_ld_large_toc" = xyes; then
4522       AC_DEFINE(HAVE_LD_LARGE_TOC, 1,
4523     [Define if your PowerPC64 linker supports a large TOC.])
4524     fi
4525     ;;
4526 esac
4527
4528 AC_CACHE_CHECK(linker --build-id support,
4529   gcc_cv_ld_buildid,
4530   [gcc_cv_ld_buildid=no
4531   if test $in_tree_ld = yes ; then
4532     if test "$gcc_cv_gld_major_version" -eq 2 -a \
4533        "$gcc_cv_gld_minor_version" -ge 18 -o \
4534        "$gcc_cv_gld_major_version" -gt 2 \
4535        && test $in_tree_ld_is_elf = yes; then
4536       gcc_cv_ld_buildid=yes
4537     fi
4538   elif test x$gcc_cv_ld != x; then
4539     if $gcc_cv_ld --help 2>/dev/null | grep build-id > /dev/null; then
4540       gcc_cv_ld_buildid=yes
4541     fi
4542   fi])
4543 if test x"$gcc_cv_ld_buildid" = xyes; then
4544   AC_DEFINE(HAVE_LD_BUILDID, 1,
4545   [Define if your linker supports --build-id.])
4546 fi
4547
4548 AC_ARG_ENABLE(linker-build-id,
4549 [AS_HELP_STRING([--enable-linker-build-id],
4550                 [compiler will always pass --build-id to linker])],
4551 [],
4552 enable_linker_build_id=no)
4553
4554 if test x"$enable_linker_build_id" = xyes; then
4555   if test x"$gcc_cv_ld_buildid" = xyes; then
4556     AC_DEFINE(ENABLE_LD_BUILDID, 1,
4557     [Define if gcc should always pass --build-id to linker.])
4558   else
4559     AC_MSG_WARN(--build-id is not supported by your linker; --enable-linker-build-id ignored)
4560   fi
4561 fi
4562
4563 # In binutils 2.21, GNU ld gained support for new emulations fully
4564 # supporting the Solaris 2 ABI.  Detect their presence in the linker used.
4565 AC_CACHE_CHECK(linker *_sol2 emulation support,
4566   gcc_cv_ld_sol2_emulation,
4567   [gcc_cv_ld_sol2_emulation=no
4568   if test $in_tree_ld = yes ; then
4569     if test "$gcc_cv_gld_major_version" -eq 2 -a \
4570        "$gcc_cv_gld_minor_version" -ge 21 -o \
4571        "$gcc_cv_gld_major_version" -gt 2 \
4572        && test $in_tree_ld_is_elf = yes; then
4573       gcc_cv_ld_sol2_emulation=yes
4574     fi
4575   elif test x$gcc_cv_ld != x; then
4576     if $gcc_cv_ld -V 2>/dev/null | sed -e '1,/Supported emulations/d;q' | \
4577        grep _sol2 > /dev/null; then
4578       gcc_cv_ld_sol2_emulation=yes
4579     fi
4580   fi])
4581 if test x"$gcc_cv_ld_sol2_emulation" = xyes; then
4582   AC_DEFINE(HAVE_LD_SOL2_EMULATION, 1,
4583   [Define if your linker supports the *_sol2 emulations.])
4584 fi
4585
4586 AC_CACHE_CHECK(linker --sysroot support,
4587   gcc_cv_ld_sysroot,
4588   [gcc_cv_ld_sysroot=no
4589   if test $in_tree_ld = yes ; then
4590       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
4591         gcc_cv_ld_sysroot=yes
4592       fi
4593   elif test x$gcc_cv_ld != x; then 
4594     if $gcc_cv_ld --help 2>/dev/null | grep sysroot > /dev/null; then
4595       gcc_cv_ld_sysroot=yes
4596     fi
4597   fi])
4598 if test x"$gcc_cv_ld_sysroot" = xyes; then
4599   AC_DEFINE(HAVE_LD_SYSROOT, 1,
4600   [Define if your linker supports --sysroot.])
4601 fi        
4602
4603 if test x$with_sysroot = x && test x$host = x$target \
4604    && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" \
4605    && test "$prefix" != "NONE"; then
4606   AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
4607 [Define to PREFIX/include if cpp should also search that directory.])
4608 fi
4609
4610 if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
4611   if test "x$with_headers" != x; then
4612     target_header_dir=$with_headers
4613   elif test "x$with_sysroot" = x; then
4614     target_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
4615   elif test "x$with_build_sysroot" != "x"; then
4616     target_header_dir="${with_build_sysroot}${native_system_header_dir}"
4617   elif test "x$with_sysroot" = xyes; then
4618     target_header_dir="${exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
4619   else
4620     target_header_dir="${with_sysroot}${native_system_header_dir}"
4621   fi
4622 else
4623   target_header_dir=${native_system_header_dir}
4624 fi
4625
4626 # Test for stack protector support in target C library.
4627 AC_CACHE_CHECK(__stack_chk_fail in target C library,
4628       gcc_cv_libc_provides_ssp,
4629       [gcc_cv_libc_provides_ssp=no
4630     case "$target" in
4631        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
4632       [# glibc 2.4 and later provides __stack_chk_fail and
4633       # either __stack_chk_guard, or TLS access to stack guard canary.
4634       if test -f $target_header_dir/features.h \
4635          && $EGREP '^[  ]*#[    ]*define[       ]+__GNU_LIBRARY__[      ]+([1-9][0-9]|[6-9])' \
4636             $target_header_dir/features.h > /dev/null; then
4637         if $EGREP '^[   ]*#[    ]*define[       ]+__GLIBC__[    ]+([1-9][0-9]|[3-9])' \
4638            $target_header_dir/features.h > /dev/null; then
4639           gcc_cv_libc_provides_ssp=yes
4640         elif $EGREP '^[         ]*#[    ]*define[       ]+__GLIBC__[    ]+2' \
4641              $target_header_dir/features.h > /dev/null \
4642              && $EGREP '^[      ]*#[    ]*define[       ]+__GLIBC_MINOR__[      ]+([1-9][0-9]|[4-9])' \
4643              $target_header_dir/features.h > /dev/null; then
4644           gcc_cv_libc_provides_ssp=yes
4645         elif $EGREP '^[         ]*#[    ]*define[       ]+__UCLIBC__[   ]+1' \
4646              $target_header_dir/features.h > /dev/null && \
4647              test -f $target_header_dir/bits/uClibc_config.h && \
4648              $EGREP '^[         ]*#[    ]*define[       ]+__UCLIBC_HAS_SSP__[   ]+1' \
4649              $target_header_dir/bits/uClibc_config.h > /dev/null; then
4650           gcc_cv_libc_provides_ssp=yes
4651         fi
4652       # all versions of Bionic support stack protector
4653       elif test -f $target_header_dir/sys/cdefs.h \
4654         && $EGREP '^[  ]*#[    ]*define[       ]+__BIONIC__[   ]+1' \
4655            $target_header_dir/sys/cdefs.h > /dev/null; then
4656          gcc_cv_libc_provides_ssp=yes
4657       fi]
4658         ;;
4659        *-*-gnu*)
4660          # Avoid complicated tests (see
4661          # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
4662          # simply assert that glibc does provide this, which is true for all
4663          # realistically usable GNU/Hurd configurations.
4664          gcc_cv_libc_provides_ssp=yes;;
4665        *-*-darwin* | *-*-freebsd*)
4666          AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
4667            [echo "no __stack_chk_fail on this target"])
4668         ;;
4669   *) gcc_cv_libc_provides_ssp=no ;;
4670     esac])
4671
4672 if test x$gcc_cv_libc_provides_ssp = xyes; then
4673   AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
4674             [Define if your target C library provides stack protector support])
4675 fi
4676
4677 # Test for <sys/sdt.h> on the target.
4678 GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H])
4679 AC_MSG_CHECKING(sys/sdt.h in the target C library)
4680 have_sys_sdt_h=no
4681 if test -f $target_header_dir/sys/sdt.h; then
4682   have_sys_sdt_h=yes
4683   AC_DEFINE(HAVE_SYS_SDT_H, 1,
4684             [Define if your target C library provides sys/sdt.h])
4685 fi
4686 AC_MSG_RESULT($have_sys_sdt_h)
4687
4688 # Check if TFmode long double should be used by default or not.
4689 # Some glibc targets used DFmode long double, but with glibc 2.4
4690 # and later they can use TFmode.
4691 case "$target" in
4692   powerpc*-*-linux* | \
4693   sparc*-*-linux* | \
4694   s390*-*-linux* | \
4695   alpha*-*-linux*)
4696     AC_ARG_WITH(long-double-128,
4697       [AS_HELP_STRING([--with-long-double-128],
4698                       [use 128-bit long double by default])],
4699       gcc_cv_target_ldbl128="$with_long_double_128",
4700       [[gcc_cv_target_ldbl128=no
4701       grep '^[  ]*#[    ]*define[       ][      ]*__LONG_DOUBLE_MATH_OPTIONAL' \
4702         $target_header_dir/bits/wordsize.h > /dev/null 2>&1 \
4703       && gcc_cv_target_ldbl128=yes
4704       ]])
4705     ;;
4706 esac
4707 if test x$gcc_cv_target_ldbl128 = xyes; then
4708   AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
4709             [Define if TFmode long double should be the default])
4710 fi
4711
4712 AC_MSG_CHECKING(dl_iterate_phdr in target C library)
4713 gcc_cv_target_dl_iterate_phdr=unknown
4714 case "$target" in
4715   # Restrict to Solaris 11+.  While most of the Solaris 11 linker changes
4716   # were backported to Solaris 10 Update 10, dl_iterate_phdr only lives in
4717   # libdl there, both complicating its use and breaking compatibility
4718   # between Solaris 10 updates.
4719   *-*-solaris2.1[[1-9]]*)
4720     # <link.h> needs both a dl_iterate_phdr declaration and support for
4721     # compilation with largefile support.
4722     if grep dl_iterate_phdr $target_header_dir/link.h > /dev/null 2>&1 \
4723       && grep 'large file capable' $target_header_dir/link.h > /dev/null 2>&1; then
4724       gcc_cv_target_dl_iterate_phdr=yes
4725     else
4726       gcc_cv_target_dl_iterate_phdr=no
4727     fi
4728     ;;
4729 esac
4730 GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
4731 if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
4732    AC_DEFINE(TARGET_DL_ITERATE_PHDR, 1,
4733 [Define if your target C library provides the `dl_iterate_phdr' function.])
4734 fi
4735 AC_MSG_RESULT($gcc_cv_target_dl_iterate_phdr)
4736
4737 # Find out what GC implementation we want, or may, use.
4738 AC_ARG_WITH(gc,
4739 [AS_HELP_STRING([--with-gc={page,zone}],
4740                 [choose the garbage collection mechanism to use
4741                  with the compiler])],
4742 [case "$withval" in
4743   page)
4744     GGC=ggc-$withval
4745     ;;
4746   zone)
4747     GGC=ggc-$withval
4748     AC_DEFINE(GGC_ZONE, 1, [Define if the zone collector is in use])
4749     ;;
4750   *)
4751     AC_MSG_ERROR([$withval is an invalid option to --with-gc])
4752     ;;
4753 esac],
4754 [GGC=ggc-page])
4755 AC_SUBST(GGC)
4756 echo "Using $GGC for garbage collection."
4757
4758 # Libraries to use on the host.  This will normally be set by the top
4759 # level Makefile.  Here we simply capture the value for our Makefile.
4760 if test -z "${HOST_LIBS+set}"; then
4761   HOST_LIBS=
4762 fi
4763 AC_SUBST(HOST_LIBS)
4764
4765 # Use the system's zlib library.
4766 zlibdir=-L../zlib
4767 zlibinc="-I\$(srcdir)/../zlib"
4768 AC_ARG_WITH(system-zlib,
4769 [AS_HELP_STRING([--with-system-zlib], [use installed libz])],
4770 zlibdir=
4771 zlibinc=
4772 )
4773 AC_SUBST(zlibdir)
4774 AC_SUBST(zlibinc)
4775
4776 dnl Very limited version of automake's enable-maintainer-mode
4777
4778 AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
4779   dnl maintainer-mode is disabled by default
4780   AC_ARG_ENABLE(maintainer-mode,
4781 [AS_HELP_STRING([--enable-maintainer-mode],
4782                 [enable make rules and dependencies not useful
4783                  (and sometimes confusing) to the casual installer])],
4784       maintainer_mode=$enableval,
4785       maintainer_mode=no)
4786
4787 AC_MSG_RESULT($maintainer_mode)
4788
4789 if test "$maintainer_mode" = "yes"; then
4790   MAINT=''
4791 else
4792   MAINT='#'
4793 fi
4794 AC_SUBST(MAINT)dnl
4795
4796 # --------------
4797 # Language hooks
4798 # --------------
4799
4800 # Make empty files to contain the specs and options for each language.
4801 # Then add #include lines to for a compiler that has specs and/or options.
4802
4803 subdirs=
4804 lang_opt_files=
4805 lang_specs_files=
4806 lang_tree_files=
4807 # These (without "all_") are set in each config-lang.in.
4808 # `language' must be a single word so is spelled singularly.
4809 all_languages=
4810 all_compilers=
4811 all_outputs='Makefile'
4812 # List of language makefile fragments.
4813 all_lang_makefrags=
4814 # Additional files for gengtype
4815 all_gtfiles="$target_gtfiles"
4816
4817 # These are the languages that are set in --enable-languages,
4818 # and are available in the GCC tree.
4819 all_selected_languages=
4820
4821 # Add the language fragments.
4822 # Languages are added via two mechanisms.  Some information must be
4823 # recorded in makefile variables, these are defined in config-lang.in.
4824 # We accumulate them and plug them into the main Makefile.
4825 # The other mechanism is a set of hooks for each of the main targets
4826 # like `clean', `install', etc.
4827
4828 language_hooks="Make-hooks"
4829
4830 for lang in ${srcdir}/*/config-lang.in
4831 do
4832 changequote(,)dnl
4833         test "$lang" = "${srcdir}/*/config-lang.in" && continue
4834
4835         lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^   ]*\).*$,\1,p' $lang`
4836         if test "x$lang_alias" = x
4837         then
4838               echo "$lang doesn't set \$language." 1>&2
4839               exit 1
4840         fi
4841         subdir="`echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`"
4842         subdirs="$subdirs $subdir"
4843
4844         # $gcc_subdir is where the gcc integration files are to be found
4845         # for a language, both for internal compiler purposes (compiler
4846         # sources implementing front-end to GCC tree converters), and for
4847         # build infrastructure purposes (Make-lang.in, etc.)
4848         #
4849         # This will be <subdir> (relative to $srcdir) if a line like 
4850         # gcc_subdir="<subdir>" or gcc_subdir=<subdir>
4851         # is found in <langdir>/config-lang.in, and will remain <langdir>
4852         # otherwise.
4853         #
4854         # Except for the language alias (fetched above), the regular
4855         # "config-lang.in" contents are always retrieved from $gcc_subdir,
4856         # so a <langdir>/config-lang.in setting gcc_subdir typically sets
4857         # only this and the language alias.
4858
4859         gcc_subdir=`sed -n -e 's,^gcc_subdir=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^gcc_subdir=\([^   ]*\).*$,\1,p' $lang`
4860         if [ "$gcc_subdir" = "" ]; then
4861            gcc_subdir="$subdir"
4862         fi
4863
4864         case ",$enable_languages," in
4865         *,$lang_alias,*)
4866             all_selected_languages="$all_selected_languages $lang_alias"
4867             if test -f $srcdir/$gcc_subdir/lang-specs.h; then
4868                 lang_specs_files="$lang_specs_files $srcdir/$gcc_subdir/lang-specs.h"
4869             fi
4870             ;;
4871         esac
4872 changequote([,])dnl
4873
4874         language=
4875         boot_language=
4876         compilers=
4877         outputs=
4878         gtfiles=
4879         subdir_requires=
4880         . ${srcdir}/$gcc_subdir/config-lang.in
4881         if test "x$language" = x
4882         then
4883                 echo "${srcdir}/$gcc_subdir/config-lang.in doesn't set \$language." 1>&2
4884                 exit 1
4885         fi
4886
4887         ok=:
4888         case ",$enable_languages," in
4889                 *,$lang_alias,*) ;;
4890                 *)
4891                         for i in $subdir_requires; do
4892                                 test -f "${srcdir}/$i/config-lang.in" && continue
4893                                 ok=false
4894                                 break
4895                         done
4896                 ;;
4897         esac
4898         $ok || continue
4899
4900         all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$gcc_subdir/Make-lang.in"
4901         if test -f $srcdir/$gcc_subdir/lang.opt; then
4902             lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt"
4903             all_opt_files="$all_opt_files $srcdir/$gcc_subdir/lang.opt"
4904         fi
4905         if test -f $srcdir/$gcc_subdir/$subdir-tree.def; then
4906             lang_tree_files="$lang_tree_files $srcdir/$gcc_subdir/$subdir-tree.def"
4907         fi
4908         all_languages="$all_languages $language"
4909         all_compilers="$all_compilers $compilers"
4910         all_outputs="$all_outputs $outputs"
4911         all_gtfiles="$all_gtfiles [[$subdir]] $gtfiles"
4912         case ",$enable_languages," in
4913                 *,lto,*)
4914                     AC_DEFINE(ENABLE_LTO, 1, [Define to enable LTO support.])
4915                     enable_lto=yes
4916                     AC_SUBST(enable_lto)
4917                     ;;
4918                 *) ;;
4919         esac
4920 done
4921
4922 # Pick up gtfiles for c
4923 gtfiles=
4924 . ${srcdir}/c-config-lang.in
4925 all_gtfiles="$all_gtfiles [[c]] $gtfiles"
4926
4927 check_languages=
4928 for language in $all_selected_languages
4929 do
4930         check_languages="$check_languages check-$language"
4931 done
4932
4933 # We link each language in with a set of hooks, reached indirectly via
4934 # lang.${target}.  Only do so for selected languages.
4935
4936 rm -f Make-hooks
4937 touch Make-hooks
4938 target_list="all.cross start.encap rest.encap tags \
4939         install-common install-man install-info install-pdf install-html dvi \
4940         pdf html uninstall info man srcextra srcman srcinfo \
4941         mostlyclean clean distclean maintainer-clean install-plugin"
4942
4943 for t in $target_list
4944 do
4945         x=
4946         for lang in $all_selected_languages
4947         do
4948                 x="$x $lang.$t"
4949         done
4950         echo "lang.$t: $x" >> Make-hooks
4951 done
4952
4953 # --------
4954 # Option include files
4955 # --------
4956
4957 ${AWK} -f $srcdir/opt-include.awk $all_opt_files > option-includes.mk
4958 option_includes="option-includes.mk"
4959 AC_SUBST_FILE(option_includes)
4960
4961 # --------
4962 # UNSORTED
4963 # --------
4964
4965 # Create .gdbinit.
4966
4967 echo "dir ." > .gdbinit
4968 echo "dir ${srcdir}" >> .gdbinit
4969 if test x$gdb_needs_out_file_path = xyes
4970 then
4971         echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
4972 fi
4973 if test "x$subdirs" != x; then
4974         for s in $subdirs
4975         do
4976                 echo "dir ${srcdir}/$s" >> .gdbinit
4977         done
4978 fi
4979 echo "source ${srcdir}/gdbinit.in" >> .gdbinit
4980
4981 gcc_tooldir='$(libsubdir)/$(libsubdir_to_prefix)$(target_noncanonical)'
4982 AC_SUBST(gcc_tooldir)
4983 AC_SUBST(dollar)
4984
4985 # Find a directory in which to install a shared libgcc.
4986
4987 AC_ARG_ENABLE(version-specific-runtime-libs,
4988 [AS_HELP_STRING([--enable-version-specific-runtime-libs],
4989                 [specify that runtime libraries should be
4990                  installed in a compiler-specific directory])])
4991
4992 # Substitute configuration variables
4993 AC_SUBST(subdirs)
4994 AC_SUBST(srcdir)
4995 AC_SUBST(all_compilers)
4996 AC_SUBST(all_gtfiles)
4997 AC_SUBST(all_lang_makefrags)
4998 AC_SUBST(all_languages)
4999 AC_SUBST(all_selected_languages)
5000 AC_SUBST(build_exeext)
5001 AC_SUBST(build_install_headers_dir)
5002 AC_SUBST(build_xm_file_list)
5003 AC_SUBST(build_xm_include_list)
5004 AC_SUBST(build_xm_defines)
5005 AC_SUBST(build_file_translate)
5006 AC_SUBST(check_languages)
5007 AC_SUBST(cpp_install_dir)
5008 AC_SUBST(xmake_file)
5009 AC_SUBST(tmake_file)
5010 AC_SUBST(TM_ENDIAN_CONFIG)
5011 AC_SUBST(TM_MULTILIB_CONFIG)
5012 AC_SUBST(TM_MULTILIB_EXCEPTIONS_CONFIG)
5013 AC_SUBST(extra_gcc_objs)
5014 AC_SUBST(user_headers_inc_next_pre)
5015 AC_SUBST(user_headers_inc_next_post)
5016 AC_SUBST(extra_headers_list)
5017 AC_SUBST(extra_objs)
5018 AC_SUBST(extra_passes)
5019 AC_SUBST(extra_programs)
5020 AC_SUBST(float_h_file)
5021 AC_SUBST(gcc_config_arguments)
5022 AC_SUBST(gcc_gxx_include_dir)
5023 AC_SUBST(gcc_gxx_include_dir_add_sysroot)
5024 AC_SUBST(host_exeext)
5025 AC_SUBST(host_xm_file_list)
5026 AC_SUBST(host_xm_include_list)
5027 AC_SUBST(host_xm_defines)
5028 AC_SUBST(out_host_hook_obj)
5029 AC_SUBST(install)
5030 AC_SUBST(lang_opt_files)
5031 AC_SUBST(lang_specs_files)
5032 AC_SUBST(lang_tree_files)
5033 AC_SUBST(local_prefix)
5034 AC_SUBST(md_file)
5035 AC_SUBST(objc_boehm_gc)
5036 AC_SUBST(out_file)
5037 AC_SUBST(out_object_file)
5038 AC_SUBST(common_out_file)
5039 AC_SUBST(common_out_object_file)
5040 AC_SUBST(tm_file_list)
5041 AC_SUBST(tm_include_list)
5042 AC_SUBST(tm_defines)
5043 AC_SUBST(tm_p_file_list)
5044 AC_SUBST(tm_p_include_list)
5045 AC_SUBST(xm_file_list)
5046 AC_SUBST(xm_include_list)
5047 AC_SUBST(xm_defines)
5048 AC_SUBST(use_gcc_stdint)
5049 AC_SUBST(c_target_objs)
5050 AC_SUBST(cxx_target_objs)
5051 AC_SUBST(fortran_target_objs)
5052 AC_SUBST(target_cpu_default)
5053
5054 AC_SUBST_FILE(language_hooks)
5055
5056 # Echo link setup.
5057 if test x${build} = x${host} ; then
5058   if test x${host} = x${target} ; then
5059     echo "Links are now set up to build a native compiler for ${target}." 1>&2
5060   else
5061     echo "Links are now set up to build a cross-compiler" 1>&2
5062     echo " from ${host} to ${target}." 1>&2
5063   fi
5064 else
5065   if test x${host} = x${target} ; then
5066     echo "Links are now set up to build (on ${build}) a native compiler" 1>&2
5067     echo " for ${target}." 1>&2
5068   else
5069     echo "Links are now set up to build (on ${build}) a cross-compiler" 1>&2
5070     echo " from ${host} to ${target}." 1>&2
5071   fi
5072 fi
5073
5074 AC_ARG_VAR(GMPLIBS,[How to link GMP])
5075 AC_ARG_VAR(GMPINC,[How to find GMP include files])
5076
5077 AC_ARG_VAR(PPLLIBS,[How to link PPL])
5078 AC_ARG_VAR(PPLINC,[How to find PPL include files])
5079
5080 AC_ARG_VAR(CLOOGLIBS,[How to link CLOOG])
5081 AC_ARG_VAR(CLOOGINC,[How to find CLOOG include files])
5082 if test "x${CLOOGLIBS}" != "x" ; then 
5083    AC_DEFINE(HAVE_cloog, 1, [Define if cloog is in use.])
5084 fi
5085
5086 # Check for plugin support
5087 AC_ARG_ENABLE(plugin,
5088 [AS_HELP_STRING([--enable-plugin], [enable plugin support])],
5089 enable_plugin=$enableval,
5090 enable_plugin=yes; default_plugin=yes)
5091
5092 pluginlibs=
5093
5094 case "${host}" in
5095   *-*-darwin*)
5096     if test x$build = x$host; then
5097       export_sym_check="nm${exeext} -g"
5098     elif test x$host = x$target; then
5099       export_sym_check="$gcc_cv_nm -g"
5100     else
5101       export_sym_check=
5102     fi
5103   ;;
5104   *)
5105     if test x$build = x$host; then
5106       export_sym_check="objdump${exeext} -T"
5107     elif test x$host = x$target; then
5108       export_sym_check="$gcc_cv_objdump -T"
5109     else
5110       export_sym_check=
5111     fi
5112   ;;
5113 esac
5114
5115 if test x"$enable_plugin" = x"yes"; then
5116
5117   AC_MSG_CHECKING([for exported symbols])
5118   if test "x$export_sym_check" != x; then
5119     echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
5120     ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
5121     if $export_sym_check conftest | grep foobar > /dev/null; then
5122       : # No need to use a flag
5123       AC_MSG_RESULT([yes])
5124     else
5125       AC_MSG_RESULT([yes])
5126       AC_MSG_CHECKING([for -rdynamic])
5127       ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
5128       if $export_sym_check conftest | grep foobar > /dev/null; then
5129         plugin_rdynamic=yes
5130         pluginlibs="-rdynamic"
5131       else
5132         plugin_rdynamic=no
5133         enable_plugin=no
5134       fi
5135       AC_MSG_RESULT([$plugin_rdynamic])
5136     fi
5137   else
5138     AC_MSG_RESULT([unable to check])
5139   fi
5140
5141   # Check -ldl
5142   saved_LIBS="$LIBS"
5143   AC_SEARCH_LIBS([dlopen], [dl])
5144   if test x"$ac_cv_search_dlopen" = x"-ldl"; then
5145     pluginlibs="$pluginlibs -ldl"
5146   fi
5147   LIBS="$saved_LIBS"
5148
5149   # Check that we can build shared objects with -fPIC -shared
5150   saved_LDFLAGS="$LDFLAGS"
5151   saved_CFLAGS="$CFLAGS"
5152   case "${host}" in
5153     *-*-darwin*)
5154       CFLAGS=`echo $CFLAGS | sed s/-mdynamic-no-pic//g`
5155       CFLAGS="$CFLAGS -fPIC"
5156       LDFLAGS="$LDFLAGS -shared -undefined dynamic_lookup"
5157     ;;
5158     *)
5159       CFLAGS="$CFLAGS -fPIC"
5160       LDFLAGS="$LDFLAGS -fPIC -shared"
5161     ;;
5162   esac
5163   AC_MSG_CHECKING([for -fPIC -shared])
5164   AC_TRY_LINK(
5165     [extern int X;],[return X == 0;],
5166     [AC_MSG_RESULT([yes]); have_pic_shared=yes],
5167     [AC_MSG_RESULT([no]); have_pic_shared=no])
5168   if test x"$have_pic_shared" != x"yes" -o x"$ac_cv_search_dlopen" = x"no"; then
5169     pluginlibs=
5170     enable_plugin=no
5171   fi
5172   LDFLAGS="$saved_LDFLAGS"
5173   CFLAGS="$saved_CFLAGS"
5174
5175   # If plugin support had been requested but not available, fail.
5176   if test x"$enable_plugin" = x"no" ; then
5177     if test x"$default_plugin" != x"yes"; then
5178       AC_MSG_ERROR([
5179 Building GCC with plugin support requires a host that supports
5180 -fPIC, -shared, -ldl and -rdynamic.])
5181     fi
5182   fi
5183 fi
5184
5185 AC_SUBST(pluginlibs)
5186 AC_SUBST(enable_plugin)
5187 if test x"$enable_plugin" = x"yes"; then
5188   AC_DEFINE(ENABLE_PLUGIN, 1, [Define to enable plugin support.])
5189 fi
5190
5191
5192 AC_ARG_ENABLE(libquadmath-support,
5193 [AS_HELP_STRING([--disable-libquadmath-support],
5194   [disable libquadmath support for Fortran])],
5195 ENABLE_LIBQUADMATH_SUPPORT=$enableval,
5196 ENABLE_LIBQUADMATH_SUPPORT=yes)
5197 if test "${ENABLE_LIBQUADMATH_SUPPORT}" != "no" ; then
5198   AC_DEFINE(ENABLE_LIBQUADMATH_SUPPORT, 1,
5199             [Define to 1 to enable libquadmath support])
5200 fi
5201
5202
5203 # Specify what hash style to use by default.
5204 AC_ARG_WITH([linker-hash-style],
5205 [AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
5206                 [specify the linker hash style])],
5207 [case x"$withval" in
5208    xsysv)
5209      LINKER_HASH_STYLE=sysv
5210      ;;
5211    xgnu)
5212      LINKER_HASH_STYLE=gnu
5213      ;;
5214    xboth)
5215      LINKER_HASH_STYLE=both
5216      ;;
5217    *)
5218      AC_MSG_ERROR([$withval is an invalid option to --with-linker-hash-style])
5219      ;;
5220  esac],
5221 [LINKER_HASH_STYLE=''])
5222 if test x"${LINKER_HASH_STYLE}" != x; then
5223   AC_DEFINE_UNQUOTED(LINKER_HASH_STYLE, "$LINKER_HASH_STYLE",
5224                                          [The linker hash style])
5225 fi
5226
5227 # Configure the subdirectories
5228 # AC_CONFIG_SUBDIRS($subdirs)
5229
5230 # Create the Makefile
5231 # and configure language subdirectories
5232 AC_CONFIG_FILES($all_outputs)
5233
5234 AC_CONFIG_COMMANDS([default],
5235 [
5236 case ${CONFIG_HEADERS} in
5237   *auto-host.h:config.in*)
5238   echo > cstamp-h ;;
5239 esac
5240 # Make sure all the subdirs exist.
5241 for d in $subdirs doc build common c-family
5242 do
5243     test -d $d || mkdir $d
5244 done
5245 ], 
5246 [subdirs='$subdirs'])
5247 AC_OUTPUT
5248