OSDN Git Service

(objc_condition_{,de}allocate): New functions.
[pf3gnuchains/gcc-fork.git] / gcc / Makefile.in
index cc90ddb..7fcfc01 100644 (file)
@@ -1,5 +1,5 @@
 # Makefile for GNU C compiler.
-#   Copyright (C) 1987, 88, 90-94, 1995 Free Software Foundation, Inc.
+#   Copyright (C) 1987, 88, 90-96, 1997 Free Software Foundation, Inc.
 
 #This file is part of GNU CC.
 
@@ -37,6 +37,10 @@ SUBDIRS =
 # This is overridden by configure.
 LANGUAGES = c objective-c proto
 
+# Selection of languages to be made during stage1 build.
+# This is overridden by configure.
+BOOT_LANGUAGES = c
+
 ALLOCA =
 ALLOCA_FLAGS =
 ALLOCA_FINISH = true
@@ -46,7 +50,9 @@ ALLOCA_FINISH = true
 # BOOT_CFLAGS is the value of CFLAGS to pass
 # to the stage2 and stage3 compilations
 # XCFLAGS is used for most compilations but not when using the GCC just built.
+# TCFLAGS is used for compilations with the GCC just built.
 XCFLAGS =
+TCFLAGS =
 CFLAGS = -g
 BOOT_CFLAGS = -O $(CFLAGS)
 # These exists to be overridden by the x-* and t-* files, respectively.
@@ -71,6 +77,7 @@ INSTALL = install -c
 INSTALL_PROGRAM = $(INSTALL)
 INSTALL_DATA = $(INSTALL)
 MAKEINFO = makeinfo
+MAKEINFOFLAGS =
 TEXI2DVI = texi2dvi
 # For GNUmake: let us decide what gets passed to recursive makes.
 MAKEOVERRIDES =
@@ -112,7 +119,8 @@ USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \
     $(srcdir)/ginclude/va-pyr.h $(srcdir)/ginclude/va-sparc.h \
     $(srcdir)/ginclude/va-clipper.h $(srcdir)/ginclude/va-spur.h \
     $(srcdir)/ginclude/iso646.h $(srcdir)/ginclude/va-ppc.h \
-    $(srcdir)/ginclude/proto.h $(EXTRA_HEADERS)
+    $(srcdir)/ginclude/proto.h $(srcdir)/ginclude/va-sh.h $(EXTRA_HEADERS) \
+    $(LANG_EXTRA_HEADERS)
 
 # Target to use whe installing assert.h.  Some systems may
 # want to set this empty.
@@ -126,7 +134,7 @@ GCC_FOR_TARGET = ./xgcc -B./
 # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
 # It omits XCFLAGS, and specifies -B./.
 # It also specifies -I./include to find, e.g., stddef.h.
-GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -I./include
+GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -I./include $(TCFLAGS)
 
 # Special flags for compiling enquire.
 # We disable optimization to make floating point more reliable.
@@ -135,7 +143,7 @@ ENQUIRE_LDFLAGS = $(LDFLAGS)
 
 # Sed command to transform gcc to installed name.  Overwritten by configure.
 program_transform_name = -e s,x,x,
-program_transform_cross_name = -e s,^,$(target)-,
+program_transform_cross_name = -e s,^,$(target_alias)-,
 
 # Tools to use when building a cross-compiler.
 # These are used because `configure' appends `cross-make'
@@ -164,6 +172,7 @@ PREMADE_ATTRTAB_MD = Makefile  # Guaranteed not to cmp equal to md.
 PREMADE_ATTRTAB = 
 
 target= ... `configure' substitutes actual target name here.
+target_alias= ... `configure' substitutes specified target name here.
 xmake_file= ... `configure' substitutes actual x- file name here.
 tmake_file= ... `configure' substitutes actual t- file name here.
 out_file= ... `configure' substitutes actual out file name here.
@@ -174,6 +183,7 @@ build_xm_file= ... `configure' substitutes actual build xm- file name here.
 host_xm_file= ... `configure' substitutes actual host xm- file name here.
 lang_specs_files= ... `configure' substitutes actual lang spec file names here.
 lang_options_files= ... `configure' puts actual lang options file names here.
+OBJC_THREAD_FILE= ... `configure' puts actual objc thread file name here.
 version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < $(srcdir)/version.c`
 mainversion=`sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/' < $(srcdir)/version.c`
 
@@ -194,9 +204,11 @@ bindir = $(exec_prefix)/bin
 # Directory in which to put the directories used by the compiler.
 libdir = $(exec_prefix)/lib
 # Directory in which the compiler finds executables, libraries, etc.
-libsubdir = $(libdir)/gcc-lib/$(target)/$(version)
+libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(version)
 # Directory in which the compiler finds g++ includes.
-gxx_include_dir= $(libdir)/g++-include
+gxx_include_dir= $(prefix)/include/g++
+# Directory in which the old g++ header files may be found.
+old_gxx_include_dir= $(libdir)/g++-include
 # Directory to search for site-specific includes.
 includedir = $(local_prefix)/include
 # assertdir is overridden in cross-make.
@@ -213,7 +225,7 @@ exeext =
 mandir = $(prefix)/man/man1
 # Directory in which to find other cross-compilation tools and headers.
 # Used in install-cross.
-tooldir = $(exec_prefix)/$(target)
+tooldir = $(exec_prefix)/$(target_alias)
 # Dir for temp files.
 tmpdir = /tmp
 
@@ -245,7 +257,7 @@ LIBGCC2 = libgcc2.a
 # -g1 causes output of debug info only for file-scope entities.
 # we use this here because that should be enough, and also
 # so that -g1 will be tested.
-LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) -g1
+LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) -g1 -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
 
 # Additional options to use when compiling libgcc2.a.
 # Some targets override this to -Iinclude
@@ -329,7 +341,7 @@ OTHER_FIXINCLUDES_DIRS=
 
 # List of things which should already be built whenever we try to use xgcc
 # to compile anything (without linking).
-GCC_PASSES=xgcc cc1 cpp $(EXTRA_PASSES)
+GCC_PASSES=xgcc$(exeext) cc1$(exeext) cpp$(exeext) $(EXTRA_PASSES)
 
 # List of things which should already be built whenever we try to use xgcc
 # to link anything.
@@ -381,6 +393,9 @@ FIXPROTO_DEFINES =
 # Extra flags to use when compiling crt{begin,end}.o.
 CRTSTUFF_T_CFLAGS = 
 
+# Extra flags to use when compiling [m]crt0.o.
+CRT0STUFF_T_CFLAGS = 
+
 # End of variables for you to override.
 
 # Definition of `all' is here so that new rules inserted by sed
@@ -462,6 +477,8 @@ INCLUDES = -I. -I$(srcdir) -I$(srcdir)/config
 LANG_MAKEFILES =
 LANG_STAGESTUFF =
 LANG_DIFF_EXCLUDES =
+LANG_LIB2FUNCS =
+LANG_EXTRA_HEADERS =
 
 # Flags to pass to recursive makes.
 # CC is set by configure.  Hosts without symlinks need special handling
@@ -475,6 +492,7 @@ FLAGS_TO_PASS = \
        "BISONFLAGS=$(BISONFLAGS)" \
        "CC=set-by-configure" \
        "CFLAGS=$(CFLAGS)" \
+       "CLIB=$(CLIB)" \
        "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
        "LDFLAGS=$(LDFLAGS)" \
        "LEX=$(LEX)" \
@@ -484,6 +502,7 @@ FLAGS_TO_PASS = \
        "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \
        "RANLIB_TEST_FOR_TARGET=$(RANLIB_TEST_FOR_TARGET)" \
        "SHELL=$(SHELL)" \
+       "STAGE_PREFIX=set-by-configure" \
        "exeext=$(exeext)" \
        "objext=$(objext)" \
        "exec_prefix=$(exec_prefix)" \
@@ -514,9 +533,9 @@ BC_ALL = bc-arity.h bc-opcode.h bc-opname.h
 
 # Language-independent object files.
 OBJS = toplev.o version.o tree.o print-tree.o stor-layout.o fold-const.o \
- function.o stmt.o expr.o calls.o expmed.o explow.o optabs.o varasm.o \
- rtl.o print-rtl.o rtlanal.o emit-rtl.o real.o \
- dbxout.o sdbout.o dwarfout.o xcoffout.o \
+ function.o stmt.o except.o expr.o calls.o expmed.o explow.o optabs.o \
varasm.o rtl.o print-rtl.o rtlanal.o emit-rtl.o real.o \
+ dbxout.o sdbout.o dwarfout.o dwarf2out.o xcoffout.o \
  integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
  regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
  insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \
@@ -536,9 +555,9 @@ CCCP=cccp
 STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
  insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
  insn-attr.h insn-attrtab.c insn-opinit.c \
- stamp-flags stamp-config stamp-codes \
+ stamp-flags stamp-config stamp-codes stamp-mlib \
  stamp-output stamp-recog stamp-emit stamp-extract stamp-peep \
- stamp-attr stamp-attrtab stamp-opinit stamp-proto stamp-crt stamp-crtS \
+ stamp-attr stamp-attrtab stamp-opinit stamp-proto stamp-crt stamp-crtS stamp-crt0 \
  genemit$(exeext) genoutput$(exeext) genrecog$(exeext) genextract$(exeext) \
  genflags$(exeext) gencodes$(exeext) genconfig$(exeext) genpeep$(exeext) \
  genattrtab$(exeext) genattr$(exeext) genopinit$(exeext) \
@@ -570,9 +589,9 @@ LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
     _fixunsdfsi _fixunssfsi _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi \
     _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
     _fixtfdi _fixunstfdi _floatditf \
-    __gcc_bcmp _varargs _eprintf _op_new _op_vnew _new_handler _op_delete \
-    _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
-    _pure
+    __gcc_bcmp _varargs __dummy _eprintf _op_new _op_vnew _new_handler \
+    _op_delete _op_vdel _bb _shtab _clear_cache _trampoline __main _exit \
+    _ctors _eh  _pure
 
 # The files that "belong" in CONFIG_H are deliberately omitted
 # because having them there would not be useful in actual practice.
@@ -585,6 +604,9 @@ CONFIG_H =
 RTL_H = rtl.h rtl.def machmode.h machmode.def
 TREE_H = tree.h real.h tree.def machmode.h machmode.def
 BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
+
+# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
+T =
 \f
 # Language makefile fragments.
 
@@ -612,7 +634,7 @@ BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
 .SUFFIXES: .in .def
 
 Makefile: $(srcdir)/Makefile.in $(srcdir)/configure $(srcdir)/version.c \
-   $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file) \
+   $(xmake_file) $(tmake_file) \
    $(LANG_MAKEFILES)
        cp config.status config.run
        $(SHELL) config.run
@@ -673,14 +695,15 @@ compilations: ${OBJS}
 
 # Create a list of the language-independent object files so the language
 # subdirectories needn't mention their names explicitly.
-stamp-objlist: Makefile $(OBJS) $(BC_OBJS)
-       echo " $(OBJS) $(BC_OBJS)" | sed -e 's, \([a-z]\), ../\1,g' -e 's/\.o/$(objext)/g' >stamp-objlist
+stamp-objlist: $(OBJS) $(BC_OBJS)
+       echo " $(OBJS) $(BC_OBJS)" | sed -e 's, \([a-z0-9]\), ../\1,g' -e 's/\.o/$(objext)/g' >stamp-objlist
 
 # We call this executable `xgcc' rather than `gcc'
 # to avoid confusion if the current directory is in the path
 # and CC is `gcc'.  It is renamed to `gcc' when it is installed.
-xgcc: gcc.o version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
-       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
+xgcc: gcc.o version.o choose-temp.o pexecute.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
+       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o version.o \
+         choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS)
 
 # Dump a specs file to make -B./ read these specs over installed ones.
 specs: xgcc
@@ -713,7 +736,9 @@ float.h-nat: enquire
 # ??? This isn't used anymore.  Should we create config/float-unkn.h
 # and make that the default float_format in configure?
 float.h-cross:
-       echo "#error float.h values not known for cross-compiler" > t-float.h-cross
+       echo "#ifndef   __GCC_FLOAT_NOT_NEEDED" > t-float.h-cross
+       echo "#error float.h values not known for cross-compiler" >> t-float.h-cross
+       echo "#endif" >> t-float.h-cross
        mv t-float.h-cross float.h-cross
 
 # Used to compile enquire with standard cc, but have forgotten why.
@@ -763,6 +788,10 @@ libgcc1.cross:
 # Compile the library of arithmetic subroutines with the native compiler.
 # Don't compile it with GCC!
 # (That would cause most arithmetic functions to call themselves.)
+#
+# NOTE: If you modify these rules substantially, please be sure to
+# check at least config/i386/t-sco5 and possibly other makefile
+# fragments.
 libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
        -rm -f tmplibgcc1.a
 # Actually build it in tmplibgcc1.a, then rename at end,
@@ -777,7 +806,7 @@ libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
        do \
          echo $${name}; \
          rm -f $${name}$(objext); \
-         $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
+         $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
          mv libgcc1$(objext) $${name}$(objext); \
          $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
@@ -797,7 +826,7 @@ libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
            if [ $${name}.asm = $${file} ]; then \
              cp $${file} $${name}.s || exit 1; file=$${name}.s; \
            else true; fi; \
-           $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
+           $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
            if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
            $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
            if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
@@ -843,7 +872,7 @@ libgcc1.S: libgcc1.c $(CONFIG_H) config.status
        for name in $(LIB1FUNCS); \
        do \
          echo $${name}; \
-         $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -S -DL$${name} $(srcdir)/libgcc1.c; \
+         $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES) -S -DL$${name} $(srcdir)/libgcc1.c; \
          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
          echo '#ifdef ' L$${name} >> libgcc1.S; \
          cat  libgcc1.s >> libgcc1.S; \
@@ -862,7 +891,7 @@ libgcc2.ready: $(GCC_PASSES) $(LIBGCC2_DEPS) stmp-int-hdrs
        fi
 
 libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
-   machmode.h longlong.h gbl-ctors.h config.status
+   $(LANG_LIB2FUNCS) machmode.h longlong.h gbl-ctors.h config.status
 # Actually build it in tmplibgcc2.a, then rename at end,
 # so that libgcc2.a itself remains nonexistent if compilation is aborted.
        -rm -f tmplibgcc2.a
@@ -887,19 +916,32 @@ libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
 # We don't use -e here because there are if statements
 # that should not make the command give up when the if condition is false.
 # Instead, we test for failure after each command where it matters.
-       for file in .. $(LIB2FUNCS_EXTRA); \
+       for file in .. $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS); \
        do \
          if [ x$${file} != x.. ]; then \
-           name=`echo $${file} | sed -e 's/[.][cS]$$//' -e 's/[.]asm$$//'`; \
+           name=`echo $${file} | sed -e 's/[.][cSo]$$//' -e 's/[.]asm$$//' -e 's/[.]txt$$//'`; \
            oname=` echo $${name} | sed -e 's,.*/,,'`; \
-           echo $${name}; \
-           if [ $${name}.asm = $${file} ]; then \
-             cp $${file} $${name}.s || exit 1; file=$${name}.s; \
-           else true; fi; \
-           $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
-           if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
-           $(AR) $(AR_FLAGS) tmplibgcc2.a $${oname}$(objext); \
-           rm -f $${name}.s $${oname}$(objext); \
+           if [ $${name}.txt = $${file} ]; then \
+             for f in .. `cat $${file}`; do if [ x$${f} != x.. ]; then \
+               $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
+                 AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" \
+                 CFLAGS="$(CFLAGS)" HOST_PREFIX="$(HOST_PREFIX)" \
+                 HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+                 LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" $${f}; \
+               if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+               $(AR) $(AR_FLAGS) tmplibgcc2.a $${f}; \
+               rm -f $${f}; \
+             fi; done; \
+           else \
+             echo $${name}; \
+             if [ $${name}.asm = $${file} ]; then \
+               cp $${file} $${name}.s || exit 1; file=$${name}.s; \
+             else true; fi; \
+             $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+             if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+             $(AR) $(AR_FLAGS) tmplibgcc2.a $${oname}$(objext); \
+             rm -f $${name}.s $${oname}$(objext); \
+           fi; \
          else true; \
          fi; \
        done
@@ -934,13 +976,21 @@ libgcc.a: $(LIBGCC1) $(LIBGCC2)
 # Use the genmultilib shell script to generate the information the gcc
 # driver program needs to select the library directory based on the
 # switches.
-multilib.h: $(srcdir)/genmultilib Makefile
-       $(SHELL) $(srcdir)/genmultilib "$(MULTILIB_OPTIONS)" \
-         "$(MULTILIB_DIRNAMES)" "$(MULTILIB_MATCHES)" "$(MULTILIB_EXCEPTIONS)" > multilib.h
+multilib.h: stamp-mlib; @true
+stamp-mlib: $(srcdir)/genmultilib Makefile
+       $(SHELL) $(srcdir)/genmultilib \
+         "$(MULTILIB_OPTIONS)" \
+         "$(MULTILIB_DIRNAMES)" \
+         "$(MULTILIB_MATCHES)" \
+         "$(MULTILIB_EXCEPTIONS)" \
+         "$(MULTILIB_EXTRA_OPTS)" > tmp-mlib.h
+       $(srcdir)/move-if-change tmp-mlib.h multilib.h
+       touch stamp-mlib
 
 # Build multiple copies of libgcc.a, one for each target switch.
 stmp-multilib: $(LIBGCC1) libgcc2.c libgcc2.ready $(CONFIG_H) \
-   $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
+   $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS) machmode.h longlong.h gbl-ctors.h \
+   config.status
        for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
          dir=`echo $$i | sed -e 's/;.*$$//'`; \
          flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
@@ -949,6 +999,7 @@ stmp-multilib: $(LIBGCC1) libgcc2.c libgcc2.ready $(CONFIG_H) \
            RANLIB="$(RANLIB)" RANLIB_TEST="$(RANLIB_TEST)" \
            HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
            LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) $${flags}" \
+           MULTILIB_CFLAGS="$${flags}" \
            LIBGCC1="$(LIBGCC1)" LIBGCC2="$(LIBGCC2)" \
            dir="$${dir}" stmp-multilib-sub; \
          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
@@ -957,7 +1008,11 @@ stmp-multilib: $(LIBGCC1) libgcc2.c libgcc2.ready $(CONFIG_H) \
 
 # Subroutine of stmp-multilib so make -n works.
 stmp-multilib-sub:
-       rm -f $(dir)/libgcc.a $(LIBGCC2)
+       rm -f $(LIBGCC2)
+       if [ -d $(dir) ]; then \
+         cd $(dir); \
+         rm -f libgcc.a $(EXTRA_MULTILIB_PARTS); \
+       fi
        $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
          AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
          HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
@@ -986,11 +1041,18 @@ stmp-multilib-sub:
        if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
        if [ -d $(dir) ]; then true; else mkdir $(dir); fi
        mv tmplibgcc.a $(dir)/libgcc.a
+       for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
+         $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
+           AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
+           HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+           MULTILIB_CFLAGS="$(MULTILIB_CFLAGS)" T="t" t$${f}; \
+         mv t$${f} $(dir)/$${f}; \
+       fi; done
 
 objc-runtime: libobjc.a
 
 # Build the Objective C runtime library.
-libobjc.a: cc1obj stmp-int-hdrs libgcc2.ready $(USE_COLLECT2) $(EXTRA_PARTS)
+libobjc.a: cc1obj specs stmp-int-hdrs libgcc2.ready $(USE_COLLECT2) $(EXTRA_PARTS)
        if [ -d objc ]; then true; else mkdir objc; fi
        thisdir1=`pwd`; \
        srcdir1=`cd $(srcdir); pwd`; \
@@ -998,52 +1060,58 @@ libobjc.a: cc1obj stmp-int-hdrs libgcc2.ready $(USE_COLLECT2) $(EXTRA_PARTS)
        $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
          srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
          GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
-         GCC_CFLAGS="$(GCC_CFLAGS)"
+         GCC_CFLAGS="$(GCC_CFLAGS)" OBJC_THREAD_FILE="$(OBJC_THREAD_FILE)"
        -rm -f libobjc.a
        ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
        -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
 
 # This is used by objc/Makefile if the user runs that directly.
-sublibobjc.a: cc1obj stmp-int-hdrs libgcc2.ready
+sublibobjc.a: cc1obj specs stmp-int-hdrs libgcc2.ready
        thisdir1=`pwd`; \
        srcdir1=`cd $(srcdir); pwd`; \
        cd objc; \
        $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
          srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
          GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
-         GCC_CFLAGS="$(GCC_CFLAGS)"
+         GCC_CFLAGS="$(GCC_CFLAGS)" OBJC_THREAD_FILE="$(OBJC_THREAD_FILE)"
 
 # Compile two additional files that are linked with every program
 # linked using GCC on systems using COFF or ELF, for the sake of C++
 # constructors.
-crtbegin.o: stamp-crt ; @true
-crtend.o: stamp-crt; @true
+$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
+         -finhibit-size-directive -fno-inline-functions $(CRTSTUFF_T_CFLAGS) \
+         -c $(srcdir)/crtstuff.c -DCRT_BEGIN -o $(T)crtbegin$(objext)
 
-stamp-crt:     crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
-         -DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
-         -g0 -c $(srcdir)/crtstuff.c
-       mv crtstuff$(objext) crtbegin$(objext)
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
-         -DCRT_END -finhibit-size-directive -fno-inline-functions \
-         -g0 -c $(srcdir)/crtstuff.c
-       mv crtstuff$(objext) crtend$(objext)
-       touch stamp-crt
+$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
+         -finhibit-size-directive -fno-inline-functions $(CRTSTUFF_T_CFLAGS) \
+         -c $(srcdir)/crtstuff.c -DCRT_END -o $(T)crtend$(objext)
 
 # On some systems we also want to install versions of these files
 # compiled using PIC for use in shared libraries.
 crtbeginS.o crtendS.o: stamp-crtS ; @true
 
 stamp-crtS:    crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \
          -DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
-         -g0 -c $(srcdir)/crtstuff.c -fPIC
+         -g0 -c $(srcdir)/crtstuff.c 
        mv crtstuff$(objext) crtbeginS$(objext)
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \
          -DCRT_END -finhibit-size-directive -fno-inline-functions \
-         -g0 -c $(srcdir)/crtstuff.c -fPIC
-       mv crtstuff$(objext) crtendS$(objext)
+         -g0 -c $(srcdir)/crtstuff.c -o crtendS$(objext)
        touch stamp-crtS
+
+# Compile the start modules crt0.o and mcrt0.o that are linked with every program
+crt0.o: stamp-crt0 ; @true
+mcrt0.o: stamp-crt0; @true
+
+stamp-crt0:    $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
+         -o crt0.o -c $(CRT0_S)
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
+         -o mcrt0.o -c $(MCRT0_S)
+       touch stamp-crt0
 \f
 # Compiling object files from source files.
 
@@ -1077,7 +1145,8 @@ c-lex.o : c-lex.c $(CONFIG_H) $(TREE_H) c-lex.h c-tree.h $(srcdir)/c-parse.h \
     input.h flags.h $(srcdir)/c-gperf.h c-pragma.h
 c-aux-info.o : c-aux-info.c  $(CONFIG_H) $(TREE_H) c-tree.h flags.h
 c-convert.o : c-convert.c $(CONFIG_H) $(TREE_H) flags.h
-c-pragma.o: c-pragma.c $(CONFIG_H) $(TREE_H) c-pragma.h
+c-pragma.o: c-pragma.c $(CONFIG_H) $(TREE_H) except.h function.h \
+    defaults.h c-pragma.h
 c-iterate.o: c-iterate.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h flags.h
 
 # To make a configuration always use collect2, set USE_COLLECT2 to ld.
@@ -1086,15 +1155,16 @@ ld: collect2
        ln collect2$(exeext) ld$(exeext) > /dev/null 2>&1 \
           || cp collect2$(exeext) ld$(exeext)
 
-collect2 : collect2.o cplus-dem.o underscore.o version.o $(LIBDEPS)
+collect2 : collect2.o cplus-dem.o underscore.o version.o \
+       choose-temp.o $(LIBDEPS)
 # Don't try modifying collect2 (aka ld) in place--it might be linking this.
        -rm -f collect2$(exeext)
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ collect2.o \
-         cplus-dem.o underscore.o version.o $(LIBS)
+         cplus-dem.o underscore.o version.o choose-temp.o $(LIBS)
 
 collect2.o : collect2.c $(CONFIG_H) gstab.h obstack.h demangle.h
        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES)  \
-       -DTARGET_MACHINE=\"$(target)\" $(MAYBE_USE_COLLECT2) \
+       -DTARGET_MACHINE=\"$(target_alias)\" $(MAYBE_USE_COLLECT2) \
        -c `echo $(srcdir)/collect2.c | sed 's,^\./,,'`
 
 cplus-dem.o: cplus-dem.c demangle.h
@@ -1122,7 +1192,7 @@ objc-parse.o : $(srcdir)/objc-parse.c $(CONFIG_H) $(TREE_H) c-lex.h \
 $(srcdir)/objc-parse.c : $(srcdir)/objc-parse.y
        cd $(srcdir); $(BISON) $(BISONFLAGS) objc-parse.y -o objc-parse.c
 $(srcdir)/objc-parse.y: $(srcdir)/c-parse.in
-       echo '/*WARNING: This file is automatically generated!*/' >tmp-c-parse.y
+       echo '/*WARNING: This file is automatically generated!*/' >tmp-objc-prs.y
        sed -e "/^ifc$$/,/^end ifc$$/d" \
          -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \
          $(srcdir)/c-parse.in >>tmp-objc-prs.y
@@ -1137,20 +1207,23 @@ c-common.o : c-common.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h flags.h
 
 # Language-independent files.
 
-gcc.o: gcc.c $(CONFIG_H) multilib.h config.status $(lang_specs_files)
-       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+DRIVER_DEFINES = \
   -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
   -DDEFAULT_TARGET_VERSION=\"$(version)\" \
-  -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
-  -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
-  $(MAYBE_TARGET_DEFAULT) \
+  -DDEFAULT_TARGET_MACHINE=\"$(target_alias)\" \
+  -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\"
+gcc.o: gcc.c $(CONFIG_H) multilib.h config.status $(lang_specs_files)
+       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+  $(DRIVER_DEFINES) \
   -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'`
 
 dumpvers: dumpvers.c
 
 version.o: version.c
 obstack.o: obstack.c
+choose-temp.o: choose-temp.c
+pexecute.o: pexecute.c
 
 convert.o: convert.c $(CONFIG_H) $(TREE_H) flags.h convert.h
 
@@ -1161,8 +1234,8 @@ fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h
 toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) bytecode.h bc-emit.h \
    flags.h input.h insn-attr.h xcoffout.h defaults.h output.h \
    $(lang_options_files)
-       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-         $(MAYBE_TARGET_DEFAULT) $(MAYBE_USE_COLLECT2) \
+       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(MAYBE_USE_COLLECT2) \
+         -DTARGET_NAME=\"$(target_alias)\" \
          -c `echo $(srcdir)/toplev.c | sed 's,^\./,,'`
 
 rtl.o : rtl.c $(CONFIG_H) $(RTL_H)
@@ -1175,15 +1248,18 @@ varasm.o : varasm.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h function.h \
    output.h bytecode.h c-pragma.h
 function.o : function.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
    insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \
-   recog.h output.h bytecode.h
+   recog.h output.h bytecode.h bc-emit.h
 stmt.o : stmt.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
-   insn-flags.h insn-config.h insn-codes.h hard-reg-set.h expr.h loop.h \
-   recog.h bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h bc-optab.h \
-   bc-emit.h
+   insn-flags.h insn-config.h insn-codes.h hard-reg-set.h expr.h except.h \
+   loop.h recog.h bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h \
+   bc-optab.h bc-emit.h
+except.o : except.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
+   insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \
+   recog.h output.h except.h
 expr.o : expr.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h regs.h \
    insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
    typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-   bc-emit.h modemap.def
+   bc-emit.h modemap.def hard-reg-set.h
 calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
    insn-flags.h
 expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
@@ -1194,10 +1270,13 @@ optabs.o : optabs.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
    insn-flags.h insn-config.h insn-codes.h expr.h recog.h reload.h
 dbxout.o : dbxout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h regs.h \
    insn-config.h reload.h gstab.h xcoffout.h defaults.h output.h
-sdbout.o : sdbout.c $(CONFIG_H) $(TREE_H) $(RTL_H) gsyms.h flags.h \
-   insn-config.h reload.h
+sdbout.o : sdbout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h except.h \
+   function.h expr.h output.h hard-reg-set.h regs.h defaults.h real.h \
+   bytecode.h obstack.h xcoffout.h c-pragma.h
 dwarfout.o : dwarfout.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf.h flags.h \
    insn-config.h reload.h output.h defaults.h
+dwarf2out.o : dwarf2out.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf2.h flags.h \
+   insn-config.h reload.h output.h defaults.h hard-reg-set.h regs.h
 xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h
 emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
    function.h regs.h insn-config.h insn-codes.h real.h expr.h bytecode.h \
@@ -1206,7 +1285,7 @@ real.o : real.c $(CONFIG_H) $(TREE_H)
 getpwd.o : getpwd.c $(CONFIG_H)
 
 integrate.o : integrate.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h integrate.h \
-   insn-flags.h insn-config.h insn-codes.h expr.h real.h function.h \
+   insn-flags.h insn-config.h insn-codes.h expr.h real.h regs.h function.h \
    bytecode.h
 
 jump.o : jump.c $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h \
@@ -1245,19 +1324,18 @@ reorg.o : reorg.c $(CONFIG_H) $(RTL_H) conditions.h hard-reg-set.h \
 sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \
    flags.h insn-config.h insn-attr.h
 final.o : final.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h regs.h \
-   recog.h conditions.h insn-config.h insn-attr.h real.h output.h \
+   recog.h conditions.h insn-config.h insn-attr.h except.h real.h output.h \
    hard-reg-set.h insn-flags.h insn-codes.h gstab.h xcoffout.h defaults.h
 recog.o : recog.c $(CONFIG_H) $(RTL_H)  \
    regs.h recog.h hard-reg-set.h flags.h insn-config.h insn-attr.h \
    insn-flags.h insn-codes.h real.h
 reg-stack.o : reg-stack.c $(CONFIG_H) $(RTL_H) $(TREE_H) \
-   regs.h hard-reg-set.h flags.h insn-config.h
+   regs.h hard-reg-set.h flags.h insn-config.h insn-flags.h
 
 $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) \
    $(RTL_H) regs.h hard-reg-set.h real.h insn-config.h conditions.h \
    insn-flags.h output.h insn-attr.h insn-codes.h
-       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-         $(MAYBE_TARGET_DEFAULT) $(out_file)
+       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(out_file)
 
 # Build auxiliary files that support ecoff format.
 mips-tfile: mips-tfile.o version.o $(LIBDEPS)
@@ -1628,6 +1706,7 @@ cccp.o: cccp.c $(CONFIG_H) pcp.h version.c config.status
        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
          -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
          -DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
+         -DOLD_GPLUSPLUS_INCLUDE_DIR=\"$(old_gxx_include_dir)\" \
          -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
          -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
          -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
@@ -1638,10 +1717,13 @@ cppmain: cppmain.o cpplib.o cpphash.o cppalloc.o cpperror.o cppexp.o \
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cppmain.o cpplib.o cpphash.o \
          cppalloc.o cpperror.o cppexp.o version.o $(LIBS)
 
+cppmain.o: cppmain.c $(CONFIG_H) cpplib.h
+
 cpplib.o: cpplib.c $(CONFIG_H) cpplib.h cpphash.h config.status
        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
          -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
          -DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
+         -DOLD_GPLUSPLUS_INCLUDE_DIR=\"$(old_gxx_include_dir)\" \
          -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
          -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
          -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
@@ -1660,14 +1742,18 @@ cppalloc.o: cppalloc.c $(CONFIG_H)
 
 proto: config.status protoize unprotoize SYSCALLS.c.X
 
-protoize: protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS)
+protoize: protoize.o getopt.o getopt1.o getpwd.o version.o \
+    pexecute.o choose-temp.o $(LIBDEPS)
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
-         protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS)
+         protoize.o getopt.o getopt1.o getpwd.o version.o \
+         pexecute.o choose-temp.o $(LIBS)
 protoize.o: stamp-proto ; @true
 
-unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS)
+unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o \
+    pexecute.o choose-temp.o $(LIBDEPS)
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
-         unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS)
+         unprotoize.o getopt.o getopt1.o getpwd.o version.o \
+         pexecute.o choose-temp.o $(LIBS)
 unprotoize.o:  stamp-proto ; @true
 
 stamp-proto: protoize.c getopt.h $(CONFIG_H)
@@ -1741,14 +1827,12 @@ stmp-int-hdrs: stmp-fixinc $(USER_H) xlimits.h objc-headers
 # The sed command gets just the last file name component;
 # this is necessary because VPATH could add a dirname.
 # Using basename would be simpler, but some systems don't have it.
-       objdir=`pwd`; \
-       cd $(srcdir); \
        for file in .. $(USER_H); do \
          if [ X$$file != X.. ]; then \
            realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
-           rm -f $$objdir/include/$$realfile; \
-           cp ginclude/$$realfile $$objdir/include; \
-           chmod a+r $$objdir/include/$$realfile; \
+           rm -f include/$$realfile; \
+           cp $$file include; \
+           chmod a+r include/$$realfile; \
          fi; \
        done
        rm -f include/limits.h
@@ -1797,10 +1881,12 @@ objc-headers: stmp-fixinc
        thisdir1=`pwd`; \
        srcdir1=`cd $(srcdir); pwd`; \
        cd objc; \
-       $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
-       srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
-       GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
-       GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
+       if [ -f $${srcdir1}/objc/Makefile ]; then \
+         $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
+         srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
+         GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
+         GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include; \
+       fi
        touch objc-headers
 
 # Files related to the fixproto script.
@@ -1874,11 +1960,11 @@ doc: info
 info: $(srcdir)/cpp.info $(srcdir)/gcc.info lang.info
 
 $(srcdir)/cpp.info: cpp.texi
-       cd $(srcdir); $(MAKEINFO) cpp.texi
+       cd $(srcdir); $(MAKEINFO) $(MAKEINFOFLAGS) cpp.texi
 
 $(srcdir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \
                md.texi rtl.texi tm.texi 
-       cd $(srcdir); $(MAKEINFO) gcc.texi
+       cd $(srcdir); $(MAKEINFO) $(MAKEINFOFLAGS) gcc.texi
 
 dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi lang.dvi
 
@@ -2043,7 +2129,7 @@ install-cross-rest: install-float-h-cross
 
 # Install float.h for cross compiler.
 # Run this on the target machine!
-install-float-h-cross: install-dir
+install-float-h-cross: installdirs
 #      if [ -f enquire ] ; then true; else false; fi
 # Note: don't use -.  We should fail right away if enquire was not made.
        ./enquire -f > $(tmpdir)/float.h
@@ -2052,15 +2138,17 @@ install-float-h-cross: install-dir
        -rm -f $(tmpdir)/float.h
        chmod a-x $(libsubdir)/include/float.h
 
-# Create the installation directory.
-install-dir:
+# Create the installation directories.
+installdirs:
+       -if [ -d $(prefix) ] ; then true ; else mkdir $(prefix) ; chmod a+rx $(prefix) ; fi
+       -if [ -d $(exec_prefix) ] ; then true ; else mkdir $(exec_prefix) ; chmod a+rx $(exec_prefix) ; fi
        -if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; chmod a+rx $(libdir) ; fi
        -if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib ; chmod a+rx $(libdir)/gcc-lib ; fi
 # This dir isn't currently searched by cpp.
 #      -if [ -d $(libdir)/gcc-lib/include ] ; then true ; else mkdir $(libdir)/gcc-lib/include ; chmod a+rx $(libdir)/gcc-lib/include ; fi
-       -if [ -d $(libdir)/gcc-lib/$(target) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target) ; chmod a+rx $(libdir)/gcc-lib/$(target) ; fi
-       -if [ -d $(libdir)/gcc-lib/$(target)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version) ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version) ; fi
-       -if [ -d $(libdir)/gcc-lib/$(target)/$(version)/include ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version)/include ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version)/include ; fi
+       -if [ -d $(libdir)/gcc-lib/$(target_alias) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias) ; chmod a+rx $(libdir)/gcc-lib/$(target_alias) ; fi
+       -if [ -d $(libdir)/gcc-lib/$(target_alias)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias)/$(version) ; chmod a+rx $(libdir)/gcc-lib/$(target_alias)/$(version) ; fi
+       -if [ -d $(libdir)/gcc-lib/$(target_alias)/$(version)/include ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias)/$(version)/include ; chmod a+rx $(libdir)/gcc-lib/$(target_alias)/$(version)/include ; fi
        -if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; chmod a+rx $(bindir) ; fi
        -if [ -d $(includedir) ] ; then true ; else mkdir $(includedir) ; chmod a+rx $(includedir) ; fi
        -if [ -d $(tooldir) ] ; then true ; else mkdir $(tooldir) ; chmod a+rx $(tooldir) ; fi
@@ -2074,7 +2162,7 @@ install-dir:
        -if [ -d $(mandir) ] ; then true ; else mkdir $(mandir) ; chmod a+rx $(mandir) ; fi
 
 # Install the compiler executables built during cross compilation.
-install-common: native install-dir $(EXTRA_PARTS) lang.install-common
+install-common: native installdirs $(EXTRA_PARTS) lang.install-common
        for file in $(COMPILERS); do \
          if [ -f $$file ] ; then \
            rm -f $(libsubdir)/$$file; \
@@ -2113,7 +2201,7 @@ install-common: native install-dir $(EXTRA_PARTS) lang.install-common
        -rm -f $(libsubdir)/cpp$(exeext)
        $(INSTALL_PROGRAM) cpp$(exeext) $(libsubdir)/cpp$(exeext)
 
-# Install the driver program as $(target)-gcc
+# Install the driver program as $(target_alias)-gcc
 # and also as either gcc (if native) or $(tooldir)/bin/gcc.
 install-driver: xgcc
        -if [ -f gcc-cross$(exeext) ] ; then \
@@ -2126,22 +2214,22 @@ install-driver: xgcc
        else \
          rm -f $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
          $(INSTALL_PROGRAM) xgcc$(exeext) $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
-         rm -f $(bindir)/$(target)-gcc-1$(exeext); \
-         ln $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext) \
+         rm -f $(bindir)/$(target_alias)-gcc-1$(exeext); \
+         ln $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target_alias)-gcc-1$(exeext) \
            > /dev/null 2>&1 \
-           || cp $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext); \
-         mv $(bindir)/$(target)-gcc-1$(exeext) $(bindir)/$(target)-gcc$(exeext); \
+           || cp $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target_alias)-gcc-1$(exeext); \
+         mv $(bindir)/$(target_alias)-gcc-1$(exeext) $(bindir)/$(target_alias)-gcc$(exeext); \
        fi
 
 # Install the info files.
-install-info: doc install-dir lang.install-info
+install-info: doc installdirs lang.install-info
        -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
        cd $(srcdir); for f in cpp.info* gcc.info*; \
        do $(INSTALL_DATA) $$f $(infodir)/$$f; done
        -chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info*
 
 # Install the man pages.
-install-man: install-dir $(srcdir)/gcc.1 $(srcdir)/cccp.1 lang.install-man
+install-man: installdirs $(srcdir)/gcc.1 $(srcdir)/cccp.1 lang.install-man
        -if [ -f gcc-cross ] ; then \
          rm -f $(mandir)/$(GCC_CROSS_NAME)$(manext); \
          $(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/$(GCC_CROSS_NAME)$(manext); \
@@ -2156,7 +2244,7 @@ install-man: install-dir $(srcdir)/gcc.1 $(srcdir)/cccp.1 lang.install-man
        -chmod a-x $(mandir)/cccp$(manext)
 
 # Install the library.
-install-libgcc: libgcc.a install-dir
+install-libgcc: libgcc.a installdirs
        -if [ -f libgcc.a ] ; then \
          rm -f $(libsubdir)/libgcc.a; \
          $(INSTALL_DATA) libgcc.a $(libsubdir)/libgcc.a; \
@@ -2166,19 +2254,21 @@ install-libgcc: libgcc.a install-dir
        else true; fi
 
 # Install multiple versions of libgcc.a.
-install-multilib: stmp-multilib install-dir
+install-multilib: stmp-multilib installdirs
        for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
          dir=`echo $$i | sed -e 's/;.*$$//'`; \
          if [ -d $(libsubdir)/$${dir} ]; then true; else mkdir $(libsubdir)/$${dir}; fi; \
-         rm -f $(libsubdir)/$${dir}/libgcc.a; \
-         $(INSTALL_DATA) $${dir}/libgcc.a $(libsubdir)/$${dir}/libgcc.a; \
+         for f in libgcc.a $(EXTRA_MULTILIB_PARTS); do \
+           rm -f $(libsubdir)/$${dir}/$${f}; \
+           $(INSTALL_DATA) $${dir}/$${f} $(libsubdir)/$${dir}/$${f}; \
+         done; \
          if $(RANLIB_TEST); then \
            (cd $(libsubdir)/$${dir}; $(RANLIB) libgcc.a); else true; fi; \
          chmod a-x $(libsubdir)/$${dir}/libgcc.a; \
        done
 
 # Install the objc run time library.
-install-libobjc: install-dir
+install-libobjc: installdirs
        -if [ -f libobjc.a ] ; then \
          rm -f $(libsubdir)/libobjc.a; \
          $(INSTALL_DATA) libobjc.a $(libsubdir)/libobjc.a; \
@@ -2204,7 +2294,7 @@ install-headers: install-include-dir $(INSTALL_HEADERS_DIR) $(INSTALL_ASSERT_H)
        fi
 
 # Create or recreate the gcc private include file directory.
-install-include-dir: install-dir
+install-include-dir: installdirs
        -rm -rf $(libsubdir)/include
        mkdir $(libsubdir)/include
        -chmod a+rx $(libsubdir)/include
@@ -2228,7 +2318,7 @@ install-headers-cpio: stmp-headers $(STMP_FIXPROTO) install-include-dir
 ## Don't replace the assert.h already there if it is not from GCC.
 ## This code would be simpler if it tested for -f ... && ! grep ...
 ## but supposedly the ! operator is missing in sh on some systems.
-install-assert-h: assert.h install-dir
+install-assert-h: assert.h installdirs
        if [ -f $(assertdir)/assert.h ]; \
        then \
          if grep "__eprintf" $(assertdir)/assert.h >/dev/null; \
@@ -2245,7 +2335,7 @@ install-assert-h: assert.h install-dir
        fi
 
 # Use this target to install the program `collect2' under the name `ld'.
-install-collect2: collect2 install-dir
+install-collect2: collect2 installdirs
        $(INSTALL_PROGRAM) collect2$(exeext) $(libsubdir)/ld$(exeext)
 # Install the driver program as $(libsubdir)/gcc for collect2.
        $(INSTALL_PROGRAM) xgcc$(exeext) $(libsubdir)/gcc$(exeext)
@@ -2367,7 +2457,7 @@ bootstrap: force
 # Only build the C compiler for stage1, because that is the only one that
 # we can guarantee will build with the native compiler, and also it is the
 # only thing useful for building stage2.
-       $(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES=c
+       $(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)"
        $(MAKE) stage1
 # This used to define ALLOCA as empty, but that would lead to bad results
 # for a subsequent `make install' since that would not have ALLOCA empty.
@@ -2470,6 +2560,9 @@ stage1-start:
        -rm -f stage1/libgcc.a
        -cp libgcc.a stage1
        -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
+       -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
+         cp stage1/$${f} . ; \
+       fi; done
 stage1: force stage1-start lang.stage1
 
 stage2-start:
@@ -2487,6 +2580,9 @@ stage2-start:
        -rm -f stage2/libgcc.a
        -cp libgcc.a stage2
        -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
+       -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
+         cp stage2/$${f} . ; \
+       fi; done
 stage2: force stage2-start lang.stage2
 
 stage3-start:
@@ -2504,6 +2600,9 @@ stage3-start:
        -rm -f stage3/libgcc.a
        -cp libgcc.a stage3
        -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
+       -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
+         cp stage3/$${f} . ; \
+       fi; done
 stage3: force stage3-start lang.stage3
 
 stage4-start:
@@ -2521,6 +2620,9 @@ stage4-start:
        -rm -f stage4/libgcc.a
        -cp libgcc.a stage4
        -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libgcc.a; else true; fi
+       -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
+         cp stage4/$${f} . ; \
+       fi; done
 stage4: force stage4-start lang.stage4
 
 # Copy just the executable files from a particular stage into a subdirectory,