This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

libgcc move to the top level


This patch moves libgcc to the top level, i.e. out of the gcc subdirectory.
The approach I chose is pretty ugly, but designed to allow for incremental
cleanups afterwards.  The patch below leaves all of the sources for libgcc,
and most (but not all) of the target-specific rules, in the gcc
subdirectory.  It only moves the build tree and the controlling Make logic
to the new directory.  This keeps the size of the patch under control.
Moving individual source files and individual target-specific bits to
the new directory is pretty simple, and it can be done one target or
one setting at a time.

The build process today works like this: the top level invokes all-gcc,
which builds the compiler, and then uses the freshly built compiler to build
libgcc in the same directory.

The build process after the patch works like this: the top level invokes
all-gcc, which builds the compiler.  It also builds some miscellaneous
support files with their own rules, like version scripts.  And it builds a
new file, which records a lot of make variables captured from target
make fragments.  But it does not build any target code.  Then, the top level
configures and builds libgcc using the new compiler just like any other
target library (except that dependencies ensure it is first).  The libgcc
build process retrieves some configuration data from the gcc build
directory, and other bits from its own source directory and configure
script.  Then, after it builds everything, it copies the result into the
gcc object directory.

That last is annoying, but I couldn't realistically get rid of it.  If we
don't put libgcc just where we've "always" put it, the testsuite breaks
down.  It's not just GCC that knows what the layout of a GCC build looks
like; DejaGNU has it hardcoded!  Some day, I hope we'll do builds into a
staged installation directory, and then the magic -B flags can go away.

The top level changes add libgcc, and arrange for other target libraries
to depend on it.  I redid the lang_env_dependencies mechanism so that it
defaults to all unmentioned target items requiring the C runtime (libgcc and
newlib if the latter is in the tree), which fixes several current omissions
in lang_env_dependencies that would show up in parallel combined tree
builds.  Note that libgcc is a bootstrapped library, our first such target
library.  It gets built in every stage and the just built copy is used
by the next stage.

The gcc directory changes remove mklibgcc.in, generate the new libgcc.mvars
support file, and remove rules that needed to be moved to libgcc to function
correctly; libgcc.mvars is basically a compatibility shim, to cover the
majority of targets, but some (Darwin, NetWare, and a generic PowerPC issue)
were too quirky to handle that way.  The -specs= hack is no longer
necessary, since it's now possible for host makefile fragments to control
TARGET_LIBGCC2_CFLAGS per multilib.

The libgcc directory contains those moved fragments, a simple configure
script (which e.g. autodetects decimal floating point support by running the
just built compiler, and a Makefile.  The Makefile is a reimplementation of
mklibgcc, using GNU make features (as sparingly as I could manage!) instead
of shell scripting.  One benfit of that is automatic dependency generation,
at last.  The result is roughly a wash on code size; the Makefile is 20%
shorter than mklibgcc.in.  It is, in my opinion, rather simpler and
easier to work with.  It will get simpler, too, as the compatibility
bits are weeded out in the future.

There is very little documentation of libgcc in gcc/doc/, mostly FIXMES.
In the future, such documentation should be added to a new libgcc/doc/.
And when the compatibility shims have served their time and the libgcc
configuration is primarily set in libgcc/config/ instead of gcc/config/,
descriptions of the relevant make variables should move to libgcc/doc/
also.

This is a big patch and the build system is notoriously fragile.  Even if
by some miracle it is quickly approved, I don't propose to commit it until
around two weeks from now; I'll be out of touch a good chunk of the interim
and I want to be around in case there are any problems.

I tested this exact version by bootstrapping and installing on
x86_64-pc-linux-gnu.  I've done previous tests on powerpc64-linux
(with and without decimal floating point) and using cross compilers to
ARM and MIPS.  Paolo, Eric, and Andrew all helped test the Darwin changes.

That's all I've got.  OK to commit?  Suggestions?

-- 
Daniel Jacobowitz
CodeSourcery

2006-12-16  Daniel Jacobowitz  <dan@codesourcery.com>

	* Makefile.def (target_modules): Add libgcc.
	(lang_env_dependencies): Remove default items.  Use no_c and no_gcc.
	* Makefile.tpl (clean-target-libgcc): Delete.
	(configure-target-[+module+]): Emit --disable-bootstrap dependencies
	on gcc even for bootstrapped modules.  Rewrite handling of
	lang_env_dependencies to loop over target_modules.
	* configure.in (target_libraries): Add target-libgcc.
	* Makefile.in, configure: Regenerated.

2006-12-16  Daniel Jacobowitz  <dan@codesourcery.com>

	* Makefile.in: Update comments mentioning libgcc.
	(LIBGCC, INSTALL_LIBGCC, GCC_PARTS, mklibgcc): Delete.
	(all.cross, start.encap, rest.encap, rest.cross): Update
	dependencies for libgcc move.
	(libgcc.mk, LIBGCC_DEPS, libgcov.a, libgcc.a, stmp-multilib)
	(clean-target, clean-target-libgcc): Delete.
	(srcdirify): New macro.
	(libgcc-support, libgcc.mvars): New rules.
	(distclean): Remove mention of mklibgcc.
	(install): Don't reference INSTALL_LIBGCC.
	(install-common): Don't reference EXTRA_PARTS.
	(install-libgcc, install-multilib): Delete rules.
	* mklibgcc.in: Delete file.
	* doc/configfiles.texi: Don't mention mklibgcc.

	* config/i386/t-darwin (SHLIB_VERPFX): Delete (moved to libgcc).
	* config/i386/t-darwin64 (SHLIB_VERPFX): Likewise.
	* config/rs6000/t-darwin (SHLIB_VERPFX): Likewise.
	* config/rs6000/t-ppccomm (TARGET_LIBGCC2_CFLAGS, SHLIB_MAPFILES)
	(mklibgcc, ldblspecs): Likewise.

	* config/i386/t-nwld (libgcc.def, libc.def, libpcre.def)
	(posixpre.def): Use $(T).
	(SHLIB_EXT, SHLIB_NAME, SHLIB_SLIBDIR_QUAL, SHLIB_DEF, SHLIB_MAP)
	(SHLIB_SRC, SHLIB_INSTALL): Delete.
	(SHLIB_LINK): Make dummy.
	* config/t-slibgcc-darwin: Delete contents except for dummy SHLIB_LINK.

	* configure.ac (all_outputs): Remove mklibgcc.
	* configure: Regenerated.

2006-12-16  Daniel Jacobowitz  <dan@codesourcery.com>
	    Paolo Bonzini  <bonzini@gnu.org>

	* Makefile.in, config/i386/t-darwin, config/i386/t-darwin64,
	config/i386/t-nwld, config/rs6000/t-darwin, config/rs6000/t-ldbl128,
	config/t-slibgcc-darwin, config.gcc, configure.ac, empty.mk,
	shared-object.mk, siditi-object.mk, static-object.mk: New files.
	* configure: Generated.

diff -Nurp trunk/Makefile.def fsf-branch/Makefile.def
--- trunk/Makefile.def	2006-12-09 18:52:34.000000000 -0500
+++ fsf-branch/Makefile.def	2006-12-09 11:40:14.000000000 -0500
@@ -119,6 +119,7 @@ target_modules = { module= libstdc++-v3;
 target_modules = { module= libmudflap; lib_path=.libs; };
 target_modules = { module= libssp; lib_path=.libs; };
 target_modules = { module= newlib; };
+target_modules = { module= libgcc; bootstrap=true; no_check=true; };
 target_modules = { module= libgfortran; };
 target_modules = { module= libobjc; };
 target_modules = { module= libtermcap; no_check=true;
@@ -438,18 +439,17 @@ dependencies = { module=all-tar; on=all-
 dependencies = { module=all-uudecode; on=all-build-texinfo; };
 
 // Target modules.  These can also have dependencies on the language
-// environment (e.g. on libstdc++).
-lang_env_dependencies = { module=boehm-gc; };
+// environment (e.g. on libstdc++).  By default target modules depend
+// on libgcc and newlib/libgloss.
 lang_env_dependencies = { module=gperf; cxx=true; };
-lang_env_dependencies = { module=libada; };
-lang_env_dependencies = { module=libgfortran; };
-lang_env_dependencies = { module=libffi; };
 lang_env_dependencies = { module=libjava; cxx=true; };
-lang_env_dependencies = { module=libmudflap; };
-lang_env_dependencies = { module=libobjc; };
-lang_env_dependencies = { module=libssp; };
-lang_env_dependencies = { module=libstdc++-v3; };
-lang_env_dependencies = { module=zlib; };
+lang_env_dependencies = { module=newlib; no_c=true; };
+lang_env_dependencies = { module=libgloss; no_c=true; };
+lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; };
+// libiberty does not depend on newlib or libgloss because it must be
+// built newlib on some targets (e.g. Cygwin).  It still needs
+// a dependency on libgcc for native targets to configure.
+lang_env_dependencies = { module=libiberty; no_c=true; };
 
 dependencies = { module=configure-target-boehm-gc; on=configure-target-qthreads; };
 dependencies = { module=configure-target-fastjar; on=configure-target-zlib; };
diff -Nurp trunk/Makefile.tpl fsf-branch/Makefile.tpl
--- trunk/Makefile.tpl	2006-12-16 17:12:45.000000000 -0500
+++ fsf-branch/Makefile.tpl	2006-12-16 17:30:45.000000000 -0500
@@ -591,11 +591,6 @@ maintainer-clean: local-maintainer-clean
 maintainer-clean: local-distclean
 realclean: maintainer-clean
 
-# Extra dependency for clean-target, owing to the mixed nature of gcc.
-clean-target: clean-target-libgcc
-clean-target-libgcc:
-	if test -f gcc/Makefile; then cd gcc && $(MAKE) $@; else :; fi
-
 # Check target.
 
 .PHONY: check do-check
@@ -1461,18 +1456,12 @@ configure-target-[+module+]: stage_last[
   ENDIF bootstrap +][+ ENDFOR target_modules +]
 @endif gcc-bootstrap
 
-@if gcc-no-bootstrap[+ FOR target_modules +][+ IF bootstrap
-  +][+ ELSE +]
+@if gcc-no-bootstrap[+ FOR target_modules +]
 configure-target-[+module+]: maybe-all-gcc[+
-  ENDIF bootstrap +][+ ENDFOR target_modules +]
+  ENDFOR target_modules +]
 @endif gcc-no-bootstrap
 
 
-[+ FOR lang_env_dependencies +]
-configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
-[+ IF cxx +]configure-target-[+module+]: maybe-all-target-libstdc++-v3
-[+ ENDIF cxx +][+ ENDFOR lang_env_dependencies +]
-
 # There are two types of dependencies here: 'hard' dependencies, where one
 # module simply won't build without the other; and 'soft' dependencies, where
 # if the depended-on module is missing, the depending module will do without
@@ -1569,6 +1558,49 @@ all-prebootstrap: [+ (dep-target "" "on"
 [+ ESAC +][+
 ENDFOR dependencies +]
 
+
+# Dependencies for target modules on other target modules are
+# described by lang_env_dependencies; the defaults apply to anything
+# not mentioned there.
+[+
+   ;; Predicate for whether LANG was specified in lang_env_dependencies.
+   (define lang-dep (lambda (lang)
+      (hash-ref lang-env-deps (string-append (get "module") "-" lang))))
+
+   ;; Build the hash table we will need.
+   (define lang-env-deps (make-hash-table 7))
++][+ FOR lang_env_dependencies +][+
+   (if (exist? "cxx")
+       (hash-create-handle! lang-env-deps
+	  (string-append (get "module") "-" "cxx") #t))
+
+   (if (exist? "no_c")
+       (hash-create-handle! lang-env-deps
+	  (string-append (get "module") "-" "no_c") #t))
+
+   (if (exist? "no_gcc")
+       (hash-create-handle! lang-env-deps
+	  (string-append (get "module") "-" "no_gcc") #t))
+   "" +][+ ENDFOR lang_env_dependencies +]
+
+@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc"))
+  +][+ IF bootstrap +][+ FOR bootstrap_stage +]
+configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libgcc[+
+  ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +]
+@endif gcc-bootstrap
+
+@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) +]
+configure-target-[+module+]: maybe-all-target-libgcc[+
+  ENDIF +][+ ENDFOR target_modules +]
+@endif gcc-no-bootstrap
+
+[+ FOR target_modules +][+ IF (not (lang-dep "no_c")) +]
+configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+
+  ENDIF +][+ IF (lang-dep "cxx") +]
+configure-target-[+module+]: maybe-all-target-libstdc++-v3[+
+  ENDIF +]
+[+ ENDFOR target_modules +]
+
 # Non-toplevel bootstrap rules must depend on several packages, to be built
 # before gcc.  Another wart that will go away, hopefully soon.
 @if gcc-no-bootstrap
diff -Nurp trunk/configure.in fsf-branch/configure.in
--- trunk/configure.in	2006-12-16 17:12:45.000000000 -0500
+++ fsf-branch/configure.in	2006-12-16 17:30:45.000000000 -0500
@@ -142,6 +142,7 @@ libgcj="target-libffi \
 # the host libraries and the host tools (which may be a cross compiler)
 #
 target_libraries="target-libiberty \
+		target-libgcc \
 		target-libgloss \
 		target-newlib \
 		target-libstdc++-v3 \
diff -Nurp trunk/gcc/Makefile.in fsf-branch/gcc/Makefile.in
--- trunk/gcc/Makefile.in	2006-12-16 17:12:33.000000000 -0500
+++ fsf-branch/gcc/Makefile.in	2006-12-16 17:30:37.000000000 -0500
@@ -330,9 +330,9 @@ USER_H = $(srcdir)/ginclude/decfloat.h \
 
 UNWIND_H = $(srcdir)/unwind-generic.h
 
-# The GCC to use for compiling libgcc.a and crt*.o.
+# The GCC to use for compiling crt*.o.
 # Usually the one we just built.
-# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
+# Don't use this as a dependency--use $(GCC_PASSES).
 GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld
 
 # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
@@ -537,11 +537,6 @@ GGC=@GGC@.o
 # If a supplementary library is being used for the GC.
 GGC_LIB=
 
-# libgcc.a may be built directly or via stmp-multilib,
-# and installed likewise.  Overridden by t-fragment.
-LIBGCC = libgcc.a
-INSTALL_LIBGCC = install-libgcc
-
 # "true" if the target C library headers are unavailable; "false"
 # otherwise.
 inhibit_libc = @inhibit_libc@
@@ -655,10 +650,6 @@ COMPILERS = cc1$(exeext) @all_compilers@
 # to compile anything (without linking).
 GCC_PASSES=xgcc$(exeext) cc1$(exeext) specs $(EXTRA_PASSES)
 
-# List of things which should already be built whenever we try to use xgcc
-# to link anything.
-GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(COLLECT2) $(EXTRA_PARTS)
-
 # Directory to link to, when using the target `maketest'.
 DIR = ../gcc
 
@@ -701,7 +692,7 @@ CRT0STUFF_T_CFLAGS =
 # "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
 T =
 
-# Should T contain a `=', libgcc.mk will make T_TARGET, setting
+# Should T contain a `=', libgcc/Makefile will make T_TARGET, setting
 # $(T_TARGET) to the name of the actual target filename.
 T_TARGET =
 T_TARGET : $(T_TARGET)
@@ -1230,9 +1221,6 @@ $(srcdir)/configure: @MAINT@ $(srcdir)/c
 gccbug:	$(srcdir)/gccbug.in
 	CONFIG_FILES=gccbug CONFIG_HEADERS= ./config.status
 
-mklibgcc: $(srcdir)/mklibgcc.in
-	CONFIG_FILES=mklibgcc CONFIG_HEADERS= ./config.status
-
 # cstamp-h.in controls rebuilding of config.in.
 # It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't
 # delete it.  A stamp file is needed as autoheader won't update the file if
@@ -1274,12 +1262,12 @@ config.status: $(srcdir)/configure $(src
 all.internal: start.encap rest.encap doc
 # This is what to compile if making a cross-compiler.
 all.cross: native gcc-cross$(exeext) cpp$(exeext) specs \
-	$(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc @GENINSRC@ srcextra
+	libgcc-support lang.all.cross doc @GENINSRC@ srcextra
 # This is what must be made before installing GCC and converting libraries.
 start.encap: native xgcc$(exeext) cpp$(exeext) specs \
-	xlimits.h lang.start.encap @GENINSRC@ srcextra
+	libgcc-support xlimits.h lang.start.encap @GENINSRC@ srcextra
 # These can't be made until after GCC can run.
-rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
+rest.encap: $(STMP_FIXPROTO) lang.rest.encap
 # This is what is made with the host's compiler
 # whether making a cross compiler or not.
 native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \
@@ -1293,7 +1281,7 @@ c: cc1$(exeext)
 
 # On the target machine, finish building a cross compiler.
 # This does the things that can't be done on the host machine.
-rest.cross: $(LIBGCC) specs
+rest.cross: specs
 
 # Recompile all the language-independent object files.
 # This is used only if the user explicitly asks for it.
@@ -1415,75 +1403,61 @@ xlimits.h: glimits.h limitx.h limity.h
 LIB2ADD = $(LIB2FUNCS_EXTRA)
 LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
 
-libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) specs \
+# All source files for libgcc are either in the source directory (in
+# which case they will start with $(srcdir)), or generated into the build
+# directory (in which case they will be relative paths).
+srcdirify = $(patsubst $(srcdir)%,$$(gcc_srcdir)%,$(filter $(srcdir)%,$(1))) \
+            $(patsubst %,$$(gcc_objdir)/%,$(filter-out $(srcdir)%,$(1)))
+
+libgcc-support: libgcc.mvars stmp-int-hdrs $(STMP_FIXPROTO) $(TCONFIG_H) \
+	$(MACHMODE_H) $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
+	$(LIB2ADD_ST) $(LIB2ADDEH) gcov-iov.h $(SFP_MACHINE)
+
+libgcc.mvars: config.status Makefile $(LIB2ADD) $(LIB2ADD_ST) specs \
 		xgcc$(exeext) stamp-as stamp-collect-ld stamp-nm
-	objext='$(objext)' \
-	LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \
-	LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \
-	LIB2FUNCS_EXCLUDE='$(LIB2FUNCS_EXCLUDE)' \
-	LIBGCOV='$(LIBGCOV)' \
-	LIB2ADD='$(LIB2ADD)' \
-	LIB2ADD_ST='$(LIB2ADD_ST)' \
-	LIB2ADDEH='$(LIB2ADDEH)' \
-	LIB2ADDEHSTATIC='$(LIB2ADDEHSTATIC)' \
-	LIB2ADDEHSHARED='$(LIB2ADDEHSHARED)' \
-	LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \
-	LIB2_SIDITI_CONV_FUNCS='$(LIB2_SIDITI_CONV_FUNCS)' \
-	LIBUNWIND='$(LIBUNWIND)' \
-	LIBUNWINDDEP='$(LIBUNWINDDEP)' \
-	SHLIBUNWIND_LINK='$(SHLIBUNWIND_LINK)' \
-	SHLIBUNWIND_INSTALL='$(SHLIBUNWIND_INSTALL)' \
-	FPBIT='$(FPBIT)' \
-	FPBIT_FUNCS='$(FPBIT_FUNCS)' \
-	LIB2_DIVMOD_FUNCS='$(LIB2_DIVMOD_FUNCS)' \
-	DPBIT='$(DPBIT)' \
-	DPBIT_FUNCS='$(DPBIT_FUNCS)' \
-	TPBIT='$(TPBIT)' \
-	TPBIT_FUNCS='$(TPBIT_FUNCS)' \
-	DFP_ENABLE='$(DFP_ENABLE)' \
-	DFP_CFLAGS='$(DFP_CFLAGS)' \
-	D32PBIT='$(D32PBIT)' \
-	D32PBIT_FUNCS='$(D32PBIT_FUNCS)' \
-	D64PBIT='$(D64PBIT)' \
-	D64PBIT_FUNCS='$(D64PBIT_FUNCS)' \
-	D128PBIT='$(D128PBIT)' \
-	D128PBIT_FUNCS='$(D128PBIT_FUNCS)' \
-	MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \
-	EXTRA_MULTILIB_PARTS='$(EXTRA_MULTILIB_PARTS)' \
-	SHLIB_LINK='$(SHLIB_LINK)' \
-	SHLIB_INSTALL='$(SHLIB_INSTALL)' \
-	SHLIB_EXT='$(SHLIB_EXT)' \
-	SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \
-	SHLIB_MKMAP='$(SHLIB_MKMAP)' \
-	SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
-	SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
-	SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
-	MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
-	ASM_HIDDEN_OP='$(ASM_HIDDEN_OP)' \
-	GCC_FOR_TARGET='$(GCC_FOR_TARGET)' \
-	mkinstalldirs='$(mkinstalldirs)' \
-	  $(SHELL) mklibgcc > tmp-libgcc.mk
-	mv tmp-libgcc.mk libgcc.mk
-
-# All the things that might cause us to want to recompile bits of libgcc.
-LIBGCC_DEPS = $(GCC_PASSES) stmp-int-hdrs $(STMP_FIXPROTO) \
-	libgcc.mk $(srcdir)/libgcc2.c $(srcdir)/libgcov.c $(TCONFIG_H) \
-	$(MACHMODE_H) longlong.h gbl-ctors.h config.status $(srcdir)/libgcc2.h \
-	tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
-	config/dfp-bit.h config/dfp-bit.c \
-	$(LIB2ADD_ST) $(LIB2ADDEH) $(LIB2ADDEHDEP) $(EXTRA_PARTS) \
-	$(srcdir)/config/$(LIB1ASMSRC) \
-	$(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h $(SFP_MACHINE)
-
-libgcov.a: libgcc.a; @true
-
-libgcc.a: $(LIBGCC_DEPS)
-	$(MAKE) \
-	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
-	  CONFIG_H="$(TCONFIG_H)" TM_H="$(TM_H)" \
-	  INCLUDES="$(INCLUDES)" \
-	  MAKEOVERRIDES= \
-	  -f libgcc.mk all
+	: > tmp-libgcc.mvars
+	echo LIB1ASMFUNCS = '$(LIB1ASMFUNCS)' >> tmp-libgcc.mvars
+	echo LIB1ASMSRC = '$(LIB1ASMSRC)' >> tmp-libgcc.mvars
+	echo LIB2FUNCS_ST = '$(LIB2FUNCS_ST)' >> tmp-libgcc.mvars
+	echo LIB2FUNCS_EXCLUDE = '$(LIB2FUNCS_EXCLUDE)' >> tmp-libgcc.mvars
+	echo LIBGCOV = '$(LIBGCOV)' >> tmp-libgcc.mvars
+	echo LIB2ADD = '$(call srcdirify,$(LIB2ADD))' >> tmp-libgcc.mvars
+	echo LIB2ADD_ST = '$(call srcdirify,$(LIB2ADD_ST))' >> tmp-libgcc.mvars
+	echo LIB2ADDEH = '$(call srcdirify,$(LIB2ADDEH))' >> tmp-libgcc.mvars
+	echo LIB2ADDEHSTATIC = '$(call srcdirify,$(LIB2ADDEHSTATIC))' >> tmp-libgcc.mvars
+	echo LIB2ADDEHSHARED = '$(call srcdirify,$(LIB2ADDEHSHARED))' >> tmp-libgcc.mvars
+	echo LIB2_SIDITI_CONV_FUNCS = '$(LIB2_SIDITI_CONV_FUNCS)' >> tmp-libgcc.mvars
+	echo LIBUNWIND = '$(call srcdirify,$(LIBUNWIND))' >> tmp-libgcc.mvars
+	echo SHLIBUNWIND_LINK = '$(SHLIBUNWIND_LINK)' >> tmp-libgcc.mvars
+	echo SHLIBUNWIND_INSTALL = '$(SHLIBUNWIND_INSTALL)' >> tmp-libgcc.mvars
+	echo FPBIT = '$(FPBIT)' >> tmp-libgcc.mvars
+	echo FPBIT_FUNCS = '$(FPBIT_FUNCS)' >> tmp-libgcc.mvars
+	echo LIB2_DIVMOD_FUNCS = '$(LIB2_DIVMOD_FUNCS)' >> tmp-libgcc.mvars
+	echo DPBIT = '$(DPBIT)' >> tmp-libgcc.mvars
+	echo DPBIT_FUNCS = '$(DPBIT_FUNCS)' >> tmp-libgcc.mvars
+	echo TPBIT = '$(TPBIT)' >> tmp-libgcc.mvars
+	echo TPBIT_FUNCS = '$(TPBIT_FUNCS)' >> tmp-libgcc.mvars
+	echo DFP_ENABLE = '$(DFP_ENABLE)' >> tmp-libgcc.mvars
+	echo DFP_CFLAGS='$(DFP_CFLAGS)' >> tmp-libgcc.mvars
+	echo D32PBIT='$(D32PBIT)' >> tmp-libgcc.mvars
+	echo D32PBIT_FUNCS='$(D32PBIT_FUNCS)' >> tmp-libgcc.mvars
+	echo D64PBIT='$(D64PBIT)' >> tmp-libgcc.mvars
+	echo D64PBIT_FUNCS='$(D64PBIT_FUNCS)' >> tmp-libgcc.mvars
+	echo D128PBIT='$(D128PBIT)' >> tmp-libgcc.mvars
+	echo D128PBIT_FUNCS='$(D128PBIT_FUNCS)' >> tmp-libgcc.mvars
+	echo EXTRA_MULTILIB_PARTS = '$(EXTRA_MULTILIB_PARTS)' >> tmp-libgcc.mvars
+	echo EXTRA_PARTS = '$(EXTRA_PARTS)' >> tmp-libgcc.mvars
+	echo SHLIB_LINK = '$(subst $(GCC_FOR_TARGET),$$(GCC_FOR_TARGET),$(SHLIB_LINK))' >> tmp-libgcc.mvars
+	echo SHLIB_INSTALL = '$(SHLIB_INSTALL)' >> tmp-libgcc.mvars
+	echo SHLIB_EXT = '$(SHLIB_EXT)' >> tmp-libgcc.mvars
+	echo SHLIB_MKMAP = '$(call srcdirify,$(SHLIB_MKMAP))' >> tmp-libgcc.mvars
+	echo SHLIB_MKMAP_OPTS = '$(SHLIB_MKMAP_OPTS)' >> tmp-libgcc.mvars
+	echo SHLIB_MAPFILES = '$(call srcdirify,$(SHLIB_MAPFILES))' >> tmp-libgcc.mvars
+	echo SHLIB_NM_FLAGS = '$(SHLIB_NM_FLAGS)' >> tmp-libgcc.mvars
+	echo ASM_HIDDEN_OP = '$(ASM_HIDDEN_OP)' >> tmp-libgcc.mvars
+	echo LIBGCC2_CFLAGS = '$(LIBGCC2_CFLAGS)' >> tmp-libgcc.mvars
+
+	mv tmp-libgcc.mvars libgcc.mvars
 
 # Use the genmultilib shell script to generate the information the gcc
 # driver program needs to select the library directory based on the
@@ -1509,15 +1483,6 @@ s-mlib: $(srcdir)/genmultilib Makefile
 	$(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
 	$(STAMP) s-mlib
 
-# Build multiple copies of libgcc.a, one for each target switch.
-stmp-multilib: $(LIBGCC_DEPS)
-	$(MAKE) \
-	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
-	  CONFIG_H="$(CONFIG_H)" \
-	  MAKEOVERRIDES= \
-	  -f libgcc.mk all
-	$(STAMP) stmp-multilib
-
 # 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.
@@ -3540,18 +3505,6 @@ fsf-funding.pod: funding.texi
 	-$(TEXI2POD) $< > $@
 
 #
-# clean-target removes all files made by compilation.
-# This can be added to over time.
-
-clean-target: clean-target-libgcc
-
-clean-target-libgcc:
-	test ! -d libgcc || \
-	(cd libgcc && find . -type d -print) | \
-	while read d; do rm -f $$d/libgcc.a || : ; done
-	test ! -d libgcc || rm -r libgcc
-	test ! -f stmp-dirs || rm stmp-dirs
-
 # Deletion of files made during compilation.
 # There are four levels of this:
 #   `mostlyclean', `clean', `distclean' and `maintainer-clean'.
@@ -3648,7 +3601,7 @@ distclean: clean lang.distclean
 	-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
 	-rm -rf ${QMTEST_DIR} stamp-qmtest
 	-rm -f cxxmain.c
-	-rm -f mklibgcc gccbug .gdbinit configargs.h
+	-rm -f gccbug .gdbinit configargs.h
 	-rm -f gcov.pod
 # Delete po/*.gmo only if we are not building in the source directory.
 	-if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi
@@ -3670,7 +3623,7 @@ maintainer-clean:
 # Copy the compiler files into directories where they will be run.
 # Install the driver last so that the window when things are
 # broken is small.
-install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
+install: install-common $(INSTALL_HEADERS) \
     install-cpp install-man install-info install-@POSUB@ \
     install-driver
 
@@ -3696,7 +3649,7 @@ installdirs:
 	$(mkinstalldirs) $(DESTDIR)$(man7dir)
 
 # Install the compiler executables built during cross compilation.
-install-common: native $(EXTRA_PARTS) lang.install-common installdirs
+install-common: native lang.install-common installdirs
 	for file in $(COMPILERS); do \
 	  if [ -f $$file ] ; then \
 	    rm -f $(DESTDIR)$(libexecsubdir)/$$file; \
@@ -3710,13 +3663,6 @@ install-common: native $(EXTRA_PARTS) la
 	    $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \
 	  else true; fi; \
 	done
-	for file in $(EXTRA_PARTS) ..; do \
-	  if [ x"$$file" != x.. ]; then \
-	    rm -f $(DESTDIR)$(libsubdir)/$$file; \
-	    $(INSTALL_DATA) $$file $(DESTDIR)$(libsubdir)/$$file; \
-	    chmod a-x $(DESTDIR)$(libsubdir)/$$file; \
-	  else true; fi; \
-	done
 # We no longer install the specs file because its presence makes the
 # driver slower, and because people who need it can recreate it by
 # using -dumpspecs.  We remove any old version because it would
@@ -3835,24 +3781,6 @@ $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME
 	-$(INSTALL_DATA) $< $@
 	-chmod a-x $@
 
-# Install the library.
-install-libgcc: libgcc.mk libgcc.a libgcov.a installdirs
-	$(MAKE) \
-	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
-	  CONFIG_H="$(TCONFIG_H)" \
-	  MAKEOVERRIDES= \
-	  mkinstalldirs='$(mkinstalldirs)' \
-	  -f libgcc.mk install
-
-# Install multiple versions of libgcc.a, libgcov.a.
-install-multilib: stmp-multilib installdirs
-	$(MAKE) \
-	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
-	  CONFIG_H="$(CONFIG_H)" \
-	  MAKEOVERRIDES= \
-	  mkinstalldirs='$(mkinstalldirs)' \
-	  -f libgcc.mk install
-
 # Install all the header files built in the include subdirectory.
 install-headers: $(INSTALL_HEADERS_DIR)
 # Fix symlinks to absolute paths in the installed include directory to
diff -Nurp trunk/gcc/config/i386/t-darwin fsf-branch/gcc/config/i386/t-darwin
--- trunk/gcc/config/i386/t-darwin	2006-11-23 14:57:24.000000000 -0500
+++ fsf-branch/gcc/config/i386/t-darwin	2006-11-26 17:18:07.000000000 -0500
@@ -1,4 +1,3 @@
-SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc
 MULTILIB_OPTIONS = m64
 MULTILIB_DIRNAMES = x86_64
 LIB2_SIDITI_CONV_FUNCS=yes
diff -Nurp trunk/gcc/config/i386/t-darwin64 fsf-branch/gcc/config/i386/t-darwin64
--- trunk/gcc/config/i386/t-darwin64	2006-11-23 14:57:26.000000000 -0500
+++ fsf-branch/gcc/config/i386/t-darwin64	2006-11-26 19:34:30.000000000 -0500
@@ -1,3 +1,2 @@
-SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc
 LIB2_SIDITI_CONV_FUNCS=yes
 LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c
diff -Nurp trunk/gcc/config/i386/t-nwld fsf-branch/gcc/config/i386/t-nwld
--- trunk/gcc/config/i386/t-nwld	2006-11-23 14:57:27.000000000 -0500
+++ fsf-branch/gcc/config/i386/t-nwld	2006-12-16 17:54:54.000000000 -0500
@@ -4,18 +4,18 @@ CRT0STUFF_T_CFLAGS = -mpreferred-stack-b
 CRT0_S = $(srcdir)/config/i386/netware-crt0.c
 MCRT0_S = $(srcdir)/config/i386/netware-crt0.c
 
-libgcc.def: $(srcdir)/config/i386/t-nwld
+$(T)libgcc.def: $(srcdir)/config/i386/t-nwld
 	echo "module libgcc_s" >$@
 
-libc.def: $(srcdir)/config/i386/t-nwld
+$(T)libc.def: $(srcdir)/config/i386/t-nwld
 	echo "module libc" >$@
 
-libcpre.def: $(srcdir)/config/i386/t-nwld
+$(T)libcpre.def: $(srcdir)/config/i386/t-nwld
 	echo "start _LibCPrelude" >$@
 	echo "exit _LibCPostlude" >>$@
 	echo "check _LibCCheckUnload" >>$@
 
-posixpre.def: $(srcdir)/config/i386/t-nwld
+$(T)posixpre.def: $(srcdir)/config/i386/t-nwld
 	echo "start POSIX_Start" >$@
 	echo "exit POSIX_Stop" >>$@
 	echo "check POSIX_CheckUnload" >>$@
@@ -26,36 +26,5 @@ nwld.o: $(srcdir)/config/i386/nwld.c $(R
 
 s-crt0: $(srcdir)/unwind-dw2-fde.h
 
-# Build a shared libgcc library for NetWare.
-
-SHLIB_EXT = .nlm
-SHLIB_NAME = @shlib_base_name@.nlm
-SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
-SHLIB_DEF = $(srcdir)/config/i386/netware-libgcc.def
-SHLIB_MAP = $(srcdir)/config/i386/netware-libgcc.exp
-SHLIB_SRC = $(srcdir)/config/i386/netware-libgcc.c
-
-SHLIB_LINK = set -e; \
-	cat $(SHLIB_DEF) >@shlib_base_name@.def; \
-	echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
-	echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
-	touch libgcc/build; \
-	echo "build $$$$(expr $$$$(<libgcc/build) + 0)" >>@shlib_base_name@.def; \
-	echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
-	if mpkxdc -n -p @shlib_base_name@.xdc; \
-		then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
-		else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
-	fi; \
-	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
-		$(SHLIB_SRC) -posix -static-libgcc -lnetware \
-		-Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
-	rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
-	rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
-	expr $$$$(<libgcc/build) + 1 >libgcc/build
-
-# $(slibdir) double quoted to protect it from expansion while building
-# libgcc.mk.  We want this delayed until actual install time.
-SHLIB_INSTALL = \
-	$$(SHELL) $(srcdir)/mkinstalldirs $$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
-	$$(INSTALL_DATA) $(SHLIB_NAME) $$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
-	$$(INSTALL_DATA) @shlib_base_name@.imp $$(DESTDIR)$$(libsubdir)/
+# To keep DRIVER_DEFINES correct.
+SHLIB_LINK = dummy
diff -Nurp trunk/gcc/config/rs6000/t-darwin fsf-branch/gcc/config/rs6000/t-darwin
--- trunk/gcc/config/rs6000/t-darwin	2006-12-09 18:52:21.000000000 -0500
+++ fsf-branch/gcc/config/rs6000/t-darwin	2006-12-09 11:39:56.000000000 -0500
@@ -23,8 +23,6 @@ TARGET_LIBGCC2_CFLAGS = -Wa,-force_cpusu
 # Export the _xlq* symbols from darwin-ldouble.c.
 SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc64.ver
 
-SHLIB_VERPFX = $(srcdir)/config/rs6000/darwin-libgcc
-
 LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
 
 darwin-fpsave.o:	$(srcdir)/config/rs6000/darwin-asm.h
diff -Nurp trunk/gcc/config/rs6000/t-ppccomm fsf-branch/gcc/config/rs6000/t-ppccomm
--- trunk/gcc/config/rs6000/t-ppccomm	2006-11-23 14:57:42.000000000 -0500
+++ fsf-branch/gcc/config/rs6000/t-ppccomm	2006-11-24 19:11:44.000000000 -0500
@@ -11,18 +11,6 @@ eabi.S: $(srcdir)/config/rs6000/eabi.asm
 tramp.S: $(srcdir)/config/rs6000/tramp.asm
 	cat $(srcdir)/config/rs6000/tramp.asm > tramp.S
 
-ifneq (,$findstring gnu,$(target))
-TARGET_LIBGCC2_CFLAGS += -specs=ldblspecs
-
-SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc-glibc.ver
-
-# Hack to use -mlong-double-128 only when not compiling nof libgcc
-mklibgcc: ldblspecs
-
-ldblspecs: specs
-	sed -e '/cc1_options/{ n; s/$$/ %{!msoft-float:-mlong-double-128}/; }' < specs > $@
-endif
-
 # Switch synonyms
 MULTILIB_MATCHES_ENDIAN	= mlittle=mlittle-endian mbig=mbig-endian
 MULTILIB_MATCHES_SYSV	= mcall-sysv=mcall-sysv-eabi mcall-sysv=mcall-sysv-noeabi mcall-sysv=mcall-linux mcall-sysv=mcall-netbsd
diff -Nurp trunk/gcc/config/t-slibgcc-darwin fsf-branch/gcc/config/t-slibgcc-darwin
--- trunk/gcc/config/t-slibgcc-darwin	2006-12-09 18:52:16.000000000 -0500
+++ fsf-branch/gcc/config/t-slibgcc-darwin	2006-12-09 11:39:50.000000000 -0500
@@ -1,101 +1,2 @@
-# Build a shared libgcc library with the darwin linker.
-SHLIB_SOVERSION = 1
-SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0
-SHLIB_EXT = .dylib
-SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi`
-SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT)
-SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
-SHLIB_SOLINK = @shlib_base_name@.so
-SHLIB_MAP = @shlib_map_file@
-SHLIB_OBJS = @shlib_objs@
-SHLIB_DIR = @multilib_dir@
-SHLIB_LC = -lc
-
-# Darwin only searches in /usr/lib for shared libraries, not in subdirectories,
-# so the libgcc variants have different names not different locations.
-# Note that this version is used for the loader, not the linker; the linker
-# uses the stub versions named by $(LIBGCC).
-SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
-	-install_name $(slibdir)/$(SHLIB_INSTALL_NAME) \
-	-single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
-	-Wl,-exported_symbols_list,$(SHLIB_MAP) \
-	$(SHLIB_VERSTRING) \
-	@multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
-
-# $(slibdir) double quoted to protect it from expansion while building
-# libgcc.mk.  We want this delayed until actual install time.
-SHLIB_INSTALL = \
-	$$(mkinstalldirs) $$(DESTDIR)$$(slibdir); \
-	$(INSTALL_DATA) $(SHLIB_SONAME) \
-	  $$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME)
-
-SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
-SHLIB_MKMAP_OPTS = -v leading_underscore=1
-SHLIB_MAPFILES += $(srcdir)/libgcc-std.ver
-
-# Must use a different directive for hidden visibility in assembly sources.
-ASM_HIDDEN_OP = .private_extern
-
-# In order to support -mmacosx-version-min, you need to have multiple
-# different libgcc_s libraries that actually get linked against, one for
-# each system version supported.  They are 'stub' libraries that
-# contain no code, just a list of exported symbols.
-# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC.
-#
-# This assumes each multilib corresponds to a different architecture.
-libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver stmp-multilib
-	# When building multilibbed target libraries, all the required
-	# libraries are expected to exist in the multilib directory.
-	MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
-		| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
-	for mlib in $$MLIBS ; do \
-	  rm -f $${mlib}/$@ || exit 1 ; \
-	  $(LN_S) ../$@ $${mlib}/$@ || exit 1 ; \
-	done
-	MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
-		| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
-	for mlib in '' $$MLIBS ; do \
-	  $(STRIP_FOR_TARGET) -o $(@)_T$${mlib} \
-	    -s $(SHLIB_VERPFX).$(*).ver -c -u \
-	    ./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \
-	done
-	$(LIPO_FOR_TARGET) -output $@ -create $(@)_T*
-	rm $(@)_T*
-
-libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): stmp-multilib libgcc_s.10.4.dylib \
-	libgcc_s.10.5.dylib
-	# When building multilibbed target libraries, all the required
-	# libraries are expected to exist in the multilib directory.
-	MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
-		| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
-	for mlib in '' $$MLIBS ; do \
-	  cp ./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
-	    ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
-	done
-	$(LIPO_FOR_TARGET) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
-	  -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
-	rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
-
-# From the point-of-view of the Makefiles, libgcc is built by the 'strip'
-# and 'lipo' commands above.
-LIBGCC=libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) libgcc_s.10.4.dylib \
-	libgcc_s.10.5.dylib stmp-multilib
-
-INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib
-
-install-darwin-libgcc-stubs : $(INSTALL_FILES) installdirs
-	for d in $(INSTALL_FILES) ; do \
-	  $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
-	done
-	if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \
-	  rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \
-	else true; fi
-	$(LN_S) libgcc_s.1.dylib \
-		$(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib
-	if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \
-	  rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \
-	else true; fi
-	$(LN_S) libgcc_s.1.dylib \
-		$(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib
-
-INSTALL_LIBGCC = install-darwin-libgcc-stubs install-multilib
+# To keep DRIVER_DEFINES correct.
+SHLIB_LINK = dummy
diff -Nurp trunk/gcc/configure.ac fsf-branch/gcc/configure.ac
--- trunk/gcc/configure.ac	2006-12-16 17:12:25.000000000 -0500
+++ fsf-branch/gcc/configure.ac	2006-12-16 17:30:31.000000000 -0500
@@ -3435,7 +3435,7 @@ all_languages=
 all_boot_languages=
 all_compilers=
 all_stagestuff=
-all_outputs='Makefile gccbug mklibgcc libada-mk'
+all_outputs='Makefile gccbug libada-mk'
 # List of language makefile fragments.
 all_lang_makefrags=
 # List of language subdirectory makefiles.  Deprecated.
diff -Nurp trunk/gcc/mklibgcc.in fsf-branch/gcc/mklibgcc.in
--- trunk/gcc/mklibgcc.in	2006-12-09 18:52:11.000000000 -0500
+++ fsf-branch/gcc/mklibgcc.in	1969-12-31 19:00:00.000000000 -0500
@@ -1,935 +0,0 @@
-#!/bin/sh
-# Construct makefile for libgcc.
-#   Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006
-#   Free Software Foundation, Inc.
-#
-# This file is part of GCC.
-
-# Arguments, taken from the environment, since there are a lot
-# of them, and positional args becomes quite ugly.
-#
-# objext
-# LIB1ASMFUNCS
-# LIB2FUNCS_ST
-# LIB2FUNCS_EXCLUDE
-# LIBGCOV
-# LIB2ADD
-# LIB2ADD_ST 
-# LIB2ADDEH
-# LIB2ADDEHSTATIC
-# LIB2ADDEHSHARED
-# LIB2ADDEHDEP
-# LIBUNWIND
-# LIBUNWINDDEP
-# SHLIBUNWIND_LINK
-# SHLIBUNWIND_INSTALL
-# FPBIT
-# FPBIT_FUNCS
-# LIB2_DIVMOD_FUNCS
-# LIB2_SIDITI_CONV_FUNCS
-# DFP_ENABLE
-# DFP_CFLAGS
-# DPBIT
-# DPBIT_FUNCS
-# TPBIT
-# TPBIT_FUNCS
-# D32PBIT
-# D32PBIT_FUNCS
-# D64PBIT
-# D64PBIT_FUNCS
-# D128PBIT
-# D128PBIT_FUNCS
-# LIBGCC
-# MULTILIBS
-# EXTRA_MULTILIB_PARTS
-# SHLIB_EXT
-# SHLIB_LINK
-# SHLIB_MKMAP
-# SHLIB_MKMAP_OPTS
-# SHLIB_MAPFILES
-# SHLIB_NM_FLAGS
-# SHLIB_INSTALL
-# MULTILIB_OSDIRNAMES
-# ASM_HIDDEN_OP
-# GCC_FOR_TARGET
-
-# Make needs VPATH to be literal.
-echo 'srcdir = @srcdir@'
-echo 'VPATH = @srcdir@'
-echo 'EQ = ='
-echo 'objects = $(filter %'$objext',$^)'
-echo
-echo '# Dependencies are accumulated as we go.'
-echo 'all: stmp-dirs'
-echo 'dirs = libgcc'
-echo
-
-# Library members defined in libgcc2.c.
-
-# The floating-point conversion routines that involve a single-word integer.
-# XX stands for the integer mode.
-swfloatfuncs=
-for mode in sf df xf; do
-  swfloatfuncs="$swfloatfuncs _fixuns${mode}XX"
-done
-
-# Likewise double-word routines.
-dwfloatfuncs=
-for mode in sf df xf tf; do
-  dwfloatfuncs="$dwfloatfuncs _fix${mode}XX _fixuns${mode}XX"
-  dwfloatfuncs="$dwfloatfuncs _floatXX${mode} _floatunXX${mode}"
-done
-
-# Entries of the form <objfile>:<func>:<wordsize> indicate that libgcc2.c
-# should be compiled with L<func> defined and with LIBGCC2_UNITS_PER_WORD
-# set to <wordsize>.  <objfile> is the name of the associated object file
-
-lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
-	_cmpdi2 _ucmpdi2 _clear_cache
-	_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
-	_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
-	_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
-	_popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2
-	_powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3
-	_divxc3 _divtc3 _bswapsi2 _bswapdi2'
-
-if [ "$LIB2_SIDITI_CONV_FUNCS" ]; then
-  for func in $swfloatfuncs; do
-    sifunc=`echo $func | sed -e 's/XX/si/'`
-    lib2funcs="$lib2funcs $sifunc:$sifunc:4"
-  done
-  for func in $dwfloatfuncs; do
-    difunc=`echo $func | sed -e 's/XX/di/'`
-    tifunc=`echo $func | sed -e 's/XX/ti/'`
-    lib2funcs="$lib2funcs $difunc:$difunc:4 $tifunc:$difunc:8"
-  done
-else
-  lib2funcs="$lib2funcs `echo $swfloatfuncs | sed -e 's/XX/si/g'`"
-  lib2funcs="$lib2funcs `echo $dwfloatfuncs | sed -e 's/XX/di/g'`"
-fi
-
-# Disable SHLIB_LINK if shared libgcc not enabled.
-if [ "@enable_shared@" = "no" ]; then
-  SHLIB_LINK=""
-fi
-
-# Build lines.
-
-gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
-gcc_s_compile="$gcc_compile -DSHARED"
-make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
-	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
-	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
-	  AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
-	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
-	  CC="$(CC)" CFLAGS="$(CFLAGS)" \
-	  BUILD_PREFIX="$(BUILD_PREFIX)" \
-	  BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \
-	  LANGUAGES="$(LANGUAGES)"'
-
-# Generic dependencies for libgcc
-libgcc_dep='$(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h config.status stmp-int-hdrs tsystem.h'
-
-# Dependencies for libgcc2.c
-libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(srcdir)/libgcc2.h gbl-ctors.h'" $libgcc_dep"
-
-# Dependencies for libgcov.c
-libgcov_c_dep='stmp-dirs $(srcdir)/libgcov.c $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h'" $libgcc_dep"
-
-# Dependencies for fp-bit.c
-fpbit_c_dep='stmp-dirs config.status tsystem.h'
-
-# Dependencies for decnumber and friends.  This is an overzealous set,
-# but at least we can be sure to recompile if anything gets modified.
-decnumber_dep='stmp-dirs $(srcdir)/../libdecnumber/decContext.h $(srcdir)/../libdecnumber/decNumber.h
-	$(srcdir)/../libdecnumber/decNumberLocal.h $(srcdir)/../libdecnumber/decimal32.h $(srcdir)/../libdecnumber/decimal64.h
-	$(srcdir)/../libdecnumber/decimal128.h $(srcdir)/../libdecnumber/decDPD.h $(srcdir)/../libdecnumber/decUtility.h'
-
-# Dependencies for dfp-bit.c
-dfpbit_c_dep='$(srcdir)/../libdecnumber/decRound.h'" $libgcc_dep $decnumber_dep"
-
-# Flag whether we need eh_dummy.c
-need_eh_dummy=
-
-if [ "$SHLIB_LINK" ]; then
-  # Test -fvisibility=hidden.  We need both a -fvisibility=hidden on
-  # the command line, and a #define to prevent libgcc2.h etc from
-  # overriding that with #pragmas.  The dance with @ is to prevent
-  # echo from seeing anything it might take for an option.
-  # echo turns the \$\$\$\$ into $$$$ and when make sees it it
-  # becomes $$ and the shell substitutes the pid. Makes for a
-  # slightly safer temp file.
-  echo "vis_hide := \$(strip \$(subst @,-,\\"
-  echo "    \$(shell if echo 'void foo(void); void foo(void) {}' | \\"
-  echo "          $gcc_compile -fvisibility=hidden -Werror \\"
-  echo "          -c -xc - -o vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
-  echo "          then echo @fvisibility=hidden @DHIDE_EXPORTS; \\"
-  echo "          rm vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
-  echo "          fi)))"
-  echo
-
-  # If we have -fvisibility=hidden, then we need to generate hide
-  # lists for object files implemented in assembly.  The default
-  # pseudo-op for this is ".hidden", but can be overridden with
-  # ASM_HIDDEN_OP.
-  [ "$ASM_HIDDEN_OP" ] || ASM_HIDDEN_OP=".hidden"
-  
-  echo "ifneq (,\$(vis_hide))"
-  echo "define gen-hide-list"
-  echo "\$(NM_FOR_TARGET) ${SHLIB_NM_FLAGS} \$< | \\"
-  # non-GNU nm emits three fields even for undefined and typeless symbols,
-  # so explicitly omit them
-  echo "  \$(AWK) 'NF == 3 && \$\$2 !~ /^[UN]\$\$/ { print \"\\t${ASM_HIDDEN_OP}\", \$\$3 }' > \$@T"
-  echo "mv -f \$@T \$@"
-  echo "endef"
-  echo "else"
-  echo "gen-hide-list = echo > \$@"
-  echo "endif"
-  echo
-else
-  # It is too hard to guarantee that vis_hide and gen-hide-list will never
-  # be referenced if SHLIB_LINK is not set, so set them to the values they'd
-  # have if SHLIB_LINK were set and we didn't have visibility support.
-  echo "vis_hide ="
-  echo "gen-hide-list = echo > \$@"
-fi
-
-# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
-# defined as optimized assembly code in LIB1ASMFUNCS or as C code
-# in LIB2FUNCS_EXCLUDE.
-for name in $LIB1ASMFUNCS $LIB2FUNCS_EXCLUDE; do
-  lib2funcs=`echo $lib2funcs | sed -e 's/^'$name'[ :]//' \
-				   -e 's/ '$name'[ :]/ /' \
-				   -e 's/ '$name'$//'`
-  LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
-				                   -e 's/ '$name' / /' \
-				                   -e 's/ '$name'$//'`
-done
-
-#
-# Rules to generate object files.
-#
-
-for ml in $MULTILIBS; do
-
-  # Work out relevant parameters that depend only on the multilib.
-  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
-  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
-  shlib_slibdir_qual=
-  libgcc_a=$dir/libgcc.a
-  libgcov_a=$dir/libgcov.a
-  libgcc_eh_a=
-  libgcc_s_so=
-  libunwind_a=
-  libunwind_so=
-
-  if [ "$LIBUNWIND" ]; then
-    libunwind_a=$dir/libunwind.a
-  fi
-  if [ "$SHLIB_LINK" ]; then
-    libgcc_eh_a=$dir/libgcc_eh.a
-    libgcc_s_so=$dir/libgcc_s${SHLIB_EXT}
-    if [ "$LIBUNWIND" ]; then
-      libunwind_so=$dir/libunwind${SHLIB_EXT}
-    fi
-    os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory`
-    if [ "$os_multilib_dir" != . ]; then
-      shlib_slibdir_qual="/$os_multilib_dir"
-    fi
-  fi
-
-  libgcc_s_so_extra=
-  libunwind_so_extra=
-
-  echo
-  echo \#
-  echo \# ml: $ml
-  echo \# dir: $dir
-  echo \# flags: $flags
-  echo \# libgcc_a: $libgcc_a
-  echo \# libgcov_a: $libgcov_a
-  echo \# libgcc_eh_a: $libgcc_eh_a
-  echo \# libunwind_a: $libunwind_a
-  echo \#
-  echo \# shlib_slibdir_qual: $shlib_slibdir_qual
-  echo \# libgcc_s_so: $libgcc_s_so
-  echo \# libunwind_so: $libunwind_so
-  echo \#
-  echo
-
-  # Update list of directories.
-  if [ $dir != . ]; then
-    echo "dirs += ${dir} libgcc/${dir}"
-    echo
-  fi
-
-  #
-  # Build libgcc1 components.
-  #
-  for name in $LIB1ASMFUNCS; do
-    if [ "$libgcc_s_so" ]; then
-      out="libgcc/${dir}/${name}${objext}"
-      outS="libgcc/${dir}/${name}_s${objext}"
-      outV="libgcc/${dir}/${name}.vis"
-
-      echo ${outS}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
-      echo "	$gcc_s_compile" $flags -DL$name -xassembler-with-cpp \
-	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $outS
-
-      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)' ${outV}
-      echo "	$gcc_compile" $flags -DL$name -xassembler-with-cpp \
-	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -include $outV -o $out
-
-      echo "${outV}: ${outS}; \$(gen-hide-list)"
-
-      echo $libgcc_a: $out
-      echo $libgcc_s_so: $outS
-      if [ "$SHLIB_MKMAP" ]; then
-        echo libgcc/${dir}/libgcc.map: $outS
-      fi
-    else
-      out="libgcc/${dir}/${name}${objext}"
-      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
-      echo "	$gcc_compile" $flags -DL$name -xassembler-with-cpp \
-	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
-      echo $libgcc_a: $out
-    fi
-  done
-
-  #
-  # Build libgcc2 components.
-  #
-
-  for name in $lib2funcs; do
-    case $name in
-      *:*:*)
-	defines=`echo $name | sed -e 's/.*:\(.*\):\(.*\)/-DL\1 -DLIBGCC2_UNITS_PER_WORD=\2/'`
-	name=`echo $name | sed -e 's/\(.*\):.*:.*/\1/'`
-	;;
-      *)
-	defines="-DL$name"
-	;;
-    esac
-    if [ "$libgcc_s_so" ]; then
-      out="libgcc/${dir}/${name}${objext}"
-      outS="libgcc/${dir}/${name}_s${objext}"
-
-      echo $outS: $libgcc2_c_dep
-      echo "	$gcc_s_compile" $flags $defines -c '$(srcdir)/libgcc2.c' \
-	-o $outS
-
-      echo $out: $libgcc2_c_dep
-      echo "	$gcc_compile" $flags $defines '$(vis_hide)' \
-        -c '$(srcdir)/libgcc2.c' -o $out
-
-      echo $libgcc_a: $out
-      echo $libgcc_s_so: $outS
-      if [ "$SHLIB_MKMAP" ]; then
-        echo libgcc/${dir}/libgcc.map: $outS
-      fi
-    else
-      out="libgcc/${dir}/${name}${objext}"
-      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
-      echo "	$gcc_compile" $flags $defines -c '$(srcdir)/libgcc2.c' -o $out
-      echo $libgcc_a: $out
-    fi
-  done
-
-  for name in $LIB2FUNCS_ST; do
-    out="libgcc/${dir}/${name}${objext}"
-
-    echo $out: $libgcc2_c_dep
-    echo "	$gcc_compile" $flags -DL$name '$(vis_hide)' \
-      -c '$(srcdir)/libgcc2.c' -o $out
-    echo ${dir}/libgcc.a: $out
-  done
-
-  for name in $LIB2_DIVMOD_FUNCS; do
-    if [ "$libgcc_s_so" ]; then
-      out="libgcc/${dir}/${name}${objext}"
-      outS="libgcc/${dir}/${name}_s${objext}"
-
-      echo $outS: $libgcc2_c_dep
-      echo "	$gcc_s_compile" $flags -DL$name \
-        -fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $outS
-
-      echo $out: $libgcc2_c_dep
-      echo "	$gcc_compile" $flags -DL$name '$(vis_hide)' \
-        -fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $out
-
-      echo $libgcc_a: $out
-      echo $libgcc_s_so: $outS
-      if [ "$SHLIB_MKMAP" ]; then
-        echo libgcc/${dir}/libgcc.map: $outS
-      fi
-    else
-      out="libgcc/${dir}/${name}${objext}"
-      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
-      echo "	$gcc_compile" $flags -DL$name \
-        -fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $out
-      echo $libgcc_a: $out
-    fi
-  done
-
-  #
-  # Build software floating point functions.
-  #
-
-  for fpbit_var in FPBIT DPBIT TPBIT ; do
-      fpfuncs_var="${fpbit_var}_FUNCS"
-      eval fpbit=\$$fpbit_var
-      eval fpfuncs=\$$fpfuncs_var
-
-      if [ "$fpbit" ] ; then
-	  for name in $fpfuncs; do
-	      case "$name" in
-		# _sf_to_tf and _df_to_tf require tp-bit.c
-		# being compiled in.
-		_[sd]f_to_tf) [ -z "$TPBIT" ] && continue;;
-	      esac
-	      if [ "$libgcc_s_so" ]; then
-		  out="libgcc/${dir}/${name}${objext}"
-		  outS="libgcc/${dir}/${name}_s${objext}"
-
-		  echo $outS: $fpbit $fpbit_c_dep
-		  echo "	$gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
-		      -c $fpbit -o $outS
-
-		  echo $out: $fpbit $fpbit_c_dep
-		  echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
-		      '$(vis_hide)' -c $fpbit -o $out
-		  
-		  echo $libgcc_a: $out
-		  echo $libgcc_s_so: $outS
-		  if [ "$SHLIB_MKMAP" ]; then
-		      echo libgcc/${dir}/libgcc.map: $outS
-		  fi
-	      else
-		  out="libgcc/${dir}/${name}${objext}"
-		  echo $out: $fpbit $fpbit_c_dep
-		  echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
-		      -c $fpbit -o $out
-		  
-		  echo $libgcc_a: $out
-	      fi
-	  done
-      fi
-  done
-
-  if [ "@enable_decimal_float@" = "yes" -a -z "$libgcc_so" ]; then
-    # If $DFP_ENABLE is set, then we want all data type sizes.
-    if [ "$DFP_ENABLE" ] ; then
-	D32PBIT=1; D64PBIT=1; D128PBIT=1
-    fi
-
-    # Bring in the DFP support code if D32PBIT, D64PBIT or D128PBIT are set.
-    if [ -n "$D32PBIT" -o -n "$D64PBIT" -o -n "$D128PBIT" ] ; then
-      dec_filenames="decContext decNumber decRound decLibrary decUtility"
-    fi
-
-    # Only bring in decimal*.c files for types we support.
-    if [ -n "$D32PBIT" ] ; then
-      dec_filenames="$dec_filenames decimal32"
-    fi
-    if [ -n "$D64PBIT" ] ; then
-      dec_filenames="$dec_filenames decimal64"
-    fi
-    if [ -n "$D128PBIT" ] ; then
-      dec_filenames="$dec_filenames decimal128"
-    fi
-
-    for name in $dec_filenames ; do
-      out="libgcc/${dir}/${name}${objext}"
-      echo $out: "\$(srcdir)/../libdecnumber/${name}.c" $decnumber_dep
-      echo "	$gcc_compile" $flags -c "\$(srcdir)/../libdecnumber/${name}.c" -o $out
-      echo $libgcc_a: $out
-    done
-
-    # For individual functions, loop over each variable by name.
-    for dpbit_var in D32PBIT D64PBIT D128PBIT ; do
-      dpfuncs_var="${dpbit_var}_FUNCS"
-      eval dpbit=\$$dpbit_var
-      eval dpfuncs=\$$dpfuncs_var
-      case "$dpbit_var" in
-	  D32PBIT)  dpwidth=32 ;;
-	  D64PBIT)  dpwidth=64 ;;
-	  D128PBIT) dpwidth=128 ;;
-      esac
-
-      if [ "$dpbit" ]; then
-        for name in $dpfuncs; do
-          out="libgcc/${dir}/${name}${objext}"
-	  echo $out: config/dfp-bit.h config/dfp-bit.c $dfpbit_c_dep
-	  echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name -DWIDTH=$dpwidth \
-	      $DFP_CFLAGS -c $\(srcdir\)/config/dfp-bit.c -o $out
-	  echo $libgcc_a: $out
-        done
-      fi
-    done
-  fi
-
-  for file in $LIB2ADD; do
-    name=`echo $file | sed -e 's/[.][cS]$//' -e 's/[.]asm$//'`
-    oname=`echo $name | sed -e 's,.*/,,'`
-
-    if [ "$libgcc_s_so" ]; then
-      out="libgcc/${dir}/${oname}${objext}"
-      outS="libgcc/${dir}/${oname}_s${objext}"
-
-      case $file in
-	*.c)
-	  echo $outS: stmp-dirs $file $libgcc_dep
-	  echo "	$gcc_s_compile" $flags -c $file -o $outS
-
-	  echo $out: stmp-dirs $file $libgcc_dep
-	  echo "	$gcc_compile" $flags '$(vis_hide)' -c $file -o $out
-	;;
-
-	*.asm | *.S)
-	  outV="libgcc/${dir}/${oname}.vis"
-
-	  echo $outS: stmp-dirs $file $libgcc_dep
-	  echo "	$gcc_s_compile" $flags -xassembler-with-cpp \
-	         -c $file -o $outS
-
-	  echo $out: stmp-dirs $file $libgcc_dep $outV
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-	         -include $outV -c $file -o $out
-	  echo "${outV}: ${outS}; \$(gen-hide-list)"
-	;;
-	
-        *)
-	  echo "Unhandled extension: $file" >&2
-	  exit 1
-	;;
-      esac
-
-      echo $libgcc_a: $out
-      echo $libgcc_s_so: $outS
-      if [ "$SHLIB_MKMAP" ]; then
-	echo libgcc/${dir}/libgcc.map: $outS
-      fi
-    else
-      out="libgcc/${dir}/${oname}${objext}"
-      case $file in
-	*.c)
-	  echo $out: stmp-dirs $file $libgcc_dep
-	  echo "	$gcc_compile" $flags -c $file -o $out
-	;;
-
-	*.asm | *.S)
-	  echo $out: stmp-dirs $file $libgcc_dep
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-	         -c $file -o $out
-	;;
-	
-        *)
-	  echo "Unhandled extension: $file" >&2
-	  exit 1
-	;;
-      esac
-      
-      echo $libgcc_a: $out
-    fi
-  done
-
-
-  for file in $LIB2ADD_ST; do
-    name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
-    oname=`echo $name | sed -e 's,.*/,,'`
-    out="libgcc/${dir}/${oname}${objext}"
-
-    case $file in
-      *.c)
-	echo $out: stmp-dirs $file $libgcc_dep
-	echo "	$gcc_compile" $flags '$(vis_hide)' -c $file -o $out
-      ;;
-
-      *.asm | *.S)
-        # We may have to compile it twice in order to establish the list
-        # of symbols to be marked hidden.
-	if [ "$libgcc_so" ]; then
-	  outV="libgcc/${dir}/${oname}.vis"
-	  outT="libgcc/${dir}/${oname}_t${objext}"
-	  echo ${outT}: stmp-dirs $file $libgcc_dep
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-	          -c $file -o ${outT}
-	  echo $out: stmp-dirs $file $libgcc_dep $outV
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-	          -include $outV -c $file -o $out
-	  echo "${outV}: ${outT}; \$(gen-hide-list)"
-	else
-	  echo $out: stmp-dirs $file $libgcc_dep
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-	          -c $file -o $out
-	fi
-      ;;
-
-      *)
-      echo "Unhandled extension: $file" >&2
-      exit 1
-      ;;
-    esac
-    echo $libgcc_a: $out
-  done
-
-  # If we don't have libgcc_eh.a, only LIB2ADDEH matters.  If we do, only
-  # LIB2ADDEHSTATIC and LIB2ADDEHSHARED matter.  (Usually all three are
-  # identical.)
-
-  if [ "$libgcc_eh_a" ]; then
-    for file in $LIB2ADDEHSTATIC; do
-      name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
-      oname=`echo $name | sed -e 's,.*/,,'`
-      out="libgcc/${dir}/${oname}${objext}"
-
-      case $file in
-        *.c)
-	  echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
-	  echo "	$gcc_compile" $flags -fexceptions '$(vis_hide)' -c $file -o $out
-	  ;;
-	*.asm | *.S)
-	  # We have to compile it twice in order to establish the list
-	  # of symbols to be marked hidden.
-	  outV="libgcc/${dir}/${oname}.vis"
-	  outT="libgcc/${dir}/${oname}_t${objext}"
-	  echo ${outT}: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-		  -c $file -o ${outT}
-	  echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep $outV
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-		  -include $outV -c $file -o $out
-	  echo "${outV}: ${outT}; \$(gen-hide-list)"
-	  ;;
-	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
-      esac
-
-      echo $libgcc_eh_a: $out
-    done
-
-    for file in $LIB2ADDEHSHARED; do
-      name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
-      oname=`echo $name | sed -e 's,.*/,,'`
-      outS="libgcc/${dir}/${oname}_s${objext}"
-
-      case $file in
-        *.c)
-	  echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
-	  echo "	$gcc_s_compile" $flags -fexceptions -c $file -o $outS
-	  ;;
-	*.asm | *.S)
-	  echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
-	  echo "	$gcc_s_compile" $flags -xassembler-with-cpp -c $file -o $outS
-	  ;;
-	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
-      esac
-
-      echo $libgcc_s_so: $outS
-      if [ "$SHLIB_MKMAP" ]; then
-	echo libgcc/${dir}/libgcc.map: $outS
-      fi
-    done
-
-    # If nothing went into libgcc_eh.a, create a dummy object -
-    # some linkers don't like totally empty archives.
-    if [ -z "$LIB2ADDEHSTATIC" ]; then
-      file=eh_dummy.c
-      out="libgcc/${dir}/eh_dummy${objext}"
-      need_eh_dummy=1
-
-      echo $out: stmp-dirs $file
-      echo "	$gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
-      echo $libgcc_eh_a: $out
-    fi
-   
-
-  else # no libgcc_eh.a
-    for file in $LIB2ADDEH; do
-      name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
-      oname=`echo $name | sed -e 's,.*/,,'`
-      out="libgcc/${dir}/${oname}${objext}"
-
-      case $file in
-        *.c)
-	  echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
-	  echo "	$gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
-	  ;;
-	*.asm | *.S)
-	  echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
-	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
-		  -c $file -o $out
-	  ;;
-	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
-      esac
-
-      echo $libgcc_a: $out
-    done
-  fi
-
-  # We do _not_ handle assembly files in this context.
-  if [ "$LIBUNWIND" ]; then
-    for file in $LIBUNWIND; do
-      case $file in
-        *.c) ;;
-	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
-       esac
-
-      name=`echo $file | sed -e 's/[.]c$//'`
-      oname=`echo $name | sed -e 's,.*/,,'`
-
-      if [ "$libunwind_so" ]; then
-        out="libgcc/${dir}/${oname}${objext}"
-	outS="libgcc/${dir}/${oname}_s${objext}"
-
-	echo $out: stmp-dirs $file $LIBUNWINDDEP
-	echo "	$gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"
-
-	echo $outS: stmp-dirs $file $LIBUNWINDDEP
-	echo "	$gcc_s_compile $flags -fexceptions -c $file -o $outS"
-
-	echo $libunwind_a: $out
-	echo $libunwind_so: $outS
-      else
-        out="libgcc/${dir}/${oname}${objext}"
-	echo $out: stmp-dirs $file $LIBUNWINDDEP
-	echo "	$gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"
-	echo $libunwind_a: $out
-      fi
-    done
-  fi
-
-  #
-  # build libgcov components
-  #
-  for name in $LIBGCOV; do
-    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
-    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
-    out="libgcc/${dir}/${name}${objext}"
-
-    echo $out: $libgcov_c_dep
-    echo "	$gcc_compile $flags -DL$name -c \$(srcdir)/libgcov.c -o $out"
-    echo $libgcov_a: $out
-  done
-
-  # EXTRA_MULTILIB_PARTS.
-  if [ -n "$EXTRA_MULTILIB_PARTS" ]; then
-    # Each of the EXTRA_MULTILIB_PARTS is built by recursive invocation
-    # of the parent Makefile.  We must do this just once for each
-    # multilib, passing it all the EXTRA_MULTILIB_PARTS as
-    # simultaneous goal targets, so that rules which cannot execute
-    # simultaneously are properly serialized.
-    
-    extra=
-    echo
-    for f in $EXTRA_MULTILIB_PARTS; do
-      case $dir in
-      .) out=$f ; t= ;;
-      *) out=$dir/$f ; t=$dir/ ;;
-      esac
-      case $out in
-      # Prevent `make' from interpreting $out as a macro assignment
-      *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
-      *) targ=$out ;;
-      esac
-      extra="$extra $targ"
-    done
-
-    if [ "$dir" = . ]; then
-      suffix=
-    else
-      suffix=`echo $dir | sed s,/,_,g`
-    fi
-    echo extra$suffix: stmp-dirs
-    echo "	$make_compile" \\
-    echo '	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
-    echo '	  MULTILIB_CFLAGS="'$flags'"' T=$t $extra
-    echo "all: extra$suffix"
-
-    # Make libunwind.so and libgcc_s.so depend on these, since they
-    # are likely to be implicitly used by the link process.
-    if [ "$libgcc_s_so" ]; then
-      echo "$libgcc_s_so: extra$suffix"
-    fi
-    if [ "$libunwind_so" ]; then
-      echo "$libunwind_so: extra$suffix"
-    fi
-  fi
-
-  # Library build rules.
-  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
-  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
-
-  # Map-file generation.
-  if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then
-    mapfile="libgcc/${dir}/libgcc.map"
-    tmpmapfile="libgcc/${dir}/tmp-libgcc.map"
-    # This uses a here document instead of echos because some shells
-    # will convert the \1 in the second sed command to a control-A.
-    # The behavior of here documents is more predictable.
-    cat <<EOF
-
-${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES
-	{ \$(NM_FOR_TARGET) $SHLIB_NM_FLAGS \$(objects); echo %%; \\
-	  cat $SHLIB_MAPFILES \\
-	    | sed -e '/^[   ]*#/d' \\
-	          -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \\
-	    | $gcc_compile $flags -E -xassembler-with-cpp -; \\
-	} | \$(AWK) -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}
-	mv '$tmpmapfile' \$@
-$libgcc_s_so: ${mapfile}
-EOF
-  fi
-
-  # Static libraries.
-
-  # Each of these .a files depends on stmp-dirs.  It would seem that
-  # this dependency is redundant, since each of the object files
-  # itself depends on stmp-dirs.  However, it is possible that there
-  # are in fact no object files.  In that case, the stmp-dirs
-  # dependency is required; the directory containing the archive must
-  # exist before the archive itself can be created.
-  echo ""
-  echo "$libgcc_a: stmp-dirs"
-  echo "	-rm -f $libgcc_a"
-  echo '	$(AR_CREATE_FOR_TARGET)' $libgcc_a '$(objects)'
-  echo '	$(RANLIB_FOR_TARGET)' $libgcc_a
-  echo "all: $libgcc_a"
-
-  echo ""
-  echo "$libgcov_a: stmp-dirs"
-  echo "	-rm -f $libgcov_a"
-  echo '	$(AR_CREATE_FOR_TARGET)' $libgcov_a '$(objects)'
-  echo '	$(RANLIB_FOR_TARGET)' $libgcov_a
-  echo "all: $libgcov_a"
-
-  # These libraries are not always built.
-  if [ "$libunwind_a" ]; then
-    echo ""
-    echo "$libunwind_a: stmp-dirs"
-    echo "	-rm -f $libunwind_a"
-    echo '	$(AR_CREATE_FOR_TARGET)' $libunwind_a '$(objects)'
-    echo '	$(RANLIB_FOR_TARGET)' $libunwind_a
-    echo "all: $libunwind_a"
-  fi
-
-  if [ "$libgcc_eh_a" ]; then
-    echo ""
-    echo "${dir}/libgcc_eh.a: stmp-dirs"
-    echo "	-rm -f ${dir}/libgcc_eh.a"
-    echo '	$(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a '$(objects)'
-    echo '	$(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a
-    echo "all: $libgcc_eh_a"
-  fi
-
-  # Shared libraries.
-  if [ "$libgcc_s_so" ]; then
-    echo ""
-    echo "$libgcc_s_so: stmp-dirs $libunwind_so"
-    echo "	$SHLIB_LINK" \
-	 | sed -e "s%@multilib_flags@%$flags%g" \
-	       -e "s%@multilib_dir@%$dir%g" \
-	       -e "s%@shlib_objs@%\$(objects)%g" \
-	       -e "s%@shlib_base_name@%libgcc_s%g" \
-	       -e "s%@shlib_map_file@%$mapfile%g" \
-	       -e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
-    echo "all: $libgcc_s_so"
-  fi
-
-  if [ "$libunwind_so" ]; then
-    echo ""
-    echo "$libunwind_so: stmp-dirs"
-    echo "	$SHLIBUNWIND_LINK" \
-	   | sed -e "s%@multilib_flags@%$flags%g" \
-		 -e "s%@multilib_dir@%$dir%g" \
-		 -e "s%@shlib_objs@%\$(objects)%g" \
-		 -e "s%@shlib_base_name@%libunwind%g" \
-		 -e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
-    echo "all: $libunwind_so"
-  fi
-
-done # ml in MULTILIBS
-
-echo
-echo "libgcc-stage-start:"
-echo "	for dir in \$(dirs); do \\"
-echo "	  if [ -d \$(stage)/\$\$dir ]; then :; \\"
-echo "	  else $mkinstalldirs \$(stage)/\$\$dir; fi; \\"
-echo "	done"
-echo "	-for dir in \$(dirs); do \\"
-echo "	  mv \$\$dir/*${objext} \$(stage)/\$\$dir; \\"
-echo "	  mv \$\$dir/*.vis \$(stage)/\$\$dir; \\"
-echo "    mv \$\$dir/*.map \$(stage)/\$\$dir; \\"
-echo "	  test ! -f \$\$dir/libgcc.a || mv \$\$dir/lib* \$(stage)/\$\$dir; \\"
-echo "	done"
-
-echo 
-echo "stmp-dirs:"
-echo "	for d in \$(dirs); do \\"
-echo "	  if [ -d \$\$d ]; then true; else $mkinstalldirs \$\$d; fi; \\"
-echo "	done"
-echo "	if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi"
-
-if [ "$need_eh_dummy" ]; then
-  echo "eh_dummy.c:"
-  echo "	echo 'int __libgcc_eh_dummy;' > \$@"
-fi
-
-echo ""
-echo "install: all"
-for ml in $MULTILIBS; do
-  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
-  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
-  if [ $dir != . ]; then
-    ldir='$(DESTDIR)$(libsubdir)'/$dir
-    echo "	if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;"
-  else
-    ldir='$(DESTDIR)$(libsubdir)'
-  fi
-  echo '	$(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
-  echo '	chmod 644'  ${ldir}/libgcc.a
-  echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
-  echo '	$(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/
-  echo '	chmod 644'  ${ldir}/libgcov.a
-  echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a
-
-  if [ "$SHLIB_LINK" ]; then
-    echo '	$(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
-    echo '	chmod 644'  ${ldir}/libgcc_eh.a
-    echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
-
-    shlib_slibdir_qual=
-    os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory`
-    if [ "$os_multilib_dir" != . ]; then
-      shlib_slibdir_qual="/$os_multilib_dir"
-    fi
-    echo "	$SHLIB_INSTALL" \
-      | sed -e "s%@multilib_dir@%$dir%g" \
-	    -e "s%@shlib_base_name@%libgcc_s%g" \
-	    -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
-    if [ "$LIBUNWIND" ]; then
-      echo "	$SHLIBUNWIND_INSTALL" \
-	| sed -e "s%@multilib_dir@%$dir%g" \
-	      -e "s%@shlib_base_name@%libunwind%g" \
-	      -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
-      libunwinddir='$(DESTDIR)$(slibdir)$(shlib_slibdir_qual)/$(shlib_dir)'
-      echo '	$(INSTALL_DATA)' ${dir}/libunwind.a ${libunwinddir}/
-      echo '	chmod 644' ${dir}/libunwind.a
-      echo '	$(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a
-    fi
-  fi
-done
-for f in $EXTRA_MULTILIB_PARTS; do
-  for ml in $MULTILIBS; do
-    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
-    if [ $dir != . ]; then
-      out=${dir}/$f
-      ldir='$(DESTDIR)$(libsubdir)'/$dir
-    else
-      out=$f
-      ldir='$(DESTDIR)$(libsubdir)'
-    fi
-    echo '	$(INSTALL_DATA)' $out $ldir/
-  done
-done
-
-echo '.PHONY: all install'
diff -Nurp trunk/libgcc/Makefile.in fsf-branch/libgcc/Makefile.in
--- trunk/libgcc/Makefile.in	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/Makefile.in	2006-12-16 17:59:58.000000000 -0500
@@ -0,0 +1,740 @@
+# Makefile.in
+
+# Copyright (C) 2005, 2006 Free Software Foundation
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it under the
+# terms of the GNU Library General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with GCC; see the file COPYING.  If not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+
+libgcc_topdir = @libgcc_topdir@
+gcc_srcdir = $(libgcc_topdir)/gcc
+gcc_objdir = $(MULTIBUILDTOP)../../gcc
+
+srcdir = @srcdir@
+
+prefix = @prefix@
+
+exec_prefix = @exec_prefix@
+libdir = @libdir@
+
+SHELL = @SHELL@
+
+enable_shared = @enable_shared@
+decimal_float = @decimal_float@
+
+host_noncanonical = @host_noncanonical@
+
+# Multilib support variables.
+MULTISRCTOP =
+MULTIBUILDTOP =
+MULTIDIRS =
+MULTISUBDIR =
+MULTIDO = true
+MULTICLEAN = true
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+mkinstalldirs = $(SHELL) $(libgcc_topdir)/mkinstalldirs
+
+objext = .o
+
+AR = @AR@
+AR_FLAGS = rc
+
+CC = @CC@
+CFLAGS = @CFLAGS@
+RANLIB = @RANLIB@
+MAKEINFO = @MAKEINFO@
+LN_S = @LN_S@
+PERL = @PERL@
+
+PWD_COMMAND = $${PWDCMD-pwd}
+
+# Flags to pass to a recursive make.
+FLAGS_TO_PASS = \
+	"AR=$(AR)" \
+	"AR_FLAGS=$(AR_FLAGS)" \
+	"CC=$(CC)" \
+	"CFLAGS=$(CFLAGS)" \
+	"DESTDIR=$(DESTDIR)" \
+	"EXTRA_OFILES=$(EXTRA_OFILES)" \
+	"HDEFINES=$(HDEFINES)" \
+	"INSTALL=$(INSTALL)" \
+	"INSTALL_DATA=$(INSTALL_DATA)" \
+	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+	"LDFLAGS=$(LDFLAGS)" \
+	"LOADLIBES=$(LOADLIBES)" \
+	"RANLIB=$(RANLIB)" \
+	"SHELL=$(SHELL)" \
+	"prefix=$(prefix)" \
+	"exec_prefix=$(exec_prefix)" \
+	"libdir=$(libdir)" \
+	"libsubdir=$(libsubdir)" \
+	"tooldir=$(tooldir)"
+
+# Dependencies for "all" are set later in the file.
+all: all-multi
+	# Now that we have built all the objects, we need to copy
+	# them back to the GCC directory.  Too many things (other
+	# in-tree libraries, and DejaGNU) know about the layout
+	# of the build tree, for now.
+	$(MAKE) install DESTDIR=$(gcc_objdir) \
+	  slibdir= libsubdir= MULTIOSDIR=$(MULTIDIR)
+
+.PHONY: all-multi
+all-multi:
+	# If this is the top-level multilib, build all the other
+	# multilibs.
+	@: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
+
+.PHONY: check installcheck
+check: check-subdir
+installcheck: installcheck-subdir
+
+.PHONY: all clean
+
+clean:
+	-rm -f config.h stamp-h stmp-ldirs libgcc.map
+	-rm -f *$(objext)
+	-rm -f *.dep
+	-rm -f *.a
+	-rm -f libunwind$(SHLIB_EXT)
+	-rm -f libgcc_s*
+	@$(MULTICLEAN) multi-clean DO=clean
+distclean: clean
+	@$(MULTICLEAN) multi-clean DO=distclean
+	-rm -f *~ Makefile config.cache config.status multilib.out
+	-rm -f config.log
+maintainer-clean realclean: distclean
+
+Makefile: $(srcdir)/Makefile.in config.status
+	CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
+
+# Depending on Makefile makes sure that config.status has been re-run
+# if needed.  This prevents problems with parallel builds.
+config.h: stamp-h ; @true
+stamp-h: $(srcdir)/config.in config.status Makefile
+	CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
+
+config.status: $(srcdir)/configure
+	$(SHELL) ./config.status --recheck
+
+include $(gcc_objdir)/libgcc.mvars
+
+# Flags to pass to recursive makes.
+
+AR_FOR_TARGET = $(AR)
+AR_FLAGS_FOR_TARGET =
+AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
+AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
+AWK = @AWK@
+GCC_FOR_TARGET = $(CC)
+LIPO = @LIPO@
+LIPO_FOR_TARGET = $(LIPO)
+MACHMODE_H = machmode.h mode-classes.def insn-modes.h
+NM = @NM@
+NM_FOR_TARGET = $(NM)
+RANLIB_FOR_TARGET = $(RANLIB)
+STRIP = @STRIP@
+STRIP_FOR_TARGET = $(STRIP)
+
+# Directory in which the compiler finds libraries etc.
+libsubdir = $(libdir)/gcc/$(host_noncanonical)/$(version)
+# Used to install the shared libgcc.
+slibdir = @slibdir@
+
+export AR_FOR_TARGET
+export AR_CREATE_FOR_TARGET
+export AR_FLAGS_FOR_TARGET
+export AR_EXTRACT_FOR_TARGET
+export AWK
+export DESTDIR
+export GCC_FOR_TARGET
+export INCLUDES
+export INSTALL_DATA
+export LIB1ASMSRC
+export LIBGCC2_CFLAGS
+export LIPO_FOR_TARGET
+export MACHMODE_H
+export NM_FOR_TARGET
+export STRIP_FOR_TARGET
+export RANLIB_FOR_TARGET
+export libsubdir
+export slibdir
+
+DECNUMINC = -I$(srcdir)/../libdecnumber -I$(MULTIBUILDTOP)../../libdecnumber
+
+# Specify the directories to be searched for header files.
+# Both . and srcdir are used, in that order,
+# so that *config.h will be found in the compilation
+# subdirectory rather than in the source directory.
+# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
+# currently being compiled, in both source trees, to be examined as well.
+INCLUDES = -I. -I$(@D) -I$(gcc_objdir) \
+	   -I$(srcdir) -I$(srcdir)/$(@D) -I$(srcdir)/../gcc \
+	   -I$(srcdir)/../include $(DECNUMINC)
+
+# CFLAGS first is not perfect; normally setting CFLAGS should override any
+# options in LIBGCC2_CFLAGS.  But LIBGCC2_CFLAGS may contain -g0, and CFLAGS
+# will usually contain -g, so for the moment CFLAGS goes first.  We must
+# include CFLAGS - that's where multilib options live.
+INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) $(INCLUDES)
+
+MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory)
+MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory)
+
+MULTIOSSUBDIR := $(shell if test $(MULTIOSDIR) != .; then echo /$(MULTIOSDIR); fi)
+inst_libdir = $(libsubdir)$(MULTISUBDIR)
+inst_slibdir = $(slibdir)$(MULTIOSSUBDIR)
+
+gcc_compile_bare = $(CC) $(INTERNAL_CFLAGS)
+gcc_compile = $(gcc_compile_bare) -o $@ -MT $@ -MD -MP -MF $(basename $@).dep
+gcc_s_compile = $(gcc_compile) -DSHARED
+
+objects = $(filter %$(objext),$^)
+
+# Collect any host-specific information from Makefile fragments.
+hmake_file = @hmake_file@
+include $(srcdir)/empty.mk $(hmake_file)
+
+# Only handle shared libraries if both:
+#   - the user requested them
+#   - we know how to build them
+ifeq ($(SHLIB_LINK),)
+  enable_shared := no
+endif
+
+ifeq ($(enable_shared),yes)
+  iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/shared-object.mk,$(iter-items))
+
+  install-shared = install-shared
+
+  ifneq ($(LIBUNWIND),)
+    install-libunwind = install-libunwind
+  endif
+
+# Test -fvisibility=hidden.  We need both a -fvisibility=hidden on
+# the command line, and a #define to prevent libgcc2.h etc from
+# overriding that with #pragmas.  The dance with @ is to prevent
+# echo from seeing anything it might take for an option.
+# echo turns the \$\$\$\$ into $$$$ and when make sees it it
+# becomes $$ and the shell substitutes the pid. Makes for a
+# slightly safer temp file.
+vis_hide := $(strip $(subst @,-,\
+    $(shell if echo 'void foo(void); void foo(void) {}' | \
+          $(gcc_compile_bare) -fvisibility=hidden -Werror \
+          -c -xc - -o vis_temp_file$$$$.o 2> /dev/null; \
+          then echo @fvisibility=hidden @DHIDE_EXPORTS; \
+          rm vis_temp_file$$$$.o 2> /dev/null; \
+          fi)))
+
+ifneq (,$(vis_hide))
+
+# If we have -fvisibility=hidden, then we need to generate hide
+# lists for object files implemented in assembly.  The default
+# pseudo-op for this is ".hidden", but can be overridden with
+# ASM_HIDDEN_OP.
+ifeq ($(ASM_HIDDEN_OP),)
+ASM_HIDDEN_OP = .hidden
+endif
+
+define gen-hide-list
+$(NM) -pg $< | \
+  $(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ { print "\t$(ASM_HIDDEN_OP)", $$3 }' > $@T
+mv -f $@T $@
+endef
+else
+gen-hide-list = echo > $@
+endif
+
+else
+# Not enable_shared.
+iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/static-object.mk,$(iter-items))
+vis_hide =
+gen-hide-list = echo > \$@
+endif
+
+# The distinction between these two variables is no longer relevant.
+EXTRA_MULTILIB_PARTS := $(sort $(EXTRA_MULTILIB_PARTS) $(EXTRA_PARTS))
+
+ifneq ($(EXTRA_MULTILIB_PARTS),)
+  extra-parts = extra-parts
+endif
+
+# Library members defined in libgcc2.c.
+lib2funcs = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2	   \
+	    _clear_cache _enable_execute_stack _trampoline __main _absvsi2 \
+	    _absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \
+	    _negvsi2 _negvdi2 _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2  \
+	    _ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2	   \
+	    _paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2	   \
+	    _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3	   \
+	    _divtc3 _bswapsi2 _bswapdi2
+
+# The floating-point conversion routines that involve a single-word integer.
+# XX stands for the integer mode.
+swfloatfuncs = $(patsubst %,_fixuns%XX,sf df xf)
+
+# Likewise double-word routines.
+dwfloatfuncs = $(patsubst %,_fix%XX,sf df xf tf) \
+	       $(patsubst %,_fixuns%XX,sf df xf tf) \
+	       $(patsubst %,_floatXX%,sf df xf tf) \
+	       $(patsubst %,_floatunXX%,sf df xf tf)
+
+ifeq ($(LIB2_SIDITI_CONV_FUNCS),)
+  lib2funcs += $(subst XX,si,$(swfloatfuncs))
+  lib2funcs += $(subst XX,di,$(dwfloatfuncs))
+endif
+
+# These might cause a divide overflow trap and so are compiled with
+# unwinder info.
+LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
+
+
+all: $(HOST_EXTRA)
+install: $(HOST_EXTRA_INSTALL)
+
+# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
+# defined as optimized assembly code in LIB1ASMFUNCS or as C code
+# in LIB2FUNCS_EXCLUDE.
+lib2funcs := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS),$(lib2funcs))
+LIB2_DIVMOD_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS), \
+		       $(LIB2_DIVMOD_FUNCS))
+
+# Build "libgcc1" (assembly) components.
+ifeq ($(enable_shared),yes)
+
+lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
+$(lib1asmfuncs-o): %$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC) %.vis
+	$(gcc_compile) -DL$* -xassembler-with-cpp \
+	  -c $(gcc_srcdir)/config/$(LIB1ASMSRC) -include $*.vis
+$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s.o
+	$(gen-hide-list)
+libgcc-objects += $(lib1asmfuncs-o)
+
+lib1asmfuncs-s-o = $(patsubst %,%_s$(objext),$(LIB1ASMFUNCS))
+$(lib1asmfuncs-s-o): %_s$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC)
+	$(gcc_s_compile) -DL$* -xassembler-with-cpp \
+	  -c $(gcc_srcdir)/config/$(LIB1ASMSRC)
+libgcc-s-objects += $(lib1asmfuncs-s-o)
+
+else
+
+lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
+$(lib1asmfuncs-o): %$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC)
+	$(gcc_compile) -DL$* -xassembler-with-cpp \
+	  -c $(gcc_srcdir)/config/$(LIB1ASMSRC)
+libgcc-objects += $(lib1asmfuncs-o)
+
+endif
+
+# Build lib2funcs.  For the static library also include LIB2FUNCS_ST.
+lib2funcs-o = $(patsubst %,%$(objext),$(lib2funcs) $(LIB2FUNCS_ST))
+$(lib2funcs-o): %$(objext): $(gcc_srcdir)/libgcc2.c
+	$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+	  $(vis_hide)
+libgcc-objects += $(lib2funcs-o)
+
+ifeq ($(enable_shared),yes)
+lib2funcs-s-o = $(patsubst %,%_s$(objext),$(lib2funcs))
+$(lib2funcs-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
+	$(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c
+libgcc-s-objects += $(lib2funcs-s-o)
+endif
+
+ifneq ($(LIB2_SIDITI_CONV_FUNCS),)
+# Build libgcc2.c for each conversion function, with a specific
+# L<func> definition and LIBGCC2_UNITS_PER_WORD setting.  The DImode
+# functions are built with a wordsize of 4; the TImode functions are
+# built with the same labels, but a wordsize of 8.
+
+sifuncs = $(subst XX,si,$(swfloatfuncs))
+difuncs = $(subst XX,di,$(dwfloatfuncs))
+tifuncs = $(subst XX,ti,$(dwfloatfuncs))
+
+iter-items := $(sifuncs) $(difuncs) $(tifuncs)
+iter-labels := $(sifuncs) $(difuncs) $(difuncs)
+iter-sizes := $(patsubst %,4,$(sifuncs) $(difuncs)) $(patsubst %,8,$(tifuncs))
+
+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items))
+
+libgcc-objects += $(patsubst %,%$(objext),$(sifuncs) $(difuncs) $(tifuncs))
+ifeq ($(enable_shared),yes)
+libgcc-s-objects += $(patsubst %,%_s$(objext),$(sifuncs) $(difuncs) $(tifuncs))
+endif
+endif
+
+# Build LIB2_DIVMOD_FUNCS.
+lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
+$(lib2-divmod-o): %$(objext): $(gcc_srcdir)/libgcc2.c
+	$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+	  -fexceptions -fnon-call-exceptions $(vis_hide)
+libgcc-objects += $(lib2-divmod-o)
+
+ifeq ($(enable_shared),yes)
+lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
+$(lib2-divmod-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
+	$(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+	  -fexceptions -fnon-call-exceptions
+libgcc-s-objects += $(lib2-divmod-s-o)
+endif
+
+# $(FPBIT) et al. are pathnames relative to the GCC build
+# directory; the supporting files are made by the GCC
+# Makefile.
+# FIXME: Soon we will be able to move this logic into this directory.
+
+ifneq ($(fpbit-in-libgcc),yes)
+FPBIT:=$(if $(FPBIT),$(gcc_objdir)/$(FPBIT),)
+DPBIT:=$(if $(DPBIT),$(gcc_objdir)/$(DPBIT),)
+TPBIT:=$(if $(TPBIT),$(gcc_objdir)/$(TPBIT),)
+endif
+
+ifeq ($(TPBIT),)
+# _sf_to_tf and _df_to_tf require tp-bit.c being compiled in.
+FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS))
+DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS))
+endif
+
+# Build FPBIT.
+ifneq ($(FPBIT),)
+fpbit-o = $(patsubst %,%$(objext),$(FPBIT_FUNCS))
+$(fpbit-o): %$(objext): $(FPBIT)
+	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(FPBIT) $(vis_hide)
+libgcc-objects += $(fpbit-o)
+
+ifeq ($(enable_shared),yes)
+fpbit-s-o = $(patsubst %,%_s$(objext),$(FPBIT_FUNCS))
+$(fpbit-s-o): %_s$(objext): $(FPBIT)
+	$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(FPBIT)
+libgcc-s-objects += $(fpbit-s-o)
+endif
+endif
+
+# Build DPBIT.
+ifneq ($(DPBIT),)
+dpbit-o = $(patsubst %,%$(objext),$(DPBIT_FUNCS))
+$(dpbit-o): %$(objext): $(DPBIT)
+	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(DPBIT) $(vis_hide)
+libgcc-objects += $(dpbit-o)
+
+ifeq ($(enable_shared),yes)
+dpbit-s-o = $(patsubst %,%_s$(objext),$(DPBIT_FUNCS))
+$(dpbit-s-o): %_s$(objext): $(DPBIT)
+	$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(DPBIT)
+libgcc-s-objects += $(dpbit-s-o)
+endif
+endif
+
+# Build TPBIT.
+ifneq ($(TPBIT),)
+tpbit-o = $(patsubst %,%$(objext),$(TPBIT_FUNCS))
+$(tpbit-o): %$(objext): $(TPBIT)
+	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(TPBIT) $(vis_hide)
+libgcc-objects += $(tpbit-o)
+
+ifeq ($(enable_shared),yes)
+tpbit-s-o = $(patsubst %,%_s$(objext),$(TPBIT_FUNCS))
+$(tpbit-s-o): %_s$(objext): $(TPBIT)
+	$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(TPBIT)
+libgcc-s-objects += $(tpbit-s-o)
+endif
+endif
+
+# Build decimal floating point support.
+ifeq ($(decimal_float),yes)
+
+# If $DFP_ENABLE is set, then we want all data type sizes.
+ifneq ($(DFP_ENABLE),)
+D32PBIT = 1
+D64PBIT = 1
+D128PBIT = 1
+endif
+
+dec-filenames =
+ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
+dec-filenames += decContext decNumber decRound decLibrary decUtility
+endif
+
+ifneq ($(D32PBIT),)
+dec-filenames += decimal32
+endif
+
+ifneq ($(D64PBIT),)
+dec-filenames += decimal64
+endif
+
+ifneq ($(D128PBIT),)
+dec-filenames += decimal128
+endif
+
+dec-objects = $(patsubst %,%$(objext),$(dec-filenames))
+$(dec-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
+	$(gcc_compile) -c $<
+libgcc-objects += $(dec-objects)
+
+# Next build individual support functions.
+ifneq ($(D32PBIT),)
+d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS))
+$(d32pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
+	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
+libgcc-objects += $(d32pbit-o)
+endif
+
+ifneq ($(D64PBIT),)
+d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS))
+$(d64pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
+	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
+libgcc-objects += $(d64pbit-o)
+endif
+
+ifneq ($(D128PBIT),)
+d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS))
+$(d128pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
+	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
+libgcc-objects += $(d128pbit-o)
+endif
+
+endif
+
+# Build LIB2ADD and LIB2ADD_ST.
+ifneq ($(filter-out %.c %.S %.asm,$(LIB2ADD) $(LIB2ADD_ST)),)
+$(error Unsupported files in LIB2ADD or LIB2ADD_ST.)
+endif
+
+libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD))))
+libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD_ST))))
+
+c_flags :=
+iter-items := $(LIB2ADD) $(LIB2ADD_ST)
+include $(iterator)
+
+ifeq ($(enable_shared),yes)
+libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADD))))
+endif
+
+# Build LIB2ADDEH, LIB2ADDEHSTATIC, and LIB2ADDEHSHARED.  If we don't have
+# libgcc_eh.a, only LIB2ADDEH matters.  If we do, only LIB2ADDEHSTATIC and
+# LIB2ADDEHSHARED matter.  (Usually all three are identical.)
+
+c_flags := -fexceptions
+
+ifeq ($(enable_shared),yes)
+
+libgcc-eh-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEHSTATIC))))
+libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADDEHSHARED))))
+
+iter-items := $(sort $(LIB2ADDEHSTATIC) $(LIB2ADDEHSHARED))
+include $(iterator)
+
+else
+# Not shared.  LIB2ADDEH are added to libgcc.a.
+
+libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEH))))
+
+iter-items := $(LIB2ADDEH)
+include $(iterator)
+
+endif
+
+# Build LIBUNWIND.
+
+c_flags := -fexceptions
+
+libunwind-objects += $(addsuffix $(objext),$(basename $(notdir $(LIBUNWIND))))
+
+ifeq ($(enable_shared),yes)
+libunwind-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIBUNWIND))))
+endif
+
+iter-items := $(LIBUNWIND)
+include $(iterator)
+
+# Build libgcov components.
+libgcov-objects = $(patsubst %,%$(objext),$(LIBGCOV))
+$(libgcov-objects): %$(objext): $(gcc_srcdir)/libgcov.c
+	$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcov.c
+
+
+# Static libraries.
+libgcc.a: $(libgcc-objects)
+libgcov.a: $(libgcov-objects)
+libunwind.a: $(libunwind-objects)
+libgcc_eh.a: $(libgcc-eh-objects)
+
+libgcc.a libgcov.a libunwind.a libgcc_eh.a:
+	-rm -f $@
+
+	objects="$(objects)";					\
+	if test -z "$$objects"; then				\
+	  echo 'int __libgcc_eh_dummy;' > eh_dummy.c;		\
+	  $(gcc_compile_bare) $(vis_hide) -c eh_dummy.c		\
+	     -o eh_dummy$(objext);				\
+	  objects=eh_dummy$(objext);				\
+	fi;							\
+	$(AR_CREATE_FOR_TARGET) $@ $$objects
+
+	$(RANLIB) $@
+
+all: libgcc.a libgcov.a
+
+ifneq ($(LIBUNWIND),)
+all: libunwind.a
+endif
+
+ifeq ($(enable_shared),yes)
+all: libgcc_eh.a libgcc_s$(SHLIB_EXT)
+ifneq ($(LIBUNWIND),)
+all: libunwind$(SHLIB_EXT)
+endif
+endif
+
+ifeq ($(enable_shared),yes)
+
+# Map-file generation.
+ifneq ($(SHLIB_MKMAP),)
+libgcc.map: $(SHLIB_MKMAP) $(SHLIB_MAPFILES) $(libgcc-s-objects)
+	{ $(NM) $(SHLIB_NM_FLAGS) $(libgcc-s-objects); echo %%; \
+	  cat $(SHLIB_MAPFILES) \
+	    | sed -e '/^[ 	]*#/d' \
+		  -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \
+	    | $(gcc_compile_bare) -E -xassembler-with-cpp -; \
+	} | $(AWK) -f $(SHLIB_MKMAP) $(SHLIB_MKMAP_OPTS) > tmp-$@
+	mv tmp-$@ $@
+libgcc_s$(SHLIB_EXT): libgcc.map
+mapfile = libgcc.map
+endif
+
+libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts)
+	# @multilib_flags@ is still needed because this may use
+	# $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
+	# @multilib_dir@ is not really necessary, but sometimes it has
+	# more uses than just a directory name.
+	$(mkinstalldirs) $(MULTIDIR)
+	$(subst @multilib_flags@,$(CFLAGS),$(subst \
+		@multilib_dir@,$(MULTIDIR),$(subst \
+		@shlib_objs@,$(objects),$(subst \
+		@shlib_base_name@,libgcc_s,$(subst \
+		@shlib_map_file@,$(mapfile),$(subst \
+		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_LINK)))))))
+
+libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
+	# @multilib_flags@ is still needed because this may use
+	# $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
+	# @multilib_dir@ is not really necessary, but sometimes it has
+	# more uses than just a directory name.
+	$(mkinstalldirs) $(MULTIDIR)
+	$(subst @multilib_flags@,$(CFLAGS),$(subst \
+		@multilib_dir@,$(MULTIDIR),$(subst \
+		@shlib_objs@,$(objects),$(subst \
+		@shlib_base_name@,libunwind,$(subst \
+		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_LINK))))))
+
+endif
+
+extra-parts:
+	# Recursively invoke make in the GCC directory to build any
+	# startfiles (for now).  We must do this just once, passing
+	# it all the EXTRA_MULTILIB_PARTS as simultaneous goal targets,
+	# so that rules which cannot execute simultaneously are properly
+	# serialized.  We indirect through T_TARGET in case any multilib
+	# directories contain an equals sign, to prevent make from
+	# interpreting any of the goals as variable assignments.
+
+	# We must use cd && make rather than make -C, or else the stage
+	# number will be embedded in debug information.
+
+	T=`$(PWD_COMMAND)`/ \
+	&& cd $(gcc_objdir) \
+	&& $(MAKE) GCC_FOR_TARGET="$(CC)" \
+	  MULTILIB_CFLAGS="$(CFLAGS)" \
+	  T=$$T \
+	  T_TARGET="$(patsubst %,$${T}%,$(EXTRA_MULTILIB_PARTS))" \
+	  T_TARGET
+
+	# Early copyback; see "all" above for the rationale.  The
+	# early copy is necessary so that the gcc -B options find
+	# the right startup files when linking shared libgcc.
+	$(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
+	for file in dummy $(EXTRA_MULTILIB_PARTS); do		\
+	  if test $$file != dummy; then				\
+	    rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file;		\
+	    $(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/;\
+	  fi;							\
+	done
+
+all: $(extra-parts)
+
+# Install rules.  These do not depend on "all", so that they can be invoked
+# recursively from it.
+install-libunwind:
+	$(mkinstalldirs) $(DESTDIR)$(inst_slibdir)
+
+	# NOTE: Maybe this should go into $(inst_libdir), but this
+	# is where the old mklibgcc.in put it.
+	$(INSTALL_DATA) libunwind.a $(DESTDIR)$(inst_slibdir)/
+	chmod 644 $(DESTDIR)$(inst_slibdir)/libunwind.a
+	$(RANLIB) $(DESTDIR)$(inst_slibdir)/libunwind.a
+
+	$(subst @multilib_dir@,$(MULTIDIR),$(subst \
+		@shlib_base_name@,libunwind,$(subst \
+		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_INSTALL))))
+
+install-shared:
+	$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
+
+	$(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
+	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
+	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
+
+	$(subst @multilib_dir@,$(MULTIDIR),$(subst \
+		@shlib_base_name@,libgcc_s,$(subst \
+		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
+
+install: $(install-shared) $(install-libunwind)
+	$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
+
+	$(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/
+	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc.a
+	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc.a
+	$(INSTALL_DATA) libgcov.a $(DESTDIR)$(inst_libdir)/
+	chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
+	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
+
+	for file in dummy $(EXTRA_MULTILIB_PARTS); do		\
+	  if test $$file != dummy; then				\
+	    rm -f $(DESTDIR)$(inst_libdir)/$$file;		\
+	    $(INSTALL_DATA) $$file $(DESTDIR)$(inst_libdir)/;	\
+	  fi;							\
+	done
+
+.PHONY: install install-shared install-libunwind
+
+# Don't export variables to the environment, in order to not confuse
+# configure.
+.NOEXPORT:
+
+include $(srcdir)/empty.mk $(wildcard *.dep)
+
+# TODO QUEUE:
+#   Garbage collect in gcc/:
+#     $(LIBGCC) settings in t-* are now unused
+#
+#   Remove use of $(gcc_srcdir).  Source files referenced using $(gcc_srcdir)
+#   should move into the libgcc directory.
+
diff -Nurp trunk/libgcc/config/i386/t-darwin fsf-branch/libgcc/config/i386/t-darwin
--- trunk/libgcc/config/i386/t-darwin	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/i386/t-darwin	2006-11-26 17:19:11.000000000 -0500
@@ -0,0 +1 @@
+SHLIB_VERPFX = $(gcc_srcdir)/config/i386/darwin-libgcc
diff -Nurp trunk/libgcc/config/i386/t-darwin64 fsf-branch/libgcc/config/i386/t-darwin64
--- trunk/libgcc/config/i386/t-darwin64	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/i386/t-darwin64	2006-11-26 17:21:13.000000000 -0500
@@ -0,0 +1 @@
+SHLIB_VERPFX = $(gcc_srcdir)/config/i386/darwin-libgcc
diff -Nurp trunk/libgcc/config/i386/t-nwld fsf-branch/libgcc/config/i386/t-nwld
--- trunk/libgcc/config/i386/t-nwld	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/i386/t-nwld	2006-12-16 17:54:03.000000000 -0500
@@ -0,0 +1,31 @@
+# Build a shared libgcc library for NetWare.
+
+SHLIB_EXT = .nlm
+SHLIB_NAME = @shlib_base_name@.nlm
+SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+SHLIB_DEF = $(gcc_srcdir)/config/i386/netware-libgcc.def
+SHLIB_MAP = $(gcc_srcdir)/config/i386/netware-libgcc.exp
+SHLIB_SRC = $(gcc_srcdir)/config/i386/netware-libgcc.c
+
+SHLIB_LINK = set -e; \
+	cat $(SHLIB_DEF) >@shlib_base_name@.def; \
+	echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
+	echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
+	touch build; \
+	echo "build $$(expr $$(<build) + 0)" >>@shlib_base_name@.def; \
+	echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
+	if mpkxdc -n -p @shlib_base_name@.xdc; \
+		then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
+		else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
+	fi; \
+	$(CC) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
+		$(SHLIB_SRC) -posix -static-libgcc -lnetware \
+		-Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
+	rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
+	rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
+	expr $$(<build) + 1 >build
+
+SHLIB_INSTALL = \
+	$(SHELL) $(srcdir)/mkinstalldirs $(slibdir)$(SHLIB_SLIBDIR_QUAL); \
+	$(INSTALL_DATA) $(SHLIB_NAME) $(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
+	$(INSTALL_DATA) @shlib_base_name@.imp $(DESTDIR)$(libsubdir)/
diff -Nurp trunk/libgcc/config/rs6000/t-darwin fsf-branch/libgcc/config/rs6000/t-darwin
--- trunk/libgcc/config/rs6000/t-darwin	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/rs6000/t-darwin	2006-11-26 17:19:00.000000000 -0500
@@ -0,0 +1 @@
+SHLIB_VERPFX = $(gcc_srcdir)/config/rs6000/darwin-libgcc
diff -Nurp trunk/libgcc/config/rs6000/t-ldbl128 fsf-branch/libgcc/config/rs6000/t-ldbl128
--- trunk/libgcc/config/rs6000/t-ldbl128	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/rs6000/t-ldbl128	2006-11-26 10:11:09.000000000 -0500
@@ -0,0 +1,7 @@
+SHLIB_MAPFILES += $(gcc_srcdir)/config/rs6000/libgcc-ppc-glibc.ver
+
+# Use -mlong-double-128 only when not compiling nof libgcc.
+predefined-macros := $(shell true | $(CC) $(CFLAGS) -x c -dD -E -)
+ifeq ($(findstring _SOFT_FLOAT,$(predefined-macros)),)
+HOST_LIBGCC2_CFLAGS += -mlong-double-128
+endif
diff -Nurp trunk/libgcc/config/t-slibgcc-darwin fsf-branch/libgcc/config/t-slibgcc-darwin
--- trunk/libgcc/config/t-slibgcc-darwin	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config/t-slibgcc-darwin	2006-12-09 11:39:36.000000000 -0500
@@ -0,0 +1,125 @@
+# Build a shared libgcc library with the darwin linker.
+SHLIB_SOVERSION = 1
+SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0
+SHLIB_EXT = .dylib
+SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi`
+SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_SOLINK = @shlib_base_name@.so
+SHLIB_MAP = @shlib_map_file@
+SHLIB_OBJS = @shlib_objs@
+SHLIB_DIR = @multilib_dir@
+SHLIB_LC = -lc
+
+# Darwin only searches in /usr/lib for shared libraries, not in subdirectories,
+# so the libgcc variants have different names not different locations.
+# Note that this version is used for the loader, not the linker; the linker
+# uses the stub versions named by the versioned members of $(INSTALL_FILES).
+SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
+	-install_name $(slibdir)/$(SHLIB_INSTALL_NAME) \
+	-single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
+	-Wl,-exported_symbols_list,$(SHLIB_MAP) \
+	$(SHLIB_VERSTRING) \
+	@multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
+
+SHLIB_MKMAP = $(gcc_srcdir)/mkmap-flat.awk
+SHLIB_MKMAP_OPTS = -v leading_underscore=1
+SHLIB_MAPFILES += $(gcc_srcdir)/libgcc-std.ver
+
+# Must use a different directive for hidden visibility in assembly sources.
+ASM_HIDDEN_OP = .private_extern
+
+INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib
+
+# For the toplevel multilib, build a fat archive including all the multilibs.
+ifeq ($(MULTIBUILDTOP),)
+
+SHLIB_INSTALL = \
+	$(mkinstalldirs) $(DESTDIR)$(slibdir); \
+	$(INSTALL_DATA) $(SHLIB_SONAME) \
+	  $(DESTDIR)$(slibdir)/$(SHLIB_SONAME)
+
+ifeq ($(enable_shared),yes)
+HOST_EXTRA = $(INSTALL_FILES)
+HOST_EXTRA_INSTALL = install-darwin-libgcc-stubs
+endif
+
+# In order to support -mmacosx-version-min, you need to have multiple
+# different libgcc_s libraries that actually get linked against, one for
+# each system version supported.  They are 'stub' libraries that
+# contain no code, just a list of exported symbols.
+# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC.
+#
+# This assumes each multilib corresponds to a different architecture.
+libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT) all-multi
+	$(STRIP) -o $(@)_T \
+	  -s $(SHLIB_VERPFX).$(*).ver -c -u \
+	  ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp
+	MLIBS=`$(CC) --print-multi-lib \
+		| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
+	for mlib in $$MLIBS ; do \
+	  $(STRIP) -o $(@)_T$${mlib} \
+	    -s $(SHLIB_VERPFX).$(*).ver -c -u \
+	    ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \
+	done
+	$(LIPO) -output $@ -create $(@)_T*
+	rm $(@)_T*
+
+libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT) \
+	libgcc_s.10.4.dylib libgcc_s.10.5.dylib
+	cp libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
+	  ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_ || exit 1 ; \
+	MLIBS=`$(CC) --print-multi-lib \
+		| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
+	for mlib in $$MLIBS ; do \
+	  cp ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
+	    ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
+	done
+	$(LIPO) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
+	  -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
+	rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
+
+install-darwin-libgcc-stubs : $(INSTALL_FILES)
+	$(mkinstalldirs) $(DESTDIR)$(slibdir)
+	for d in $(INSTALL_FILES) ; do \
+	  $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
+	done
+	if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \
+	  rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \
+	else true; fi
+	$(LN_S) libgcc_s.1.dylib \
+		$(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib
+	if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \
+	  rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \
+	else true; fi
+	$(LN_S) libgcc_s.1.dylib \
+		$(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib
+
+else
+
+# Do not install shared libraries for any other multilibs.  Unless
+# we're putting them in the gcc directory during a build, for
+# compatibility with the pre-top-level layout.  In that case we
+# need symlinks.
+SHLIB_INSTALL =
+
+ifeq ($(enable_shared),yes)
+all: install-darwin-libgcc-links
+endif
+
+install-darwin-libgcc-links:
+	$(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
+	for file in $(INSTALL_FILES); do			\
+	  rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file;		\
+	  $(LN_S) ../$$file $(gcc_objdir)$(MULTISUBDIR)/;	\
+	done
+
+	rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
+	$(LN_S) libgcc_s.1.dylib \
+		$(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
+
+	rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
+	$(LN_S) libgcc_s.1.dylib \
+		$(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
+
+endif
diff -Nurp trunk/libgcc/config.gcc fsf-branch/libgcc/config.gcc
--- trunk/libgcc/config.gcc	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config.gcc	2006-12-16 17:47:58.000000000 -0500
@@ -0,0 +1,149 @@
+# libgcc host-specific configuration file.
+# Copyright 2005, 2006
+# Free Software Foundation, Inc.
+
+#This file is part of GCC.
+
+#GCC is free software; you can redistribute it and/or modify it under
+#the terms of the GNU General Public License as published by the Free
+#Software Foundation; either version 2, or (at your option) any later
+#version.
+
+#GCC is distributed in the hope that it will be useful, but WITHOUT
+#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+#for more details.
+
+#You should have received a copy of the GNU General Public License
+#along with GCC; see the file COPYING.  If not, write to the Free
+#Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+#02110-1301, USA.
+
+# This is the libgcc host-specific configuration file
+# where a configuration type is mapped to different system-specific
+# definitions and files.  This is invoked by the autoconf-generated
+# configure script.  Putting it in a separate shell file lets us skip
+# running autoconf when modifying host-specific information.
+
+# This file switches on the shell variable ${host}.
+
+# This file sets the following shell variables for use by the
+# autoconf-generated configure script:
+#
+#  hmake_file		A list of machine-description-specific
+#			makefile-fragments, defaulting to
+#			"$cpu_type/t-$cpu_type".
+#
+#  extra_parts		List of extra object files that should be compiled
+#			for this host machine.
+#
+
+hmake_file=$cpu_type/t-$cpu_type
+
+# Set default cpu_type.
+cpu_type=`echo ${host} | sed 's/-.*$//'`
+case ${host} in
+m32c*-*-*)
+        cpu_type=m32c
+        ;;
+alpha*-*-*)
+	cpu_type=alpha
+	;;
+am33_2.0-*-linux*)
+	cpu_type=mn10300
+	;;
+strongarm*-*-*)
+	cpu_type=arm
+	;;
+arm*-*-*)
+	cpu_type=arm
+	;;
+bfin*-*)
+	cpu_type=bfin
+	;;
+ep9312*-*-*)
+	cpu_type=arm
+	;;
+frv*)	cpu_type=frv
+	;;
+xscale-*-*)
+	cpu_type=arm
+	;;
+i[34567]86-*-*)
+	cpu_type=i386
+	;;
+x86_64-*-*)
+	cpu_type=i386
+	;;
+ia64-*-*)
+	extra_headers=ia64intrin.h
+	;;
+hppa*-*-* | parisc*-*-*)
+	cpu_type=pa
+	;;
+m32r*-*-*)
+        cpu_type=m32r
+        ;;
+m680[012]0-*-*)
+	cpu_type=m68k
+	;;
+mips*-*-*)
+	cpu_type=mips
+	;;
+powerpc*-*-*)
+	cpu_type=rs6000
+	;;
+score*-*-*)
+	cpu_type=score
+	;;
+sparc64*-*-*)
+	cpu_type=sparc
+	;;
+sparc*-*-*)
+	cpu_type=sparc
+	;;
+spu*-*-*)
+	cpu_type=spu
+	;;
+s390*-*-*)
+	cpu_type=s390
+	;;
+# Note the 'l'; we need to be able to match e.g. "shle" or "shl".
+sh[123456789lbe]*-*-*)
+	cpu_type=sh
+	;;
+tic4x-*-*)
+        cpu_type=c4x
+        ;;
+esac
+
+# Common parts for widely ported systems.
+case ${host} in
+*-*-darwin*)
+	hmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
+	;;
+esac
+
+case ${host} in
+i[3456x]86-*-netware*)
+	case /${with_ld} in
+		hmake_file="${hmake_file} i386/t-nwld"
+		;;
+	esac
+	;;
+x86_64-*-darwin*)
+	hmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin"
+	;;
+powerpc64-*-linux*)
+	hmake_file="${hmake_file} rs6000/t-ldbl128"
+	;;
+powerpc64-*-gnu*)
+	hmake_file="${hmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-*-linux*)
+	hmake_file="${hmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-*-gnu*)
+	hmake_file="${hmake_file} rs6000/t-ldbl128"
+	;;
+esac
diff -Nurp trunk/libgcc/configure.ac fsf-branch/libgcc/configure.ac
--- trunk/libgcc/configure.ac	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/configure.ac	2006-12-16 17:58:24.000000000 -0500
@@ -0,0 +1,133 @@
+dnl Process this file with autoconf to produce a configure script.
+
+sinclude(../config/acx.m4)
+sinclude(../config/no-executables.m4)
+
+AC_PREREQ(2.59)
+AC_INIT([GNU C Runtime Library], 1.0,,[libgcc])
+AC_CONFIG_SRCDIR([static-object.mk])
+
+AC_ARG_WITH(target-subdir,
+[  --with-target-subdir=SUBDIR      Configuring in a subdirectory for target])
+AC_ARG_WITH(cross-host,
+[  --with-cross-host=HOST           Configuring with a cross compiler])
+AC_ARG_WITH(ld,
+[  --with-ld               arrange to use the specified ld (full pathname)])
+
+if test "${srcdir}" = "."; then
+  if test -n "${with_build_subdir}"; then
+    libgcc_topdir="${srcdir}/../.."
+    with_target_subdir=
+  elif test -z "${with_target_subdir}"; then
+    libgcc_topdir="${srcdir}/.."
+  else
+    if test "${with_target_subdir}" != "."; then
+      libgcc_topdir="${srcdir}/${with_multisrctop}../.."
+    else
+      libgcc_topdir="${srcdir}/${with_multisrctop}.."
+    fi
+  fi
+else
+  libgcc_topdir="${srcdir}/.."
+fi
+AC_SUBST(libgcc_topdir)
+AC_CONFIG_AUX_DIR($libgcc_topdir)
+
+AC_ARG_ENABLE(shared,
+[  --disable-shared        don't provide a shared libgcc],
+[
+  case $enable_shared in
+  yes | no) ;;
+  *)
+    enable_shared=no
+    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+    for pkg in $enableval; do
+      if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
+	enable_shared=yes
+      fi
+    done
+    IFS="$ac_save_ifs"
+    ;;
+  esac
+], [enable_shared=yes])
+AC_SUBST(enable_shared)
+
+AC_ARG_WITH(slibdir,
+[  --with-slibdir=DIR      shared libraries in DIR [LIBDIR]],
+slibdir="$with_slibdir",
+if test "${enable_version_specific_runtime_libs+set}" = set; then
+  slibdir='$(libsubdir)'
+elif test "$host" != "$target"; then
+  slibdir='$(build_tooldir)/lib'
+else
+  slibdir='$(libdir)'
+fi)
+AC_SUBST(slibdir)
+
+AC_PROG_INSTALL
+
+AC_PROG_AWK
+# We need awk; bail out if it's missing.
+case ${AWK} in
+  "") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
+esac
+
+AC_CANONICAL_HOST
+ACX_NONCANONICAL_HOST
+
+dnl These must be called before AM_PROG_LIBTOOL, because it may want
+dnl to call AC_CHECK_PROG.
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(LIPO, lipo, :)
+AC_CHECK_TOOL(NM, nm)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+AC_PROG_LN_S
+
+GCC_NO_EXECUTABLES
+AC_PROG_CC
+AC_PROG_CPP_WERROR
+
+# Check for decimal float support.
+AC_CACHE_CHECK([whether decimal floating point is supported], [libgcc_cv_dfp],
+	       [AC_COMPILE_IFELSE([_Decimal32 x;], [libgcc_cv_dfp=yes],
+				  [libgcc_cv_dfp=no])])
+decimal_float=$libgcc_cv_dfp
+AC_SUBST(decimal_float)
+
+
+# Collect host-machine-specific information.
+. ${srcdir}/config.gcc
+
+# Conditionalize the makefile for this target machine.
+hmake_file_=
+for f in ${hmake_file}
+do
+	if test -f ${srcdir}/config/$f
+	then
+		hmake_file_="${hmake_file_} \$(srcdir)/config/$f"
+	fi
+done
+hmake_file="${hmake_file_}"
+AC_SUBST(hmake_file)
+
+# We need multilib support.
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_COMMANDS([default],
+  [[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+if test -n "$CONFIG_FILES"; then
+  # FIXME: We shouldn't need to set ac_file
+  ac_file=Makefile
+  . ${libgcc_topdir}/config-ml.in
+fi]],
+[[srcdir=${srcdir}
+host=${host}
+target=${target}
+with_target_subdir=${with_target_subdir}
+with_multisubdir=${with_multisubdir}
+ac_configure_args="--enable-multilib ${ac_configure_args}"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+libgcc_topdir=${libgcc_topdir}
+CC="${CC}"
+]])
+AC_OUTPUT
diff -Nurp trunk/libgcc/empty.mk fsf-branch/libgcc/empty.mk
--- trunk/libgcc/empty.mk	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/empty.mk	2006-11-24 17:31:57.000000000 -0500
@@ -0,0 +1,2 @@
+# Empty.  This file exists to suppress errors in the parent Makefile
+# when a variable (e.g. LIB2ADD) is empty.
diff -Nurp trunk/libgcc/shared-object.mk fsf-branch/libgcc/shared-object.mk
--- trunk/libgcc/shared-object.mk	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/shared-object.mk	2006-11-24 17:31:57.000000000 -0500
@@ -0,0 +1,34 @@
+# This file is included several times in a row, once for each element of
+# $(iter-items).  On each inclusion, we advance $o to the next element.
+
+o := $(firstword $(iter-items))
+iter-items := $(filter-out $o,$(iter-items))
+
+base := $(basename $(notdir $o))
+
+ifeq ($(suffix $o),.c)
+
+$(base)$(objext): $o
+	$(gcc_compile) $(c_flags) -c $< $(vis_hide)
+
+$(base)_s$(objext): $o
+	$(gcc_s_compile) $(c_flags) -c $<
+
+else
+
+ifneq ($(suffix $o),.S)
+ifneq ($(suffix $o),.asm)
+$(error Unsupported file type: $o)
+endif
+endif
+
+$(base)$(objext): $o $(base).vis
+	$(gcc_compile) -c -xassembler-with-cpp -include $*.vis $<
+
+$(base).vis: $(base)_s$(objext)
+	$(gen-hide-list)
+
+$(base)_s$(objext): $o
+	$(gcc_s_compile) -c -xassembler-with-cpp $<
+
+endif
diff -Nurp trunk/libgcc/siditi-object.mk fsf-branch/libgcc/siditi-object.mk
--- trunk/libgcc/siditi-object.mk	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/siditi-object.mk	2006-11-26 12:46:54.000000000 -0500
@@ -0,0 +1,22 @@
+# This file is included several times in a row, once for each element of
+# $(iter-items).  On each inclusion, we advance $o to the next element.
+# $(iter-labels) and $(iter-sizes) are also advanced.
+
+o := $(firstword $(iter-items))
+iter-items := $(filter-out $o,$(iter-items))
+
+$o-label := $(firstword $(iter-labels))
+iter-labels := $(wordlist 2,$(words $(iter-labels)),$(iter-labels))
+
+$o-size := $(firstword $(iter-sizes))
+iter-sizes := $(wordlist 2,$(words $(iter-sizes)),$(iter-sizes))
+
+$o$(objext): %$(objext): $(gcc_srcdir)/libgcc2.c
+	$(gcc_compile) -DL$($*-label) -c $(gcc_srcdir)/libgcc2.c $(vis_hide) \
+		-DLIBGCC2_UNITS_PER_WORD=$($*-size)
+
+ifeq ($(enable_shared),yes)
+$(o)_s$(objext): %_s$(objext): $(gcc_srcdir)/libgcc2.c
+	$(gcc_s_compile) -DL$($*-label) -c $(gcc_srcdir)/libgcc2.c \
+		-DLIBGCC2_UNITS_PER_WORD=$($*-size)
+endif
diff -Nurp trunk/libgcc/static-object.mk fsf-branch/libgcc/static-object.mk
--- trunk/libgcc/static-object.mk	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/static-object.mk	2006-11-24 17:31:57.000000000 -0500
@@ -0,0 +1,25 @@
+# This file is included several times in a row, once for each element of
+# $(iter-items).  On each inclusion, we advance $o to the next element.
+
+o := $(firstword $(iter-items))
+iter-items := $(filter-out $o,$(iter-items))
+
+base := $(basename $(notdir $o))
+
+ifeq ($(suffix $o),.c)
+
+$(base)$(objext): $o
+	$(gcc_compile) $(c_flags) -c $< $(vis_hide)
+
+else
+
+ifneq ($(suffix $o),.S)
+ifneq ($(suffix $o),.asm)
+$(error Unsupported file type: $o)
+endif
+endif
+
+$(base)$(objext): $o
+	$(gcc_compile) -c -xassembler-with-cpp $<
+
+endif
diff -Nurp trunk/gcc/doc/configfiles.texi fsf-branch/gcc/doc/configfiles.texi
--- trunk/gcc/doc/configfiles.texi	(revision 120019)
+++ fsf-branch/gcc/doc/configfiles.texi	(local)
@@ -40,9 +40,6 @@ used.
 @item
 @file{intl/Makefile} is constructed from @file{intl/Makefile.in}.
 @item
-@file{mklibgcc}, a shell script to create a Makefile to build libgcc,
-is constructed from @file{mklibgcc.in}.
-@item
 If a language @file{config-lang.in} file (@pxref{Front End Config, ,
 The Front End @file{config-lang.in} File}) sets @code{outputs}, then
 the files listed in @code{outputs} there are also generated.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]