public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* libgcc move to the top level
@ 2006-12-17  3:15 Daniel Jacobowitz
  2006-12-17  3:48 ` Daniel Jacobowitz
  2006-12-19 16:09 ` Paolo Bonzini
  0 siblings, 2 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-17  3:15 UTC (permalink / raw)
  To: gcc-patches

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) $< > $@
 
 #\f
-# 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.

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-17  3:15 libgcc move to the top level Daniel Jacobowitz
@ 2006-12-17  3:48 ` Daniel Jacobowitz
  2006-12-19 16:09 ` Paolo Bonzini
  1 sibling, 0 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-17  3:48 UTC (permalink / raw)
  To: gcc-patches, Alexandre Oliva, DJ Delorie, Nathanael Nerode,
	Michael Meissner, Mark Mitchell

On Sat, Dec 16, 2006 at 10:14:35PM -0500, Daniel Jacobowitz wrote:
> This patch moves libgcc to the top level, i.e. out of the gcc subdirectory.

Oops, forgot to copy the right maintainers.  Sorry about that.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-17  3:15 libgcc move to the top level Daniel Jacobowitz
  2006-12-17  3:48 ` Daniel Jacobowitz
@ 2006-12-19 16:09 ` Paolo Bonzini
  2006-12-19 19:18   ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-19 16:09 UTC (permalink / raw)
  To: gcc-patches; +Cc: Daniel Jacobowitz, Mark Mitchell

> 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.

We actually don't need lang_env_dependencies at all.  I'll work to move 
these into target_modules (using new attributes like libstdcxx_depend, 
no_libc_depend and no_libgcc_depend respectively), but it's ok to do it 
after this is committed.

> 	* 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.
> 

These bits are ok.

For the toplevel libgcc build machinery, as I told you privately I'm 
worried that moving config.gcc fragments into the libgcc config.host, 
and at the same time preserving the correct case ordering, will be a 
nightmare.  So I think that even the first version of libgcc;s 
config.host should be based on config.gcc and should already list the 
cases in the correct order.  This way, moving stuff from gcc to libgcc 
will be much easier.

I'll review the toplevel libgcc build machinery as soon as I get an 
updated patch with this change.

Also, right now, there is practically no example of how to move the 
EXTRA_PARTS to the libgcc directory.  I'd appreciate if at least one 
arch maintainer would help you moving their arch's stuff to the libgcc 
directory.  Of course it's okay if you post one such example soon after 
committing, or even better before (anyway, this would be a separate 
commit from this already huge patch).

However, I'd like to have a second opinion on everything :-) but 
especially, I'd rather have somebody else review the config/ bits (both 
in gcc and srcdir).

Thanks,

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-19 16:09 ` Paolo Bonzini
@ 2006-12-19 19:18   ` Daniel Jacobowitz
  2006-12-19 20:06     ` Paolo Bonzini
  2006-12-29 11:27     ` Paolo Bonzini
  0 siblings, 2 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-19 19:18 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell

On Tue, Dec 19, 2006 at 05:09:23PM +0100, Paolo Bonzini wrote:
> >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.
> 
> We actually don't need lang_env_dependencies at all.  I'll work to move 
> these into target_modules (using new attributes like libstdcxx_depend, 
> no_libc_depend and no_libgcc_depend respectively), but it's ok to do it 
> after this is committed.

Well, I actually think it's clearer this way, but it's definitely not a
big deal either way.

> For the toplevel libgcc build machinery, as I told you privately I'm 
> worried that moving config.gcc fragments into the libgcc config.host, 
> and at the same time preserving the correct case ordering, will be a 
> nightmare.  So I think that even the first version of libgcc;s 
> config.host should be based on config.gcc and should already list the 
> cases in the correct order.  This way, moving stuff from gcc to libgcc 
> will be much easier.
> 
> I'll review the toplevel libgcc build machinery as soon as I get an 
> updated patch with this change.

OK, see attached.

> Also, right now, there is practically no example of how to move the 
> EXTRA_PARTS to the libgcc directory.  I'd appreciate if at least one 
> arch maintainer would help you moving their arch's stuff to the libgcc 
> directory.  Of course it's okay if you post one such example soon after 
> committing, or even better before (anyway, this would be a separate 
> commit from this already huge patch).

Good job picking out this issue :-)  Indeed, the first target to move
EXTRA_PARTS may not be trivial because of the way we currently recurse
into the gcc subdirectory to build them.  I think that to do this, we
will have to build extra startfiles twice, once in the libgcc objdir
and once in the gcc objdir, until all targets are migrated.

That's not too difficult, but it will be a little touchy.  I'll try it
later - I'd prefer to do that next after committing libgcc.

-- 
Daniel Jacobowitz
CodeSourcery

2006-12-19  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-19  Daniel Jacobowitz  <dan@codesourcery.com>

	* config.gcc: Mention libgcc/config.host.
	* 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-19  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.host, 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) $< > $@
 
 #\f
-# 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/config.gcc fsf-branch/gcc/config.gcc
--- trunk/gcc/config.gcc	2006-11-23 14:57:14.000000000 -0500
+++ fsf-branch/gcc/config.gcc	2006-12-19 13:18:00.000000000 -0500
@@ -25,6 +25,9 @@
 # configure script.  Putting it in a separate shell file lets us skip
 # running autoconf when modifying target-specific information.
 
+# When you change the cases in the OS or target switches, consider
+# updating ../libgcc/config.host also.
+
 # This file switches on the shell variable ${target}, and also uses the
 # following shell variables:
 #
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/doc/configfiles.texi fsf-branch/gcc/doc/configfiles.texi
--- trunk/gcc/doc/configfiles.texi	2005-11-29 14:51:15.000000000 -0500
+++ fsf-branch/gcc/doc/configfiles.texi	2006-12-16 22:05:03.000000000 -0500
@@ -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.
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-19 11:09:24.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.
+tmake_file = @tmake_file@
+include $(srcdir)/empty.mk $(tmake_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.host fsf-branch/libgcc/config.host
--- trunk/libgcc/config.host	1969-12-31 19:00:00.000000000 -0500
+++ fsf-branch/libgcc/config.host	2006-12-19 13:16:57.000000000 -0500
@@ -0,0 +1,591 @@
+# libgcc host-specific configuration file.
+# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 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 bears an obvious resemblance to gcc/config.gcc.  The cases
+# should be kept similar, to ease moving library-specific settings
+# from config.gcc to this file.  That is also why tmake_file is
+# left as tmake_file, rather than hmake_file, even though this library
+# switches on ${host}.
+
+# This file switches on the shell variable ${host}, and also uses the
+# following shell variables:
+#
+#  with_*		Various variables as set by configure.
+
+# This file sets the following shell variables for use by the
+# autoconf-generated configure script:
+#
+#  cpu_type		The name of the cpu, if different from the first
+#			chunk of the canonical host name.
+#  tmake_file		A list of machine-description-specific
+#			makefile-fragments, if different from
+#			"$cpu_type/t-$cpu_type".
+
+tmake_file=
+
+# Set default cpu_type so it can be updated in each machine entry.
+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-*-*)
+	;;
+hppa*-*-* | parisc*-*-*)
+	cpu_type=pa
+	;;
+m32r*-*-*)
+        cpu_type=m32r
+        ;;
+m680[012]0-*-*)
+	cpu_type=m68k
+	;;
+m68k-*-*)
+	;;
+mips*-*-*)
+	cpu_type=mips
+	;;
+powerpc*-*-*)
+	cpu_type=rs6000
+	;;
+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*)
+  tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
+  ;;
+*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
+  # This is the place-holder for the generic a.out configuration
+  # of FreeBSD.  No actual configuration resides here since
+  # there was only ever a bare-bones ix86 configuration for
+  # a.out and it exists solely in the machine-specific section.
+  # This place-holder must exist to avoid dropping into
+  # the generic ELF configuration of FreeBSD (i.e. it must be
+  # ordered before that section).
+  ;;
+*-*-freebsd*)
+  # This is the generic ELF configuration of FreeBSD.  Later
+  # machine-specific sections may refine and add to this
+  # configuration.
+  ;;
+*-*-linux*libc1* | *-*-linux*aout*)
+  # Avoid the generic linux case.
+  ;;
+*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
+  # Must come before *-*-gnu* (because of *-*-linux-gnu* systems).
+  ;;
+*-*-gnu*)
+  ;;
+*-*-netbsd*)
+  ;;
+*-*-openbsd*)
+  ;;
+*-*-rtems*)
+  ;;
+*-*-vxworks*)
+  ;;
+esac
+
+case ${host} in
+# Support site-specific machine types.
+*local*)
+	rest=`echo ${host} | sed -e "s/$cpu_type-//"`
+	if test -f $srcdir/config/${cpu_type}/t-$rest
+	then tmake_file=${cpu_type}/t-$rest
+	fi
+	;;
+alpha*-*-unicosmk*)
+	;;
+alpha*-*-linux*)
+	;;
+alpha*-*-gnu*)
+	;;
+alpha*-*-freebsd*)
+	;;
+alpha*-*-netbsd*)
+	;;
+alpha*-*-openbsd*)
+	;;
+alpha*-dec-osf[45]*)
+	;;
+alpha64-dec-*vms*)
+	;;
+alpha*-dec-*vms*)
+	;;
+arc-*-elf*)
+	;;
+arm-*-coff* | armel-*-coff*)
+	;;
+arm-semi-aof | armel-semi-aof)
+	;;
+arm-wrs-vxworks)
+	;;
+arm*-*-freebsd*|strongarm*-*-freebsd*)
+	;;
+arm*-*-netbsdelf*)
+	;;
+arm*-*-netbsd*)
+	;;
+arm*-*-linux*)			# ARM GNU/Linux with ELF
+	;;
+arm*-*-uclinux*)		# ARM ucLinux
+	;;
+arm*-*-ecos-elf)
+	;;
+arm*-*-eabi* | arm*-*-symbianelf* )
+	;;
+arm*-*-rtems*)
+	;;
+arm*-wince-pe*)
+	;;
+arm-*-pe*)
+	;;
+arm*-*-kaos*)
+	;;
+avr-*-rtems*)
+	;;
+avr-*-*)
+	;;
+bfin*-elf*)
+        ;;
+bfin*-uclinux*)
+        ;;
+bfin*-*)
+        ;;
+c4x-*-rtems* | tic4x-*-rtems*)
+	;;
+c4x-* | tic4x-*)
+	;;
+cris-*-aout)
+	;;
+cris-*-elf | cris-*-none)
+	;;
+cris-*-linux*)
+	;;
+crx-*-elf)
+	;;
+fr30-*-elf)
+	;;
+frv-*-elf)
+	;;
+frv-*-*linux*)
+	;;
+h8300-*-rtemscoff*)
+	;;
+h8300-*-rtems*)
+	;;
+h8300-*-elf*)
+	;;
+h8300-*-*)
+	;;
+hppa*64*-*-linux* | parisc*64*-*-linux*)
+	;;
+hppa*-*-linux* | parisc*-*-linux*)
+	;;
+hppa1.1-*-pro*)
+	;;
+hppa1.1-*-osf*)
+	;;
+hppa1.1-*-bsd*)
+	;;
+hppa[12]*-*-hpux10*)
+	;;
+hppa*64*-*-hpux11*)
+	;;
+hppa[12]*-*-hpux11*)
+	;;
+i[34567]86-*-darwin*)
+	;;
+x86_64-*-darwin*)
+	tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin"
+	;;
+i[34567]86-*-elf*)
+	;;
+i[34567]86-sequent-ptx4* | i[34567]86-sequent-sysv4*)
+	;;
+i[34567]86-*-aout*)
+	;;
+i[34567]86-*-beoself* | i[34567]86-*-beos*)
+	;;
+i[34567]86-*-freebsd*)
+	;;
+x86_64-*-freebsd*)
+	;;
+i[34567]86-*-netbsdelf*)
+	;;
+x86_64-*-netbsd*)
+	;;
+i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123])
+	;;
+i[34567]86-*-openbsd*)
+	;;
+i[34567]86-*-coff*)
+	;;
+i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu)
+	;;
+i[34567]86-*-gnu*)
+	;;
+i[34567]86-pc-msdosdjgpp*)
+	;;
+i[34567]86-*-lynxos*)
+	;;
+i[3456x]86-*-netware*)
+	case /${with_ld} in
+	*/nwld)
+	 	tmake_file="${tmake_file} i386/t-nwld"
+		;;
+	esac
+	;;
+i[34567]86-*-nto-qnx*)
+	;;
+i[34567]86-*-rtems*)
+	;;
+i[34567]86-*-sco3.2v5*)	# 80386 running SCO Open Server 5
+	;;
+i[34567]86-*-solaris2*)
+	;;
+i[34567]86-*-sysv5*)           # Intel x86 on System V Release 5
+       ;;
+i[34567]86-*-sysv4*)		# Intel 80386's running system V.4
+	;;
+i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
+	;;
+i[34567]86-*-pe | i[34567]86-*-cygwin*)
+	;;
+i[34567]86-*-mingw32*)
+	;;
+i[34567]86-*-uwin*)
+	;;
+i[34567]86-*-interix3*)
+	;;
+i[34567]86-*-kaos*)
+	;;
+ia64*-*-freebsd*)
+	;;
+ia64*-*-hpux*)
+	;;
+iq2000*-*-elf*)
+        ;;
+m32r-*-elf*)
+ 	;;
+m32rle-*-elf*)
+	;;
+m32r-*-linux*)
+ 	;;
+m32rle-*-linux*)
+	;;
+m68hc11-*-*|m6811-*-*)
+        ;;
+m68hc12-*-*|m6812-*-*)
+        ;;
+m68k-*-aout*)
+	;;
+m68k-*-coff*)
+	;;
+m68020-*-elf* | m68k-*-elf*)
+	;;
+m68010-*-netbsdelf* | m68k*-*-netbsdelf*)
+	;;
+m68k*-*-openbsd*)
+	;;
+m68k-*-uclinux*)		# Motorola m68k/ColdFire running uClinux with uClibc
+	;;
+m68k-*-linux*)		# Motorola m68k's running GNU/Linux
+				# with ELF format using glibc 2
+				# aka the GNU/Linux C library 6.
+	;;
+m68k-*-rtems*)
+	;;
+mcore-*-elf)
+	;;
+mcore-*-pe*)
+	;;
+mips-sgi-irix[56]*)
+	;;
+mips*-*-netbsd*)			# NetBSD/mips, either endian.
+	;;
+mips64*-*-linux*)
+	;;
+mips*-*-openbsd*)
+	;;
+mipsisa32-*-elf* | mipsisa32el-*-elf*)
+	;;
+mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*)
+	;;
+mipsisa64-*-elf* | mipsisa64el-*-elf*)
+	;;
+mipsisa64sr71k-*-elf*)
+        ;;
+mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*)
+	;;
+mips-*-elf* | mipsel-*-elf*)
+	;;
+mips64-*-elf* | mips64el-*-elf*)
+	;;
+mips64vr-*-elf* | mips64vrel-*-elf*)
+        ;;
+mips64orion-*-elf* | mips64orionel-*-elf*)
+	;;
+mips*-*-rtems*)
+	;;
+mips-wrs-vxworks)
+	;;
+mips-wrs-windiss)	# Instruction-level simulator for VxWorks.
+	;;
+mipstx39-*-elf* | mipstx39el-*-elf*)
+	;;
+mmix-knuth-mmixware)
+	;;
+mn10300-*-*)
+	;;
+mt-*-elf)
+        ;;
+ns32k-*-netbsdelf*)
+	echo "GCC does not yet support the ${host} target"; exit 1
+	;;
+ns32k-*-netbsd*)
+	;;
+pdp11-*-bsd)
+        ;;
+pdp11-*-*)
+	;;
+powerpc64-*-linux*)
+	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	;;
+powerpc64-*-gnu*)
+	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-*-beos*)
+	;;
+powerpc-*-darwin*)
+	;;
+powerpc64-*-darwin*)
+	;;
+powerpc*-*-freebsd*)
+	;;
+powerpc-*-netbsd*)
+	;;
+powerpc-*-chorusos*)
+	;;
+powerpc-*-eabispe*)
+	;;
+powerpc-*-eabisimaltivec*)
+	;;
+powerpc-*-eabisim*)
+	;;
+powerpc-*-elf*)
+	;;
+powerpc-*-eabialtivec*)
+	;;
+powerpc-*-eabi*)
+	;;
+powerpc-*-rtems*)
+	;;
+powerpc-*-linux*altivec*)
+	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-*-linux*spe*)
+	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-*-linux*)
+	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-*-gnu-gnualtivec*)
+	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-*-gnu*)
+	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	;;
+powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
+	;;
+powerpc-wrs-windiss*)  # Instruction-level simulator for VxWorks.
+	;;
+powerpc-*-lynxos*)
+	;;
+powerpcle-*-sysv*)
+	;;
+powerpcle-*-elf*)
+	;;
+powerpcle-*-eabisim*)
+	;;
+powerpcle-*-eabi*)
+	;;
+powerpc-*-kaos*)
+	;;
+powerpcle-*-kaos*)
+	;;
+rs6000-ibm-aix4.[12]* | powerpc-ibm-aix4.[12]*)
+	;;
+rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*)
+	;;
+rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
+	;;
+rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
+	;;
+s390-*-linux*)
+	;;
+s390x-*-linux*)
+	;;
+s390x-ibm-tpf*)
+	;;
+score-*-elf)
+        ;;
+sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \
+sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+  sh-*-linux* | sh[346lbe]*-*-linux* | \
+  sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+   sh64-*-netbsd* | sh64l*-*-netbsd*)
+	;;
+sh-*-rtemscoff*)
+	;;
+sh-*-rtems*)
+	;;
+sh-wrs-vxworks)
+	;;
+sh-*-*)
+	;;
+sparc-*-netbsdelf*)
+	;;
+sparc64-*-openbsd*)
+	;;
+sparc-*-elf*)
+	;;
+sparc-*-linux*)		# SPARC's running GNU/Linux, libc6
+	;;
+sparc-*-rtems*)
+	;;
+sparc64-*-solaris2* | sparcv9-*-solaris2*)
+	;;
+sparc-*-sysv4*)
+	;;
+sparc64-*-elf*)
+	;;
+sparc64-*-freebsd*|ultrasparc-*-freebsd*)
+	;;
+sparc64-*-linux*)		# 64-bit SPARC's running GNU/Linux
+	;;
+sparc64-*-netbsd*)
+	;;
+spu-*-elf*)
+	;;
+strongarm-*-elf*)
+	;;
+strongarm-*-pe)
+	;;
+strongarm-*-kaos*)
+	;;
+v850e1-*-*)
+	;;
+v850e-*-*)
+	;;
+v850-*-*)
+	;;
+vax-*-bsd*)			# VAXen running BSD
+	;;
+vax-*-sysv*)			# VAXen running system V
+	;;
+vax-*-netbsdelf*)
+	;;
+vax-*-netbsd*)
+	;;
+vax-*-openbsd*)
+	;;
+vax-*-ultrix*)			# VAXen running ultrix
+	;;
+xscale-*-elf)
+	;;
+xscale-*-coff)
+	;;
+xstormy16-*-elf)
+	;;
+xtensa-*-elf*)
+	;;
+xtensa-*-linux*)
+	;;
+am33_2.0-*-linux*)
+	;;
+m32c-*-elf*)
+ 	;;
+*)
+	echo "*** Configuration ${host} not supported" 1>&2
+	exit 1
+	;;
+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-19 13:15:01.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.host
+
+# Conditionalize the makefile for this target machine.
+tmake_file_=
+for f in ${tmake_file}
+do
+	if test -f ${srcdir}/config/$f
+	then
+		tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
+	fi
+done
+tmake_file="${tmake_file_}"
+AC_SUBST(tmake_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

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-19 19:18   ` Daniel Jacobowitz
@ 2006-12-19 20:06     ` Paolo Bonzini
  2006-12-19 20:26       ` Daniel Jacobowitz
  2006-12-20  0:23       ` Mike Stump
  2006-12-29 11:27     ` Paolo Bonzini
  1 sibling, 2 replies; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-19 20:06 UTC (permalink / raw)
  To: Paolo Bonzini, gcc-patches, Mark Mitchell

> Good job picking out this issue :-)  Indeed, the first target to move
> EXTRA_PARTS may not be trivial because of the way we currently recurse
> into the gcc subdirectory to build them.  I think that to do this, we
> will have to build extra startfiles twice, once in the libgcc objdir
> and once in the gcc objdir, until all targets are migrated.

I will probably understand more about why when I have read the libgcc 
makefile.

> That's not too difficult, but it will be a little touchy.  I'll try it
> later - I'd prefer to do that next after committing libgcc.

If possible, I would like a proof of concept that it is possible to 
migrate the building of the extra parts incrementally without breaking 
non-converted targets, before committing (unless another maintainer 
overrules me).

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-19 20:06     ` Paolo Bonzini
@ 2006-12-19 20:26       ` Daniel Jacobowitz
  2006-12-20  7:56         ` Paolo Bonzini
  2006-12-20  0:23       ` Mike Stump
  1 sibling, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-19 20:26 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell

On Tue, Dec 19, 2006 at 09:06:06PM +0100, Paolo Bonzini wrote:
> >That's not too difficult, but it will be a little touchy.  I'll try it
> >later - I'd prefer to do that next after committing libgcc.
> 
> If possible, I would like a proof of concept that it is possible to 
> migrate the building of the extra parts incrementally without breaking 
> non-converted targets, before committing (unless another maintainer 
> overrules me).

OK, I'll do that (later).

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-19 20:06     ` Paolo Bonzini
  2006-12-19 20:26       ` Daniel Jacobowitz
@ 2006-12-20  0:23       ` Mike Stump
  2006-12-20  0:35         ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Mike Stump @ 2006-12-20  0:23 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gcc-patches@gcc.gnu.org Patches

On Dec 19, 2006, at 12:06 PM, Paolo Bonzini wrote:
> If possible, I would like a proof of concept that it is possible to  
> migrate the building of the extra parts incrementally without  
> breaking non-converted targets, before committing (unless another  
> maintainer overrules me).

One other random comment, I'd be nice to be able to do an rm -rf gcc  
and build just libgcc, quickly, with the installed gcc compiler...   
Same goes for all the runtime libraries.  Initially, would be nice to  
pick a trivial target and flex the mechanism to be able to work in  
this fashion for that one target.

Around here, we have to ship the shared libraries with the OS, so  
people can build and deploy gcc compiled software, and yet, we have  
more frequent tools releases that just ship gcc, without the shared  
libraries.  We pick up extra `new' functionality with the .a library,  
while most of the symbols are resolved against the installed runtime  
library on the system.  We don't install abi unstable libraries as  
shared libraries on the system to avoid abi breakages.

I don't think the current work should be held up for this, just  
stating a direction to go for people to think about.

Anyway, thanks for all your hard work.

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-20  0:23       ` Mike Stump
@ 2006-12-20  0:35         ` Daniel Jacobowitz
  0 siblings, 0 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-20  0:35 UTC (permalink / raw)
  To: Mike Stump; +Cc: gcc-patches@gcc.gnu.org Patches

On Tue, Dec 19, 2006 at 04:22:35PM -0800, Mike Stump wrote:
> One other random comment, I'd be nice to be able to do an rm -rf gcc  
> and build just libgcc, quickly, with the installed gcc compiler...   
> Same goes for all the runtime libraries.  Initially, would be nice to  
> pick a trivial target and flex the mechanism to be able to work in  
> this fashion for that one target.

Yes, this is already my plan.  It is not going to happen too quickly,
but if someone works on it for a particular target - trivial or not -
it shouldn't be too hard to do.  You'd think the tricky part would be
handling shared libgcc, but actually I've already moved a sizeable
chunk of the shared libgcc code to the new directory.

Bootstrapping an entire GNU/Linux target system right now involves
several builds of GCC - as many as three.  I want to cut that down,
build the compiler first and at most a preliminary libgcc, and then
rebuild libgcc after glibc.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-19 20:26       ` Daniel Jacobowitz
@ 2006-12-20  7:56         ` Paolo Bonzini
  2006-12-29  2:09           ` Daniel Jacobowitz
  0 siblings, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-20  7:56 UTC (permalink / raw)
  To: gcc-patches, Daniel Jacobowitz; +Cc: Mark Mitchell

>> If possible, I would like a proof of concept that it is possible to 
>> migrate the building of the extra parts incrementally without breaking 
>> non-converted targets, before committing (unless another maintainer 
>> overrules me).
> 
> OK, I'll do that (later).

Just to make it clearer, I'm ok with having to convert a directory at a 
time (arm, rs6000, i386, ...).  So, if your proof-of-concept works only 
with one target, but breaks only those targets that share the same cpu 
directory, I'm fine with this.

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-20  7:56         ` Paolo Bonzini
@ 2006-12-29  2:09           ` Daniel Jacobowitz
  2006-12-29 10:55             ` Paolo Bonzini
  0 siblings, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-29  2:09 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell

[-- Attachment #1: Type: text/plain, Size: 1525 bytes --]

On Wed, Dec 20, 2006 at 08:56:39AM +0100, Paolo Bonzini wrote:
> >>If possible, I would like a proof of concept that it is possible to 
> >>migrate the building of the extra parts incrementally without breaking 
> >>non-converted targets, before committing (unless another maintainer 
> >>overrules me).
> >
> >OK, I'll do that (later).
> 
> Just to make it clearer, I'm ok with having to convert a directory at a 
> time (arm, rs6000, i386, ...).  So, if your proof-of-concept works only 
> with one target, but breaks only those targets that share the same cpu 
> directory, I'm fine with this.

I'd rather have it break nothing.  So that's what I did.  Of course,
the risk of collateral damage here is quite high; our configuration is
a terrible maze today.  So, I have not removed any information about
which startfiles to build from the gcc directory yet.  If information
is provided by both the gcc and libgcc configury, then they are
compared and there will be loud failure if they differ.

The attached two patches correct some omissions in my previous
config.host file, and move building of EXTRA_PARTS to the libgcc
subdirectory for all GNU/Linux targets.  It involves updating
config.host to indicate which parts, and adding the necessary
rules.  The rules are similar to the ones in gcc/ with only
minor adjustments (for automatic dependency tracking, using $(CC),
removal of $(T), et cetera).  It's easy to do other targets.

Both patches committed to the branch.  Look good?

-- 
Daniel Jacobowitz
CodeSourcery

[-- Attachment #2: libgcc-extra-targets.patch --]
[-- Type: text/x-diff, Size: 1380 bytes --]

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

	* config.host: Add missed targets.

--- config.host	(revision 120094)
+++ config.host	(local)
@@ -162,6 +162,8 @@ case ${host} in
   ;;
 *-*-vxworks*)
   ;;
+*-*-elf)
+  ;;
 esac
 
 case ${host} in
@@ -214,6 +216,8 @@ arm*-*-eabi* | arm*-*-symbianelf* )
 	;;
 arm*-*-rtems*)
 	;;
+arm*-*-elf | ep9312-*-elf)
+	;;
 arm*-wince-pe*)
 	;;
 arm-*-pe*)
@@ -291,6 +295,8 @@ x86_64-*-freebsd*)
 	;;
 i[34567]86-*-netbsdelf*)
 	;;
+i[34567]86-*-netbsd*)
+	;;
 x86_64-*-netbsd*)
 	;;
 i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123])
@@ -301,6 +307,8 @@ i[34567]86-*-coff*)
 	;;
 i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu)
 	;;
+x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
+	;;
 i[34567]86-*-gnu*)
 	;;
 i[34567]86-pc-msdosdjgpp*)
@@ -338,8 +346,12 @@ i[34567]86-*-interix3*)
 	;;
 i[34567]86-*-kaos*)
 	;;
+ia64*-*-elf*)
+	;;
 ia64*-*-freebsd*)
 	;;
+ia64*-*-linux*)
+	;;
 ia64*-*-hpux*)
 	;;
 iq2000*-*-elf*)
@@ -384,6 +396,8 @@ mips*-*-netbsd*)			# NetBSD/mips, either
 	;;
 mips64*-*-linux*)
 	;;
+mips*-*-linux*)				# Linux MIPS, either endian.
+	;;
 mips*-*-openbsd*)
 	;;
 mipsisa32-*-elf* | mipsisa32el-*-elf*)
@@ -534,6 +548,8 @@ sparc-*-rtems*)
 	;;
 sparc64-*-solaris2* | sparcv9-*-solaris2*)
 	;;
+sparc-*-solaris2*)
+	;;
 sparc-*-sysv4*)
 	;;
 sparc64-*-elf*)

[-- Attachment #3: libgcc-move-crtbegin.patch --]
[-- Type: text/x-diff, Size: 15077 bytes --]

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

	* Makefile.in (GCC_EXTRA_PARTS): New.
	(libgcc.mvars): Use it.  Also record CRTSTUFF_CFLAGS,
	CRTSTUFF_T_CFLAGS, and CRTSTUFF_T_CFLAGS_S.

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

	* Makefile.in (EXTRA_PARTS, compile_deps): New.
	(GCC_EXTRA_PARTS): Renamed from EXTRA_MULTILIB_PARTS.
	(gcc_compile): Use compile_deps.
	(ALL_CRT_CFLAGS, crt_compile, INSTALL_PARTS): New.
	(gcc-extra-parts): Renamed from extra-parts.
	(extra-parts, crtbegin.o, crtbeginS.o, crtbeginT.o, crtend.o)
	(crtendS.o): New rules.
	(intstall): Use INSTALL_PARTS.
	* config/i386/t-crtfm, config/alpha/t-crtfm, config/ia64/t-ia64,
	libgcc/config/sparc/t-crtfm: New files.
	* config.host (extra_parts): New variable.  Set it and tmake_file in
	various GNU/Linux configurations.
	* configure.ac: Substitute extra_parts.
	* configure: Regenerated.

--- gcc/Makefile.in	(revision 120285)
+++ gcc/Makefile.in	(local)
@@ -1409,6 +1409,10 @@ LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
 srcdirify = $(patsubst $(srcdir)%,$$(gcc_srcdir)%,$(filter $(srcdir)%,$(1))) \
             $(patsubst %,$$(gcc_objdir)/%,$(filter-out $(srcdir)%,$(1)))
 
+# The distinction between these two variables is no longer relevant,
+# so we combine them.  Sort removes duplicates.
+GCC_EXTRA_PARTS := $(sort $(EXTRA_MULTILIB_PARTS) $(EXTRA_PARTS))
+
 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)
@@ -1445,8 +1449,7 @@ libgcc.mvars: config.status Makefile $(L
 	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 GCC_EXTRA_PARTS = '$(GCC_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
@@ -1456,6 +1459,9 @@ libgcc.mvars: config.status Makefile $(L
 	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
+	echo CRTSTUFF_CFLAGS = '$(CRTSTUFF_CFLAGS)' >> tmp-libgcc.mvars
+	echo CRTSTUFF_T_CFLAGS = '$(CRTSTUFF_T_CFLAGS)' >> tmp-libgcc.mvars
+	echo CRTSTUFF_T_CFLAGS_S = '$(CRTSTUFF_T_CFLAGS_S)' >> tmp-libgcc.mvars
 
 	mv tmp-libgcc.mvars libgcc.mvars
 
--- libgcc/Makefile.in	(revision 120285)
+++ libgcc/Makefile.in	(local)
@@ -38,6 +38,10 @@ decimal_float = @decimal_float@
 
 host_noncanonical = @host_noncanonical@
 
+# List of extra object files that should be compiled for this target machine.
+# The rules for compiling them should be in the t-* file for the machine.
+EXTRA_PARTS = @extra_parts@
+
 # Multilib support variables.
 MULTISRCTOP =
 MULTIBUILDTOP =
@@ -203,7 +207,8 @@ 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
+compile_deps = -MT $@ -MD -MP -MF $(basename $@).dep
+gcc_compile = $(gcc_compile_bare) -o $@ $(compile_deps)
 gcc_s_compile = $(gcc_compile) -DSHARED
 
 objects = $(filter %$(objext),$^)
@@ -269,11 +274,12 @@ 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),)
+ifneq ($(EXTRA_PARTS),)
   extra-parts = extra-parts
+else
+ifneq ($(GCC_EXTRA_PARTS),)
+  extra-parts = gcc-extra-parts
+endif
 endif
 
 # Library members defined in libgcc2.c.
@@ -647,10 +653,66 @@ libunwind$(SHLIB_EXT): $(libunwind-s-obj
 
 endif
 
-extra-parts:
+# Build the standard GCC startfiles and endfiles.
+ALL_CRT_CFLAGS = $(CFLAGS) $(CRTSTUFF_CFLAGS) $(INCLUDES)
+crt_compile = $(CC) $(ALL_CRT_CFLAGS) -o $@ $(compile_deps)
+
+ifeq ($(CUSTOM_CRTSTUFF),)
+crtbegin.o: $(gcc_srcdir)/crtstuff.c
+	$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
+	  -c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN
+
+crtend.o: $(gcc_srcdir)/crtstuff.c
+	$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
+	  -c $(gcc_srcdir)/crtstuff.c -DCRT_END
+
+# These are versions of crtbegin and crtend for shared libraries.
+crtbeginS.o: $(gcc_srcdir)/crtstuff.c
+	$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) \
+	  -c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O
+
+crtendS.o: $(gcc_srcdir)/crtstuff.c
+	$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) \
+	  -c $(gcc_srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O
+
+# This is a version of crtbegin for -static links.
+crtbeginT.o: $(gcc_srcdir)/crtstuff.c
+	$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
+	  -c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O
+endif
+
+# Build extra startfiles in the libgcc directory.
+extra-parts: $(EXTRA_PARTS)
+ifneq ($(GCC_EXTRA_PARTS),)
+ifneq ($(sort $(EXTRA_PARTS)),$(GCC_EXTRA_PARTS))
+	# If the gcc directory specifies which extra parts to
+	# build for this target, and the libgcc configuration also
+	# specifies, make sure they match.  This can be removed
+	# when the gcc directory no longer holds libgcc configuration;
+	# it is useful when migrating a target.
+	@echo "Configuration mismatch!"
+	@echo "Extra parts from gcc directory: $(GCC_EXTRA_PARTS)"
+	@echo "Extra parts from libgcc: $(EXTRA_PARTS)"
+	exit 1
+endif
+endif
+
+	# 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)
+	parts="$(EXTRA_PARTS)";					\
+	for file in $$parts; do					\
+	  rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file;		\
+	  $(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/;	\
+	done
+
+# Build extra startfiles in the gcc directory, for unconverted
+# targets.
+gcc-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,
+	# it all the GCC_EXTRA_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
@@ -664,18 +726,17 @@ extra-parts:
 	&& $(MAKE) GCC_FOR_TARGET="$(CC)" \
 	  MULTILIB_CFLAGS="$(CFLAGS)" \
 	  T=$$T \
-	  T_TARGET="$(patsubst %,$${T}%,$(EXTRA_MULTILIB_PARTS))" \
+	  T_TARGET="$(patsubst %,$${T}%,$(GCC_EXTRA_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;							\
+	parts="$(GCC_EXTRA_PARTS)";				\
+	for file in $$parts; do					\
+	  rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file;		\
+	  $(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/;	\
 	done
 
 all: $(extra-parts)
@@ -706,6 +767,12 @@ install-shared:
 		@shlib_base_name@,libgcc_s,$(subst \
 		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
 
+ifneq ($(EXTRA_PARTS),)
+  INSTALL_PARTS = $(EXTRA_PARTS)
+else
+  INSTALL_PARTS = $(GCC_EXTRA_PARTS)
+endif
+
 install: $(install-shared) $(install-libunwind)
 	$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
 
@@ -716,11 +783,10 @@ install: $(install-shared) $(install-lib
 	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;							\
+	parts="$(INSTALL_PARTS)";				\
+	for file in $$parts; do					\
+	  rm -f $(DESTDIR)$(inst_libdir)/$$file;		\
+	  $(INSTALL_DATA) $$file $(DESTDIR)$(inst_libdir)/;	\
 	done
 
 .PHONY: install install-shared install-libunwind
--- libgcc/config/i386/t-crtfm	(revision 120285)
+++ libgcc/config/i386/t-crtfm	(local)
@@ -0,0 +1,2 @@
+crtfastmath.o: $(gcc_srcdir)/config/i386/crtfastmath.c
+	$(gcc_compile) -msse -c $(gcc_srcdir)/config/i386/crtfastmath.c
--- libgcc/config/alpha/t-crtfm	(revision 120285)
+++ libgcc/config/alpha/t-crtfm	(local)
@@ -0,0 +1,6 @@
+# FIXME drow/20061228 - I have preserved this -frandom-seed option
+# while migrating this rule from the GCC directory, but I do not
+# know why it is necessary if no other crt file uses it.
+crtfastmath.o: $(gcc_srcdir)/config/alpha/crtfastmath.c
+	$(gcc_compile) -frandom-seed=gcc-crtfastmath -c \
+		$(gcc_srcdir)/config/alpha/crtfastmath.c
--- libgcc/config/ia64/t-ia64	(revision 120285)
+++ libgcc/config/ia64/t-ia64	(local)
@@ -0,0 +1,18 @@
+CUSTOM_CRTSTUFF = yes
+
+# Assemble startup files.
+crtbegin.o: $(gcc_srcdir)/config/ia64/crtbegin.asm
+	$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+		-o $@ $(gcc_srcdir)/config/ia64/crtbegin.asm
+crtend.o: $(gcc_srcdir)/config/ia64/crtend.asm
+	$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+		-o $@ $(gcc_srcdir)/config/ia64/crtend.asm
+crtbeginS.o: $(gcc_srcdir)/config/ia64/crtbegin.asm
+	$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+		-o $@ -DSHARED $(gcc_srcdir)/config/ia64/crtbegin.asm
+crtendS.o: $(gcc_srcdir)/config/ia64/crtend.asm
+	$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+		-o $@ -DSHARED $(gcc_srcdir)/config/ia64/crtend.asm
+
+crtfastmath.o: $(gcc_srcdir)/config/ia64/crtfastmath.c
+	$(gcc_compile) -c $(gcc_srcdir)/config/ia64/crtfastmath.c
--- libgcc/config/sparc/t-crtfm	(revision 120285)
+++ libgcc/config/sparc/t-crtfm	(local)
@@ -0,0 +1,2 @@
+crtfastmath.o: $(gcc_srcdir)/config/sparc/crtfastmath.c
+	$(gcc_compile) -c $(gcc_srcdir)/config/sparc/crtfastmath.c
--- libgcc/config.host	(revision 120285)
+++ libgcc/config.host	(local)
@@ -41,10 +41,17 @@
 #
 #  cpu_type		The name of the cpu, if different from the first
 #			chunk of the canonical host name.
+#  extra_parts		List of extra object files that should be compiled
+#			for this target machine.  This may be overridden
+#			by setting EXTRA_PARTS in a tmake_file fragment.
+#			If either is set, EXTRA_PARTS and
+#			EXTRA_MULTILIB_PARTS inherited from the GCC
+#			subdirectory will be ignored.
 #  tmake_file		A list of machine-description-specific
 #			makefile-fragments, if different from
 #			"$cpu_type/t-$cpu_type".
 
+extra_parts=
 tmake_file=
 
 # Set default cpu_type so it can be updated in each machine entry.
@@ -151,6 +158,7 @@ case ${host} in
   ;;
 *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
   # Must come before *-*-gnu* (because of *-*-linux-gnu* systems).
+  extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
   ;;
 *-*-gnu*)
   ;;
@@ -177,6 +185,7 @@ case ${host} in
 alpha*-*-unicosmk*)
 	;;
 alpha*-*-linux*)
+	tmake_file="${tmake_file} alpha/t-crtfm"
 	;;
 alpha*-*-gnu*)
 	;;
@@ -306,8 +315,12 @@ i[34567]86-*-openbsd*)
 i[34567]86-*-coff*)
 	;;
 i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu)
+	extra_parts="$extra_parts crtfastmath.o"
+	tmake_file="${tmake_file} i386/t-crtfm"
 	;;
 x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
+	extra_parts="$extra_parts crtfastmath.o"
+	tmake_file="${tmake_file} i386/t-crtfm"
 	;;
 i[34567]86-*-gnu*)
 	;;
@@ -351,6 +364,7 @@ ia64*-*-elf*)
 ia64*-*-freebsd*)
 	;;
 ia64*-*-linux*)
+	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
 	;;
 ia64*-*-hpux*)
 	;;
@@ -543,6 +557,8 @@ sparc64-*-openbsd*)
 sparc-*-elf*)
 	;;
 sparc-*-linux*)		# SPARC's running GNU/Linux, libc6
+	extra_parts="$extra_parts crtfastmath.o"
+	tmake_file="${tmake_file} sparc/t-crtfm"
 	;;
 sparc-*-rtems*)
 	;;
@@ -557,6 +573,8 @@ sparc64-*-elf*)
 sparc64-*-freebsd*|ultrasparc-*-freebsd*)
 	;;
 sparc64-*-linux*)		# 64-bit SPARC's running GNU/Linux
+	extra_parts="$extra_parts crtfastmath.o"
+	tmake_file="${tmake_file} sparc/t-crtfm"
 	;;
 sparc64-*-netbsd*)
 	;;
@@ -597,6 +615,7 @@ xtensa-*-elf*)
 xtensa-*-linux*)
 	;;
 am33_2.0-*-linux*)
+	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
 	;;
 m32c-*-elf*)
  	;;
--- libgcc/configure	(revision 120285)
+++ libgcc/configure	(local)
@@ -272,7 +272,7 @@ PACKAGE_STRING='GNU C Runtime Library 1.
 PACKAGE_BUGREPORT=''
 
 ac_unique_file="static-object.mk"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float tmake_file LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float tmake_file extra_parts LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -3247,6 +3247,9 @@ done
 tmake_file="${tmake_file_}"
 
 
+# Substitute configuration variables
+
+
 # We need multilib support.
           ac_config_files="$ac_config_files Makefile"
 
@@ -3945,6 +3948,7 @@ s,@OBJEXT@,$OBJEXT,;t t
 s,@CPP@,$CPP,;t t
 s,@decimal_float@,$decimal_float,;t t
 s,@tmake_file@,$tmake_file,;t t
+s,@extra_parts@,$extra_parts,;t t
 s,@LIBOBJS@,$LIBOBJS,;t t
 s,@LTLIBOBJS@,$LTLIBOBJS,;t t
 CEOF
--- libgcc/configure.ac	(revision 120285)
+++ libgcc/configure.ac	(local)
@@ -111,6 +111,9 @@ done
 tmake_file="${tmake_file_}"
 AC_SUBST(tmake_file)
 
+# Substitute configuration variables
+AC_SUBST(extra_parts)
+
 # We need multilib support.
 AC_CONFIG_FILES([Makefile])
 AC_CONFIG_COMMANDS([default],

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29  2:09           ` Daniel Jacobowitz
@ 2006-12-29 10:55             ` Paolo Bonzini
  0 siblings, 0 replies; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-29 10:55 UTC (permalink / raw)
  To: gcc-patches, Mark Mitchell, Daniel Jacobowitz

Daniel Jacobowitz wrote:
> On Wed, Dec 20, 2006 at 08:56:39AM +0100, Paolo Bonzini wrote:
>>>> If possible, I would like a proof of concept that it is possible to 
>>>> migrate the building of the extra parts incrementally without breaking 
>>>> non-converted targets, before committing (unless another maintainer 
>>>> overrules me).
>>> OK, I'll do that (later).
>> Just to make it clearer, I'm ok with having to convert a directory at a 
>> time (arm, rs6000, i386, ...).  So, if your proof-of-concept works only 
>> with one target, but breaks only those targets that share the same cpu 
>> directory, I'm fine with this.
> 
> I'd rather have it break nothing.  So that's what I did.  Of course,
> the risk of collateral damage here is quite high; our configuration is
> a terrible maze today.  So, I have not removed any information about
> which startfiles to build from the gcc directory yet.  If information
> is provided by both the gcc and libgcc configury, then they are
> compared and there will be loud failure if they differ.
> 
> The attached two patches correct some omissions in my previous
> config.host file, and move building of EXTRA_PARTS to the libgcc
> subdirectory for all GNU/Linux targets.  It involves updating
> config.host to indicate which parts, and adding the necessary
> rules.  The rules are similar to the ones in gcc/ with only
> minor adjustments (for automatic dependency tracking, using $(CC),
> removal of $(T), et cetera).  It's easy to do other targets.
> 
> Both patches committed to the branch.  Look good?

Yes (I am reviewing now the libgcc configury itself, but it looks 
promising), but with a few changes:

1) extra_parts
	List of extra object files that should be compiled
	for this target machine.
	This may be overridden by setting EXTRA_PARTS
	in a tmake_file fragment.

Any good reason to allow both two possibilities?  What about complaining 
loudly if EXTRA_PARTS is set by the tmake_file?

2) No need for the extra-parts variable, which is a bit confusing 
because of the confusion with extra_parts.  You can instead do this:

ifneq ($(EXTRA_PARTS),)
   all: extra-parts
else
ifneq ($(GCC_EXTRA_PARTS),)
   all: gcc-extra-parts
endif

3) You have this

+ifneq ($(EXTRA_PARTS),)
+  INSTALL_PARTS = $(EXTRA_PARTS)
+else
+  INSTALL_PARTS = $(GCC_EXTRA_PARTS)
+endif
+

I'd rather merge the setting of INSTALL_PARTS with the setting of 
extra-parts above, like this:

ifneq ($(EXTRA_PARTS),)
   all: extra-parts
   INSTALL_PARTS = $(EXTRA_PARTS)
else
ifneq ($(GCC_EXTRA_PARTS),)
   all: gcc-extra-parts
   INSTALL_PARTS = $(GCC_EXTRA_PARTS)
endif

3) No blank line here:

+	exit 1
+endif
+endif
+
+	# Early copyback; see "all" above for the rationale.  The

Thanks,

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-19 19:18   ` Daniel Jacobowitz
  2006-12-19 20:06     ` Paolo Bonzini
@ 2006-12-29 11:27     ` Paolo Bonzini
  2006-12-29 14:50       ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-29 11:27 UTC (permalink / raw)
  To: Paolo Bonzini, gcc-patches, Mark Mitchell, Daniel Jacobowitz

> +.PHONY: check installcheck
> +check: check-subdir
> +installcheck: installcheck-subdir

Why the dependencies?

> 
> +# 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

This is a good candidate to be set in config.host (only Darwin
sets it, and it's already converted to toplevel libgcc) instead
of the Makefile.


> +# 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)))

Consider moving this to configure.ac, after the config.host fragment. 
You can reuse some code in libffi's configure.ac, like this:

AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
     libgcc_cv_hidden_visibility_attribute, [
         echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { 
return 1; }' > conftest.c
         libgcc_cv_hidden_visibility_attribute=no
         if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 
1>&AS_MESSAGE_LOG_FD); then
             if grep "\\$ASM_HIDDEN_OP.*foo' conftest.s >/dev/null; then
                 libgcc_cv_hidden_visibility_attribute=yes
             fi
         fi
         rm -f conftest.*
     ])

if test $libgcc_cv_hidden_visibility_attribute = yes; then
     vis_hide='-fvisibility=hidden -DHIDE_EXPORTS'
else
     vis_hide=
fi
AC_SUBST(vis_hide)


> +ifeq ($(LIB2_SIDITI_CONV_FUNCS),)
> +  lib2funcs += $(subst XX,si,$(swfloatfuncs))
> +  lib2funcs += $(subst XX,di,$(dwfloatfuncs))
> +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))

Please extract [sdt]ifuncs out of the if, and use a single 
ifeq/else/endif for both cases.


> +$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s.o
> +	$(gen-hide-list)

Replace .o with $(objext).



> +libgcc.a libgcov.a libunwind.a libgcc_eh.a:
> +	-rm -f $@
> +
> +	objects="$(objects)";	

No blank lines (i.e. no lines with the tab only).


> +all: $(HOST_EXTRA)
> +install: $(HOST_EXTRA_INSTALL)
> +

Just add the dependencies in the target fragment.

It's ok if you post only an incremental patch, rather than the whole 
stuff again.

Thanks!

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 11:27     ` Paolo Bonzini
@ 2006-12-29 14:50       ` Daniel Jacobowitz
  2006-12-29 15:29         ` Paolo Bonzini
  0 siblings, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-29 14:50 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell

On Fri, Dec 29, 2006 at 12:27:42PM +0100, Paolo Bonzini wrote:
> Why the dependencies?

Stray copy from libiberty.  Fixed.

> This is a good candidate to be set in config.host (only Darwin
> sets it, and it's already converted to toplevel libgcc) instead
> of the Makefile.

OK.

> Consider moving this to configure.ac, after the config.host fragment. 
> You can reuse some code in libffi's configure.ac, like this:

OK.

> >+ifeq ($(LIB2_SIDITI_CONV_FUNCS),)
> >+  lib2funcs += $(subst XX,si,$(swfloatfuncs))
> >+  lib2funcs += $(subst XX,di,$(dwfloatfuncs))
> >+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))
> 
> Please extract [sdt]ifuncs out of the if, and use a single 
> ifeq/else/endif for both cases.

I've declined to make this change.  I think it's a bad idea.  The first
if statement can't move lower in the file, because it has to preceed
the filtering of lib2funcs.  The second if statement shouldn't move
higher in the file, because it's custom rules for building a part of
libgcc; it should stay with the other custom rules.  Makefiles are
hard enough to read without mixing up the pieces, IMO.

> >+$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s.o
> >+	$(gen-hide-list)
> 
> Replace .o with $(objext).

OK, though there's little point - nothing anywhere in all of gcc
sets it to anything else.

> >+libgcc.a libgcov.a libunwind.a libgcc_eh.a:
> >+	-rm -f $@
> >+
> >+	objects="$(objects)";	
> 
> No blank lines (i.e. no lines with the tab only).

It doesn't have a tab.  You don't need one; completely blank lines are
ignored by make.  Do you really want me to remove the blank lines?  I
think they make it more readable.

> >+all: $(HOST_EXTRA)
> >+install: $(HOST_EXTRA_INSTALL)
> >+
> 
> Just add the dependencies in the target fragment.

OK.

I'm combining this with changes for your other message.

1) Re extra_parts, I allowed tmake_file fragments to set it for easier
conversion from gcc, because that's what the GCC subdirectory did.  I'm
trying to keep conversion simple for now.  It's an easy mechanical
cleanup later.

2) The extra-parts variable is necessary because all isn't the only
thing to depend on it - the shared libraries do too and there's an
extra enable_shared conditional there.  It would be possible to rework
this, but I think it's much simpler the way it is.  There's an easy
way to disambiguate it though; I renamed extra-parts: to
libgcc-extra-parts:.

3) I moved INSTALL_PARTS up.

3 again) See above for my opinion on that blank line.

Here's the incremental diff.  I built and inspected libgcc on
x86_64-linux.

-- 
Daniel Jacobowitz
CodeSourcery

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

	* Makefile.in (libgcc.mvars): Don't record ASM_HIDDEN_OP.

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

	* Makefile.in (check, installcheck): Remove dependencies.
	(vis_hide, ASM_HIDDEN_OP): Move to configure script.
	(libgcc-extra-parts): Rename from extra-parts.  Add .PHONY.
	(INSTALL_PARTS): Move higher.
	(all, install): Remove HOST_EXTRA and HOST_EXTRA_INSTALL
	dependencies.
	(LIB1ASMFUNCS, crtbegin.o, crtend.o, crtbeginS.o, crtendS.o)
	(crtbeginT.o): Use $(objext).
	(gcc-extra-parts): Add .PHONY.
	* config/t-slibgcc-darwin (ASM_HIDDEN_OP): Deleted.
	(HOST_EXTRA, HOST_EXTRA_INSTALL): Replace with dependencies.
	* config.host: Add asm_hidden_op.
	* configure.ac: Check for visibility.  Substitute asm_hidden_op.
	* configure: Regenerated.

--- gcc/Makefile.in	(revision 120294)
+++ gcc/Makefile.in	(local)
@@ -1457,7 +1457,6 @@ libgcc.mvars: config.status Makefile $(L
 	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
 	echo CRTSTUFF_CFLAGS = '$(CRTSTUFF_CFLAGS)' >> tmp-libgcc.mvars
 	echo CRTSTUFF_T_CFLAGS = '$(CRTSTUFF_T_CFLAGS)' >> tmp-libgcc.mvars
--- libgcc/Makefile.in	(revision 120294)
+++ libgcc/Makefile.in	(local)
@@ -107,8 +107,8 @@ all-multi:
 	@: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
 
 .PHONY: check installcheck
-check: check-subdir
-installcheck: installcheck-subdir
+check:
+installcheck:
 
 .PHONY: all clean
 
@@ -233,30 +233,16 @@ ifeq ($(enable_shared),yes)
     install-libunwind = install-libunwind
   endif
 
-# Test -fvisibility=hidden.  We need both a -fvisibility=hidden on
+# For -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)))
+# overriding that with #pragmas.
+vis_hide = @vis_hide@
 
 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
+# lists for object files implemented in assembly.
+ASM_HIDDEN_OP = @asm_hidden_op@
 
 define gen-hide-list
 $(NM) -pg $< | \
@@ -275,10 +261,12 @@ gen-hide-list = echo > \$@
 endif
 
 ifneq ($(EXTRA_PARTS),)
-  extra-parts = extra-parts
+  extra-parts = libgcc-extra-parts
+  INSTALL_PARTS = $(EXTRA_PARTS)
 else
 ifneq ($(GCC_EXTRA_PARTS),)
   extra-parts = gcc-extra-parts
+  INSTALL_PARTS = $(GCC_EXTRA_PARTS)
 endif
 endif
 
@@ -311,10 +299,6 @@ endif
 # 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.
@@ -329,7 +313,7 @@ lib1asmfuncs-o = $(patsubst %,%$(objext)
 $(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
+$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s$(objext)
 	$(gen-hide-list)
 libgcc-objects += $(lib1asmfuncs-o)
 
@@ -658,20 +642,20 @@ ALL_CRT_CFLAGS = $(CFLAGS) $(CRTSTUFF_CF
 crt_compile = $(CC) $(ALL_CRT_CFLAGS) -o $@ $(compile_deps)
 
 ifeq ($(CUSTOM_CRTSTUFF),)
-crtbegin.o: $(gcc_srcdir)/crtstuff.c
+crtbegin$(objext): $(gcc_srcdir)/crtstuff.c
 	$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
 	  -c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN
 
-crtend.o: $(gcc_srcdir)/crtstuff.c
+crtend$(objext): $(gcc_srcdir)/crtstuff.c
 	$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
 	  -c $(gcc_srcdir)/crtstuff.c -DCRT_END
 
 # These are versions of crtbegin and crtend for shared libraries.
-crtbeginS.o: $(gcc_srcdir)/crtstuff.c
+crtbeginS$(objext): $(gcc_srcdir)/crtstuff.c
 	$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) \
 	  -c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O
 
-crtendS.o: $(gcc_srcdir)/crtstuff.c
+crtendS$(objext): $(gcc_srcdir)/crtstuff.c
 	$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) \
 	  -c $(gcc_srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O
 
@@ -682,7 +666,8 @@ crtbeginT.o: $(gcc_srcdir)/crtstuff.c
 endif
 
 # Build extra startfiles in the libgcc directory.
-extra-parts: $(EXTRA_PARTS)
+.PHONY: libgcc-extra-parts
+libgcc-extra-parts: $(EXTRA_PARTS)
 ifneq ($(GCC_EXTRA_PARTS),)
 ifneq ($(sort $(EXTRA_PARTS)),$(GCC_EXTRA_PARTS))
 	# If the gcc directory specifies which extra parts to
@@ -709,6 +694,7 @@ endif
 
 # Build extra startfiles in the gcc directory, for unconverted
 # targets.
+.PHONY: gcc-extra-parts
 gcc-extra-parts:
 	# Recursively invoke make in the GCC directory to build any
 	# startfiles (for now).  We must do this just once, passing
@@ -767,12 +753,6 @@ install-shared:
 		@shlib_base_name@,libgcc_s,$(subst \
 		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
 
-ifneq ($(EXTRA_PARTS),)
-  INSTALL_PARTS = $(EXTRA_PARTS)
-else
-  INSTALL_PARTS = $(GCC_EXTRA_PARTS)
-endif
-
 install: $(install-shared) $(install-libunwind)
 	$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
 
--- libgcc/config/t-slibgcc-darwin	(revision 120294)
+++ libgcc/config/t-slibgcc-darwin	(local)
@@ -26,9 +26,6 @@ SHLIB_MKMAP = $(gcc_srcdir)/mkmap-flat.a
 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.
@@ -40,8 +37,8 @@ SHLIB_INSTALL = \
 	  $(DESTDIR)$(slibdir)/$(SHLIB_SONAME)
 
 ifeq ($(enable_shared),yes)
-HOST_EXTRA = $(INSTALL_FILES)
-HOST_EXTRA_INSTALL = install-darwin-libgcc-stubs
+all: $(INSTALL_FILES)
+install: install-darwin-libgcc-stubs
 endif
 
 # In order to support -mmacosx-version-min, you need to have multiple
--- libgcc/config.host	(revision 120294)
+++ libgcc/config.host	(local)
@@ -39,6 +39,10 @@
 # This file sets the following shell variables for use by the
 # autoconf-generated configure script:
 #
+#  asm_hidden_op	The assembler pseudo-op to use for hide
+#			lists for object files implemented in
+#			assembly (with -fvisibility=hidden for C).
+#			The default is ".hidden".
 #  cpu_type		The name of the cpu, if different from the first
 #			chunk of the canonical host name.
 #  extra_parts		List of extra object files that should be compiled
@@ -51,6 +55,7 @@
 #			makefile-fragments, if different from
 #			"$cpu_type/t-$cpu_type".
 
+asm_hidden_op=.hidden
 extra_parts=
 tmake_file=
 
@@ -137,6 +142,7 @@ esac
 # Common parts for widely ported systems.
 case ${host} in
 *-*-darwin*)
+  asm_hidden_op=.private_extern
   tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
   ;;
 *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
--- libgcc/configure.ac	(revision 120294)
+++ libgcc/configure.ac	(local)
@@ -95,10 +95,30 @@ AC_CACHE_CHECK([whether decimal floating
 decimal_float=$libgcc_cv_dfp
 AC_SUBST(decimal_float)
 
-
 # Collect host-machine-specific information.
 . ${srcdir}/config.host
 
+# Check for visibility support.  This is after config.host so that
+# we can check for asm_hidden_op.
+AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
+    libgcc_cv_hidden_visibility_attribute, [
+	echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
+	libgcc_cv_hidden_visibility_attribute=no
+	if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
+	    if grep "\\$asm_hidden_op.*foo" conftest.s >/dev/null; then
+		libgcc_cv_hidden_visibility_attribute=yes
+	    fi
+	fi
+	rm -f conftest.*
+    ])
+
+if test $libgcc_cv_hidden_visibility_attribute = yes; then
+    vis_hide='-fvisibility=hidden -DHIDE_EXPORTS'
+else
+    vis_hide=
+fi
+AC_SUBST(vis_hide)
+
 # Conditionalize the makefile for this target machine.
 tmake_file_=
 for f in ${tmake_file}
@@ -113,6 +133,7 @@ AC_SUBST(tmake_file)
 
 # Substitute configuration variables
 AC_SUBST(extra_parts)
+AC_SUBST(asm_hidden_op)
 
 # We need multilib support.
 AC_CONFIG_FILES([Makefile])

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 14:50       ` Daniel Jacobowitz
@ 2006-12-29 15:29         ` Paolo Bonzini
  2006-12-29 16:13           ` Daniel Jacobowitz
  0 siblings, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-29 15:29 UTC (permalink / raw)
  To: Daniel Jacobowitz, gcc-patches, Mark Mitchell, Arnaud Charlet


> I've declined to make this change.  I think it's a bad idea.

Ok.

>>> +$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s.o
>>> +	$(gen-hide-list)
>> Replace .o with $(objext).
> 
> OK, though there's little point - nothing anywhere in all of gcc
> sets it to anything else.

Yes, it's just the inconsistency that bothered me...

>>> +libgcc.a libgcov.a libunwind.a libgcc_eh.a:
>>> +	-rm -f $@
>>> +
>>> +	objects="$(objects)";	
>> No blank lines (i.e. no lines with the tab only).
> 
> It doesn't have a tab.  You don't need one; completely blank lines are
> ignored by make.  Do you really want me to remove the blank lines?  I
> think they make it more readable.

No, thanks for educating me this time. :-)

> 2) The extra-parts variable is necessary because all isn't the only
> thing to depend on it - the shared libraries do too and there's an
> extra enable_shared conditional there.  It would be possible to rework
> this, but I think it's much simpler the way it is.  There's an easy
> way to disambiguate it though; I renamed extra-parts: to
> libgcc-extra-parts:.

Right, much better.

> Here's the incremental diff.  I built and inspected libgcc on
> x86_64-linux.

Okay, if you can run a few more bootstraps (I'd say, at least 
powerpc-linux and powerpc64-linux, I'll take care of powerpc-darwin), I 
have no problems with the merge.

Maybe we should disable gcc-only bootstrap for a week before merging the 
branch, so that people running automated testers know that they're doing 
the wrong thing.  In the meanwhile, it'd be great if you convince one or 
two arch maintainers to help moving stuff to libgcc, or even better work 
on some documentation.

Arnaud, are there any problems with Ada and configuring with 
--enable-bootstrap?  I think I fixed them all a while ago, but it's 
better to double check.

Thanks again for the work,

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 15:29         ` Paolo Bonzini
@ 2006-12-29 16:13           ` Daniel Jacobowitz
  2006-12-29 16:31             ` Paolo Bonzini
  2006-12-29 18:01             ` Daniel Jacobowitz
  0 siblings, 2 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-29 16:13 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell, Arnaud Charlet

On Fri, Dec 29, 2006 at 04:29:34PM +0100, Paolo Bonzini wrote:
> >Here's the incremental diff.  I built and inspected libgcc on
> >x86_64-linux.
> 
> Okay, if you can run a few more bootstraps (I'd say, at least 
> powerpc-linux and powerpc64-linux, I'll take care of powerpc-darwin), I 
> have no problems with the merge.
> 
> Maybe we should disable gcc-only bootstrap for a week before merging the 
> branch, so that people running automated testers know that they're doing 
> the wrong thing.  In the meanwhile, it'd be great if you convince one or 
> two arch maintainers to help moving stuff to libgcc, or even better work 
> on some documentation.
> 
> Arnaud, are there any problems with Ada and configuring with 
> --enable-bootstrap?  I think I fixed them all a while ago, but it's 
> better to double check.

OK, so, merge logistics time.  I have done another merge from the trunk
to branches/libgcc-toplevel.  That branch is now what I plan to commit
to trunk; I have submitted all of the patches via gcc-patches at this
point and Paolo's reviewed all but one of them (the $(T) patch, which
is completely mechanical and I am comfortable committing as obvious). I
will test the branch on powerpc64-linux and at least one other
platform.

I'd be happy if folks could test the branch on other platforms,
especially non-Linux ones, but I will be available to fix problems
if the merge causes trouble.

I agree that disabling gcc-only bootstrap beforehand is a good idea; I
don't think it makes a lot of difference if we wait a week, though,
since if anyone's using --disable-bootstrap and make bootstrap to test
then it will break when we disable it, not when we merge.  Shall I post
a patch to delete the top level Makefile's bootstrap targets for
--disable-bootstrap?

Then, I can check that in today, and the merge this weekend or Monday.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 16:13           ` Daniel Jacobowitz
@ 2006-12-29 16:31             ` Paolo Bonzini
  2006-12-29 16:36               ` Daniel Jacobowitz
  2006-12-29 18:01             ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-29 16:31 UTC (permalink / raw)
  To: Paolo Bonzini, gcc-patches, Mark Mitchell, Arnaud Charlet

[-- Attachment #1: Type: text/plain, Size: 555 bytes --]


> I agree that disabling gcc-only bootstrap beforehand is a good idea; I
> don't think it makes a lot of difference if we wait a week, though,
> since if anyone's using --disable-bootstrap and make bootstrap to test
> then it will break when we disable it, not when we merge.  Shall I post
> a patch to delete the top level Makefile's bootstrap targets for
> --disable-bootstrap?

I can take care of that, and check it in to gcc and src (see attached 
patch).  The garbage collection of gcc/Makefile.in will wait after the 
toplevel libgcc merge.

Paolo

[-- Attachment #2: no-gcc-bootstrap.patch --]
[-- Type: text/plain, Size: 3654 bytes --]

2006-12-29  Paolo Bonzini  <bonzini@gnu.org>

	* Makefile.tpl (GCC_STRAP_TARGET, all-prebootstrap): Remove.
	* Makefile.in: Regenerate.

Index: Makefile.tpl
===================================================================
--- Makefile.tpl	(revision 120147)
+++ Makefile.tpl	(working copy)
@@ -1115,60 +1115,6 @@ ENDIF raw_cxx +]
 # ----------
 
 @if gcc-no-bootstrap
-# GCC has some more recursive targets, which trigger the old
-# (but still current, until the toplevel bootstrap project
-# is finished) compiler bootstrapping rules.
-
-GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
-.PHONY: $(GCC_STRAP_TARGETS)
-$(GCC_STRAP_TARGETS): all-prebootstrap configure-gcc
-	@r=`${PWD_COMMAND}`; export r; \
-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
-	$(HOST_EXPORTS) \
-	echo "Bootstrapping the compiler"; \
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
-	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
-	@r=`${PWD_COMMAND}`; export r; \
-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
-	case "$@" in \
-	  *bootstrap4-lean ) \
-	    msg="Comparing stage3 and stage4 of the compiler"; \
-	    compare=compare3-lean ;; \
-	  *bootstrap4 ) \
-	    msg="Comparing stage3 and stage4 of the compiler"; \
-	    compare=compare3 ;; \
-	  *-lean ) \
-	    msg="Comparing stage2 and stage3 of the compiler"; \
-	    compare=compare-lean ;; \
-	  * ) \
-	    msg="Comparing stage2 and stage3 of the compiler"; \
-	    compare=compare ;; \
-	esac; \
-	$(HOST_EXPORTS) \
-	echo "$$msg"; \
-	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
-	@r=`${PWD_COMMAND}`; export r; \
-	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
-	echo "Building runtime libraries"; \
-	$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
-profiledbootstrap: all-prebootstrap configure-gcc
-	@r=`${PWD_COMMAND}`; export r; \
-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
-	$(HOST_EXPORTS) \
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
-	echo "Bootstrapping training compiler"; \
-	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
-	@r=`${PWD_COMMAND}`; export r; \
-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
-	$(HOST_EXPORTS) \
-	echo "Building feedback based compiler"; \
-	cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
-	@r=`${PWD_COMMAND}`; export r; \
-	s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
-	echo "Building runtime libraries"; \
-	$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
 .PHONY: cross
 cross: all-build all-gas all-ld
 	@r=`${PWD_COMMAND}`; export r; \
@@ -1554,7 +1500,6 @@ configure-target-[+module+]: maybe-all-t
      +][+ FOR bootstrap_stage +]
 [+ (make-dep (dep-stage) "") +][+
        ENDFOR bootstrap_stage +]
-all-prebootstrap: [+ (dep-target "" "on" (exist? "hard")) +]
 [+ == "bootstrap"
      +][+ FOR bootstrap_stage +]
 [+ (make-dep (dep-stage) (dep-stage)) +][+
@@ -1562,17 +1507,6 @@ all-prebootstrap: [+ (dep-target "" "on"
 [+ ESAC +][+
 ENDFOR dependencies +]
 
-# 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
-[+ FOR host_modules +][+
-   IF (and (not (= (get "module") "gcc"))
-	   (hash-ref boot-modules (get "module"))) +]
-all-prebootstrap: maybe-all-[+module+][+
-   ENDIF +][+
-ENDFOR host_modules +]
-@endif gcc-no-bootstrap
-
 CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
 GDB_TK = @GDB_TK@
 INSTALL_GDB_TK = @INSTALL_GDB_TK@

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 16:31             ` Paolo Bonzini
@ 2006-12-29 16:36               ` Daniel Jacobowitz
  2006-12-29 16:42                 ` Paolo Bonzini
  0 siblings, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-29 16:36 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell, Arnaud Charlet

On Fri, Dec 29, 2006 at 05:27:05PM +0100, Paolo Bonzini wrote:
> I can take care of that, and check it in to gcc and src (see attached 
> patch).  The garbage collection of gcc/Makefile.in will wait after the 
> toplevel libgcc merge.

Looks good to me.  Will you go ahead and commit this, then?  Would you
like me to wait a few days before merging?

> 2006-12-29  Paolo Bonzini  <bonzini@gnu.org>
> 
> 	* Makefile.tpl (GCC_STRAP_TARGET, all-prebootstrap): Remove.
> 	* Makefile.in: Regenerate.

GCC_STRAP_TARGETS.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 16:36               ` Daniel Jacobowitz
@ 2006-12-29 16:42                 ` Paolo Bonzini
  0 siblings, 0 replies; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-29 16:42 UTC (permalink / raw)
  To: Paolo Bonzini, gcc-patches, Mark Mitchell, Arnaud Charlet,
	Daniel Jacobowitz


>> I can take care of that, and check it in to gcc and src (see attached 
>> patch).  The garbage collection of gcc/Makefile.in will wait after the 
>> toplevel libgcc merge.
> 
> Looks good to me.  Will you go ahead and commit this, then?

Yep.

> Would you like me to wait a few days before merging?

I was thinking about tuesday.  Or maybe monday (late afternoon in some 
US time zone), so that I can watch out for problems when it's tuesday 
morning for me.

Anyway, I'll start a bootstrap this evening on ppc-darwin and let you know.

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 16:13           ` Daniel Jacobowitz
  2006-12-29 16:31             ` Paolo Bonzini
@ 2006-12-29 18:01             ` Daniel Jacobowitz
  2006-12-30  8:20               ` Paolo Bonzini
  1 sibling, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-29 18:01 UTC (permalink / raw)
  To: Paolo Bonzini, gcc-patches, Mark Mitchell, Arnaud Charlet

On Fri, Dec 29, 2006 at 11:13:07AM -0500, Daniel Jacobowitz wrote:
> is completely mechanical and I am comfortable committing as obvious). I
> will test the branch on powerpc64-linux and at least one other
> platform.

I needed this additional patch for powerpc64-linux.  I went through the
entire set of migrated targets more thoroughly; powerpc* and frv*
needed adjustment.

-- 
Daniel Jacobowitz
CodeSourcery

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

	gcc/
	* config/frv/t-linux (EXTRA_MULTILIB_PARTS): Clear.

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

	* config.host (powerpc64-*-linux*): Use rs6000/t-ppccomm.
	(powerpc-*-linux*altivec*, powerpc-*-linux*spe*, powerpc-*-linux*):
	Likewise.
	* config/rs6000/t-ppccomm: New file.

--- gcc/config/frv/t-linux	(revision 120308)
+++ gcc/config/frv/t-linux	(local)
@@ -5,6 +5,9 @@ MULTILIB_MATCHES=
 MULTILIB_EXCEPTIONS=
 MULTILIB_EXTRA_OPTS=
 
+# We don't use frvbegin.o or frvend.o.
+EXTRA_MULTILIB_PARTS =
+
 CRTSTUFF_T_CFLAGS = -fPIC
 TARGET_LIBGCC2_CFLAGS = -fPIC
 
--- libgcc/config/rs6000/t-ppccomm	(revision 120308)
+++ libgcc/config/rs6000/t-ppccomm	(local)
@@ -0,0 +1,36 @@
+EXTRA_PARTS += ecrti$(objext) ecrtn$(objext) ncrti$(objext) ncrtn$(objext) \
+  crtsavres$(objext)
+
+# We build {e,n}crti.o and {e,n}crtn.o, which serve to add begin and
+# end labels to all of the special sections used when we link using gcc.
+
+# Assemble startup files.
+ecrti.S: $(gcc_srcdir)/config/rs6000/eabi-ci.asm
+	cat $(gcc_srcdir)/config/rs6000/eabi-ci.asm >ecrti.S
+
+ecrtn.S: $(gcc_srcdir)/config/rs6000/eabi-cn.asm
+	cat $(gcc_srcdir)/config/rs6000/eabi-cn.asm >ecrtn.S
+
+ncrti.S: $(gcc_srcdir)/config/rs6000/sol-ci.asm
+	cat $(gcc_srcdir)/config/rs6000/sol-ci.asm >ncrti.S
+
+ncrtn.S: $(gcc_srcdir)/config/rs6000/sol-cn.asm
+	cat $(gcc_srcdir)/config/rs6000/sol-cn.asm >ncrtn.S
+
+crtsavres.S: $(gcc_srcdir)/config/rs6000/crtsavres.asm
+	cat $(gcc_srcdir)/config/rs6000/crtsavres.asm >crtsavres.S
+
+ecrti$(objext): ecrti.S
+	$(crt_compile) -c ecrti.S
+
+ecrtn$(objext): ecrtn.S
+	$(crt_compile) -c ecrtn.S
+
+ncrti$(objext): ncrti.S
+	$(crt_compile) -c ncrti.S
+
+ncrtn$(objext): ncrtn.S
+	$(crt_compile) -c ncrtn.S
+
+crtsavres$(objext): crtsavres.S
+	$(crt_compile) -c crtsavres.S
--- libgcc/config.host	(revision 120308)
+++ libgcc/config.host	(local)
@@ -462,7 +462,7 @@ pdp11-*-bsd)
 pdp11-*-*)
 	;;
 powerpc64-*-linux*)
-	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
 	;;
 powerpc64-*-gnu*)
 	tmake_file="${tmake_file} rs6000/t-ldbl128"
@@ -494,13 +494,13 @@ powerpc-*-eabi*)
 powerpc-*-rtems*)
 	;;
 powerpc-*-linux*altivec*)
-	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
 	;;
 powerpc-*-linux*spe*)
-	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
 	;;
 powerpc-*-linux*)
-	tmake_file="${tmake_file} rs6000/t-ldbl128"
+	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
 	;;
 powerpc-*-gnu-gnualtivec*)
 	tmake_file="${tmake_file} rs6000/t-ldbl128"

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-29 18:01             ` Daniel Jacobowitz
@ 2006-12-30  8:20               ` Paolo Bonzini
  2006-12-30 20:19                 ` Daniel Jacobowitz
  0 siblings, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-30  8:20 UTC (permalink / raw)
  To: Daniel Jacobowitz, gcc-patches, Mark Mitchell

Daniel Jacobowitz wrote:
> On Fri, Dec 29, 2006 at 11:13:07AM -0500, Daniel Jacobowitz wrote:
>> is completely mechanical and I am comfortable committing as obvious). I
>> will test the branch on powerpc64-linux and at least one other
>> platform.
> 
> I needed this additional patch for powerpc64-linux.  I went through the
> entire set of migrated targets more thoroughly; powerpc* and frv*
> needed adjustment.

Can you document why more precisely?  I am a bit lost about what happens 
for frv.

Thanks,

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-30  8:20               ` Paolo Bonzini
@ 2006-12-30 20:19                 ` Daniel Jacobowitz
  2006-12-31 18:43                   ` Paolo Bonzini
  0 siblings, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-30 20:19 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell

On Sat, Dec 30, 2006 at 09:20:48AM +0100, Paolo Bonzini wrote:
> Daniel Jacobowitz wrote:
> >On Fri, Dec 29, 2006 at 11:13:07AM -0500, Daniel Jacobowitz wrote:
> >>is completely mechanical and I am comfortable committing as obvious). I
> >>will test the branch on powerpc64-linux and at least one other
> >>platform.
> >
> >I needed this additional patch for powerpc64-linux.  I went through the
> >entire set of migrated targets more thoroughly; powerpc* and frv*
> >needed adjustment.
> 
> Can you document why more precisely?  I am a bit lost about what happens 
> for frv.

It's not strictly necessary, only for the correctness tests I added to
libgcc for the transition period.  t-frv builds frvbegin.o and frvend.o
for its own purposes; frv.h puts them in STARTFILE_SPEC and
ENDFILE_SPEC; linux.h removes them again; but t-linux didn't remove
them.  So they are built but not used for frv-linux on trunk.
This triggers an error because libgcc notes they are not in the libgcc
configuration.

I could have added them to libgcc instead to preserve the existing
behavior, but it's useless, so I didn't.  I haven't affected them for
frv-elf, of course.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-30 20:19                 ` Daniel Jacobowitz
@ 2006-12-31 18:43                   ` Paolo Bonzini
  2006-12-31 19:56                     ` Daniel Jacobowitz
  0 siblings, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2006-12-31 18:43 UTC (permalink / raw)
  To: Daniel Jacobowitz, gcc-patches, Mark Mitchell


> It's not strictly necessary, only for the correctness tests I added to
> libgcc for the transition period.  t-frv builds frvbegin.o and frvend.o
> for its own purposes; frv.h puts them in STARTFILE_SPEC and
> ENDFILE_SPEC; linux.h removes them again; but t-linux didn't remove
> them.  So they are built but not used for frv-linux on trunk.
> This triggers an error because libgcc notes they are not in the libgcc
> configuration.

Understood.  Did you catch this by inspection of the t-* files, or by 
building a cross?  In either case, for which files/triplets did you do so?

Thanks,

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-31 18:43                   ` Paolo Bonzini
@ 2006-12-31 19:56                     ` Daniel Jacobowitz
  2007-01-01 18:10                       ` Paolo Bonzini
  2007-01-04 12:32                       ` Andreas Schwab
  0 siblings, 2 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2006-12-31 19:56 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches, Mark Mitchell

On Sun, Dec 31, 2006 at 05:00:55PM +0100, Paolo Bonzini wrote:
> 
> >It's not strictly necessary, only for the correctness tests I added to
> >libgcc for the transition period.  t-frv builds frvbegin.o and frvend.o
> >for its own purposes; frv.h puts them in STARTFILE_SPEC and
> >ENDFILE_SPEC; linux.h removes them again; but t-linux didn't remove
> >them.  So they are built but not used for frv-linux on trunk.
> >This triggers an error because libgcc notes they are not in the libgcc
> >configuration.
> 
> Understood.  Did you catch this by inspection of the t-* files, or by 
> building a cross?  In either case, for which files/triplets did you do so?

Hybrid: I configured GCC for every potentially affected target, and
added a rule to gcc/Makefile.in to display the startfiles.  I have
bootstrapped powerpc64-linux and x86_64-linux, and run regression tests
(no surprises in either).  That is the current limit of my testing; I
can test any additional configurations requested.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-31 19:56                     ` Daniel Jacobowitz
@ 2007-01-01 18:10                       ` Paolo Bonzini
  2007-01-01 21:14                         ` Mike Stump
  2007-01-08 18:17                         ` Steve Ellcey
  2007-01-04 12:32                       ` Andreas Schwab
  1 sibling, 2 replies; 41+ messages in thread
From: Paolo Bonzini @ 2007-01-01 18:10 UTC (permalink / raw)
  To: Daniel Jacobowitz, gcc-patches, Mark Mitchell, Eric Christopher


> Hybrid: I configured GCC for every potentially affected target, and
> added a rule to gcc/Makefile.in to display the startfiles.  I have
> bootstrapped powerpc64-linux and x86_64-linux, and run regression tests
> (no surprises in either).  That is the current limit of my testing; I
> can test any additional configurations requested.

I see.

My results for powerpc-darwin are not so good, but that's probably 
because my OS version is the latest released one, rather than the next 
one.  Both libstdc++-v3 and libgfortran are broken (the former gives a 
missing ___dso_handle symbol, the latter needs an assembler supporting a 
".literal16" directive), C results are decent (~60 FAILs, but none of 
them in execution tests, so libgcc should be ok).

I'll test mainline later, but I don't think this can hold the merge in 
any way.

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-01 18:10                       ` Paolo Bonzini
@ 2007-01-01 21:14                         ` Mike Stump
  2007-01-08 18:17                         ` Steve Ellcey
  1 sibling, 0 replies; 41+ messages in thread
From: Mike Stump @ 2007-01-01 21:14 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Daniel Jacobowitz, gcc-patches, Mark Mitchell, Eric Christopher

[-- Attachment #1: Type: text/plain, Size: 1154 bytes --]

On Jan 1, 2007, at 10:10 AM, Paolo Bonzini wrote:
>> Hybrid: I configured GCC for every potentially affected target, and
>> added a rule to gcc/Makefile.in to display the startfiles.  I have
>> bootstrapped powerpc64-linux and x86_64-linux, and run regression  
>> tests
>> (no surprises in either).  That is the current limit of my testing; I
>> can test any additional configurations requested.
>
> I see.
>
> My results for powerpc-darwin are not so good, but that's probably  
> because my OS version is the latest released one, rather than the  
> next one.

Or, rather, http://gcc.gnu.org/install/specific.html#powerpc-x-darwin  
would be my guess.

> Both libstdc++-v3 and libgfortran are broken (the former gives a  
> missing ___dso_handle symbol,

Yup, sounds about right.

> the latter needs an assembler supporting a ".literal16" directive),  
> C results are decent (~60 FAILs, but none of them in execution  
> tests, so libgcc should be ok).

Hum, fixed by the below, though, I would recommend grabbing the  
latest Xcode and installing it.

> I'll test mainline later, but I don't think this can hold the merge  
> in any way.

I agree.


[-- Attachment #2: lit16-fsf.diffs.txt --]
[-- Type: text/plain, Size: 2621 bytes --]

2007-01-01  Mike Stump  <mrs@apple.com>

	* configure.ac (HAVE_GAS_LITERAL16): Add autoconf check for
	.literal16.
	* config/darwin.c (machopic_select_rtx_section): Use
	HAVE_GAS_LITERAL16.
	(darwin_mergeable_constant_section): Likewise.
	* configure: Regenerate.
	* config.in: Regenerate.

Doing diffs in .:
--- ./config/darwin.c.~1~	2006-12-19 18:45:36.000000000 -0800
+++ ./config/darwin.c	2007-01-01 12:33:35.000000000 -0800
@@ -1131,6 +1131,10 @@ darwin_mergeable_string_section (tree ex
   return readonly_data_section;
 }
 
+#ifndef HAVE_GAS_LITERAL16
+#define HAVE_GAS_LITERAL16 0
+#endif
+
 static section *
 darwin_mergeable_constant_section (tree exp,
 				   unsigned HOST_WIDE_INT align)
@@ -1156,7 +1160,8 @@ darwin_mergeable_constant_section (tree 
 	       && TREE_INT_CST_LOW (size) == 8
 	       && TREE_INT_CST_HIGH (size) == 0)
         return darwin_sections[literal8_section];
-      else if (TARGET_64BIT
+      else if (HAVE_GAS_LITERAL16
+	       && TARGET_64BIT
                && TREE_CODE (size) == INTEGER_CST
                && TREE_INT_CST_LOW (size) == 16
                && TREE_INT_CST_HIGH (size) == 0)
@@ -1321,7 +1326,8 @@ machopic_select_rtx_section (enum machin
 	   && (GET_CODE (x) == CONST_INT
 	       || GET_CODE (x) == CONST_DOUBLE))
     return darwin_sections[literal4_section];
-  else if (TARGET_64BIT
+  else if (HAVE_GAS_LITERAL16
+	   && TARGET_64BIT
 	   && GET_MODE_SIZE (mode) == 16
 	   && (GET_CODE (x) == CONST_INT
 	       || GET_CODE (x) == CONST_DOUBLE
--- ./config.in.~1~	2007-01-01 12:27:04.000000000 -0800
+++ ./config.in	2007-01-01 12:47:27.000000000 -0800
@@ -754,6 +754,12 @@
 /* Define if your assembler and linker support .hidden. */
 #undef HAVE_GAS_HIDDEN
 
+/* Define if your assembler supports .literal16. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_GAS_LITERAL16
+#endif
+
+
 /* Define if your assembler supports specifying the maximum number of bytes to
    skip when using the GAS .p2align command. */
 #ifndef USED_FOR_TARGET
--- ./configure.ac.~1~	2006-12-22 21:07:11.000000000 -0800
+++ ./configure.ac	2007-01-01 12:43:46.000000000 -0800
@@ -2051,6 +2051,12 @@ gcc_GAS_CHECK_FEATURE([.p2align with max
   [Define if your assembler supports specifying the maximum number
    of bytes to skip when using the GAS .p2align command.])])
 
+gcc_GAS_CHECK_FEATURE([.literal16], gcc_cv_as_literal16,
+ [2,8,0],,
+ [.literal16],,
+[AC_DEFINE(HAVE_GAS_LITERAL16, 1,
+  [Define if your assembler supports .literal16.])])
+
 gcc_GAS_CHECK_FEATURE([working .subsection -1], gcc_cv_as_subsection_m1,
  [elf,2,9,0],,
  [conftest_label1: .word 0
--------------

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2006-12-31 19:56                     ` Daniel Jacobowitz
  2007-01-01 18:10                       ` Paolo Bonzini
@ 2007-01-04 12:32                       ` Andreas Schwab
  2007-01-04 14:05                         ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Andreas Schwab @ 2007-01-04 12:32 UTC (permalink / raw)
  To: gcc-patches; +Cc: Paolo Bonzini, Mark Mitchell

Daniel Jacobowitz <drow@false.org> writes:

> Hybrid: I configured GCC for every potentially affected target, and
> added a rule to gcc/Makefile.in to display the startfiles.  I have
> bootstrapped powerpc64-linux and x86_64-linux, and run regression tests
> (no surprises in either).  That is the current limit of my testing; I
> can test any additional configurations requested.

Breaks bootstrap on ia64:

make[3]: *** No rule to make target `crtfastmath.o', needed by `libgcc-extra-parts'.  Stop.
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory `/tmp/cvs/gcc-20070104/Build/ia64-suse-linux/libgcc'
make[2]: *** [all-stage1-target-libgcc] Error 2
make[2]: Leaving directory `/tmp/cvs/gcc-20070104/Build'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/tmp/cvs/gcc-20070104/Build'
make: *** [bootstrap] Error 2

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 12:32                       ` Andreas Schwab
@ 2007-01-04 14:05                         ` Daniel Jacobowitz
  2007-01-04 14:57                           ` Marcin Dalecki
  2007-01-04 16:52                           ` Daniel Jacobowitz
  0 siblings, 2 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2007-01-04 14:05 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: gcc-patches, Paolo Bonzini, Mark Mitchell

On Thu, Jan 04, 2007 at 01:32:20PM +0100, Andreas Schwab wrote:
> Daniel Jacobowitz <drow@false.org> writes:
> 
> > Hybrid: I configured GCC for every potentially affected target, and
> > added a rule to gcc/Makefile.in to display the startfiles.  I have
> > bootstrapped powerpc64-linux and x86_64-linux, and run regression tests
> > (no surprises in either).  That is the current limit of my testing; I
> > can test any additional configurations requested.
> 
> Breaks bootstrap on ia64:
> 
> make[3]: *** No rule to make target `crtfastmath.o', needed by `libgcc-extra-parts'.  Stop.
> make[3]: *** Waiting for unfinished jobs....
> make[3]: Leaving directory `/tmp/cvs/gcc-20070104/Build/ia64-suse-linux/libgcc'
> make[2]: *** [all-stage1-target-libgcc] Error 2
> make[2]: Leaving directory `/tmp/cvs/gcc-20070104/Build'
> make[1]: *** [stage1-bubble] Error 2
> make[1]: Leaving directory `/tmp/cvs/gcc-20070104/Build'
> make: *** [bootstrap] Error 2

Sorry, this is a typo on my part.  Does this fix it, aside from the
make install failure reported elsewhere?  The necessary file is present
but not connected.

-- 
Daniel Jacobowitz
CodeSourcery

2007-01-04  Daniel Jacobowitz  <dan@codesourcery.com>

	* config.host (ia64*-*-linux*): Set tmake_file.

Index: libgcc/config.host
===================================================================
--- libgcc/config.host	(revision 120429)
+++ libgcc/config.host	(working copy)
@@ -371,6 +371,7 @@ ia64*-*-freebsd*)
 	;;
 ia64*-*-linux*)
 	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
+	tmake_file="ia64/t-ia64"
 	;;
 ia64*-*-hpux*)
 	;;

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 14:05                         ` Daniel Jacobowitz
@ 2007-01-04 14:57                           ` Marcin Dalecki
  2007-01-04 15:02                             ` Daniel Jacobowitz
  2007-01-04 16:52                           ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Marcin Dalecki @ 2007-01-04 14:57 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gcc-patches List


Wiadomość napisana w dniu 2007-01-04, o godz15:05, przez Daniel  
Jacobowitz:

> On Thu, Jan 04, 2007 at 01:32:20PM +0100, Andreas Schwab wrote:
>> Daniel Jacobowitz <drow@false.org> writes:
>>
>>> Hybrid: I configured GCC for every potentially affected target, and
>>> added a rule to gcc/Makefile.in to display the startfiles.  I have
>>> bootstrapped powerpc64-linux and x86_64-linux, and run regression  
>>> tests
>>> (no surprises in either).  That is the current limit of my  
>>> testing; I
>>> can test any additional configurations requested.
>>
>> Breaks bootstrap on ia64:

G5 Mac OS X Tiger doesn't work as well (!NO "Fink", "Stink", "Ports",  
"Sorts" or similar i
like REPRODUCIBLE setups...):

checking how to run the C preprocessor... /Users/dalecki/gcc-osx/host- 
powerpc-apple-darwin8.8.0/gcc/xgcc -B/Users/dalecki/gcc-osx/host- 
powerpc-apple-darwin8.8.0/gcc/ -B/opt/gcc/powerpc-apple-darwin8.8.0/ 
bin/ -B/opt/gcc/powerpc-apple-darwin8.8.0/lib/ -isystem /opt/gcc/ 
powerpc-apple-darwin8.8.0/include -isystem /opt/gcc/powerpc-apple- 
darwin8.8.0/sys-include -E
checking whether decimal floating point is supported... no
checking for __attribute__((visibility("hidden")))... yes
updating cache ./config.cache
configure: creating ./config.status
config.status: creating Makefile
config.status: executing default commands
Adding multilib support to Makefile in ../../.././libgcc
with_multisubdir=ppc64
Makefile:141: ../../gcc/libgcc.mvars: No such file or directory
make[2]: *** No rule to make target `../../gcc/libgcc.mvars'.  Stop.
make[1]: *** [all-target-libgcc] Error 2
make: *** [all] Error 2

ejb24:~/gcc-osx dalecki$ uname -a
Darwin zzzzzzz.tpnet.pl 8.8.0 Darwin Kernel Version 8.8.0: Fri Sep  8  
17:18:57 PDT 2006; root:xnu-792.12.6.obj~1/RELEASE_PPC Power  
Macintosh powerpc
ejb24:~/gcc-osx dalecki$

This is how it got configured:

LANG=C  ./configure \
     --prefix=/opt/gcc \
     --with-gmp=/opt \
     --enable-languages=c,c++,objc,obj-c++,treelang \
     --disable-bootstrap \


Marcin Dalecki


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 14:57                           ` Marcin Dalecki
@ 2007-01-04 15:02                             ` Daniel Jacobowitz
  2007-01-04 15:09                               ` Paolo Bonzini
  2007-01-04 16:13                               ` Marcin Dalecki
  0 siblings, 2 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2007-01-04 15:02 UTC (permalink / raw)
  To: Marcin Dalecki; +Cc: gcc-patches List

On Thu, Jan 04, 2007 at 03:57:00PM +0100, Marcin Dalecki wrote:
> Adding multilib support to Makefile in ../../.././libgcc
> with_multisubdir=ppc64
> Makefile:141: ../../gcc/libgcc.mvars: No such file or directory

It's off by one.

> LANG=C  ./configure \
>     --prefix=/opt/gcc \
>     --with-gmp=/opt \
>     --enable-languages=c,c++,objc,obj-c++,treelang \
>     --disable-bootstrap \

Does this work if you use a separate objdir?  How about if you use
$PWD/configure?

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 15:02                             ` Daniel Jacobowitz
@ 2007-01-04 15:09                               ` Paolo Bonzini
  2007-01-04 15:32                                 ` Marcin Dalecki
  2007-01-04 16:13                               ` Marcin Dalecki
  1 sibling, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2007-01-04 15:09 UTC (permalink / raw)
  To: Marcin Dalecki, gcc-patches List

Daniel Jacobowitz wrote:
> On Thu, Jan 04, 2007 at 03:57:00PM +0100, Marcin Dalecki wrote:
>> Adding multilib support to Makefile in ../../.././libgcc
>> with_multisubdir=ppc64
>> Makefile:141: ../../gcc/libgcc.mvars: No such file or directory
> 
> It's off by one.

Please try this:

2007-01-04  Paolo Bonzini  <bonzini@gnu.org>

	* configure.ac: Add GCC_TOPLEV_SUBDIRS.
	* Makefile.in (host_subdir): Substitute it.
	(gcc_objdir): Use it.

Index: configure.ac
===================================================================
--- configure.ac        (revision 120429)
+++ configure.ac        (working copy)
@@ -74,6 +74,7 @@ esac

  AC_CANONICAL_HOST
  ACX_NONCANONICAL_HOST
+GCC_TOPLEV_SUBDIRS

  dnl These must be called before AM_PROG_LIBTOOL, because it may want
  dnl to call AC_CHECK_PROG.
Index: Makefile.in
===================================================================
--- Makefile.in (revision 120429)
+++ Makefile.in (working copy)
@@ -21,8 +21,10 @@
  #

  libgcc_topdir = @libgcc_topdir@
+host_subdir = @host_subdir@
+
  gcc_srcdir = $(libgcc_topdir)/gcc
-gcc_objdir = $(MULTIBUILDTOP)../../gcc
+gcc_objdir = $(MULTIBUILDTOP)../../$(host_subdir)/gcc

  srcdir = @srcdir@

Paolo

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 15:09                               ` Paolo Bonzini
@ 2007-01-04 15:32                                 ` Marcin Dalecki
  2007-01-04 15:39                                   ` Paolo Bonzini
  0 siblings, 1 reply; 41+ messages in thread
From: Marcin Dalecki @ 2007-01-04 15:32 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches List


Wiadomość napisana w dniu 2007-01-04, o godz16:09, przez Paolo Bonzini:

> Daniel Jacobowitz wrote:
>> On Thu, Jan 04, 2007 at 03:57:00PM +0100, Marcin Dalecki wrote:
>>> Adding multilib support to Makefile in ../../.././libgcc
>>> with_multisubdir=ppc64
>>> Makefile:141: ../../gcc/libgcc.mvars: No such file or directory
>> It's off by one.
>
> Please try this:

I thank you for looking in to this issue. However please forgive me,  
but as a matter of fact,
the Nimitz-class scripting machinery of autoconf/autogen/automake  
apparently always refrains
for me to spur to my commands on any system not identical with a  
particular flavor of JBLD
(Joe's Bloated Linux Distribution)...

Marcin Dalecki


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 15:32                                 ` Marcin Dalecki
@ 2007-01-04 15:39                                   ` Paolo Bonzini
  2007-01-04 18:05                                     ` Marcin Dalecki
  0 siblings, 1 reply; 41+ messages in thread
From: Paolo Bonzini @ 2007-01-04 15:39 UTC (permalink / raw)
  To: Marcin Dalecki; +Cc: gcc-patches List

[-- Attachment #1: Type: text/plain, Size: 166 bytes --]

The attached patch includes the patch to configure, so you don't need to 
re-run autoconf (note this is a patch to the libgcc directory, so no 
autogen here).

Paolo

[-- Attachment #2: m-dalecki.patch --]
[-- Type: text/plain, Size: 4838 bytes --]

Index: configure
===================================================================
--- configure	(revision 120429)
+++ configure	(working copy)
@@ -272,7 +272,7 @@ PACKAGE_STRING='GNU C Runtime Library 1.
 PACKAGE_BUGREPORT=''
 
 ac_unique_file="static-object.mk"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float vis_hide tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical build_libsubdir build_subdir host_subdir target_subdir AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float vis_hide tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -818,6 +818,7 @@ Optional Packages:
   --with-cross-host=HOST           Configuring with a cross compiler
   --with-ld               arrange to use the specified ld (full pathname)
   --with-slibdir=DIR      shared libraries in DIR LIBDIR
+  --with-build-libsubdir=DIR  Directory where to find libraries for build system
 
 Some influential environment variables:
   CC          C compiler command
@@ -1572,6 +1573,41 @@ esac
 
 
 
+ case ${target_alias} in
+  "") target_noncanonical=${host_noncanonical} ;;
+  *) target_noncanonical=${target_alias} ;;
+esac
+
+
+# post-stage1 host modules use a different CC_FOR_BUILD so, in order to
+# have matching libraries, they should use host libraries: Makefile.tpl
+# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR).
+# However, they still use the build modules, because the corresponding
+# host modules (e.g. bison) are only built for the host when bootstrap
+# finishes. So:
+# - build_subdir is where we find build modules, and never changes.
+# - build_libsubdir is where we find build libraries, and can be overridden.
+
+# Prefix 'build-' so this never conflicts with target_subdir.
+build_subdir="build-${build_noncanonical}"
+
+# Check whether --with-build-libsubdir or --without-build-libsubdir was given.
+if test "${with_build_libsubdir+set}" = set; then
+  withval="$with_build_libsubdir"
+  build_libsubdir="$withval"
+else
+  build_libsubdir="$build_subdir"
+fi;
+# --srcdir=. covers the toplevel, while "test -d" covers the subdirectories
+if ( test $srcdir = . && test -d gcc ) \
+   || test -d $srcdir/../host-${host_noncanonical}; then
+  host_subdir="host-${host_noncanonical}"
+else
+  host_subdir=.
+fi
+# No prefix.
+target_subdir=${target_noncanonical}
+
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
@@ -3960,6 +3996,10 @@ s,@host_cpu@,$host_cpu,;t t
 s,@host_vendor@,$host_vendor,;t t
 s,@host_os@,$host_os,;t t
 s,@host_noncanonical@,$host_noncanonical,;t t
+s,@build_libsubdir@,$build_libsubdir,;t t
+s,@build_subdir@,$build_subdir,;t t
+s,@host_subdir@,$host_subdir,;t t
+s,@target_subdir@,$target_subdir,;t t
 s,@AR@,$AR,;t t
 s,@ac_ct_AR@,$ac_ct_AR,;t t
 s,@LIPO@,$LIPO,;t t
Index: configure.ac
===================================================================
--- configure.ac	(revision 120429)
+++ configure.ac	(working copy)
@@ -74,6 +74,7 @@ esac
 
 AC_CANONICAL_HOST
 ACX_NONCANONICAL_HOST
+GCC_TOPLEV_SUBDIRS
 
 dnl These must be called before AM_PROG_LIBTOOL, because it may want
 dnl to call AC_CHECK_PROG.
Index: Makefile.in
===================================================================
--- Makefile.in	(revision 120429)
+++ Makefile.in	(working copy)
@@ -21,8 +21,10 @@
 #
 
 libgcc_topdir = @libgcc_topdir@
+host_subdir = @host_subdir@
+
 gcc_srcdir = $(libgcc_topdir)/gcc
-gcc_objdir = $(MULTIBUILDTOP)../../gcc
+gcc_objdir = $(MULTIBUILDTOP)../../$(host_subdir)/gcc
 
 srcdir = @srcdir@
 

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 15:02                             ` Daniel Jacobowitz
  2007-01-04 15:09                               ` Paolo Bonzini
@ 2007-01-04 16:13                               ` Marcin Dalecki
  2007-01-04 16:34                                 ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Marcin Dalecki @ 2007-01-04 16:13 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gcc-patches List


Wiadomość napisana w dniu 2007-01-04, o godz16:01, przez Daniel  
Jacobowitz:

> On Thu, Jan 04, 2007 at 03:57:00PM +0100, Marcin Dalecki wrote:
>> Adding multilib support to Makefile in ../../.././libgcc
>> with_multisubdir=ppc64
>> Makefile:141: ../../gcc/libgcc.mvars: No such file or directory
>
> It's off by one.
>
>> LANG=C  ./configure \
>>     --prefix=/opt/gcc \
>>     --with-gmp=/opt \
>>     --enable-languages=c,c++,objc,obj-c++,treelang \
>>     --disable-bootstrap \
>
> Does this work if you use a separate objdir?

Using a separate objdir appears to work. However the build process  
doesn't
stop after actually having build GCC. The whole (pretty pointless,  
since it's mixing
testing with building, if you ask) stage fun starts (Yes! Burn fossil  
energy. Burn!).
Apparently --disable-bootstrap got just ignored without being even  
diagnosed.

Marcin Dalecki


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 16:13                               ` Marcin Dalecki
@ 2007-01-04 16:34                                 ` Daniel Jacobowitz
  2007-01-04 17:13                                   ` Marcin Dalecki
  0 siblings, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2007-01-04 16:34 UTC (permalink / raw)
  To: Marcin Dalecki; +Cc: gcc-patches List

On Thu, Jan 04, 2007 at 05:13:07PM +0100, Marcin Dalecki wrote:
> Using a separate objdir appears to work. However the build process
> doesn't stop after actually having build GCC. The whole (pretty
> pointless, since it's mixing testing with building, if you ask) stage
> fun starts (Yes! Burn fossil energy. Burn!). Apparently
> --disable-bootstrap got just ignored without being even diagnosed.

If you can post logs of what's going on, without insults mixed in, I'll
look at them.  --disable-bootstrap works fine for me as of this
morning.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 14:05                         ` Daniel Jacobowitz
  2007-01-04 14:57                           ` Marcin Dalecki
@ 2007-01-04 16:52                           ` Daniel Jacobowitz
  1 sibling, 0 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2007-01-04 16:52 UTC (permalink / raw)
  To: Andreas Schwab, gcc-patches, Paolo Bonzini, Mark Mitchell

On Thu, Jan 04, 2007 at 09:05:34AM -0500, Daniel Jacobowitz wrote:
> Sorry, this is a typo on my part.  Does this fix it, aside from the
> make install failure reported elsewhere?  The necessary file is present
> but not connected.

I checked this in.  If it doesn't fix the problem please let me know
and I'll try on an ia64 system at work.

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 16:34                                 ` Daniel Jacobowitz
@ 2007-01-04 17:13                                   ` Marcin Dalecki
  0 siblings, 0 replies; 41+ messages in thread
From: Marcin Dalecki @ 2007-01-04 17:13 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gcc-patches List


Wiadomość napisana w dniu 2007-01-04, o godz17:34, przez Daniel  
Jacobowitz:

> On Thu, Jan 04, 2007 at 05:13:07PM +0100, Marcin Dalecki wrote:
>> Using a separate objdir appears to work. However the build process
>> doesn't stop after actually having build GCC. The whole (pretty
>> pointless, since it's mixing testing with building, if you ask) stage
>> fun starts (Yes! Burn fossil energy. Burn!). Apparently
>> --disable-bootstrap got just ignored without being even diagnosed.
>
> If you can post logs of what's going on, without insults mixed in,  
> I'll
> look at them.  --disable-bootstrap works fine for me as of this
> morning.

Checking my logs I have noticed, that by doing copy/paste from the  
related script
I oversaw truncating the actual --disable-bootstrap command from the  
command line.
Sorry for the confusion.
Excuse me but what's insulting in the above? Where is the reference  
ad personam?

Marcin Dalecki


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-04 15:39                                   ` Paolo Bonzini
@ 2007-01-04 18:05                                     ` Marcin Dalecki
  0 siblings, 0 replies; 41+ messages in thread
From: Marcin Dalecki @ 2007-01-04 18:05 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: gcc-patches List


Wiadomość napisana w dniu 2007-01-04, o godz16:39, przez Paolo Bonzini:

> The attached patch includes the patch to configure, so you don't  
> need to re-run autoconf (note this is a patch to the libgcc  
> directory, so no autogen here).

I can now confirm, that the patch indeed solved the issue. Thanks.

Marcin Dalecki


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-01 18:10                       ` Paolo Bonzini
  2007-01-01 21:14                         ` Mike Stump
@ 2007-01-08 18:17                         ` Steve Ellcey
  2007-01-08 18:47                           ` Daniel Jacobowitz
  1 sibling, 1 reply; 41+ messages in thread
From: Steve Ellcey @ 2007-01-08 18:17 UTC (permalink / raw)
  To: drow, gcc-patches; +Cc: dave.anglin

The libgcc change seems to have broken the hppa64-hp-hpux* build and I
am not sure what the correct fix is.  I am seeing:

make[4]: Entering directory `/proj/opensrc/nightly/build-hppa64-hp-hpux11.11-trunk/obj_gcc/gcc'
make[4]: *** No rule to make target `/proj/opensrc/nightly/build-hppa64-hp-hpux11.11-trunk/obj_gcc/hppa64-hp-hpux11.11/libgcc/libgcc_stub.a', needed by `T_TARGET'.  Stop.
make[4]: Leaving directory `/proj/opensrc/nightly/build-hppa64-hp-hpux11.11-trunk/obj_gcc/gcc'


I assume this is related to gcc/config/pa/t-pa64 which contains:

libgcc_stub.a: $(LIBGCCSTUB_OBJS)
        -rm -rf libgcc_stub.a
        $(AR) rc libgcc_stub.a $(LIBGCCSTUB_OBJS)
        $(RANLIB) libgcc_stub.a

But I am not sure how to change this to handle the new top-level libgcc
setup.

Steve Ellcey
sje@cup.hp.com

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-08 18:17                         ` Steve Ellcey
@ 2007-01-08 18:47                           ` Daniel Jacobowitz
  2007-01-08 22:32                             ` Steve Ellcey
  0 siblings, 1 reply; 41+ messages in thread
From: Daniel Jacobowitz @ 2007-01-08 18:47 UTC (permalink / raw)
  To: Steve Ellcey; +Cc: gcc-patches, dave.anglin

On Mon, Jan 08, 2007 at 10:17:12AM -0800, Steve Ellcey wrote:
> make[4]: *** No rule to make target `/proj/opensrc/nightly/build-hppa64-hp-hpux11.11-trunk/obj_gcc/hppa64-hp-hpux11.11/libgcc/libgcc_stub.a', needed by `T_TARGET'.  Stop.

> libgcc_stub.a: $(LIBGCCSTUB_OBJS)
>         -rm -rf libgcc_stub.a
>         $(AR) rc libgcc_stub.a $(LIBGCCSTUB_OBJS)
>         $(RANLIB) libgcc_stub.a
> 
> But I am not sure how to change this to handle the new top-level libgcc
> setup.

It ought to have some $(T)s in it.  Does this help?

$(T)libgcc_stub.a: $(LIBGCCSTUB_OBJS)
        -rm -rf $(T)libgcc_stub.a
        $(AR) rc $(T)libgcc_stub.a $(LIBGCCSTUB_OBJS)
        $(RANLIB) $(T)libgcc_stub.a

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-08 18:47                           ` Daniel Jacobowitz
@ 2007-01-08 22:32                             ` Steve Ellcey
  2007-01-08 22:51                               ` Daniel Jacobowitz
  0 siblings, 1 reply; 41+ messages in thread
From: Steve Ellcey @ 2007-01-08 22:32 UTC (permalink / raw)
  To: drow; +Cc: gcc-patches, dave.anglin

> It ought to have some $(T)s in it.  Does this help?
> 
> $(T)libgcc_stub.a: $(LIBGCCSTUB_OBJS)
>         -rm -rf $(T)libgcc_stub.a
>         $(AR) rc $(T)libgcc_stub.a $(LIBGCCSTUB_OBJS)
>         $(RANLIB) $(T)libgcc_stub.a
> 
> -- 
> Daniel Jacobowitz
> CodeSourcery

Yup, that fixed it and I successfully bootstrapped hppa64-hp-hpux11.11.
Are you going to check it in?

Steve Ellcey
sje@cup.hp.com

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: libgcc move to the top level
  2007-01-08 22:32                             ` Steve Ellcey
@ 2007-01-08 22:51                               ` Daniel Jacobowitz
  0 siblings, 0 replies; 41+ messages in thread
From: Daniel Jacobowitz @ 2007-01-08 22:51 UTC (permalink / raw)
  To: Steve Ellcey; +Cc: gcc-patches, dave.anglin

On Mon, Jan 08, 2007 at 02:31:30PM -0800, Steve Ellcey wrote:
> > It ought to have some $(T)s in it.  Does this help?
> > 
> > $(T)libgcc_stub.a: $(LIBGCCSTUB_OBJS)
> >         -rm -rf $(T)libgcc_stub.a
> >         $(AR) rc $(T)libgcc_stub.a $(LIBGCCSTUB_OBJS)
> >         $(RANLIB) $(T)libgcc_stub.a
> > 
> > -- 
> > Daniel Jacobowitz
> > CodeSourcery
> 
> Yup, that fixed it and I successfully bootstrapped hppa64-hp-hpux11.11.
> Are you going to check it in?

OK, done.  You might want to check that "make install" installs
everything it's supposed to - I think it will, but I had more
trouble with installation than I expected from these changes.

-- 
Daniel Jacobowitz
CodeSourcery

2007-01-08  Daniel Jacobowitz  <dan@codesourcery.com>

	* config/pa/t-pa64 (libgcc_stub.a): Use $(T).

Index: config/pa/t-pa64
===================================================================
--- config/pa/t-pa64	(revision 120594)
+++ config/pa/t-pa64	(working copy)
@@ -22,7 +22,7 @@ jvrc-stub.o: stublib.c $(GCC_PASSES)
 	$(GCC_FOR_TARGET) -c -O2 -DL_Jv_RegisterClasses stublib.c \
 	  -o jvrc-stub.o
 
-libgcc_stub.a: $(LIBGCCSTUB_OBJS)
-	-rm -rf libgcc_stub.a
-	$(AR) rc libgcc_stub.a $(LIBGCCSTUB_OBJS)
-	$(RANLIB) libgcc_stub.a
+$(T)libgcc_stub.a: $(LIBGCCSTUB_OBJS)
+	-rm -rf $(T)libgcc_stub.a
+	$(AR) rc $(T)libgcc_stub.a $(LIBGCCSTUB_OBJS)
+	$(RANLIB) $(T)libgcc_stub.a

^ permalink raw reply	[flat|nested] 41+ messages in thread

end of thread, other threads:[~2007-01-08 22:51 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-12-17  3:15 libgcc move to the top level Daniel Jacobowitz
2006-12-17  3:48 ` Daniel Jacobowitz
2006-12-19 16:09 ` Paolo Bonzini
2006-12-19 19:18   ` Daniel Jacobowitz
2006-12-19 20:06     ` Paolo Bonzini
2006-12-19 20:26       ` Daniel Jacobowitz
2006-12-20  7:56         ` Paolo Bonzini
2006-12-29  2:09           ` Daniel Jacobowitz
2006-12-29 10:55             ` Paolo Bonzini
2006-12-20  0:23       ` Mike Stump
2006-12-20  0:35         ` Daniel Jacobowitz
2006-12-29 11:27     ` Paolo Bonzini
2006-12-29 14:50       ` Daniel Jacobowitz
2006-12-29 15:29         ` Paolo Bonzini
2006-12-29 16:13           ` Daniel Jacobowitz
2006-12-29 16:31             ` Paolo Bonzini
2006-12-29 16:36               ` Daniel Jacobowitz
2006-12-29 16:42                 ` Paolo Bonzini
2006-12-29 18:01             ` Daniel Jacobowitz
2006-12-30  8:20               ` Paolo Bonzini
2006-12-30 20:19                 ` Daniel Jacobowitz
2006-12-31 18:43                   ` Paolo Bonzini
2006-12-31 19:56                     ` Daniel Jacobowitz
2007-01-01 18:10                       ` Paolo Bonzini
2007-01-01 21:14                         ` Mike Stump
2007-01-08 18:17                         ` Steve Ellcey
2007-01-08 18:47                           ` Daniel Jacobowitz
2007-01-08 22:32                             ` Steve Ellcey
2007-01-08 22:51                               ` Daniel Jacobowitz
2007-01-04 12:32                       ` Andreas Schwab
2007-01-04 14:05                         ` Daniel Jacobowitz
2007-01-04 14:57                           ` Marcin Dalecki
2007-01-04 15:02                             ` Daniel Jacobowitz
2007-01-04 15:09                               ` Paolo Bonzini
2007-01-04 15:32                                 ` Marcin Dalecki
2007-01-04 15:39                                   ` Paolo Bonzini
2007-01-04 18:05                                     ` Marcin Dalecki
2007-01-04 16:13                               ` Marcin Dalecki
2007-01-04 16:34                                 ` Daniel Jacobowitz
2007-01-04 17:13                                   ` Marcin Dalecki
2007-01-04 16:52                           ` Daniel Jacobowitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).