OSDN Git Service

Initial x32 support.
[pf3gnuchains/gcc-fork.git] / gcc / config.gcc
index 811b8e1..f8d7274 100644 (file)
 #                      build-directory files by prefixing them with "./".
 #                      All other files should relative to $srcdir/config.
 #
+#  libgcc_tm_file      A list of target macro files used only for code
+#                      built for the target, not the host.  These files
+#                      are relative to $srcdir/../libgcc/config and
+#                      must not have the same names as files in
+#                      $srcdir/config.
+#
 #  tm_p_file           Location of file with declarations for functions
 #                      in $out_file.
 #
 #  out_file            The name of the machine description C support
 #                      file, if different from "$cpu_type/$cpu_type.c".
 #
+#  common_out_file     The name of the source file for code shared between
+#                      the compiler proper and the driver.
+#
 #  md_file             The name of the machine-description file, if
 #                      different from "$cpu_type/$cpu_type.md".
 #
 #
 #  target_has_targetcm Set to yes or no depending on whether the target
 #                      has its own definition of targetcm.
+#
+#  target_has_targetm_common   Set to yes or no depending on whether the
+#                      target has its own definition of targetm_common.
 
 out_file=
+common_out_file=
 tmake_file=
 extra_headers=
 user_headers_inc_next_pre=
@@ -204,8 +217,10 @@ c_target_objs=
 cxx_target_objs=
 fortran_target_objs=
 target_has_targetcm=no
+target_has_targetm_common=yes
 tm_defines=
 xm_defines=
+libgcc_tm_file=
 # Set this to force installation and use of collect2.
 use_collect2=
 # Set this to override the default target model.
@@ -230,7 +245,10 @@ md_file=
 
 # Obsolete configurations.
 case ${target} in
-   i[34567]86-*-interix3*              \
+   alpha*-dec-osf5.1*                  \
+ | i[34567]86-*-interix3*              \
+ | mips-sgi-irix6.5                    \
+ | mips*-*-openbsd*                    \
  | score-*                             \
  | *-*-solaris2.8*                     \
  )
@@ -282,6 +300,7 @@ case ${target} in
 m32c*-*-*)
         cpu_type=m32c
        tmake_file=m32c/t-m32c
+       target_has_targetm_common=no
         ;;
 alpha*-*-*)
        cpu_type=alpha
@@ -296,11 +315,13 @@ arm*-*-*)
        extra_headers="mmintrin.h arm_neon.h"
        c_target_objs="arm-c.o"
        cxx_target_objs="arm-c.o"
+       extra_options="${extra_options} arm/arm-tables.opt"
        ;;
 avr-*-*)
        cpu_type=avr
        c_target_objs="avr-c.o"
        cxx_target_objs="avr-c.o"
+       extra_options="${extra_options} avr/avr-tables.opt"
        ;;
 bfin*-*)
        cpu_type=bfin
@@ -312,10 +333,12 @@ frv*)     cpu_type=frv
        extra_options="${extra_options} g.opt"
        ;;
 moxie*)        cpu_type=moxie
+       target_has_targetm_common=no
        ;;
 fido-*-*)
        cpu_type=m68k
        extra_headers=math-68881.h
+       extra_options="${extra_options} m68k/m68k-tables.opt"
         ;;
 i[34567]86-*-*)
        cpu_type=i386
@@ -359,6 +382,7 @@ m32r*-*-*)
         ;;
 m68k-*-*)
        extra_headers=math-68881.h
+       extra_options="${extra_options} m68k/m68k-tables.opt"
        ;;
 microblaze*-*-*)
         cpu_type=microblaze
@@ -368,7 +392,7 @@ mips*-*-*)
        cpu_type=mips
        need_64bit_hwint=yes
        extra_headers="loongson.h"
-       extra_options="${extra_options} g.opt"
+       extra_options="${extra_options} g.opt mips/mips-tables.opt"
        ;;
 picochip-*-*)
         cpu_type=picochip
@@ -382,11 +406,11 @@ powerpc*-*-*)
                cpu_is_64bit=yes
                ;;
        esac
-       extra_options="${extra_options} g.opt fused-madd.opt"
+       extra_options="${extra_options} g.opt fused-madd.opt rs6000/rs6000-tables.opt"
        ;;
 rs6000*-*-*)
        need_64bit_hwint=yes
-       extra_options="${extra_options} g.opt fused-madd.opt"
+       extra_options="${extra_options} g.opt fused-madd.opt rs6000/rs6000-tables.opt"
        ;;
 score*-*-*)
        cpu_type=score
@@ -410,6 +434,9 @@ sh[123456789lbe]*-*-* | sh-*-*)
        cpu_type=sh
        need_64bit_hwint=yes
        ;;
+v850*-*-*)
+       cpu_type=v850
+       ;;
 xtensa*-*-*)
        extra_options="${extra_options} fused-madd.opt"
        ;;
@@ -564,8 +591,6 @@ case ${target} in
   case $target in
     *linux*)
       extra_options="$extra_options linux.opt";;
-    *)
-      tm_defines="$tm_defines SINGLE_LIBC";;
   esac
   case $target in
     *-*-*android*)
@@ -665,7 +690,48 @@ case ${target} in
   tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC SINGLE_LIBC"
   ;;
 *-*-solaris2*)
+  # i?86-*-solaris2* needs to insert headers between cpu default and
+  # Solaris 2 specific ones.
+  sol2_tm_file="dbxelf.h elfos.h ${cpu_type}/sysv4.h sol2.h ${cpu_type}/sol2.h"
+  case ${target} in
+    *-*-solaris2.1[0-9]*)
+      sol2_tm_file="${sol2_tm_file} sol2-10.h"
+      use_gcc_stdint=wrap
+      ;;
+    *)
+      use_gcc_stdint=provide
+      ;;
+  esac
+  if test x$gnu_ld = xyes; then
+    tm_file="usegld.h ${tm_file}"
+  fi
+  if test x$gas = xyes; then
+    tm_file="usegas.h ${tm_file}"
+  fi
+  tm_p_file="${tm_p_file} sol2-protos.h"
+  tmake_file="${tmake_file} t-sol2 t-slibgcc-dummy"
+  c_target_objs="${c_target_objs} sol2-c.o"
+  cxx_target_objs="${cxx_target_objs} sol2-c.o"
+  extra_objs="sol2.o"
   extra_options="${extra_options} sol2.opt"
+  case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
+    "":yes:* | yes:yes:* )
+      thread_file=posix
+      ;;
+  esac
+  ;;
+*-*-*vms*)
+  extra_options="${extra_options} vms/vms.opt"
+  xmake_file=vms/x-vms
+  tmake_file="vms/t-vms"
+  extra_objs="vms.o"
+  target_gtfiles="$target_gtfiles \$(srcdir)/config/vms/vms.c"
+  tm_p_file="${tm_p_file} vms/vms-protos.h"
+  if test x$gnu_ld != xyes; then
+    # Build wrappers for native case.
+    extra_programs="ld\$(exeext) ar\$(exeext)"
+    tmake_file="$tmake_file vms/t-vmsnative"
+  fi
   ;;
 *-*-vxworks*)
   tmake_file=t-vxworks
@@ -730,12 +796,14 @@ alpha*-dec-osf5.1*)
        then
                tm_file="${tm_file} dbx.h"
        fi
-       if test x$gas != xyes
+       # mips-tfile and mips-tdump are only used with the native assembler
+       # and require the Tru64 UNIX <a.out.h>, so only build native.
+       if test x$gas != xyes && test x${host} = x${target}
        then
                extra_passes="mips-tfile mips-tdump"
        fi
        use_collect2=yes
-       tmake_file="alpha/t-alpha alpha/t-ieee alpha/t-crtfm alpha/t-osf5"
+       tmake_file="t-slibgcc-dummy"
        tm_file="${tm_file} alpha/osf5.h"
        tm_defines="${tm_defines} TARGET_SUPPORT_ARCH=1"
        extra_options="${extra_options} rpath.opt alpha/osf5.opt"
@@ -744,27 +812,18 @@ alpha*-dec-osf5.1*)
        case ${enable_threads} in
          "" | yes | posix)
            thread_file='posix'
-           tmake_file="${tmake_file} alpha/t-osf-pthread"
            ;;
        esac
        ;;
 alpha64-dec-*vms*)
        tm_file="${tm_file} alpha/vms.h alpha/vms64.h"
        xm_file="alpha/xm-vms.h vms/xm-vms64.h"
-       tmake_file="alpha/t-alpha vms/t-vms alpha/t-vms alpha/t-ieee"
-       xmake_file=vms/x-vms
-       exeext=.exe
-       install_headers_dir=install-headers-cp
-       extra_options="${extra_options} vms/vms.opt"
+       tmake_file="${tmake_file} alpha/t-alpha vms/t-vms64 alpha/t-vms alpha/t-ieee"
        ;;
 alpha*-dec-*vms*)
        tm_file="${tm_file} alpha/vms.h"
        xm_file="alpha/xm-vms.h"
-       tmake_file="alpha/t-alpha vms/t-vms alpha/t-vms alpha/t-ieee"
-       xmake_file=vms/x-vms
-       exeext=.exe
-       install_headers_dir=install-headers-cp
-       extra_options="${extra_options} vms/vms.opt"
+       tmake_file="${tmake_file} alpha/t-alpha alpha/t-vms alpha/t-ieee"
        ;;
 arm-wrs-vxworks)
        tm_file="elfos.h arm/elf.h arm/aout.h ${tm_file} vx-common.h vxworks.h arm/vxworks.h"
@@ -791,7 +850,7 @@ arm*-*-linux*)                      # ARM GNU/Linux with ELF
        case ${target} in
        arm*-*-linux-*eabi)
            tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
-           tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
+           libgcc_tm_file="$libgcc_tm_file arm/bpabi-lib.h"
            tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
            # Define multilib configuration for arm-linux-androideabi.
            case ${target} in
@@ -810,6 +869,7 @@ arm*-*-linux*)                      # ARM GNU/Linux with ELF
            tmake_file="$tmake_file arm/t-linux"
            ;;
        esac
+       with_tls=${with_tls:-gnu}
        tm_file="$tm_file arm/aout.h arm/arm.h"
        tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
        ;;
@@ -819,7 +879,7 @@ arm*-*-uclinux*)            # ARM ucLinux
        case ${target} in
        arm*-*-uclinux*eabi)
            tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h"
-           tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
+           libgcc_tm_file="$libgcc_tm_file arm/bpabi-lib.h"
            tmake_file="$tmake_file arm/t-bpabi"
            # The BPABI long long divmod functions return a 128-bit value in
            # registers r0-r3.  Correctly modeling that requires the use of
@@ -843,7 +903,7 @@ arm*-*-eabi* | arm*-*-symbianelf* )
        need_64bit_hwint=yes
        default_use_cxa_atexit=yes
        tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/bpabi.h"
-       tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
+       libgcc_tm_file="$libgcc_tm_file arm/bpabi-lib.h"
        tmake_file="arm/t-arm arm/t-arm-elf"
        case ${target} in
        arm*-*-eabi*)
@@ -853,6 +913,7 @@ arm*-*-eabi* | arm*-*-symbianelf* )
          ;;
        arm*-*-symbianelf*)
          tm_file="${tm_file} arm/symbian.h"
+         libgcc_tm_file="$libgcc_tm_file arm/symbian-lib.h"
          # We do not include t-bpabi for Symbian OS because the system
          # provides its own implementation of the BPABI functions.
          tmake_file="${tmake_file} arm/t-symbian"
@@ -878,13 +939,13 @@ arm*-wince-pe*)
        extra_objs="pe.o"
        ;;
 avr-*-rtems*)
-       tm_file="avr/avr.h dbxelf.h avr/rtems.h rtems.h newlib-stdint.h"
+       tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h avr/rtems.h rtems.h newlib-stdint.h"
        tmake_file="avr/t-avr t-rtems avr/t-rtems"
        extra_gcc_objs="driver-avr.o avr-devices.o"
        extra_objs="avr-devices.o"
        ;;
 avr-*-*)
-       tm_file="avr/avr.h dbxelf.h newlib-stdint.h"
+       tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h newlib-stdint.h"
        use_gcc_stdint=wrap
        extra_gcc_objs="driver-avr.o avr-devices.o"
        extra_objs="avr-devices.o"
@@ -951,13 +1012,13 @@ fr30-*-elf)
        ;;
 frv-*-elf)
        tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
-       tm_file="${tm_file} ../../libgcc/config/frv/frv-abi.h"
+       libgcc_tm_file="${libgcc_tm_file} frv/frv-abi.h"
        tmake_file=frv/t-frv
        ;;
 frv-*-*linux*)
        tm_file="dbxelf.h elfos.h ${tm_file} \
                 gnu-user.h linux.h glibc-stdint.h frv/linux.h"
-       tm_file="${tm_file} ../../libgcc/config/frv/frv-abi.h"
+       libgcc_tm_file="${libgcc_tm_file} frv/frv-abi.h"
        tmake_file="${tmake_file} frv/t-frv frv/t-linux"
        ;;
 moxie-*-elf)
@@ -1062,10 +1123,14 @@ hppa*64*-*-hpux11*)
                 pa/pa64-regs.h pa/pa-hpux.h pa/pa-hpux1010.h \
                 pa/pa-hpux11.h"
        case ${target} in
-       *-*-hpux11.[1-9]*)
+       *-*-hpux11.[12]*)
                tm_file="${tm_file} pa/pa-hpux1111.h pa/pa-64.h pa/pa64-hpux.h"
                extra_options="${extra_options} pa/pa-hpux1111.opt"
                ;;
+       *-*-hpux11.[3-9]*)
+               tm_file="${tm_file} pa/pa-hpux1131.h pa/pa-64.h pa/pa64-hpux.h"
+               extra_options="${extra_options} pa/pa-hpux1131.opt"
+               ;;
        *)
                tm_file="${tm_file} pa/pa-64.h pa/pa64-hpux.h"
                ;;
@@ -1110,10 +1175,14 @@ hppa[12]*-*-hpux11*)
        extra_options="${extra_options} pa/pa-hpux.opt pa/pa-hpux1010.opt \
                       hpux11.opt"
        case ${target} in
-       *-*-hpux11.[1-9]*)
+       *-*-hpux11.[12]*)
                tm_file="${tm_file} pa/pa-hpux1111.h"
                extra_options="${extra_options} pa/pa-hpux1111.opt"
                ;;
+       *-*-hpux11.[3-9]*)
+               tm_file="${tm_file} pa/pa-hpux1131.h"
+               extra_options="${extra_options} pa/pa-hpux1131.opt"
+               ;;
        esac
        tmake_file="pa/t-pa-hpux11 pa/t-pa-hpux pa/t-hpux-shlib"
        # Set the libgcc version number
@@ -1150,12 +1219,14 @@ i[34567]86-*-darwin*)
        need_64bit_isa=yes
        # Baseline choice for a machine that allows m64 support.
        with_cpu=${with_cpu:-core2}
-       tmake_file="${tmake_file} t-slibgcc-darwin i386/t-crtpc i386/t-crtfm"
+       tmake_file="${tmake_file} t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
+       libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
        ;;
 x86_64-*-darwin*)
        with_cpu=${with_cpu:-core2}
-       tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-crtpc i386/t-crtfm"
+       tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
        tm_file="${tm_file} ${cpu_type}/darwin64.h"
+       libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
        ;;
 i[34567]86-*-elf*)
        tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
@@ -1167,6 +1238,7 @@ x86_64-*-elf*)
        ;;
 i[34567]86-*-freebsd*)
        tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
+       tmake_file="${tmake_file} i386/t-crtstuff"
        ;;
 x86_64-*-freebsd*)
        tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
@@ -1199,15 +1271,32 @@ i[34567]86-*-openbsd*)
 i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu)
                        # Intel 80386's running GNU/*
                        # with ELF format using glibc 2
-       tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h"
+       tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h glibc-stdint.h"
        case ${target} in
        i[34567]86-*-linux*)
+               tm_file="${tm_file} linux.h"
                # Assume modern glibc
                default_gnu_indirect_function=yes
                if test x$enable_targets = xall; then
-                       tm_file="${tm_file} i386/x86-64.h i386/linux64.h"
+                       tm_file="${tm_file} i386/x86-64.h i386/gnu-user64.h i386/linux64.h"
                        tm_defines="${tm_defines} TARGET_BI_ARCH=1"
                        tmake_file="${tmake_file} i386/t-linux64"
+                       x86_multilibs="${with_multilib_list}"
+                       if test "$x86_multilibs" = "default"; then
+                               x86_multilibs="m64,m32"
+                       fi
+                       x86_multilibs=`echo $x86_multilibs | sed -e 's/,/ /g'`
+                       for x86_multilib in ${x86_multilibs}; do
+                               case ${x86_multilib} in
+                               m32 | m64 | mx32)
+                                       TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${x86_multilib}"
+                                       ;;
+                               *)
+                                       echo "--with-multilib-list=${x86_with_multilib} not supported."
+                                       exit 1
+                               esac
+                       done
+                       TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
                        need_64bit_hwint=yes
                        need_64bit_isa=yes
                        case X"${with_cpu}" in
@@ -1225,26 +1314,43 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i
                                ;;
                        esac
                else
-                       tm_file="${tm_file} i386/linux.h"
+                       tm_file="${tm_file} i386/gnu-user.h i386/linux.h"
                fi
                ;;
-       i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} i386/linux.h knetbsd-gnu.h i386/knetbsd-gnu.h" ;;
-       i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} i386/linux.h kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;;
-       i[34567]86-*-kopensolaris*-gnu) tm_file="${tm_file} i386/linux.h kopensolaris-gnu.h i386/kopensolaris-gnu.h" ;;
-       i[34567]86-*-gnu*) tm_file="$tm_file i386/linux.h gnu.h i386/gnu.h";;
+       i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} i386/gnu-user.h knetbsd-gnu.h i386/knetbsd-gnu.h" ;;
+       i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} i386/gnu-user.h kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;;
+       i[34567]86-*-kopensolaris*-gnu) tm_file="${tm_file} i386/gnu-user.h kopensolaris-gnu.h i386/kopensolaris-gnu.h" ;;
+       i[34567]86-*-gnu*) tm_file="$tm_file i386/gnu-user.h gnu.h i386/gnu.h";;
        esac
        tmake_file="${tmake_file} i386/t-crtstuff i386/t-crtpc i386/t-crtfm t-dfprules"
        ;;
 x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
-       tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h \
-                i386/x86-64.h i386/linux64.h"
+       tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h glibc-stdint.h \
+                i386/x86-64.h i386/gnu-user64.h"
        case ${target} in
        x86_64-*-linux*)
+         tm_file="${tm_file} linux.h i386/linux64.h"
          default_gnu_indirect_function=glibc-2011 ;;
-       x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h" ;;
+       x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu64.h" ;;
        x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;;
        esac
        tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-crtpc i386/t-crtfm t-dfprules"
+       x86_multilibs="${with_multilib_list}"
+       if test "$x86_multilibs" = "default"; then
+               x86_multilibs="m64,m32"
+       fi
+       x86_multilibs=`echo $x86_multilibs | sed -e 's/,/ /g'`
+       for x86_multilib in ${x86_multilibs}; do
+               case ${x86_multilib} in
+               m32 | m64 | mx32)
+                       TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${x86_multilib}"
+                       ;;
+               *)
+                       echo "--with-multilib-list=${x86_with_multilib} not supported."
+                       exit 1
+               esac
+       done
+       TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
        ;;
 i[34567]86-pc-msdosdjgpp*)
        xm_file=i386/xm-djgpp.h
@@ -1274,7 +1380,7 @@ i[3456x]86-*-netware*)
        */nwld)
                extra_objs="$extra_objs nwld.o"
                tm_file="${tm_file} i386/nwld.h"
-               tmake_file="${tmake_file} i386/t-nwld"
+               tmake_file="${tmake_file} i386/t-nwld t-slibgcc-dummy"
                extra_parts="crt0.o libgcc.def libc.def libcpre.def posixpre.def"
                ;;
        esac
@@ -1294,11 +1400,10 @@ i[34567]86-*-nto-qnx*)
        ;;
 i[34567]86-*-rtems*)
        tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h newlib-stdint.h"
-       extra_parts="crtbegin.o crtend.o crti.o crtn.o"
-       tmake_file="${tmake_file} i386/t-rtems-i386 i386/t-crtstuff t-rtems"
+       tmake_file="${tmake_file} i386/t-rtems t-rtems"
        ;;
-i[34567]86-*-solaris2*)
-       tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/sysv4.h sol2.h"
+i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
+       tm_file="${tm_file} i386/unix.h i386/att.h ${sol2_tm_file}"
        # Set default arch_32 to pentium4, tune_32 to generic like the other
        # i386 targets, although config.guess defaults to i386-pc-solaris2*.
        case ${target} in
@@ -1314,42 +1419,11 @@ i[34567]86-*-solaris2*)
        with_tune_32=${with_tune_32:-generic}
        case ${target} in
        *-*-solaris2.1[0-9]*)
-               tm_file="${tm_file} sol2-10.h"
-               ;;
-       esac
-       tm_file="${tm_file} i386/sol2.h"
-       if test x$gnu_ld = xyes; then
-               tm_file="${tm_file} sol2-gld.h"
-       fi
-       if test x$gas = xyes; then
-               tm_file="${tm_file} i386/sol2-gas.h"
-       fi
-       tmake_file="${tmake_file} t-sol2 t-svr4"
-       c_target_objs="${c_target_objs} sol2-c.o"
-       cxx_target_objs="${cxx_target_objs} sol2-c.o"
-       extra_objs="sol2.o"
-       tm_p_file="${tm_p_file} sol2-protos.h"
-       if test x$gnu_ld = xyes; then
-               tmake_file="$tmake_file t-slibgcc-elf-ver"
-               tm_defines="${tm_defines} TARGET_GNU_LD=1"
-       else
-               tmake_file="$tmake_file t-slibgcc-sld"
-       fi
-       if test x$gas = xyes; then
-               tm_file="usegas.h ${tm_file}"
-       fi
-       tm_file="$tm_file tm-dwarf2.h"
-       case ${target} in
-       *-*-solaris2.1[0-9]*)
-               tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h"
+               tm_file="${tm_file} i386/x86-64.h i386/sol2-bi.h sol2-bi.h"
                tm_defines="${tm_defines} TARGET_BI_ARCH=1"
-               tmake_file="$tmake_file i386/t-sol2-10"
-               # i386/t-crtstuff only affects libgcc.  Its inclusion
-               # depends on a runtime test and is thus performed in
-               # libgcc/configure.ac instead.
+               tmake_file="$tmake_file i386/t-sol2-64"
                need_64bit_hwint=yes
                need_64bit_isa=yes
-               use_gcc_stdint=wrap
                case X"${with_cpu}" in
                Xgeneric|Xatom|Xcore2|Xcorei7|Xcorei7-avx|Xnocona|Xx86-64|Xbdver1|Xbtver1|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
                        ;;
@@ -1365,14 +1439,6 @@ i[34567]86-*-solaris2*)
                        ;;
                esac
                ;;
-       *)
-               use_gcc_stdint=provide
-               ;;
-       esac
-       case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
-         "":yes:* | yes:yes:* )
-               thread_file=posix
-               ;;
        esac
        ;;
 i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
@@ -1576,20 +1642,22 @@ ia64*-*-hpux*)
        extra_options="${extra_options} ia64/ilp32.opt hpux11.opt"
        use_gcc_stdint=wrap
        tm_file="${tm_file} hpux-stdint.h"
+       case ${target} in
+       *-*-hpux11.3*)
+               tm_file="${tm_file} ia64/hpux-unix2003.h"
+               ;;
+       esac
        ;;
 ia64-hp-*vms*)
        tm_file="${tm_file} elfos.h ia64/sysv4.h ia64/elf.h ia64/vms.h ia64/vms64.h"
        xm_file="vms/xm-vms.h vms/xm-vms64.h"
-       tmake_file="vms/t-vms ia64/t-ia64 ia64/t-vms"
-       xmake_file=vms/x-vms
+       tmake_file="${tmake_file} vms/t-vms64 ia64/t-ia64 ia64/t-vms"
        target_cpu_default="0"
        if test x$gas = xyes
        then
                target_cpu_default="${target_cpu_default}|MASK_GNU_AS"
        fi
-       exeext=.exe
-       install_headers_dir=install-headers-cp
-       extra_options="${extra_options} vms/vms.opt ia64/vms.opt"
+       extra_options="${extra_options} ia64/vms.opt"
        ;;
 iq2000*-*-elf*)
         tm_file="elfos.h newlib-stdint.h iq2000/iq2000.h"
@@ -1757,7 +1825,7 @@ microblaze*-*-*)
         ;;
 mips-sgi-irix6.5*)
        tm_file="elfos.h ${tm_file} mips/iris6.h"
-       tmake_file="mips/t-iris mips/t-iris6 mips/t-slibgcc-irix"
+       tmake_file="mips/t-irix6 t-slibgcc-dummy"
        extra_options="${extra_options} rpath.opt mips/iris6.opt"
        target_cpu_default="MASK_ABICALLS"
        tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_N32"
@@ -1981,13 +2049,13 @@ powerpc-*-darwin*)
          *-darwin[0-6]*)
            ;;
        esac
-       tmake_file="${tmake_file} t-slibgcc-darwin"
+       tmake_file="${tmake_file} t-slibgcc-dummy"
        extra_headers=altivec.h
        ;;
 powerpc64-*-darwin*)
        extra_options="${extra_options} ${cpu_type}/darwin.opt"
        extra_parts="crt2.o"
-       tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin"
+       tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy"
        tm_file="${tm_file} ${cpu_type}/darwin8.h ${cpu_type}/darwin64.h"
        extra_headers=altivec.h
        ;;
@@ -2181,7 +2249,8 @@ rs6000-ibm-aix[6789].* | powerpc-ibm-aix[6789].*)
        extra_headers=altivec.h
        ;;
 rx-*-elf*)
-       tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file} ../../libgcc/config/rx/rx-abi.h"
+       tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
+       libgcc_tm_file="${libgcc_tm_file} rx/rx-abi.h"
        tmake_file="${tmake_file} rx/t-rx"
        ;;
 s390-*-linux*)
@@ -2211,7 +2280,6 @@ score-*-elf)
         tm_file="dbxelf.h elfos.h score/elf.h score/score.h newlib-stdint.h"
        extra_parts="crti.o crtn.o crtbegin.o crtend.o"
         tmake_file="${tmake_file} score/t-score-elf score/t-score-softfp soft-fp/t-softfp"
-        extra_objs="score7.o"
         ;;
 sh-*-elf* | sh[12346l]*-*-elf* | \
   sh-*-linux* | sh[2346lbe]*-*-linux* | \
@@ -2412,13 +2480,10 @@ sparc-*-elf*)
                tmake_file="sparc/t-elf"
                ;;
        esac
-       tmake_file="${tmake_file} sparc/t-crtfm"
-       extra_parts="crtbegin.o crtend.o"
        ;;
 sparc-*-rtems*)
        tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
-       tmake_file="sparc/t-elf sparc/t-crtfm t-rtems"
-       extra_parts="crtbegin.o crtend.o"
+       tmake_file="sparc/t-elf t-rtems"
        ;;
 sparc-*-linux*)
        tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h"
@@ -2448,52 +2513,16 @@ sparc-*-netbsdelf*)
        extra_options="${extra_options} sparc/long-double-switch.opt"
        ;;
 sparc*-*-solaris2*)
-       tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h sol2.h"
-       case ${target} in
-           *-*-solaris2.1[0-9]*)
-               tm_file="${tm_file} sol2-10.h"
-               use_gcc_stdint=wrap
-               ;;
-           *)
-               use_gcc_stdint=provide
-               ;;
-       esac
-       tm_file="${tm_file} sparc/sol2.h"
+       tm_file="sparc/biarch64.h ${tm_file} ${sol2_tm_file} sol2-bi.h"
        case ${target} in
            sparc64-*-* | sparcv9-*-*)
-               tm_file="${tm_file} sparc/sol2-64.h"
+               tm_file="sparc/sol2-64.h ${tm_file}"
                ;;
            *)
                test x$with_cpu != x || with_cpu=v9
                ;;
        esac
-       tm_file="${tm_file} sparc/sol2-bi.h"
-       if test x$gas = xyes; then
-               tm_file="${tm_file} sparc/sol2-gas.h sparc/sol2-gas-bi.h"
-       fi
-       if test x$gnu_ld = xyes; then
-               tm_file="${tm_file} sol2-gld.h sparc/sol2-gld-bi.h"
-       fi
-       tm_file="${tm_file} tm-dwarf2.h"
-       tmake_file="t-sol2 sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtfm"
-       if test x$gnu_ld = xyes; then
-               tmake_file="$tmake_file t-slibgcc-elf-ver"
-       else
-               tmake_file="$tmake_file t-slibgcc-sld"
-       fi
-       if test x$gas = xyes; then
-               tm_file="usegas.h ${tm_file}"
-       fi
-       c_target_objs="sol2-c.o"
-       cxx_target_objs="sol2-c.o"
-       extra_objs="sol2.o"
-       tm_p_file="${tm_p_file} sol2-protos.h"
-       extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
-       case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
-         "":yes:* | yes:yes:* )
-               thread_file=posix
-               ;;
-       esac
+       tmake_file="${tmake_file} sparc/t-sol2-64"
        ;;
 sparc-wrs-vxworks)
        tm_file="${tm_file} elfos.h sparc/sysv4.h vx-common.h vxworks.h sparc/vxworks.h"
@@ -2502,14 +2531,11 @@ sparc-wrs-vxworks)
 sparc64-*-elf*)
        tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h"
        extra_options="${extra_options} sparc/little-endian.opt"
-       tmake_file="${tmake_file} sparc/t-crtfm"
-       extra_parts="crtbegin.o crtend.o"
        ;;
 sparc64-*-rtems*)
        tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h sparc/rtemself.h rtems.h"
        extra_options="${extra_options} sparc/little-endian.opt"
-       tmake_file="${tmake_file} sparc/t-crtfm t-rtems"
-       extra_parts="crtbegin.o crtend.o"
+       tmake_file="${tmake_file} t-rtems"
        ;;
 sparc64-*-linux*)
        tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/linux64.h"
@@ -2549,46 +2575,26 @@ spu-*-elf*)
        c_target_objs="${c_target_objs} spu-c.o"
        cxx_target_objs="${cxx_target_objs} spu-c.o"
        ;;
-v850e1-*-*)
-       target_cpu_default="TARGET_CPU_v850e1"
-       tm_file="dbxelf.h elfos.h newlib-stdint.h v850/v850.h"
-       tm_p_file=v850/v850-protos.h
-       tmake_file=v850/t-v850e
-       md_file=v850/v850.md
-       extra_modes=v850/v850-modes.def
-       out_file=v850/v850.c
-       extra_options="${extra_options} v850/v850.opt"
-       if test x$stabs = xyes
-       then
-               tm_file="${tm_file} dbx.h"
-       fi
-       use_collect2=no
-       c_target_objs="v850-c.o"
-       cxx_target_objs="v850-c.o"
-       use_gcc_stdint=wrap
-       ;;
-v850e-*-*)
-       target_cpu_default="TARGET_CPU_v850e"
+
+v850*-*-*)
+       case ${target} in
+       v850e2v3-*-*)
+               target_cpu_default="TARGET_CPU_v850e2v3"
+               ;;
+       v850e2-*-*)
+               target_cpu_default="TARGET_CPU_v850e2"
+               ;;
+       v850e1-*-* | v850es-*-*)
+               target_cpu_default="TARGET_CPU_v850e1"
+               ;;
+       v850e-*-*)
+               target_cpu_default="TARGET_CPU_v850e"
+               ;;
+       v850-*-*)
+               target_cpu_default="TARGET_CPU_generic"
+               ;;
+       esac
        tm_file="dbxelf.h elfos.h newlib-stdint.h v850/v850.h"
-       tm_p_file=v850/v850-protos.h
-       tmake_file=v850/t-v850e
-       md_file=v850/v850.md
-       extra_modes=v850/v850-modes.def
-       out_file=v850/v850.c
-       extra_options="${extra_options} v850/v850.opt"
-       if test x$stabs = xyes
-       then
-               tm_file="${tm_file} dbx.h"
-       fi
-       use_collect2=no
-       c_target_objs="v850-c.o"
-       cxx_target_objs="v850-c.o"
-       use_gcc_stdint=wrap
-       ;;
-v850-*-*)
-       target_cpu_default="TARGET_CPU_generic"
-       tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
-       tmake_file=v850/t-v850
        if test x$stabs = xyes
        then
                tm_file="${tm_file} dbx.h"
@@ -2671,6 +2677,14 @@ if [ "$target_has_targetcm" = "no" ]; then
   cxx_target_objs="$cxx_target_objs default-c.o"
 fi
 
+if [ "$common_out_file" = "" ]; then
+  if [ "$target_has_targetm_common" = "yes" ]; then
+    common_out_file="$cpu_type/$cpu_type-common.c"
+  else
+    common_out_file="default-common.c"
+  fi
+fi
+
 # Support for --with-cpu and related options (and a few unrelated options,
 # too).
 case ${with_cpu} in
@@ -3063,7 +3077,7 @@ case "${target}" in
                ;;
 
        arm*-*-*)
-               supported_defaults="arch cpu float tune fpu abi mode"
+               supported_defaults="arch cpu float tune fpu abi mode tls"
                for which in cpu tune; do
                        # See if it matches any of the entries in arm-cores.def
                        eval "val=\$with_$which"
@@ -3146,6 +3160,17 @@ case "${target}" in
                        ;;
                esac
 
+               case "$with_tls" in
+               "" \
+               | gnu | gnu2)
+                       # OK
+                       ;;
+               *)
+                       echo "Unknown TLS method used in --with-tls=$with_tls" 1>&2
+                       exit 1
+                       ;;
+               esac
+
                if test "x$with_arch" != x && test "x$with_cpu" != x; then
                        echo "Warning: --with-arch overrides --with-cpu=$with_cpu" 1>&2
                fi
@@ -3483,7 +3508,7 @@ case "${target}" in
        v850*-*-*)
                supported_defaults=cpu
                case ${with_cpu} in
-               "" | v850e | v850e1)
+               "" | v850e | v850e1 | v850e2 | v850es | v850e2v3)
                        # OK
                        ;;
                *)
@@ -3523,6 +3548,7 @@ case ${target} in
 
        fido*-*-* | m68k*-*-*)
                target_cpu_default2=$m68k_cpu_ident
+               tmake_file="m68k/t-opts $tmake_file"
                if [ x"$m68k_arch_family" != x ]; then
                        tmake_file="m68k/t-$m68k_arch_family $tmake_file"
                fi
@@ -3536,7 +3562,7 @@ case ${target} in
          i[34567]86-*-gnu*)
                tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux"
                ;;
-       i[34567]86-*-solaris2*)
+       i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
                tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
                ;;
        i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
@@ -3610,20 +3636,21 @@ case ${target} in
                ;;
 
        v850*-*-*)
-               # FIXME: The v850 is "special" in that it does not support
-               # runtime CPU selection, only --with-cpu.
                case "x$with_cpu" in
                x)
                        ;;
-               xv850e)
+               xv850e | xv850e1 | xv850e2 | xv850e2v3)
                        target_cpu_default2="TARGET_CPU_$with_cpu"
                        ;;
+               xv850es)
+                       target_cpu_default2="TARGET_CPU_v850e1"
+                       ;;
                esac
                ;;
 esac
 
 t=
-all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu divide llsc mips-plt synci"
+all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu divide llsc mips-plt synci tls"
 for option in $all_defaults
 do
        eval "val=\$with_"`echo $option | sed s/-/_/g`