OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / aclocal.m4
index acfef12..4228504 100644 (file)
@@ -1,3 +1,6 @@
+sinclude(../config/acx.m4)
+sinclude(../config/accross.m4)
+
 dnl See if stdbool.h properly defines bool and true/false.
 AC_DEFUN(gcc_AC_HEADER_STDBOOL,
 [AC_CACHE_CHECK([for working stdbool.h],
@@ -306,10 +309,7 @@ procedure conftest is begin null; end conftest;
 EOF
 gcc_cv_prog_adac=no
 # Have to do ac_tool_prefix and user overrides by hand.
-user_adac=$ADAC
-user_cc=$CC
-for cand in ${ac_tool_prefix}$user_adac        $user_adac      \
-           ${ac_tool_prefix}$user_cc   $user_cc        \
+for cand in ${ADAC+"$ADAC"} ${CC+"$CC"}        \
            ${ac_tool_prefix}gcc        gcc             \
            ${ac_tool_prefix}cc         cc              \
            ${ac_tool_prefix}gnatgcc    gnatgcc         \
@@ -399,352 +399,93 @@ fi
 AC_SUBST($1)dnl
 ])
 
-# Check whether mmap can map an arbitrary page from /dev/zero or with
-# MAP_ANONYMOUS, without MAP_FIXED.
-AC_DEFUN([AC_FUNC_MMAP_ANYWHERE],
-[AC_CHECK_FUNCS(getpagesize)
-# The test program for the next two tests is the same except for one
-# set of ifdefs.
-changequote({{{,}}})dnl
-{{{cat >ct-mmap.inc <<'EOF'
-#include <sys/types.h>
+# mmap(2) blacklisting.  Some platforms provide the mmap library routine
+# but don't support all of the features we need from it.
+AC_DEFUN([gcc_AC_FUNC_MMAP_BLACKLIST],
+[if test $ac_cv_header_sys_mman_h != yes \
+ || test $ac_cv_func_mmap != yes; then
+   gcc_cv_func_mmap_file=no
+   gcc_cv_func_mmap_dev_zero=no
+   gcc_cv_func_mmap_anon=no
+else
+   AC_CACHE_CHECK([whether read-only mmap of a plain file works], 
+  gcc_cv_func_mmap_file,
+  [# Add a system to this blacklist if 
+   # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
+   # memory area containing the same data that you'd get if you applied
+   # read() to the same fd.  The only system known to have a problem here
+   # is VMS, where text files have record structure.
+   case "$host_os" in
+     vms*) 
+        gcc_cv_func_mmap_file=no ;;
+     *)
+        gcc_cv_func_mmap_file=yes;;
+   esac])
+   AC_CACHE_CHECK([whether mmap from /dev/zero works],
+  gcc_cv_func_mmap_dev_zero,
+  [# Add a system to this blacklist if it has mmap() but /dev/zero
+   # does not exist, or if mmapping /dev/zero does not give anonymous
+   # zeroed pages with both the following properties:
+   # 1. If you map N consecutive pages in with one call, and then
+   #    unmap any subset of those pages, the pages that were not
+   #    explicitly unmapped remain accessible.
+   # 2. If you map two adjacent blocks of memory and then unmap them
+   #    both at once, they must both go away.
+   # Systems known to be in this category are Windows (all variants),
+   # VMS, and Darwin.
+   case "$host_os" in
+     vms* | cygwin* | pe | mingw* | darwin*)
+        gcc_cv_func_mmap_dev_zero=no ;;
+     *)
+        gcc_cv_func_mmap_dev_zero=yes;;
+   esac])
+
+   # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
+   AC_CACHE_CHECK([for MAP_ANON(YMOUS)], gcc_cv_decl_map_anon,
+    [AC_TRY_COMPILE(
+[#include <sys/types.h>
 #include <sys/mman.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <setjmp.h>
-#include <stdio.h>
-
-#if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
-# define MAP_ANONYMOUS MAP_ANON
-#endif
-
-/* This mess was copied from the GNU getpagesize.h.  */
-#ifndef HAVE_GETPAGESIZE
-# ifdef HAVE_UNISTD_H
-#  include <unistd.h>
-# endif
-
-/* Assume that all systems that can run configure have sys/param.h.  */
-# ifndef HAVE_SYS_PARAM_H
-#  define HAVE_SYS_PARAM_H 1
-# endif
-
-# ifdef _SC_PAGESIZE
-#  define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-#  ifdef HAVE_SYS_PARAM_H
-#   include <sys/param.h>
-#   ifdef EXEC_PAGESIZE
-#    define getpagesize() EXEC_PAGESIZE
-#   else /* no EXEC_PAGESIZE */
-#    ifdef NBPG
-#     define getpagesize() NBPG * CLSIZE
-#     ifndef CLSIZE
-#      define CLSIZE 1
-#     endif /* no CLSIZE */
-#    else /* no NBPG */
-#     ifdef NBPC
-#      define getpagesize() NBPC
-#     else /* no NBPC */
-#      ifdef PAGESIZE
-#       define getpagesize() PAGESIZE
-#      endif /* PAGESIZE */
-#     endif /* no NBPC */
-#    endif /* no NBPG */
-#   endif /* no EXEC_PAGESIZE */
-#  else /* no HAVE_SYS_PARAM_H */
-#   define getpagesize() 8192  /* punt totally */
-#  endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-#ifndef MAP_FAILED
-# define MAP_FAILED -1
-#endif
+#include <unistd.h>
 
-#undef perror_exit
-#define perror_exit(str, val) \
-  do { perror(str); exit(val); } while (0)
-
-/* Some versions of cygwin mmap require that munmap is called with the
-   same parameters as mmap.  GCC expects that this is not the case.
-   Test for various forms of this problem.  Warning - icky signal games.  */
-
-static sigset_t unblock_sigsegv;
-static jmp_buf r;
-static size_t pg;
-static int devzero;
-
-static char *
-anonmap (size)
-     size_t size;
-{
-#ifdef USE_MAP_ANON
-  return (char *) mmap (0, size, PROT_READ|PROT_WRITE,
-                       MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-#else
-  return (char *) mmap (0, size, PROT_READ|PROT_WRITE,
-                       MAP_PRIVATE, devzero, 0);
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
 #endif
-}
-
-static void
-sigsegv (unused)
-     int unused;
-{
-  sigprocmask (SIG_UNBLOCK, &unblock_sigsegv, 0);
-  longjmp (r, 1);
-}
-
-/* Basic functionality test.  */
-void
-test_0 ()
-{
-  char *x = anonmap (pg);
-  if (x == (char *) MAP_FAILED)
-    perror_exit("test 0 mmap", 2);
-
-  *(int *)x += 1;
-
-  if (munmap(x, pg) < 0)
-    perror_exit("test 0 munmap", 3);
-}
-
-/* 1. If we map a 2-page region and unmap its second page, the first page
-   must remain.  */
-static void
-test_1 ()
-{
-  char *x = anonmap (pg * 2);
-  if (x == (char *)MAP_FAILED)
-    perror_exit ("test 1 mmap", 4);
-
-  signal (SIGSEGV, sigsegv);
-  if (setjmp (r))
-    perror_exit ("test 1 fault", 5);
-
-  x[0] = 1;
-  x[pg] = 1;
-
-  if (munmap (x + pg, pg) < 0)
-    perror_exit ("test 1 munmap 1", 6);
-  x[0] = 2;
-
-  if (setjmp (r) == 0)
-    {
-      x[pg] = 1;
-      perror_exit ("test 1 no fault", 7);
-    }
-  if (munmap (x, pg) < 0)
-    perror_exit ("test 1 munmap 2", 8);
-}
-
-/* 2. If we map a 2-page region and unmap its first page, the second
-   page must remain.  */
-static void
-test_2 ()
-{
-  char *x = anonmap (pg * 2);
-  if (x == (char *)MAP_FAILED)
-    perror_exit ("test 2 mmap", 9);
-
-  signal (SIGSEGV, sigsegv);
-  if (setjmp (r))
-    perror_exit ("test 2 fault", 10);
-
-  x[0] = 1;
-  x[pg] = 1;
-
-  if (munmap (x, pg) < 0)
-    perror_exit ("test 2 munmap 1", 11);
-
-  x[pg] = 2;
-
-  if (setjmp (r) == 0)
-    {
-      x[0] = 1;
-      perror_exit ("test 2 no fault", 12);
-    }
-
-  if (munmap (x+pg, pg) < 0)
-    perror_exit ("test 2 munmap 2", 13);
-}
-
-/* 3. If we map two adjacent 1-page regions and unmap them both with
-   one munmap, both must go away.
-
-   Getting two adjacent 1-page regions with two mmap calls is slightly
-   tricky.  All OS's tested skip over already-allocated blocks; therefore
-   we have been careful to unmap all allocated regions in previous tests.
-   HP/UX allocates pages backward in memory.  No OS has yet been observed
-   to be so perverse as to leave unmapped space between consecutive calls
-   to mmap.  */
-
-static void
-test_3 ()
-{
-  char *x, *y, *z;
-
-  x = anonmap (pg);
-  if (x == (char *)MAP_FAILED)
-    perror_exit ("test 3 mmap 1", 14);
-  y = anonmap (pg);
-  if (y == (char *)MAP_FAILED)
-    perror_exit ("test 3 mmap 2", 15);
-
-  if (y != x + pg)
-    {
-      if (y == x - pg)
-       z = y, y = x, x = z;
-      else
-       {
-         fprintf (stderr, "test 3 nonconsecutive pages - %lx, %lx\n",
-                  (unsigned long)x, (unsigned long)y);
-         exit (16);
-       }
-    }
-
-  signal (SIGSEGV, sigsegv);
-  if (setjmp (r))
-    perror_exit ("test 3 fault", 17);
-
-  x[0] = 1;
-  y[0] = 1;
-
-  if (munmap (x, pg*2) < 0)
-    perror_exit ("test 3 munmap", 18);
-
-  if (setjmp (r) == 0)
-    {
-      x[0] = 1;
-      perror_exit ("test 3 no fault 1", 19);
-    }
-  
-  signal (SIGSEGV, sigsegv);
-  if (setjmp (r) == 0)
-    {
-      y[0] = 1;
-      perror_exit ("test 3 no fault 2", 20);
-    }
-}
-
-int
-main ()
-{
-  sigemptyset (&unblock_sigsegv);
-  sigaddset (&unblock_sigsegv, SIGSEGV);
-  pg = getpagesize ();
-#ifndef USE_MAP_ANON
-  devzero = open ("/dev/zero", O_RDWR);
-  if (devzero < 0)
-    perror_exit ("open /dev/zero", 1);
-#endif
-
-  test_0();
-  test_1();
-  test_2();
-  test_3();
-
-  exit(0);
-}
-EOF}}}
-changequote([,])dnl
-
-AC_CACHE_CHECK(for working mmap from /dev/zero,
-  ac_cv_func_mmap_dev_zero,
-[AC_TRY_RUN(
- [#include "ct-mmap.inc"],
- ac_cv_func_mmap_dev_zero=yes,
- [if test $? -lt 4
- then ac_cv_func_mmap_dev_zero=no
- else ac_cv_func_mmap_dev_zero=buggy
- fi],
- # If this is not cygwin, and /dev/zero is a character device, it's probably
- # safe to assume it works.
- [case "$host_os" in
-   cygwin* | win32 | pe | mingw* ) ac_cv_func_mmap_dev_zero=buggy ;;
-   * ) if test -c /dev/zero
-       then ac_cv_func_mmap_dev_zero=yes
-       else ac_cv_func_mmap_dev_zero=no
-       fi ;;
-  esac])
-])
-if test $ac_cv_func_mmap_dev_zero = yes; then
-  AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1,
-           [Define if mmap can get us zeroed pages from /dev/zero.])
-fi
-
-AC_CACHE_CHECK([for working mmap with MAP_ANON(YMOUS)],
-  ac_cv_func_mmap_anon,
-[AC_TRY_RUN(
- [#define USE_MAP_ANON
-#include "ct-mmap.inc"],
- ac_cv_func_mmap_anon=yes,
- [if test $? -lt 4
- then ac_cv_func_mmap_anon=no
- else ac_cv_func_mmap_anon=buggy
- fi],
- # Unlike /dev/zero, it is not safe to assume MAP_ANON(YMOUS) works
- # just because it's there. Some SCO Un*xen define it but don't implement it.
- ac_cv_func_mmap_anon=no)
-])
-if test $ac_cv_func_mmap_anon = yes; then
-  AC_DEFINE(HAVE_MMAP_ANON, 1,
-           [Define if mmap can get us zeroed pages using MAP_ANON(YMOUS).])
+],
+[int n = MAP_ANONYMOUS;],
+    gcc_cv_decl_map_anon=yes,
+    gcc_cv_decl_map_anon=no)])
+
+   if test $gcc_cv_decl_map_anon = no; then
+     gcc_cv_func_mmap_anon=no
+   else
+     AC_CACHE_CHECK([whether mmap with MAP_ANON(YMOUS) works],
+     gcc_cv_func_mmap_anon,
+  [# Add a system to this blacklist if it has mmap() and MAP_ANON or
+   # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
+   # doesn't give anonymous zeroed pages with the same properties listed
+   # above for use of /dev/zero.
+   # Systems known to be in this category are Windows, VMS, and SCO Unix.
+   case "$host_os" in
+     vms* | cygwin* | pe | mingw* | sco* | udk* )
+        gcc_cv_func_mmap_anon=no ;;
+     *)
+        gcc_cv_func_mmap_anon=yes;;
+   esac])
+   fi
 fi
-rm -f ct-mmap.inc
-])
-
-# Check whether mmap can map a plain file, without MAP_FIXED.
-AC_DEFUN([AC_FUNC_MMAP_FILE], 
-[AC_CACHE_CHECK(for working mmap of a file, ac_cv_func_mmap_file,
-[# Create a file one thousand bytes long.
-for i in 1 2 3 4 5 6 7 8 9 0
-do for j in 1 2 3 4 5 6 7 8 9 0
-do echo $i $j xxxxx
-done
-done > conftestdata$$
-
-AC_TRY_RUN([
-/* Test by Zack Weinberg.  Modified from MMAP_ANYWHERE test by
-   Richard Henderson and Alexandre Oliva.
-   Check whether read-only mmap of a plain file works. */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-
-int main()
-{
-  char *x;
-  int fd;
-  struct stat st;
 
-  fd = open("conftestdata$$", O_RDONLY);
-  if (fd < 0)
-    exit(1);
-
-  if (fstat (fd, &st))
-    exit(2);
-
-  x = (char*)mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
-  if (x == (char *) -1)
-    exit(3);
-
-  if (x[0] != '1' || x[1] != ' ' || x[2] != '1' || x[3] != ' ')
-    exit(4);
-
-  if (munmap(x, st.st_size) < 0)
-    exit(5);
-
-  exit(0);
-}], ac_cv_func_mmap_file=yes, ac_cv_func_mmap_file=no,
-ac_cv_func_mmap_file=no)])
-if test $ac_cv_func_mmap_file = yes; then
+if test $gcc_cv_func_mmap_file = yes; then
   AC_DEFINE(HAVE_MMAP_FILE, 1,
            [Define if read-only mmap of a plain file works.])
 fi
+if test $gcc_cv_func_mmap_dev_zero = yes; then
+  AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1,
+           [Define if mmap of /dev/zero works.])
+fi
+if test $gcc_cv_func_mmap_anon = yes; then
+  AC_DEFINE(HAVE_MMAP_ANON, 1,
+           [Define if mmap with MAP_ANON(YMOUS) works.])
+fi
 ])
 
 dnl Locate a program and check that its version is acceptable.
@@ -794,35 +535,6 @@ if test $gcc_cv_enum_bf_unsigned = yes; then
     [Define if enumerated bitfields are treated as unsigned values.])
 fi])
 
-dnl Host type sizes probe.
-dnl By Kaveh R. Ghazi.  One typo fixed since.
-dnl
-AC_DEFUN([gcc_AC_COMPILE_CHECK_SIZEOF],
-[changequote(<<, >>)dnl
-dnl The name to #define.
-define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
-dnl The cache variable name.
-define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
-changequote([, ])dnl
-AC_MSG_CHECKING(size of $1)
-AC_CACHE_VAL(AC_CV_NAME,
-[for ac_size in 4 8 1 2 16 $3 ; do # List sizes in rough order of prevalence.
-  AC_TRY_COMPILE([#include "confdefs.h"
-#include <sys/types.h>
-$2
-], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size)
-  if test x$AC_CV_NAME != x ; then break; fi
-done
-])
-if test x$AC_CV_NAME = x ; then
-  AC_MSG_ERROR([cannot determine a size for $1])
-fi
-AC_MSG_RESULT($AC_CV_NAME)
-AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1])
-undefine([AC_TYPE_NAME])dnl
-undefine([AC_CV_NAME])dnl
-])
-
 dnl Probe number of bits in a byte.
 dnl Note C89 requires CHAR_BIT >= 8.
 dnl
@@ -910,188 +622,6 @@ elif test $ac_cv_c_charset = EBCDIC; then
   [Define if the host execution character set is EBCDIC.])
 fi])
 
-dnl Utility macro used by next two tests.
-dnl AC_EXAMINE_OBJECT(C source code,
-dnl    commands examining object file,
-dnl    [commands to run if compile failed]):
-dnl
-dnl Compile the source code to an object file; then convert it into a
-dnl printable representation.  All unprintable characters and
-dnl asterisks (*) are replaced by dots (.).  All white space is
-dnl deleted.  Newlines (ASCII 0x10) in the input are preserved in the
-dnl output, but runs of newlines are compressed to a single newline.
-dnl Finally, line breaks are forcibly inserted so that no line is
-dnl longer than 80 columns and the file ends with a newline.  The
-dnl result of all this processing is in the file conftest.dmp, which
-dnl may be examined by the commands in the second argument.
-dnl
-AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
-[AC_LANG_SAVE
-AC_LANG_C
-dnl Next bit cribbed from AC_TRY_COMPILE.
-cat > conftest.$ac_ext <<EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-$1
-]EOF
-if AC_TRY_EVAL(ac_compile); then
-  od -c conftest.o |
-    sed ['s/^[0-7]*[   ]*/ /
-         s/\*/./g
-         s/ \\n/*/g
-         s/ [0-9][0-9][0-9]/./g
-         s/  \\[^ ]/./g'] |
-    tr -d '
- ' | tr -s '*' '
-' | fold | sed '$a\
-' > conftest.dmp
-  $2
-ifelse($3, , , else
-  $3
-)dnl
-fi
-rm -rf conftest*
-AC_LANG_RESTORE])
-
-dnl Host endianness probe.
-dnl This tests byte-within-word endianness.  GCC actually needs
-dnl to know word-within-larger-object endianness.  They are the
-dnl same on all presently supported hosts.
-dnl Differs from AC_C_BIGENDIAN in that it does not require
-dnl running a program on the host, and it defines the macro we
-dnl want to see.
-dnl
-AC_DEFUN([gcc_AC_C_COMPILE_ENDIAN],
-[AC_CACHE_CHECK(byte ordering, ac_cv_c_compile_endian,
-[ac_cv_c_compile_endian=unknown
-gcc_AC_EXAMINE_OBJECT([
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-/* This structure must have no internal padding.  */
-  struct {
-    char prefix[sizeof "\nendian:" - 1];
-    short word;
-    char postfix[2];
- } tester = {
-    "\nendian:",
-#if SIZEOF_SHORT == 4
-    ('A' << (CHAR_BIT * 3)) | ('B' << (CHAR_BIT * 2)) |
-#endif
-    ('A' << CHAR_BIT) | 'B',
-    'X', '\n'
-};],
- [if   grep 'endian:AB' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_compile_endian=big-endian
-  elif grep 'endian:BA' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_compile_endian=little-endian
-  fi])
-])
-if test $ac_cv_c_compile_endian = unknown; then
-  AC_MSG_ERROR([*** unable to determine endianness])
-elif test $ac_cv_c_compile_endian = big-endian; then
-  AC_DEFINE(HOST_WORDS_BIG_ENDIAN, 1,
-  [Define if the host machine stores words of multi-word integers in
-   big-endian order.])
-fi
-])
-
-dnl Floating point format probe.
-dnl The basic concept is the same as the above: grep the object
-dnl file for an interesting string.  We have to watch out for
-dnl rounding changing the values in the object, however; this is
-dnl handled by ignoring the least significant byte of the float.
-dnl
-dnl Does not know about VAX G-float or C4x idiosyncratic format.
-dnl It does know about PDP-10 idiosyncratic format, but this is
-dnl not presently supported by GCC.  S/390 "binary floating point"
-dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
-dnl as ASCII?)
-dnl
-AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
-[AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
-[gcc_AC_EXAMINE_OBJECT(
-[/* This will not work unless sizeof(double) == 8.  */
-extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
-
-/* This structure must have no internal padding.  */
-struct possibility {
-  char prefix[8];
-  double candidate;
-  char postfix[8];
-};
-
-#define C(cand) { "\nformat:", cand, ":tamrof\n" }
-struct possibility table [] =
-{
-  C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
-  C( 3.53802595280598432000e+18), /* D__float - VAX */
-  C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
-  C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
-  C(-5.22995989424860458374e+10)  /* IBMHEXFP - s/390 format, EBCDIC */
-};],
- [if   grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_float_format='IEEE (big-endian)'
-  elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_float_format='IEEE (big-endian)'
-  elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_float_format='IEEE (little-endian)'
-  elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_float_format='IEEE (little-endian)'
-  elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_float_format='VAX D-float'
-  elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_float_format='PDP-10'
-  elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
-    ac_cv_c_float_format='IBM 370 hex'
-  else
-    AC_MSG_ERROR(Unknown floating point format)
-  fi],
-  [AC_MSG_ERROR(compile failed)])
-])
-# IEEE is the default format.  If the float endianness isn't the same
-# as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
-# (which is a tristate: yes, no, default).  This is only an issue with
-# IEEE; the other formats are only supported by a few machines each,
-# all with the same endianness.
-format=
-fbigend=
-case $ac_cv_c_float_format in
-    'IEEE (big-endian)' )
-       if test $ac_cv_c_compile_endian = little-endian; then
-           fbigend=1
-       fi
-       ;;
-    'IEEE (little-endian)' )
-       if test $ac_cv_c_compile_endian = big-endian; then
-           fbigend=0
-       fi
-       ;;
-    'VAX D-float' )
-       format=VAX_FLOAT_FORMAT
-       ;;
-    'PDP-10' )
-       format=PDP10_FLOAT_FORMAT
-       ;;
-    'IBM 370 hex' )
-       format=IBM_FLOAT_FORMAT
-       ;;
-esac
-if test -n "$format"; then
-       AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
-  [Define to the floating point format of the host machine, if not IEEE.])
-fi
-if test -n "$fbigend"; then
-       AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
-  [Define to 1 if the host machine stores floating point numbers in
-   memory with the word containing the sign bit at the lowest address,
-   or to 0 if it does it the other way around.
-
-   This macro should not be defined if the ordering is the same as for
-   multi-word integers.])
-fi
-])
-
 #serial AM2
 
 dnl From Bruno Haible.
@@ -1692,27 +1222,71 @@ strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
   ])
 
 AC_DEFUN(gcc_AC_INITFINI_ARRAY,
-[AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
-                gcc_cv_initfinit_array, [dnl
-  cat > conftest.c <<EOF
+[AC_ARG_ENABLE(initfini-array,
+       [  --enable-initfini-array      use .init_array/.fini_array sections],
+       [], [
+AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
+                gcc_cv_initfini_array, [dnl
+  AC_TRY_RUN([
 static int x = -1;
 int main (void) { return x; }
 int foo (void) { x = 0; }
-int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
-EOF
-  if AC_TRY_COMMAND([${CC-cc} -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
-  then
-    if ./conftest; then
-      gcc_cv_initfinit_array=yes
-    else
-      gcc_cv_initfinit_array=no
-    fi
-  else
-    gcc_cv_initfinit_array=no
+int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;],
+            [gcc_cv_initfini_array=yes], [gcc_cv_initfini_array=no],
+            [gcc_cv_initfini_array=no])])
+  enable_initfini_array=$gcc_cv_initfini_array
+])
+if test $enable_initfini_array = yes; then
+  AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
+    [Define .init_array/.fini_array sections are available and working.])
+fi])
+
+dnl # _gcc_COMPUTE_GAS_VERSION
+dnl # Used by gcc_GAS_VERSION_GTE_IFELSE
+dnl #
+dnl # WARNING:
+dnl # gcc_cv_as_gas_srcdir must be defined before this.
+dnl # This gross requirement will go away eventually.
+AC_DEFUN([_gcc_COMPUTE_GAS_VERSION],
+[gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
+for f in $gcc_cv_as_bfd_srcdir/configure \
+         $gcc_cv_as_gas_srcdir/configure \
+         $gcc_cv_as_gas_srcdir/configure.in \
+         $gcc_cv_as_gas_srcdir/Makefile.in ; do
+  gcc_cv_gas_version=`grep '^VERSION=[[0-9]]*\.[[0-9]]*' $f`
+  if test x$gcc_cv_gas_version != x; then
+    break
   fi
-  rm -f conftest*])
-  AC_SUBST(gcc_cv_initfinit_array)
-  if test $gcc_cv_initfinit_array = yes; then
-    AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
-      [Define .init_array/.fini_array sections are available and working.])
-  fi])
+done
+gcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([[0-9]]*\)"`
+gcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.\([[0-9]]*\)"`
+gcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)"`
+]) []dnl # _gcc_COMPUTE_GAS_VERSION
+
+dnl # gcc_GAS_VERSION_GTE_IFELSE(major, minor, patchlevel,
+dnl #                     [command_if_true = :], [command_if_false = :])
+dnl # Check to see if the version of GAS is greater than or
+dnl # equal to the specified version.
+dnl #
+dnl # The first ifelse() shortens the shell code if the patchlevel
+dnl # is unimportant (the usual case).  The others handle missing
+dnl # commands.  Note that the tests are structured so that the most
+dnl # common version number cases are tested first.
+AC_DEFUN([gcc_GAS_VERSION_GTE_IFELSE],
+[AC_REQUIRE([_gcc_COMPUTE_GAS_VERSION]) []dnl
+ifelse([$3],[0],
+[if test $gcc_cv_gas_major_version -eq $1 \
+&& test $gcc_cv_gas_minor_version -ge $2 \
+|| test $gcc_cv_gas_major_version -gt $1 ; then
+],
+[if test $gcc_cv_gas_major_version -eq $1 \
+&& (test $gcc_cv_gas_minor_version -gt $2 \
+    || (test $gcc_cv_gas_minor_version -eq $2 \
+        && test $gcc_cv_gas_patch_version -ge $3 )) \
+|| test $gcc_cv_gas_major_version -gt $1 ; then
+])
+ifelse([$4],[],[:],[$4])
+ifelse([$5],[],[],[else $5])
+fi
+]) []dnl # gcc_GAS_VERSION_GTE_IFELSE
+