(dwarf2out.o): Includes expr.h.
[gcc.git] / gcc / Makefile.in
index 9c6fae742eb03df8b22a500dacbdae5989a260a4..c7520c061e3bd146d4496592c8d7938f279ef815 100644 (file)
@@ -1,5 +1,5 @@
 # Makefile for GNU C compiler.
-#   Copyright (C) 1987, 88, 90-95, 1996 Free Software Foundation, Inc.
+#   Copyright (C) 1987, 88, 90-96, 1997 Free Software Foundation, Inc.
 
 #This file is part of GNU CC.
 
@@ -35,7 +35,7 @@ SUBDIRS =
 
 # Selection of languages to be made.
 # This is overridden by configure.
-LANGUAGES = c objective-c proto
+LANGUAGES = c objective-c proto gcov
 
 # Selection of languages to be made during stage1 build.
 # This is overridden by configure.
@@ -115,11 +115,14 @@ USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \
     $(srcdir)/ginclude/varargs.h $(srcdir)/ginclude/va-alpha.h \
     $(srcdir)/ginclude/va-h8300.h $(srcdir)/ginclude/va-i860.h \
     $(srcdir)/ginclude/va-i960.h $(srcdir)/ginclude/va-mips.h \
-    $(srcdir)/ginclude/va-m88k.h $(srcdir)/ginclude/va-pa.h \
+    $(srcdir)/ginclude/va-m88k.h $(srcdir)/ginclude/va-mn10300.h \
+    $(srcdir)/ginclude/va-pa.h \
     $(srcdir)/ginclude/va-pyr.h $(srcdir)/ginclude/va-sparc.h \
     $(srcdir)/ginclude/va-clipper.h $(srcdir)/ginclude/va-spur.h \
+    $(srcdir)/ginclude/va-m32r.h $(srcdir)/ginclude/va-sh.h \
     $(srcdir)/ginclude/iso646.h $(srcdir)/ginclude/va-ppc.h \
-    $(srcdir)/ginclude/proto.h $(srcdir)/ginclude/va-sh.h $(EXTRA_HEADERS)
+    $(srcdir)/ginclude/proto.h $(EXTRA_HEADERS) \
+    $(LANG_EXTRA_HEADERS)
 
 # Target to use whe installing assert.h.  Some systems may
 # want to set this empty.
@@ -256,7 +259,8 @@ 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 -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
+LIBGCC2_DEBUG_CFLAGS = -g1
+LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
 
 # Additional options to use when compiling libgcc2.a.
 # Some targets override this to -Iinclude
@@ -338,9 +342,13 @@ FIXINCLUDES=fixincludes
 # On most systems, this is empty.
 OTHER_FIXINCLUDES_DIRS=
 
+# A list of all the language-specific executables.
+# This is overridden by configure.
+COMPILERS = cc1$(exeext) cc1obj$(exeext)
+
 # 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.
@@ -476,6 +484,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
@@ -489,6 +499,7 @@ FLAGS_TO_PASS = \
        "BISONFLAGS=$(BISONFLAGS)" \
        "CC=set-by-configure" \
        "CFLAGS=$(CFLAGS)" \
+       "CLIB=$(CLIB)" \
        "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
        "LDFLAGS=$(LDFLAGS)" \
        "LEX=$(LEX)" \
@@ -498,6 +509,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)" \
@@ -508,10 +520,6 @@ FLAGS_TO_PASS = \
 \f
 # Lists of files for various purposes.
 
-# A list of all the language-specific executables.
-# This is overridden by configure.
-COMPILERS = cc1$(exeext) cc1obj$(exeext)
-
 # Language-specific object files for C.
 C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o \
    c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
@@ -528,13 +536,14 @@ 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 \
  insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
+ profile.o \
  insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
 
 # GEN files are listed separately, so they can be built before doing parallel
@@ -550,7 +559,7 @@ 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-crt0 \
  genemit$(exeext) genoutput$(exeext) genrecog$(exeext) genextract$(exeext) \
@@ -563,6 +572,7 @@ STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
  $(CCCP)$(exeext) cc1obj$(exeext) enquire$(exeext) \
  protoize$(exeext) unprotoize$(exeext) \
  specs collect2$(exeext) $(USE_COLLECT2) underscore.c \
+ gcov$(exeext) *.bp \
  *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop \
  *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack \
  *.[si] \
@@ -599,6 +609,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.
 
@@ -687,8 +700,8 @@ 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
@@ -883,7 +896,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
@@ -908,19 +921,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
@@ -955,13 +981,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'`; \
@@ -970,6 +1004,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; \
@@ -978,7 +1013,12 @@ 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); \
+       else true; \
+       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)" \
@@ -1007,6 +1047,14 @@ 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}; \
+       else true; \
+       fi; done
 
 objc-runtime: libobjc.a
 
@@ -1037,18 +1085,15 @@ sublibobjc.a: cc1obj specs stmp-int-hdrs libgcc2.ready
 # 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 -o 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.
@@ -1107,7 +1152,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.
@@ -1153,7 +1199,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
@@ -1168,13 +1214,15 @@ 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_alias)\" \
-  -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
+  -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
@@ -1209,9 +1257,12 @@ 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 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 \
@@ -1226,10 +1277,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 expr.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 \
@@ -1247,6 +1301,8 @@ stupid.o : stupid.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h
 
 cse.o : cse.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h real.h \
    insn-config.h recog.h
+profile.o : profile.c $(CONFIG_H) $(RTL_H) flags.h insn-flags.h gcov-io.h \
+   tree.h output.h
 loop.o : loop.c $(CONFIG_H) $(RTL_H) flags.h loop.h insn-config.h \
    insn-flags.h insn-codes.h regs.h hard-reg-set.h recog.h expr.h real.h
 unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h insn-codes.h \
@@ -1263,7 +1319,7 @@ local-alloc.o : local-alloc.c $(CONFIG_H) $(RTL_H) flags.h basic-block.h \
 global.o : global.c $(CONFIG_H) $(RTL_H) flags.h  \
    basic-block.h regs.h hard-reg-set.h insn-config.h output.h
 
-reload.o : reload.c $(CONFIG_H) $(RTL_H) flags.h output.h \
+reload.o : reload.c $(CONFIG_H) $(RTL_H) flags.h output.h expr.h\
    reload.h recog.h hard-reg-set.h insn-config.h insn-codes.h regs.h real.h
 reload1.o : reload1.c $(CONFIG_H) $(RTL_H) real.h flags.h expr.h \
    reload.h regs.h hard-reg-set.h insn-config.h insn-flags.h insn-codes.h \
@@ -1277,7 +1333,7 @@ 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 \
@@ -1670,6 +1726,8 @@ 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\" \
@@ -1766,6 +1824,11 @@ test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
        @echo Expect zero differences.
        diff $(srcdir)/protoize.c tmp-proto.c | cat
        -rm -f tmp-proto.[cs] tmp-proto$(objext)
+
+gcov.o: gcov.c gcov-io.h
+
+gcov: gcov.o $(LIBDEPS)
+       $(CC) $(ALL_CFLAGS) $(LDFLAGS) gcov.o $(LIBS) -o $@
 \f
 # Build the include directory.  The stamp files are stmp-* rather than
 # stamp-* so that mostlyclean does not force the include directory to
@@ -1778,14 +1841,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
@@ -1834,10 +1895,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.
@@ -1914,14 +1977,14 @@ $(srcdir)/cpp.info: 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 
+               md.texi rtl.texi tm.texi gcov.texi
        cd $(srcdir); $(MAKEINFO) $(MAKEINFOFLAGS) gcc.texi
 
 dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi lang.dvi
 
 # This works with GNU Make's default rule.
 $(srcdir)/gcc.dvi: gcc.texi extend.texi install.texi invoke.texi \
-               md.texi rtl.texi tm.texi 
+               md.texi rtl.texi tm.texi gcov.texi 
        $(TEXI2DVI) $<
 
 # This works with GNU Make's default rule.
@@ -1988,6 +2051,7 @@ mostlyclean: bytecode.mostlyclean lang.mostlyclean
        -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns
 # Delete core dumps.
        -rm -f core */core
+       -rm -f *.bp */*.bp
 
 # Delete all files made by compilation
 # that don't exist in the distribution.
@@ -2080,7 +2144,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
@@ -2089,8 +2153,10 @@ 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.
@@ -2111,7 +2177,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; \
@@ -2149,6 +2215,13 @@ install-common: native install-dir $(EXTRA_PARTS) lang.install-common
        fi
        -rm -f $(libsubdir)/cpp$(exeext)
        $(INSTALL_PROGRAM) cpp$(exeext) $(libsubdir)/cpp$(exeext)
+# Install gcov if it was compiled.
+       -if [ -f gcov$(exeext) ]; \
+       then \
+           rm -f $(bindir)/gcov$(exeext); \
+           $(INSTALL_PROGRAM) gcov$(exeext) $(bindir)/gcov$(exeext); \
+           chmod a+x $(bindir)/gcov$(exeext); \
+       fi
 
 # Install the driver program as $(target_alias)-gcc
 # and also as either gcc (if native) or $(tooldir)/bin/gcc.
@@ -2171,14 +2244,14 @@ install-driver: xgcc
        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); \
@@ -2193,7 +2266,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; \
@@ -2203,19 +2276,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; \
@@ -2241,7 +2316,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
@@ -2265,7 +2340,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; \
@@ -2282,7 +2357,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)
@@ -2507,6 +2582,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:
@@ -2524,6 +2602,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:
@@ -2541,6 +2622,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:
@@ -2558,6 +2642,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,