Patchwork CFT: [build] Move libgcc2 to toplevel libgcc

login
register
mail settings
Submitter Rainer Orth
Date Aug. 15, 2011, 5:19 p.m.
Message ID <yddbovqh9t0.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/110081/
State New
Headers show

Comments

Rainer Orth - Aug. 15, 2011, 5:19 p.m.
On top of the crtstuff and libgcc1 patches (and requiring the PICFLAG
centralization still under discussion), here's the bulk of the remaining
moves: it moves all LIBGCC2*, LIB2* macros and referenced files.

Despite its size, the patch should be quite straightforward.

* libgcc is slowly getting cluttered.  One may consider moving related
  files to their own subdirectories.

* Again, I noticed an unused target file,
  config/cris/cris_abi_symbol.c.  I assume it's a leftover from the
  cris-aout port and can go.

Tested as described in the previous submissions.

	Rainer


2011-07-23  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	toplevel:
	* Makefile.tpl (EXTRA_GCC_FLAGS): Remove LIBGCC2_CFLAGS,
	LIBGCC2_DEBUG_CFLAGS, LIBGCC2_INCLUDES.
	* Makefile.in: Regenerate.

	config:
	* mh-interix (LIBGCC2_DEBUG_CFLAGS): Remove.

	gcc:
	* Makefile.in (LIBGCC2_DEBUG_CFLAGS LIBGCC2_CFLAGS)
	(LIBGCC2_INCLUDES, TARGET_LIBGCC2_CFLAGS, LIB2FUNCS_EXTRA)
	(LIB2FUNCS_STATIC_EXTRA, LIB2FUNCS_EXCLUDE, T, T_TARGET)
	(INCLUDES_FOR_TARGET): Remove.
	(LIBGCC2_CFLAGS): Don't export.
	(LIB2FUNCS_ST, LIB2_DIVMOD_FUNCS, LIB2ADD, LIB2ADD_ST, srcdirify):
	Remove.
	(libgcc-support): Remove $(LIB2ADD), $(LIB2ADD_ST) dependencies.
	(libgcc.mvars): Likewise.
	Don't emit LIB2FUNCS_ST, LIB2FUNCS_EXCLUDE, LIB2ADD, LIB2ADD_ST,
	LIB2_SIDITI_CONV_FUNCS, LIB2_DIVMOD_FUNCS, LIBGCC2_CFLAGS,
	TARGET_LIBGCC2_CFLAGS.
	Emit GTHREAD_FLAGS.
	* libgcc2.c, libgcc2.h, gbl-ctors.h, longlong.h: Move to ../libgcc.
	* config/darwin-64.c: Move to ../libgcc/config.
	* config/divmod.c, config/floatunsidf.c, config/floatunsisf.c,
	config/floatunsitf.c, config/floatunsixf.c, config/udivmod.c,
	config/udivmodsi4.c: Move to ../libgcc/config.
	* config/gthr-posix.c: Move to ../libgcc/config/alpha.
	* config/memcmp.c, config/memcpy.c, config/memmove.c,
	config/memset.c: Move to ../libgcc/config.
	* config/t-darwin (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/t-freebsd: Remove.
	* config/t-freebsd-thread: Move to ../libgcc/config.
	* config/t-libgcc-pic: Move to ../libgcc/config.
	* config/t-libunwind (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/t-linux: Remove.
	* config/t-lynx (TARGET_LIBGCC2_CFLAGS, LIBGCC, INSTALL_LIBGCC):
	Remove
	* config/t-openbsd-thread: Move to ../libgcc/config.
	* config/t-rtems (LIBGCC2_INCLUDES): Remove.
	* config/t-sol2 (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/t-svr4: Remove.
	* config/t-vxworks (LIBGCC, INSTALL_LIBGCC, TARGET_LIBGCC2_CFLAGS)
	(LIBGCC2_DEBUG_CFLAGS, LIB2FUNCS_EXTRA, LIBGCC2_INCLUDES): Remove.
	* config/vxlib.c, config/vxlib-tls.c: Move to ../libgcc/config.
	* config/alpha/qrnnd.asm: Move to ../libgcc/config/alpha/qrnnd.S.
	* config/alpha/t-alpha, config/alpha/t-ieee: Remove.
	* config/alpha/t-vms (LIB2FUNCS_EXTRA, LIBGCC, INSTALL_LIBGCC):
	Remove.
	* config/alpha/vms-gcc_shell_handler.c: Move to ../libgcc/config/alpha.
	* config/arm/bpabi.c, config/arm/unaligned-funcs.c,
	config/arm/fp16.c, config/arm/linux-atomic.c: Move to
	../libgcc/config/arm.
	* config/arm/t-arm-elf (LIBGCC, INSTALL_LIBGCC)
	(TARGET_LIBGCC2_CFLAGS): Remove.
	* config/arm/t-bpabi, config/arm/t-linux: Remove.
	* config/arm/t-linux-eabi (TARGET_LIBGCC2_CFLAGS)
	(LIB2FUNCS_STATIC_EXTRA): Remove.
	* config/arm/t-netbsd: Remove.
	* config/arm/t-strongarm-elf (LIBGCC, INSTALL_LIBGCC)
	(TARGET_LIBGCC2_CFLAGS): Remove.
	* config/arm/t-symbian (LIB2FUNCS_STATIC_EXTRA): Remove.
	* config/arm/t-wince-pe (LIBGCC, INSTALL_LIBGCC)
	(TARGET_LIBGCC2_CFLAGS): Remove.
	* config/avr/t-avr (LIB2FUNCS_EXCLUDE, TARGET_LIBGCC2_CFLAGS)
	(LIBGCC, INSTALL_LIBGCC): Remove.
	* config/bfin/t-bfin-elf (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/bfin/t-bfin-linux: Likewise.
	* config/bfin/t-bfin-uclinux: Likewise.
	* config/c6x/eqd.c, config/c6x/eqf.c, config/c6x/ged.c,
	config/c6x/gef.c, config/c6x/gtd.c, config/c6x/gtf.c,
	config/c6x/led.c, config/c6x/lef.c, config/c6x/ltd.c,
	config/c6x/ltf.c: Move to ../libgcc/config/c6x.
	* config/c6x/t-c6x-elf (LIB2FUNCS_EXCLUDE, LIB2FUNCS_EXTRA):
	Remove.
	* config/c6x/t-c6x-uclinux (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/cris/arit.c, config/cris/cris_abi_symbol.c: Move to
	../libgcc/config/cris.
	* config/cris/cris.h: Remove obsolete comment.
	* config/cris/mulsi3.asm: Move to ../libgcc/config/cris/mulsi3.S.
	* config/cris/t-cris (LIB2FUNCS_EXTRA, CRIS_LIB1CSRC)
	($(LIB2FUNCS_EXTRA)): Remove.
	* config/cris/t-elfmulti (LIB2FUNCS_STATIC_EXTRA, INSTALL_LIBGCC)
	(LIBGCC): Remove.
	* config/cris/t-linux (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/fr30/t-fr30: Remove.
	* config/frv/cmovd.c, config/frv/cmovh.c, config/frv/cmovw.c,
	config/frv/modi.c, config/frv/uitod.c, config/frv/uitof.c,
	config/frv/ulltod.c, config/frv/ulltof.c, config/frv/umodi.c: Move
	to ../libgcc/config/frv.
	* config/frv/t-frv (LIB2FUNCS_EXTRA, TARGET_LIBGCC2_CFLAGS)
	(cmovh.c, cmovw.c, cmovd.c, modi.c, umodi.c, uitof.c, uitod.c)
	(ulltof.c, LIBGCC, INSTALL_LIBGCC): Remove.
	* config/frv/t-linux (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/h8300/clzhi2.c, config/h8300/ctzhi2.c,
	config/h8300/fixunssfsi.c, config/h8300/parityhi2.c,
	config/h8300/popcounthi2.c: Move to ../libgcc/config/h8300.
	* config/h8300/t-h8300 (LIB2FUNCS_EXTRA, TARGET_LIBGCC2_CFLAGS)
	(LIBGCC, INSTALL_LIBGCC): Remove.
	* config/i386/gthr-win32.c: Move to ../libgcc/config/i386.
	* config/i386/t-cygming (LIBGCC2_INCLUDES): Remove.
	* config/i386/t-cygwin: Remove.
	* config/i386/t-darwin (LIB2_SIDITI_CONV_FUNCS, LIB2FUNCS_EXTRA)
	(LIB2FUNCS_EXCLUDE): Remove.
	* config/i386/t-darwin64 (LIB2_SIDITI_CONV_FUNCS, LIB2FUNCS_EXTRA)
	(LIBGCC, INSTALL_LIBGCC): Remove.
	* config/i386/t-gthr-win32: Move to ../libgcc/config/i386.
	* config/i386/t-linux64 (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/i386/t-mingw-w32: Likewise.
	* config/i386/t-mingw-w64: Likewise.
	* config/i386/t-openbsd: Likewise.
	* config/i386/t-nto: Remove.
	* config/ia64/quadlib.c: Move to ../libgcc/config/ia64.
	* config/ia64/t-hpux (LIBGCC, INSTALL_LIBGCC, LIB2FUNCS_EXTRA)
	(quadlib.c): Remove.
	* config/ia64/t-ia64: Remove comment.
	* config/iq2000/lib2extra-funcs.c: Move to
	../libgcc/config/iq2000/lib2funcs.c.
	* config/iq2000/t-iq2000: Remove.
	* config/m32c/m32c-lib2.c: Move to ../libgcc/config/m32c/lib2funcs.c.
	* config/m32c/m32c-lib2-trapv.c: Move to ../libgcc/config/m32c/trapv.c.
	* config/m32r/t-linux (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/m32c/t-m32c (LIB2FUNCS_EXTRA): Remove.
	* config/m32r/t-m32r (TARGET_LIBGCC2_CFLAGS, LIBGCC)
	(INSTALL_LIBGCC): Remove.
	* config/m68k/fpgnulib.c: Move to ../libgcc/config/m68k.
	* config/m68k/t-floatlib: Remove.
	* config/m68k/t-mlibs (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/mcore/t-mcore (TARGET_LIBGCC2_CFLAGS): Remove.
	Fix typo.
	(LIBGCC, INSTALL_LIBGCC): Remove.
	* config/mep/mep-lib2.c: Move to ../libgcc/config/mep/lib2funcs.c.
	* config/mep/mep-tramp.c: Move to ../libgcc/config/mep/tramp.c.
	* config/mep/t-mep (LIB2FUNCS_EXTRA): Remove.
	* config/mips/t-elf (TARGET_LIBGCC2_CFLAGS, LIBGCC)
	(INSTALL_LIBGCC): Remove.
	* config/mips/t-isa3264: Likewise.
	* config/mips/t-mips (LIB2_SIDITI_CONV_FUNCS): Remove.
	* config/mips/t-r3900 (TARGET_LIBGCC2_CFLAGS, LIBGCC)
	(INSTALL_LIBGCC): Remove.
	* config/mips/t-sde (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/mips/t-sr71k (TARGET_LIBGCC2_CFLAGS, LIBGCC)
	(INSTALL_LIBGCC): Remove.
	* config/mips/t-vr (TARGET_LIBGCC2_CFLAGS)
	(LIB2FUNCS_STATIC_EXTRA): Remove.
	* config/mips/vr4120-div.S: Move to ../libgcc/config/mips.
	* config/mmix/t-mmix (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/mn10300/t-mn10300 (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/pa/fptr.c, config/pa/linux-atomic.c: Move to
	../libgcc/config/pa.
	* config/pa/lib2funcs.asm: Move to ../libgcc/config/pa/lib2funcs.S.
	* config/pa/quadlib.c: Move to ../libgcc/config/pa.
	* config/pa/t-dce-thr (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/pa/t-linux, config/pa/t-linux64: Remove.
	* config/pa/t-pa-hpux, config/pa/t-pa-hpux10,
	config/pa/t-pa-hpux11, config/pa/t-pa64: Remove.
	* config/pdp11/t-pdp11 (TARGET_LIBGCC2_CFLAGS, LIB2FUNCS_EXTRA):
	Remove.
	* config/picochip/libgccExtras: Move to ../libgcc/config/picochip.
	* config/picochip/t-picochip (LIB2FUNCS_EXTRA, RANLIB_FOR_TARGET)
	(TARGET_LIBGCC2_CFLAGS, LIBGCC2_DEBUG_CFLAGS): Remove.
	* config/rs6000/crtresfpr.asm: Move to
	../libgcc/config/rs6000/crtresfpr.S.
	* config/rs6000/crtresgpr.asm: Move to
	../libgcc/config/rs6000/crtresgpr.S.
	* config/rs6000/crtresxfpr.asm: Move to
	../libgcc/config/rs6000/crtresxfpr.S.
	* config/rs6000/crtresxgpr.asm: Move to
	../libgcc/config/rs6000/crtresxgpr.S.
	* config/rs6000/crtsavfpr.asm: Move to
	../libgcc/config/rs6000/crtsavfpr.S.
	* config/rs6000/crtsavgpr.asm: Move to
	../libgcc/config/rs6000/crtsavgpr.S.
	* config/rs6000/darwin-asm.h: Move to ../libgcc/config/rs6000.
	* config/rs6000/darwin-fpsave.asm: Move to
	../libgcc/config/rs6000/darwin-fpsave.S.
	* config/rs6000/darwin-tramp.asm: Move to
	../libgcc/config/rs6000/darwin-tramp.S.
	* config/rs6000/darwin-vecsave.asm: Move to
	../libgcc/config/rs6000/darwin-vecsave.S.
	* config/rs6000/darwin-world.asm: Move to
	../libgcc/config/rs6000/darwin-world.S.
	* config/rs6000/e500crtres32gpr.asm: Move to
	../libgcc/config/rs6000/e500crtres32gpr.S.
	* config/rs6000/e500crtres64gpr.asm: Move to
	../libgcc/config/rs6000/e500crtres64gpr.S.
	* config/rs6000/e500crtres64gprctr.asm: Move to
	../libgcc/config/rs6000/e500crtres64gprctr.S.
	* config/rs6000/e500crtrest32gpr.asm: Move to
	../libgcc/config/rs6000/e500crtrest32gpr.S.
	* config/rs6000/e500crtrest64gpr.asm: Move to
	../libgcc/config/rs6000/e500crtrest64gpr.S.
	* config/rs6000/e500crtresx32gpr.asm: Move to
	../libgcc/config/rs6000/e500crtresx32gpr.S.
	* config/rs6000/e500crtresx64gpr.asm: Move to
	../libgcc/config/rs6000/e500crtresx64gpr.S.
	* config/rs6000/e500crtsav32gpr.asm: Move to
	../libgcc/config/rs6000/e500crtsav32gpr.S.
	* config/rs6000/e500crtsav64gpr.asm: Move to
	../libgcc/config/rs6000/e500crtsav64gpr.S.
	* config/rs6000/e500crtsav64gprctr.asm: Move to
	../libgcc/config/rs6000/e500crtsav64gprctr.S.
	* config/rs6000/e500crtsavg32gpr.asm: Move to
	../libgcc/config/rs6000/e500crtsavg32gpr.S.
	* config/rs6000/e500crtsavg64gpr.asm: Move to
	../libgcc/config/rs6000/e500crtsavg64gpr.S.
	* config/rs6000/e500crtsavg64gprctr.asm: Move to
	../libgcc/config/rs6000/e500crtsavg64gprctr.S.
	* config/rs6000/eabi.asm: Move to ../libgcc/config/rs6000/eabi.S.
	* config/rs6000/t-aix43 (LIBGCC, INSTALL_LIBGCC, LIB2FUNCS_EXTRA)
	(TARGET_LIBGCC2_CFLAGS): Remove.
	* config/rs6000/t-aix52: Likewise.
	* config/rs6000/t-darwin: Remove.
	* config/rs6000/t-darwin64 (LIB2_SIDITI_CONV_FUNCS)
	(LIB2FUNCS_EXTRA): Remove.
	* config/rs6000/t-fprules (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/rs6000/t-linux64 (TARGET_LIBGCC2_CFLAGS): Remove.
	* config/rs6000/t-lynx (LIB2FUNCS_EXTRA, tramp.S, LIBGCC)
	(INSTALL_LIBGCC): Remove.
	* config/rs6000/t-netbsd (LIB2FUNCS_EXTRA)
	(LIB2FUNCS_STATIC_EXTRA, tramp.S, crtsavfpr.S, crtresfpr.S)
	(crtsavgpr.S, crtresgpr.S, crtresxfpr.S, crtresxgpr.S, LIBGCC)
	(INSTALL_LIBGCC, $(T)crtsavfpr$(objext), $(T)crtresfpr$(objext))
	(($(T)crtsavgpr$(objext), $(T)crtresgpr$(objext),
	$(T)crtresxfpr$(objext), $(T)crtresxgpr$(objext)): Remove.
	* config/rs6000/t-ppccomm (LIB2FUNCS_EXTRA)
	(LIB2FUNCS_STATIC_EXTRA, eabi.S, tramp.S): Remove.
	* config/rs6000/t-spe (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/rs6000/t-vxworks: Remove comment.
	* config/rs6000/tramp.asm: Move to ../libgcc/config/rs6000/tramp.S.
	* config/rx/t-rx (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/sh/linux-atomic.asm: Move to
	../libgcc/config/sh/linux-atomic.S.
	* config/sh/t-linux (LIB2FUNCS_EXTRA): Remove.
	* config/sh/t-netbsd: Remove.
	* config/sh/t-sh (TARGET_LIBGCC2_CFLAGS, LIBGCC, INSTALL_LIBGCC):
	Remove.
	* config/sparc/t-elf (LIBGCC, INSTALL_LIBGCC): Remove.
	* config/sparc/t-leon: Likewise.
	* config/sparc/t-leon3: Likewise.
	* config/sparc/t-linux64: Likewise.
	* config/sparc/t-netbsd64: Fix typo.
	Remove comment.
	* config/spu/divmodti4.c, config/spu/divv2df3.c,
	config/spu/float_disf.c, config/spu/float_unsdidf.c,
	config/spu/float_unsdisf.c, config/spu/float_unssidf.c,
	config/spu/mfc_multi_tag_release.c,
	config/spu/mfc_multi_tag_reserve.c, config/spu/mfc_tag_release.c,
	config/spu/mfc_tag_reserve.c, config/spu/mfc_tag_table.c,
	config/spu/multi3.c, config/spu/spu_cache.h,
	config/spu/spu_internals.h, config/spu/spu_intrinsics.h,
	config/spu/spu_mfcio.h, config/spu/vec_types.h,
	config/spu/vmx2spu.h: Move to ../libgcc/config/spu.
	* config/spu/t-spu-elf (TARGET_LIBGCC2_CFLAGS, LIB2FUNCS_EXCLUDE)
	(LIB2FUNCS_STATIC_EXTRA, LIB2_SIDITI_CONV_FUNCS, LIBGCC)
	(INSTALL_LIBGCC): Remove.
	* config/stormy16/stormy16-lib2.c: Move to
	../libgcc/config/stormy16/lib2.c.
	* config/stormy16/stormy16-lib2-ashlsi3.c: Move to
	../libgcc/config/stormy16/ashlsi3.c.
	* config/stormy16/stormy16-lib2-ashrsi3.c: Move to
	../libgcc/config/stormy16/ashrsi3.c.
	* config/stormy16/stormy16-lib2-clzhi2.c: Move to
	../libgcc/config/stormy16/clzhi2.c.
	* config/stormy16/stormy16-lib2-cmpsi2.c: Move to
	../libgcc/config/stormy16/cmpsi2.c.
	* config/stormy16/stormy16-lib2-ctzhi2.c: Move to
	../libgcc/config/stormy16/ctzhi2.c.
	* config/stormy16/stormy16-lib2-divsi3.c: Move to
	../libgcc/config/stormy16/divsi3.c.
	* config/stormy16/stormy16-lib2-ffshi2.c: Move to
	../libgcc/config/stormy16/ffshi2.c.
	* config/stormy16/stormy16-lib2-lshrsi3.c: Move to
	../libgcc/config/stormy16/lshrsi3.c.
	* config/stormy16/stormy16-lib2-modsi3.c: Move to
	../libgcc/config/stormy16/modsi3.c.
	* config/stormy16/stormy16-lib2-parityhi2.c: Move to
	../libgcc/config/stormy16/parityhi2.c.
	* config/stormy16/stormy16-lib2-popcounthi2.c: Move to
	../libgcc/config/stormy16/popcounthi2.c.
	* config/stormy16/stormy16-lib2-ucmpsi2.c: Move to
	../libgcc/config/stormy16/ucmpsi2.c.
	* config/stormy16/stormy16-lib2-udivmodsi4.c: Move to
	../libgcc/config/stormy16/udivmodsi4.c.
	* config/stormy16/stormy16-lib2-udivsi3.c: Move to
	../libgcc/config/stormy16/udivsi3.c.
	* config/stormy16/stormy16-lib2-umodsi3.c: Move to
	../libgcc/config/stormy16/umodsi3.c.
	* config/stormy16/t-stormy16: Move to ../libgcc/config/t-stormy16.
	* config/v850/t-v850 (INSTALL_LIBGCC): Remove.
	* config/xtensa/lib2funcs.S: Move to ../libgcc/config/xtensa.
	* config/xtensa/t-elf: Remove.
	* config/xtensa/t-xtensa (LIB2FUNCS_EXTRA): Remove.
	* config.gcc (*-*-freebsd*): Remove t-freebsd, t-freebsd-thread
	from tmake_file.
	(*-*-linux*, frv-*-*linux*, *-*-kfreebsd*-gnu, *-*-knetbsd*-gnu,
	*-*-gnu*, *-*-kopensolaris*-gnu): Remove t-linux from tmake_file.
	(*-*-netbsd*): Remove t-libgcc-pic from tmake_file.
	(*-*-openbsd*): Likewise.
	Remove t-openbsd-thread for posix threads.
	(alpha*-*-linux*): Remove alpha/t-alpha, alpha/t-ieee
	from tmake_file.
	(alpha*-*-freebsd*): Likewise.
	(alpha*-*-netbsd*): Likewise.
	(alpha*-*-openbsd*): Likewise.
	(alpha64-dec-*vms*): Likewise.
	(alpha*-dec-*vms*): Likewise.
	(arm*-*-netbsdelf*): Remove arm/t-netbsd from tmake_file.
	(arm*-*-linux*): Remove t-linux from tmake_file.
	Remove arm/t-bpabi from tmake_file for arm*-*-linux-*eabi.
	(arm*-*-uclinux*): Remove arm/t-bpabi from tmake_file for
	arm*-*-uclinux*eabi.
	(arm*-*-eabi*, arm*-*-symbianelf* ): Remove arm/t-bpabi from
	tmake_file for arm*-*-eabi*.
	(crisv32-*-linux*, cris-*-linux*): Remove tmake_file.
	(fr30-*-elf): Remove tmake_file.
	(hppa*64*-*-linux*): Remove tmake_file.
	(hppa*-*-linux*): Likewise.
	(hppa[12]*-*-hpux10*): Remove pa/t-pa-hpux10, pa/t-pa-hpux from
	tmake_file.
	(hppa*64*-*-hpux11*): Remove pa/t-pa64, pa/t-pa-hpux from tmake_file.
	(hppa[12]*-*-hpux11*): Remove pa/t-pa-hpux11, pa/t-pa-hpux from
	tmake_file.
	(i[34567]86-*-elf*): Remove tmake_file.
	(x86_64-*-elf*): Likewise.
	(i[34567]86-*-nto-qnx*): Likewise.
	(i[34567]86-*-cygwin*): Remove i386/t-cygwin from tmake_file.
	(i[34567]86-*-mingw*, x86_64-*-mingw*): Remove i386/t-gthr-win32
	from tmake_file if using win32 threads.
	(iq2000*-*-elf*): Remove tmake-file.
	(microblaze*-linux*): Likewise.
	(sh-*-elf*, sh[12346l]*-*-elf*, sh-*-linux*)
	(sh[2346lbe]*-*-linux*, sh-*-netbsdelf*, shl*-*-netbsdelf*)
	(sh5-*-netbsd*, sh5l*-*-netbsd*, sh64-*-netbsd*)
	(sh64l*-*-netbsd*): Remove sh/t-netbsd from tmake_file for
	sh5*-*-netbsd*, sh64*-netbsd*, *-*-netbsd.
	(xtensa*-*-elf*): Remove tmake_file.

	gcc/po:
	* EXCLUDES (config/vxlib.c, gbl-ctors.h, libgcc2.c, libgcc2.h)
	(longlong.h): Remove.

	libgcc:
	* configure.ac: Include ../config/picflag.m4.
	(GCC_PICFLAG): Call it.
	Substitute.
	* configure: Regenerate.
	* Makefile.in (gcc_srcdir): Remove.
	(LIBGCC2_DEBUG_CFLAGS, LIBGCC2_CFLAGS, LIBGCC2_INCLUDES)
	(HOST_LIBGCC2_CFLAGS, PICFLAG, LIB2FUNCS_ST, LIB2FUNCS_EXCLUDE)
	(LIB2_DIVMOD_FUNCS, LIB2ADD, LIB2ADD_ST): Set.
	($(lib2funcs-o), $(lib2funcs-s-o), $(lib2-divmod-o))
	($(lib2-divmod-s-o)): Use $(srcdir) to refer to libgcc2.c.
	Use $<.
	Remove comment.
	* libgcc2.c, libgcc2.h, gbl-ctors.h, longlong.h: New files.
	* siditi-object.mk ($o$(objext), $(o)_s$(objext)): Use $(srcdir)
	to refer to libgcc2.c.
	Use $<.
	* config/darwin-64.c: New file.
	* config/darwin-crt3.c: Remove comment.
	* config/divmod.c, config/floatunsidf.c, config/floatunsisf.c,
	config/floatunsitf.c, config/floatunsixf.c, config/udivmod.c,
	config/udivmodsi4.c: New files.
	* config/memcmp.c, config/memcpy.c, config/memmove.c,
	config/memset.c: New files.
	* config/t-crtstuff-pic (CRTSTUFF_T_CFLAGS_S): Use $(PICFLAG).
	* config/t-darwin (HOST_LIBGCC2_CFLAGS): Set.
	* config/t-freebsd-thread, config/t-libgcc-pic: New files.
	* config/t-libunwind (HOST_LIBGCC2_CFLAGS): Set.
	* config/t-openbsd-thread: New file.
	* config/t-sol2 (HOST_LIBGCC2_CFLAGS): Remove.
	* config/t-vxworks, config/vxlib-tls.c, config/vxlib.c: New files.
	* config/alpha/gthr-posix.c, config/alpha/qrnnd.S: New files.
	* config/alpha/t-alpha (LIB2ADD): Use $(srcdir) to refer to
	qrnnd.S.
	Adapt filename.
	* config/alpha/t-osf-pthread (LIB2ADD): Use $(srcdir)/config/alpha
	to refer to gthr-posix.c.
	* config/alpha/t-vms (LIB2ADD): Set.
	* config/alpha/vms-gcc_shell_handler.c: New file.
	* config/arm/bpabi.c, config/arm/fp16.c,
	config/arm/linux-atomic.c, config/arm/unaligned-funcs.c,: New files.
	* config/arm/t-bpabi (LIB2ADD, LIB2ADD_ST): Set.
	* config/arm/t-elf (HOST_LIBGCC2_CFLAGS): Set.
	* config/arm/t-linux: Likewise.
	* config/arm/t-linux-eabi (LIB2ADD_ST): Add.
	* config/arm/t-netbsd: New file.
	* config/arm/t-strongarm-elf (HOST_LIBGCC2_CFLAGS): Set.
	* config/arm/t-symbian (LIB2ADD_ST): Set.
	* config/avr/t-avr (LIB2FUNCS_EXCLUDE, HOST_LIBGCC2_CFLAGS): Set.
	* config/bfin/t-crtstuff (CRTSTUFF_T_CFLAGS): Use $(PICFLAG).
	* config/bfin/t-elf: New file.
	* config/c6x/eqd.c, config/c6x/eqf.c, config/c6x/ged.c,
	config/c6x/gef.c, config/c6x/gtd.c, config/c6x/gtf.c,
	config/c6x/led.c, config/c6x/lef.c, config/c6x/ltd.c,
	config/c6x/ltf.c: New files.
	* config/c6x/t-elf (LIB2FUNCS_EXCLUDE, LIB2ADD)
	(HOST_LIBGCC2_CFLAGS): Set.
	* config/c6x/t-uclinux (HOST_LIBGCC2_CFLAGS): Set.
	(CRTSTUFF_T_CFLAGS): Use $(PICFLAG).
	* config/cris/arit.c, config/cris/cris_abi_symbol.c,
	config/cris/mulsi3.S, config/cris/t-cris: New files.
	* config/cris/t-elfmulti (LIB2ADD_ST): Set.
	* config/cris/t-linux (HOST_LIBGCC2_CFLAGS): Remove.
	* config/frv/cmovd.c, config/frv/cmovh.c, config/frv/cmovw.c,
	config/frv/modi.c, config/frv/uitod.c, config/frv/uitof.c,
	config/frv/ulltod.c, config/frv/ulltof.c, config/frv/umodi.c: New
	files.
	* config/frv/t-frv (LIB2ADD): Set.
	* config/frv/t-linux (CRTSTUFF_T_CFLAGS): Use $(PICFLAG).
	* config/h8300/clzhi2.c, config/h8300/ctzhi2.c,
	config/h8300/fixunssfsi.c, config/h8300/parityhi2.c,
	config/h8300/popcounthi2.c: New files.
	* config/h8300/t-h8300 (LIB2ADD, HOST_LIBGCC2_CFLAGS): Set.
	* config/i386/gthr-win32.c: New file.
	* config/i386/t-cygming (LIBGCC2_INCLUDES): Set.
	* config/i386/t-cygwin: Likewise.
	* config/i386/t-darwin, config/i386/t-darwin64,
	config/i386/t-gthr-win32, config/i386/t-interix: New files.
	* config/i386/t-nto (HOST_LIBGCC2_CFLAGS): Set.
	(CRTSTUFF_T_CFLAGS): Use $(PICFLAG).
	* config/i386/t-sol2 (CRTSTUFF_T_CFLAGS): Use $(PICFLAG).
	* config/ia64/quadlib.c: New file.
	* config/ia64/t-hpux (LIB2ADD): Set.
	* config/ia64/t-ia64: Add comment.
	* config/iq2000/lib2funcs.c, config/iq2000/t-iq2000: New files.
	* config/lm32/t-uclinux (CRTSTUFF_T_CFLAGS): Use $(PICFLAG).
	(HOST_LIBGCC2_CFLAGS): Append, remove -fPIC.
	* config/m32c/lib2funcs.c, config/m32c/trapv.c: New files.
	* config/m32c/t-m32c (LIB2ADD): Set.
	* config/m32r/t-linux (HOST_LIBGCC2_CFLAGS): Set.
	* config/m32r/t-m32r: Likewise.
	* config/m68k/fpgnulib.c: New file.
	* config/m68k/t-floatlib (LIB2ADD): Set.
	(xfgnulib.c): New target.
	* config/mcore/t-mcore (HOST_LIBGCC2_CFLAGS): Set.
	* config/mep/lib2funcs.c, config/mep/tramp.c: New files.
	* config/mep/t-mep (LIB2ADD): Set.
	* config/microblaze/divsi3.asm: Rename to divsi3.S.
	* config/microblaze/moddi3.asm: Rename to moddi3.S.
	* config/microblaze/modsi3.asm: Rename to modsi3.S.
	* config/microblaze/muldi3_hard.asm: Rename to hard.S.
	* config/microblaze/mulsi3.asm: Rename to mulsi3.S.
	* config/microblaze/stack_overflow_exit.asm: Rename to exit.S.
	* config/microblaze/udivsi3.asm: Rename to udivsi3.S.
	* config/microblaze/umodsi3.asm: Rename to umodsi3.S.
	* config/microblaze/t-microblaze (LIB2ADD): Reflect this.
	* config/mips/t-elf, config/mips/t-vr, config/mips/vr4120-div.S:
	New files.
	* config/mips/t-mips (LIB2_SIDITI_CONV_FUNCS): Set.
	* config/mmix/t-mmix (HOST_LIBGCC2_CFLAGS): Set.
	* config/pa/fptr.c, config/pa/lib2funcs.S,
	config/pa/linux-atomic.c, config/pa/quadlib.c: New files.
	* config/pa/t-linux (HOST_LIBGCC2_CFLAGS): Set.
	(LIB2ADD, LIB2ADD_ST): Set.
	* config/pa/t-hpux, config/pa/t-hpux10, config/pa/t-pa64: New files.
	* config/pa/t-linux (HOST_LIBGCC2_CFLAGS, LIB2ADD, LIB2ADD_ST):
	Set.
	* config/pa/t-linux64 (LIB2ADD_ST, HOST_LIBGCC2_CFLAGS): Set.
	* config/pdp11/t-pdp11: New file.
	* config/picochip/libgccExtras/adddi3.S,
	config/picochip/libgccExtras/ashlsi3.S,
	config/picochip/libgccExtras/ashrsi3.S,
	config/picochip/libgccExtras/clzsi2.S,
	config/picochip/libgccExtras/cmpsi2.S,
	config/picochip/libgccExtras/divmod15.S,
	config/picochip/libgccExtras/divmodhi4.S,
	config/picochip/libgccExtras/divmodsi4.S,
	config/picochip/libgccExtras/lshrsi3.S,
	config/picochip/libgccExtras/parityhi2.S,
	config/picochip/libgccExtras/popcounthi2.S,
	config/picochip/libgccExtras/subdi3.S,
	config/picochip/libgccExtras/ucmpsi2.S,
	config/picochip/libgccExtras/udivmodhi4.S,
	config/picochip/libgccExtras/udivmodsi4.S: New files.
	* config/picochip/t-picochip (LIB2ADD, HOST_LIBGCC2_CFLAGS)
	(LIBGCC2_DEBUG_CFLAGS, RANLIB_FOR_TARGET): Set.
	* config/rs6000/crtresfpr.S, config/rs6000/crtresgpr.S,
	config/rs6000/crtresxfpr.S, config/rs6000/crtresxgpr.S,
	config/rs6000/crtsavfpr.S, config/rs6000/crtsavgpr.S)
	config/rs6000/darwin-asm.h, config/rs6000/darwin-fpsave.S,
	config/rs6000/darwin-tramp.S, 	config/rs6000/darwin-vecsave.S,
	config/rs6000/darwin-world.S: New files.
	* config/rs6000/t-darwin (LIB2ADD, LIB2ADD_ST)
	(HOST_LIBGCC2_CFLAGS): Set.
	* config/rs6000/t-darwin64: New file.
	* config/rs6000/t-linux64 (HOST_LIBGCC2_CFLAGS): Set.
	* config/rs6000/t-lynx, config/rs6000/t-netbsd: New files.
	* config/rs6000/t-ppccomm (LIB2ADD): Add
	$(srcdir)/config/rs6000/tramp.S.
	(LIB2ADD_ST): Use $(srcdir)/config/rs6000 to refer to sources.
	Add  $(srcdir)/config/rs6000/eabi.S.
	(crtsavfpr.S, crtresfpr.S, crtsavgpr.S, crtresgpr.S, crtresxfpr.S)
	(crtresxgpr.S, e500crtres32gpr.S, e500crtres64gpr.S)
	(e500crtres64gprctr.S, e500crtrest32gpr.S, e500crtrest64gpr.S)
	(e500crtresx32gpr.S, e500crtresx64gpr.S, e500crtsav32gpr.S)
	(e500crtsav64gpr.S, e500crtsav64gprctr.S, e500crtsavg32gpr.S)
	(e500crtsavg64gpr.S, e500crtsavg64gprctr.S): Remove.
	* config/rs6000/tramp.S: New file.
	* config/s390/t-tpf: Remove.
	* config/sh/linux-atomic.S: New file.
	* config/sh/t-linux (LIB2ADD): Set.
	(HOST_LIBGCC2_CFLAGS): Append, remove -fpic.
	* config/sh/t-netbsd (LIB2ADD, HOST_LIBGCC2_CFLAGS): Set.
	* config/sh/t-sh (unwind-dw2-Os-4-200.o): Use $(srcdir) to refer
	to unwind-dw2.c.
	(HOST_LIBGCC2_CFLAGS): Set.
	* config/sparc/t-sol2 (CRTSTUFF_T_CFLAGS): Use $(PICFLAG).
	* config/spu/divmodti4.c, config/spu/divv2df3.c,
	config/spu/float_disf.c, config/spu/float_unsdidf.c,
	config/spu/float_unsdisf.c, config/spu/float_unssidf.c,
	config/spu/mfc_multi_tag_release.c,
	config/spu/mfc_multi_tag_reserve.c, config/spu/mfc_tag_release.c,
	config/spu/mfc_tag_reserve.c, config/spu/mfc_tag_table.c,
	config/spu/multi3.c, config/spu/spu_cache.h,
	config/spu/spu_internals.h, config/spu/spu_intrinsics.h,
	config/spu/spu_mfcio.h, config/spu/vec_types.h,
	config/spu/vmx2spu.h: New files.
	* config/spu/t-elf (LIB2ADD, LIB2ADD_ST, LIB2_SIDITI_CONV_FUNCS)
	(HOST_LIBGCC2_CFLAGS): Set.
	* config/stormy16/ashlsi3.c, config/stormy16/ashrsi3.c,
	config/stormy16/clzhi2.c, config/stormy16/cmpsi2.c,
	config/stormy16/ctzhi2.c, config/stormy16/divsi3.c,
	config/stormy16/ffshi2.c, config/stormy16/lib2.c,
	config/stormy16/lshrsi3.c, config/stormy16/modsi3.c,
	config/stormy16/parityhi2.c, config/stormy16/popcounthi2.c,
	config/stormy16/t-stormy16, config/stormy16/ucmpsi2.c,
	config/stormy16/udivmodsi4.c, config/stormy16/udivsi3.c,
	config/stormy16/umodsi3.c: New files.
	* config/xtensa/lib2funcs.S: New file.
	* config/xtensa/t-elf (HOST_LIBGCC2_CFLAGS): Set.
	* config/xtensa/t-xtensa (LIB2ADD): Set.
	* config.host (*-*-darwin*): Add t-libgcc-pic to tmake_file.
	(*-*-freebsd*): Add t-freebsd, t-libgcc-pic to tmake_file.
	Add t-freebsd-thread to tmake_file for posix threads.
	(*-*-linux*, frv-*-*linux*, *-*-kfreebsd*-gnu, *-*-knetbsd*-gnu)
	(*-*-gnu*, *-*-kopensolaris*-gnu): Add t-libgcc-pic to tmake_file.
	(*-*-lynxos*): Likewise.
	(*-*-netbsd*): Likewise.
	(*-*-openbsd*): Likewise.
	Add t-openbsd-thread to tmake_file for posix threads.
	(*-*-solaris2*): Add t-libgcc-pic to tmake_file.
	(*-*-vxworks*): Set tmake_file.
	(alpha*-*-linux*): Add alpha/t-alpha, alpha/t-ieee to tmake_file.
	(alpha*-*-freebsd*): Likewise.
	(alpha*-*-netbsd*): Likewise.
	(alpha*-*-openbsd*): Likewise.
	(alpha*-dec-osf5.1*): Remove qrnnd.o, gthr-posix.o from extra_parts.
	(alpha64-dec-*vms*): Add alpha/t-alpha, alpha/t-ieee to tmake_file.
	(alpha*-dec-*vms*): Likewise.
	(arm*-*-netbsdelf*): Add arm/t-netbsd to tmake_file.
	(bfin*-elf*): Add bfin/t-elf to tmake_file.
	(bfin*-uclinux*): Likewise.
	(bfin*-linux-uclibc*): Likewise.
	(crisv32-*-elf): Add cris/t-cris to tmake_file.
	(crisv32-*-none): Likewise.
	(cris-*-elf): Likewise.
	(cris-*-none): Likewise.
	(cris-*-linux*, crisv32-*-linux*): Likewise.
	(hppa[12]*-*-hpux10*): Add pa/t-hpux pa/t-hpux10, t-libgcc-pic to
	tmake_file.
	(hppa*64*-*-hpux11*): Add pa/t-hpux, pa/t-pa64, t-libgcc-pic to
	tmake_file.
	(hppa[12]*-*-hpux11*): Add pa/t-hpux, t-libgcc-pic to tmake_file.
	(i[34567]86-*-elf*): Add t-libgcc-pic to tmake_file.
	(x86_64-*-elf*): Likewise.
	(i[34567]86-*-nto-qnx*): Likewise.
	(i[34567]86-*-mingw*): Add i386/t-gthr-win32 to tmake_file for
	win32 threads.
	(x86_64-*-mingw*): Likewise.
	(i[34567]86-*-interix3*): Add i386/t-interix to tmake_file.
	(lm32-*-uclinux*): Add t-libgcc-pic to tmake_file.
	(mipsisa32-*-elf*, mipsisa32el-*-elf*, mipsisa32r2-*-elf*)
	(mipsisa32r2el-*-elf*, mipsisa64-*-elf*, mipsisa64el-*-elf*)
	(mipsisa64r2-*-elf*, mipsisa64r2el-*-elf*): Add mips/t-elf to
	tmake_file.
	(mipsisa64sr71k-*-elf*): Likewise.
	(mipsisa64sb1-*-elf*, mipsisa64sb1el-*-elf*): Likewise.
	(mips-*-elf*, mipsel-*-elf*): Likewise.
	(mips64-*-elf*, mips64el-*-elf*): Likewise.
	(mips64orion-*-elf*, mips64orionel-*-elf*): Likewise.
	(mips*-*-rtems*): Likewise.
	(mips64vr-*-elf*, mips64vrel-*-elf*): Add mips/t-elf, mips/t-vr
	to tmake_file.
	(pdp11-*-*): Add pdp11/t-pdp11 to tmake_file.
	(powerpc64-*-darwin*): Add rs6000/t-darwin64 to tmake_file.
	(s390x-ibm-tpf*): Add t-libgcc-pic to tmake_file.
	(spu-*-elf*): Likewise.
	(tic6x-*-uclinux): Add t-libgcc-pic to tmake_file.

	libquadmath:
	* printf/gmp-impl.h: Adapt path to longlong.h.
Joseph S. Myers - Aug. 15, 2011, 8:59 p.m.
On Mon, 15 Aug 2011, Rainer Orth wrote:

> On top of the crtstuff and libgcc1 patches (and requiring the PICFLAG
> centralization still under discussion), here's the bulk of the remaining
> moves: it moves all LIBGCC2*, LIB2* macros and referenced files.
> 
> Despite its size, the patch should be quite straightforward.
> 
> * libgcc is slowly getting cluttered.  One may consider moving related
>   files to their own subdirectories.

FWIW, I think libgcc2.c could do with being split up into separate files 
for the separate functions (if not one file per function, at least rather 
more than at present) rather than compiling the same source file so many 
times with different defines.  That would of course clutter things even 
more; I think any such split would need to put all those files in a 
subdirectory.
Rainer Orth - Aug. 16, 2011, 5:16 p.m.
"Joseph S. Myers" <joseph@codesourcery.com> writes:

> On Mon, 15 Aug 2011, Rainer Orth wrote:
>
>> On top of the crtstuff and libgcc1 patches (and requiring the PICFLAG
>> centralization still under discussion), here's the bulk of the remaining
>> moves: it moves all LIBGCC2*, LIB2* macros and referenced files.
>> 
>> Despite its size, the patch should be quite straightforward.
>> 
>> * libgcc is slowly getting cluttered.  One may consider moving related
>>   files to their own subdirectories.
>
> FWIW, I think libgcc2.c could do with being split up into separate files 
> for the separate functions (if not one file per function, at least rather 
> more than at present) rather than compiling the same source file so many 
> times with different defines.  That would of course clutter things even 
> more; I think any such split would need to put all those files in a 
> subdirectory.

Agreed.  I'd prefer to first complete the build side of the migration
from gcc (mostly target headers left now, which seems to be somewhat
involved on first check), then deal with the libgcc-only macros, and
only then look into cleaning up the end result even further.

	Rainer
Paolo Bonzini - Aug. 16, 2011, 9:27 p.m.
On 08/16/2011 10:16 AM, Rainer Orth wrote:
> Agreed.  I'd prefer to first complete the build side of the migration
> from gcc (mostly target headers left now, which seems to be somewhat
> involved on first check), then deal with the libgcc-only macros, and
> only then look into cleaning up the end result even further.

Yes, moving stuff is a prerequisite to cleaning things up.

paolo

Patch

# HG changeset patch
# Parent a5002c1d1cfba6d1f8376d95007a0902288803c4
Move libgcc2 to toplevel libgcc

diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
@@ -3,7 +3,7 @@ 
 #
 # Makefile for directory with subdirs to build.
 #   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-#   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   Free Software Foundation
 #
 # This file is free software; you can redistribute it and/or modify
@@ -871,10 +871,7 @@  TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_P
 EXTRA_GCC_FLAGS = \
 	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
 	"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIBGCC2_CFLAGS=$(LIBGCC2_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIBGCC2_DEBUG_CFLAGS=$(LIBGCC2_DEBUG_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
+	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
 
 GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
 
diff --git a/Makefile.tpl b/Makefile.tpl
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -6,7 +6,7 @@  in
 #
 # Makefile for directory with subdirs to build.
 #   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-#   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   Free Software Foundation
 #
 # This file is free software; you can redistribute it and/or modify
@@ -668,10 +668,7 @@  TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_P
 EXTRA_GCC_FLAGS = \
 	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
 	"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIBGCC2_CFLAGS=$(LIBGCC2_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIBGCC2_DEBUG_CFLAGS=$(LIBGCC2_DEBUG_CFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
-	"`echo 'LIBGCC2_INCLUDES=$(LIBGCC2_INCLUDES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
+	"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
 
 GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
 
diff --git a/config/mh-interix b/config/mh-interix
--- a/config/mh-interix
+++ b/config/mh-interix
@@ -1,7 +1,2 @@ 
 # The shell may not be in /bin. 
 SHELL = sh
-
-# We also need to override LIBGCC2_DEBUG_CFLAGS so libgcc2 will be
-# built without debugging information
-
-LIBGCC2_DEBUG_CFLAGS=
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -667,22 +667,6 @@  ifeq ($(inhibit_libc),true)
 INHIBIT_LIBC_CFLAGS = -Dinhibit_libc
 endif
 
-# Options to use when compiling libgcc2.a.
-#
-LIBGCC2_DEBUG_CFLAGS = -g
-LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(INCLUDES_FOR_TARGET) $(GCC_CFLAGS) \
-		 $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) \
-		 $(GTHREAD_FLAGS) -DIN_LIBGCC2 \
-		 -fbuilding-libgcc -fno-stack-protector \
-		 $(INHIBIT_LIBC_CFLAGS)
-
-# Additional options to use when compiling libgcc2.a.
-# Some targets override this to -isystem include
-LIBGCC2_INCLUDES =
-
-# Additional target-dependent options for compiling libgcc2.a.
-TARGET_LIBGCC2_CFLAGS =
-
 # List of extra executables that should be compiled for this target machine
 # that are used for compiling from source code to object code.
 # The rules for compiling them should be in the t-* file for the machine.
@@ -713,17 +697,6 @@  USE_GCC_STDINT = @use_gcc_stdint@
 # set to empty.
 COLLECT2 = @collect2@
 
-# List of extra C and assembler files to add to static and shared libgcc2.
-# Assembler files should have names ending in `.asm'.
-LIB2FUNCS_EXTRA =
-
-# List of extra C and assembler files to add to static libgcc2.
-# Assembler files should have names ending in `.asm'.
-LIB2FUNCS_STATIC_EXTRA =
-
-# List of functions not to build from libgcc2.c.
-LIB2FUNCS_EXCLUDE =
-
 # Program to convert libraries.
 LIBCONVERT =
 
@@ -786,14 +759,6 @@  RUNTEST = `if [ -f $${srcdir}/../dejagnu
 	    else echo runtest; fi`
 RUNTESTFLAGS =
 
-# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
-T =
-
-# 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)
-
 # This should name the specs file that we're going to install.  Target
 # Makefiles may override it and name another file to be generated from
 # the built-in specs and installed as the default spec, as long as
@@ -1081,9 +1046,6 @@  INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(s
 	   $(CPPINC) $(GMPINC) $(DECNUMINC) \
 	   $(PPLINC) $(CLOOGINC)
 
-INCLUDES_FOR_TARGET = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
-	   -I$(srcdir)/../include $(DECNUMINC) -I$(srcdir)/../libgcc
-
 .c.o:
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION)
 
@@ -1106,7 +1068,6 @@  export DESTDIR
 export GCC_FOR_TARGET
 export INCLUDES
 export INSTALL_DATA
-export LIBGCC2_CFLAGS
 export LIPO_FOR_TARGET
 export MACHMODE_H
 export NM_FOR_TARGET
@@ -1523,13 +1484,6 @@  MOSTLYCLEANFILES = insn-flags.h insn-con
  gengtype$(exeext) *.[0-9][0-9].* *.[si] *-checksum.c libbackend.a \
  libcommon-target.a libcommon.a libgcc.mk
 
-# Defined in libgcc2.c, included only in the static library.
-LIB2FUNCS_ST = _eprintf __gcc_bcmp
-
-# 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
-
 #
 # Language makefile fragments.
 
@@ -1849,35 +1803,13 @@  cc1$(exeext): $(C_OBJS) cc1-checksum.o $
 #
 # Build libgcc.a.
 
-LIB2ADD = $(LIB2FUNCS_EXTRA)
-LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
-
-# All source files for libgcc are either generated in the libgcc build
-# directory which will be substituted for $$(libgcc_objdir), 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 $$(libgcc_objdir)/%,%, \
-		$(filter $$(libgcc_objdir)%,$(1))) \
-	    $(patsubst $(srcdir)%,$$(gcc_srcdir)%,$(filter $(srcdir)%,$(1))) \
-	    $(patsubst %,$$(gcc_objdir)/%, \
-		$(filter-out $(srcdir)% $$(libgcc_objdir)%,$(1)))
-
 libgcc-support: libgcc.mvars stmp-int-hdrs $(TCONFIG_H) \
-	$(MACHMODE_H) $(LIB2ADD) $(LIB2ADD_ST) gcov-iov.h
-
-libgcc.mvars: config.status Makefile $(LIB2ADD) $(LIB2ADD_ST) specs \
-		xgcc$(exeext)
+	$(MACHMODE_H) gcov-iov.h
+
+libgcc.mvars: config.status Makefile specs xgcc$(exeext)
 	: > tmp-libgcc.mvars
-	echo LIB2FUNCS_ST = '$(LIB2FUNCS_ST)' >> tmp-libgcc.mvars
-	echo LIB2FUNCS_EXCLUDE = '$(LIB2FUNCS_EXCLUDE)' >> tmp-libgcc.mvars
-	echo LIB2ADD = '$(call srcdirify,$(LIB2ADD))' >> tmp-libgcc.mvars
-	echo LIB2ADD_ST = '$(call srcdirify,$(LIB2ADD_ST))' >> tmp-libgcc.mvars
-	echo LIB2_SIDITI_CONV_FUNCS = '$(LIB2_SIDITI_CONV_FUNCS)' >> tmp-libgcc.mvars
-	echo LIB2_DIVMOD_FUNCS = '$(LIB2_DIVMOD_FUNCS)' >> tmp-libgcc.mvars
-	echo LIBGCC2_CFLAGS = '$(LIBGCC2_CFLAGS)' >> tmp-libgcc.mvars
-	echo TARGET_LIBGCC2_CFLAGS = '$(TARGET_LIBGCC2_CFLAGS)' >> tmp-libgcc.mvars
 	echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars
+	echo GTHREAD_FLAGS = '$(GTHREAD_FLAGS)' >> tmp-libgcc.mvars
 	echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars
 	echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars
 
diff --git a/gcc/config.gcc b/gcc/config.gcc
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -541,14 +541,13 @@  case ${target} in
   gnu_ld=yes
   fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
   tm_defines="${tm_defines} FBSD_MAJOR=${fbsd_major}"
-  tmake_file="t-freebsd t-slibgcc"
+  tmake_file="t-slibgcc"
   case ${enable_threads} in
     no)
       fbsd_tm_file="${fbsd_tm_file} freebsd-nthr.h"
       ;;
     "" | yes | posix)
       thread_file='posix'
-      tmake_file="${tmake_file} t-freebsd-thread"
       ;;
     *)
       echo 'Unknown thread configuration for FreeBSD'
@@ -573,7 +572,7 @@  case ${target} in
   case ${enable_threads} in
     "" | yes | posix) thread_file='posix' ;;
   esac
-  tmake_file="t-linux t-slibgcc"
+  tmake_file="t-slibgcc"
   case $target in
     *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-kopensolaris*-gnu)
       :;;
@@ -620,7 +619,7 @@  case ${target} in
   esac
   ;;
 *-*-netbsd*)
-  tmake_file="t-libgcc-pic t-slibgcc"
+  tmake_file="t-slibgcc"
   gas=yes
   gnu_ld=yes
 
@@ -650,11 +649,10 @@  case ${target} in
   esac
   ;;
 *-*-openbsd*)
-  tmake_file="t-openbsd t-libgcc-pic"
+  tmake_file="t-openbsd"
   case ${enable_threads} in
     yes)
       thread_file='posix'
-      tmake_file="${tmake_file} t-openbsd-thread"
       ;;
   esac
   case ${target} in
@@ -741,20 +739,17 @@  alpha*-*-linux*)
 	tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h glibc-stdint.h"
 	extra_options="${extra_options} alpha/elf.opt"
 	target_cpu_default="MASK_GAS"
-	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
 	;;
 alpha*-*-freebsd*)
 	tm_file="${tm_file} ${fbsd_tm_file} alpha/elf.h alpha/freebsd.h"
 	extra_options="${extra_options} alpha/elf.opt"
 	target_cpu_default="MASK_GAS"
-	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
 	;;
 alpha*-*-netbsd*)
 	tm_file="${tm_file} netbsd.h alpha/elf.h netbsd-elf.h alpha/netbsd.h"
 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt \
 		       alpha/elf.opt"
 	target_cpu_default="MASK_GAS"
-	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
 	;;
 alpha*-*-openbsd*)
 	tm_defines="${tm_defines} OBSD_HAS_DECLARE_FUNCTION_NAME OBSD_HAS_DECLARE_FUNCTION_SIZE OBSD_HAS_DECLARE_OBJECT"
@@ -762,7 +757,6 @@  alpha*-*-openbsd*)
 	extra_options="${extra_options} openbsd.opt alpha/elf.opt"
 	# default x-alpha is only appropriate for dec-osf.
 	target_cpu_default="MASK_GAS"
-	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
 	;;
 alpha*-dec-osf5.1*)
 	if test x$stabs = xyes
@@ -791,12 +785,12 @@  alpha*-dec-osf5.1*)
 alpha64-dec-*vms*)
 	tm_file="${tm_file} alpha/vms.h alpha/vms64.h"
 	xm_file="alpha/xm-vms.h vms/xm-vms64.h"
-	tmake_file="${tmake_file} alpha/t-alpha vms/t-vms64 alpha/t-vms alpha/t-ieee"
+	tmake_file="${tmake_file} vms/t-vms64 alpha/t-vms"
 	;;
 alpha*-dec-*vms*)
 	tm_file="${tm_file} alpha/vms.h"
 	xm_file="alpha/xm-vms.h"
-	tmake_file="${tmake_file} alpha/t-alpha alpha/t-vms alpha/t-ieee"
+	tmake_file="${tmake_file} alpha/t-vms"
 	;;
 arm-wrs-vxworks)
 	tm_file="elfos.h arm/elf.h arm/aout.h ${tm_file} vx-common.h vxworks.h arm/vxworks.h"
@@ -810,7 +804,7 @@  arm*-*-freebsd*)
 arm*-*-netbsdelf*)
 	tm_file="dbxelf.h elfos.h netbsd.h netbsd-elf.h arm/elf.h arm/aout.h arm/arm.h arm/netbsd-elf.h"
 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
-	tmake_file="${tmake_file} arm/t-arm arm/t-netbsd"
+	tmake_file="${tmake_file} arm/t-arm"
 	;;
 arm*-*-linux*)			# ARM GNU/Linux with ELF
 	tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
@@ -819,12 +813,12 @@  arm*-*-linux*)			# ARM GNU/Linux with EL
 		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
 		;;
 	esac
-	tmake_file="${tmake_file} t-linux arm/t-arm"
+	tmake_file="${tmake_file} arm/t-arm"
 	case ${target} in
 	arm*-*-linux-*eabi)
 	    tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
 	    libgcc_tm_file="$libgcc_tm_file arm/bpabi-lib.h"
-	    tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
+	    tmake_file="$tmake_file arm/t-arm-elf arm/t-linux-eabi"
 	    # Define multilib configuration for arm-linux-androideabi.
 	    case ${target} in
 	    *-androideabi)
@@ -852,7 +846,6 @@  arm*-*-uclinux*)		# ARM ucLinux
 	arm*-*-uclinux*eabi)
 	    tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h"
 	    libgcc_tm_file="$libgcc_tm_file arm/bpabi-lib.h"
-	    tmake_file="$tmake_file arm/t-bpabi"
   	    # The BPABI long long divmod functions return a 128-bit value in
 	    # registers r0-r3.  Correctly modeling that requires the use of
 	    # TImode.
@@ -878,7 +871,6 @@  arm*-*-eabi* | arm*-*-symbianelf* )
 	case ${target} in
 	arm*-*-eabi*)
 	  tm_file="$tm_file newlib-stdint.h"
-	  tmake_file="${tmake_file} arm/t-bpabi"
 	  use_gcc_stdint=wrap
 	  ;;
 	arm*-*-symbianelf*)
@@ -960,8 +952,6 @@  cris-*-elf | cris-*-none)
 	;;
 crisv32-*-linux* | cris-*-linux*)
 	tm_file="dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h cris/linux.h"
-	# We need to avoid using t-linux, so override default tmake_file
-	tmake_file="cris/t-cris cris/t-linux t-slibgcc"
 	extra_options="${extra_options} cris/linux.opt"
 	case $target in
 	  cris-*-*)
@@ -974,7 +964,6 @@  crisv32-*-linux* | cris-*-linux*)
 	;;
 fr30-*-elf)
 	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
-	tmake_file=fr30/t-fr30
 	;;
 frv-*-elf)
 	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
@@ -1018,7 +1007,6 @@  hppa*64*-*-linux*)
 	tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h gnu-user.h linux.h \
 		 glibc-stdint.h pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h \
 		 pa/pa64-linux.h"
-	tmake_file="${tmake_file} pa/t-linux64"
 	gas=yes gnu_ld=yes
 	need_64bit_hwint=yes
 	;;
@@ -1026,7 +1014,6 @@  hppa*-*-linux*)
 	target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS"
 	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h pa/pa-linux.h \
 		 pa/pa32-regs.h pa/pa32-linux.h"
-	tmake_file="${tmake_file} pa/t-linux"
 	;;
 # port not yet contributed.
 #hppa*-*-openbsd*)
@@ -1049,7 +1036,7 @@  hppa[12]*-*-hpux10*)
 	esac
 	use_gcc_stdint=provide
 	tm_file="${tm_file} hpux-stdint.h"
-	tmake_file="pa/t-pa-hpux10 pa/t-pa-hpux t-slibgcc"
+	tmake_file="t-slibgcc"
 	case ${enable_threads} in
 	  "")
 	    if test x$have_pthread_h = xyes ; then
@@ -1092,7 +1079,7 @@  hppa*64*-*-hpux11*)
 	extra_options="${extra_options} pa/pa-hpux.opt \
 		       pa/pa-hpux1010.opt pa/pa64-hpux.opt hpux11.opt"
 	need_64bit_hwint=yes
-	tmake_file="pa/t-pa64 pa/t-pa-hpux t-slibgcc"
+	tmake_file="t-slibgcc"
 	case x${enable_threads} in
 	x | xyes | xposix )
 		thread_file=posix
@@ -1130,7 +1117,7 @@  hppa[12]*-*-hpux11*)
 		extra_options="${extra_options} pa/pa-hpux1131.opt"
 		;;
 	esac
-	tmake_file="pa/t-pa-hpux11 pa/t-pa-hpux t-slibgcc"
+	tmake_file="t-slibgcc"
 	case x${enable_threads} in
 	x | xyes | xposix )
 		thread_file=posix
@@ -1168,11 +1155,9 @@  x86_64-*-darwin*)
 	;;
 i[34567]86-*-elf*)
 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
-	tmake_file="${tmake_file} t-svr4"
 	;;
 x86_64-*-elf*)
 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h"
-	tmake_file="${tmake_file} t-svr4"
 	;;
 i[34567]86-*-freebsd*)
 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
@@ -1320,7 +1305,6 @@  i[34567]86-*-lynxos*)
 i[34567]86-*-nto-qnx*)
 	tm_file="${tm_file} i386/att.h dbxelf.h tm-dwarf2.h elfos.h i386/unix.h i386/nto.h"
 	extra_options="${extra_options} i386/nto.opt"
-	tmake_file="${tmake_file} i386/t-nto"
 	gnu_ld=yes
 	gas=yes
 	;;
@@ -1382,7 +1366,7 @@  i[4567]86-wrs-vxworks|i[4567]86-wrs-vxwo
 i[34567]86-*-cygwin*)
 	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/cygwin.h i386/cygwin-stdint.h"
 	xm_file=i386/xm-cygwin.h
-	tmake_file="${tmake_file} i386/t-cygming i386/t-cygwin t-slibgcc"
+	tmake_file="${tmake_file} i386/t-cygming t-slibgcc"
 	target_gtfiles="\$(srcdir)/config/i386/winnt.c"
 	extra_options="${extra_options} i386/cygming.opt"
 	extra_objs="winnt.o winnt-stubs.o"
@@ -1462,8 +1446,8 @@  i[34567]86-*-mingw* | x86_64-*-mingw*)
 	default_use_cxa_atexit=yes
 	use_gcc_stdint=wrap
 	case ${enable_threads} in
-	  "" | yes | win32)	  thread_file='win32'
-	    tmake_file="${tmake_file} i386/t-gthr-win32"
+	  "" | yes | win32)
+	    thread_file='win32'
 	    ;;
 	  posix)
 	    thread_file='posix'
@@ -1547,7 +1531,6 @@  ia64-hp-*vms*)
 	;;
 iq2000*-*-elf*)
         tm_file="elfos.h newlib-stdint.h iq2000/iq2000.h"
-        tmake_file=iq2000/t-iq2000
         out_file=iq2000/iq2000.c
         md_file=iq2000/iq2000.md
         ;;
@@ -1689,7 +1672,6 @@  microblaze*-linux*)
 	tm_file="${tm_file} dbxelf.h gnu-user.h linux.h microblaze/linux.h"
 	c_target_objs="${c_target_objs} microblaze-c.o"
 	cxx_target_objs="${cxx_target_objs} microblaze-c.o"
-	tmake_file="${tmake_file} t-linux microblaze/t-microblaze"
 	;;
 microblaze*-*-*)
         tm_file="${tm_file} dbxelf.h"
@@ -2206,14 +2188,13 @@  sh-*-elf* | sh[12346l]*-*-elf* | \
 	case ${target} in
 	sh5*-*-netbsd*)
 		# SHmedia, 32-bit ABI
-		tmake_file="${tmake_file} sh/t-sh64 sh/t-netbsd"
+		tmake_file="${tmake_file} sh/t-sh64"
 		;;
 	sh64*-netbsd*)
 		# SHmedia, 64-bit ABI
-		tmake_file="${tmake_file} sh/t-sh64 sh/t-netbsd sh/t-netbsd-sh5-64"
+		tmake_file="${tmake_file} sh/t-sh64 sh/t-netbsd-sh5-64"
 		;;
 	*-*-netbsd)
-                tmake_file="${tmake_file} sh/t-netbsd"
 		;;
 	sh64*-*-linux*)
 		tmake_file="${tmake_file} sh/t-sh64"
@@ -2509,7 +2490,6 @@  xstormy16-*-elf)
 xtensa*-*-elf*)
 	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h xtensa/elf.h"
 	extra_options="${extra_options} xtensa/elf.opt"
-	tmake_file="xtensa/t-xtensa xtensa/t-elf"
 	;;
 xtensa*-*-linux*)
 	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h xtensa/linux.h"
diff --git a/gcc/config/alpha/t-alpha b/gcc/config/alpha/t-alpha
deleted file mode 100644
--- a/gcc/config/alpha/t-alpha
+++ /dev/null
@@ -1,2 +0,0 @@ 
-# This is a support routine for longlong.h, used by libgcc2.c.
-LIB2FUNCS_EXTRA = $(srcdir)/config/alpha/qrnnd.asm
diff --git a/gcc/config/alpha/t-ieee b/gcc/config/alpha/t-ieee
deleted file mode 100644
--- a/gcc/config/alpha/t-ieee
+++ /dev/null
@@ -1,2 +0,0 @@ 
-# All alphas get an IEEE complaint set of libraries.
-TARGET_LIBGCC2_CFLAGS += -mieee
diff --git a/gcc/config/alpha/t-vms b/gcc/config/alpha/t-vms
--- a/gcc/config/alpha/t-vms
+++ b/gcc/config/alpha/t-vms
@@ -17,10 +17,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA = $(srcdir)/config/alpha/vms-gcc_shell_handler.c
-
 MULTILIB_OPTIONS = mcpu=ev6
 MULTILIB_DIRNAMES = ev6
 MULTILIB_OSDIRNAMES = ev6
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -89,11 +89,3 @@  MULTILIB_EXCEPTIONS    += *mthumb/*mfloa
 # MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm600
 # MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm610
 # MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm620
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
-# Currently there is a bug somewhere in GCC's alias analysis
-# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
-# Disabling function inlining is a workaround for this problem.
-TARGET_LIBGCC2_CFLAGS = -fno-inline
diff --git a/gcc/config/arm/t-bpabi b/gcc/config/arm/t-bpabi
deleted file mode 100644
--- a/gcc/config/arm/t-bpabi
+++ /dev/null
@@ -1,23 +0,0 @@ 
-# Copyright (C) 2004, 2005, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# Add the BPABI C functions.
-LIB2FUNCS_EXTRA = $(srcdir)/config/arm/bpabi.c \
-		  $(srcdir)/config/arm/unaligned-funcs.c
-
-LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/arm/fp16.c
diff --git a/gcc/config/arm/t-linux b/gcc/config/arm/t-linux
deleted file mode 100644
--- a/gcc/config/arm/t-linux
+++ /dev/null
@@ -1,28 +0,0 @@ 
-# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2006,
-# 2008, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# Just for these, we omit the frame pointer since it makes such a big
-# difference.
-TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC
-
-# MULTILIB_OPTIONS = mfloat-abi=hard/mfloat-abi=soft
-# MULTILIB_DIRNAMES = hard-float soft-float
-
-# LIBGCC = stmp-multilib
-# INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/arm/t-linux-eabi b/gcc/config/arm/t-linux-eabi
--- a/gcc/config/arm/t-linux-eabi
+++ b/gcc/config/arm/t-linux-eabi
@@ -16,9 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# These functions are included in shared libraries.
-TARGET_LIBGCC2_CFLAGS = -fPIC
-
 # We do not build a Thumb multilib for Linux because the definition of
 # CLEAR_INSN_CACHE in linux-gas.h does not work in Thumb mode.
 MULTILIB_OPTIONS	=
@@ -27,5 +24,3 @@  MULTILIB_DIRNAMES	=
 #MULTILIB_OPTIONS     += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
 #MULTILIB_DIRNAMES    += fa606te fa626te fmp626 fa726te
 #MULTILIB_EXCEPTIONS  += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te*
-
-LIB2FUNCS_STATIC_EXTRA += $(srcdir)/config/arm/linux-atomic.c
diff --git a/gcc/config/arm/t-netbsd b/gcc/config/arm/t-netbsd
deleted file mode 100644
--- a/gcc/config/arm/t-netbsd
+++ /dev/null
@@ -1,24 +0,0 @@ 
-# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# Just for these, we omit the frame pointer since it makes such a big
-# difference.  It is then pointless adding debugging.
-TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fpic
-LIBGCC2_DEBUG_CFLAGS = -g0
-LIB2FUNCS_EXTRA = $(srcdir)/config/floatunsidf.c $(srcdir)/config/floatunsisf.c
diff --git a/gcc/config/arm/t-strongarm-elf b/gcc/config/arm/t-strongarm-elf
--- a/gcc/config/arm/t-strongarm-elf
+++ b/gcc/config/arm/t-strongarm-elf
@@ -21,11 +21,3 @@  MULTILIB_OPTIONS     = mlittle-endian/mb
 MULTILIB_DIRNAMES    = le be fpu soft
 MULTILIB_EXCEPTIONS  =
 MULTILIB_MATCHES     = mbig-endian=mbe mlittle-endian=mle
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
-# Currently there is a bug somewhere in GCC's alias analysis
-# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
-# Disabling function inlining is a workaround for this problem.
-TARGET_LIBGCC2_CFLAGS = -fno-inline
diff --git a/gcc/config/arm/t-symbian b/gcc/config/arm/t-symbian
--- a/gcc/config/arm/t-symbian
+++ b/gcc/config/arm/t-symbian
@@ -16,9 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# Include half-float helpers.
-LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/arm/fp16.c
-
 # Create a multilib for processors with VFP floating-point, and a
 # multilib for those without -- using the soft-float ABI in both
 # cases.  Symbian OS object should be compiled with interworking
diff --git a/gcc/config/arm/t-wince-pe b/gcc/config/arm/t-wince-pe
--- a/gcc/config/arm/t-wince-pe
+++ b/gcc/config/arm/t-wince-pe
@@ -29,7 +29,3 @@  MULTILIB_DIRNAMES = fpu
 # yet... 
 # MULTILIB_OPTIONS += thumb
 # MULTILIB_DIRNAMES += thumb
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-TARGET_LIBGCC2_CFLAGS = 
diff --git a/gcc/config/avr/t-avr b/gcc/config/avr/t-avr
--- a/gcc/config/avr/t-avr
+++ b/gcc/config/avr/t-avr
@@ -35,14 +35,6 @@  avr-c.o: $(srcdir)/config/avr/avr-c.c \
 	$(SHELL) $(srcdir)/config/avr/genopt.sh $(srcdir)/config/avr > \
 		$(srcdir)/config/avr/avr-tables.opt
 
-LIB2FUNCS_EXCLUDE = \
-	_clz
-
-# We do not have the DF type.
-# Most of the C functions in libgcc2 use almost all registers,
-# so use -mcall-prologues for smaller code size.
-TARGET_LIBGCC2_CFLAGS = -DDF=SF -Dinhibit_libc -mcall-prologues -Os
-
 MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6
 MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6
 
@@ -191,6 +183,3 @@  MULTILIB_MATCHES = \
 	mmcu?avr6=mmcu?atmega2561
 
 MULTILIB_EXCEPTIONS =
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/bfin/t-bfin-elf b/gcc/config/bfin/t-bfin-elf
--- a/gcc/config/bfin/t-bfin-elf
+++ b/gcc/config/bfin/t-bfin-elf
@@ -18,8 +18,6 @@ 
 
 ## Target part of the Makefile
 
-TARGET_LIBGCC2_CFLAGS = -fpic
-
 MULTILIB_OPTIONS=mcpu=bf532-none
 MULTILIB_OPTIONS+=mid-shared-library/msep-data/mfdpic mleaf-id-shared-library
 MULTILIB_DIRNAMES=bf532-none mid-shared-library msep-data mfdpic mleaf-id-shared-library
diff --git a/gcc/config/bfin/t-bfin-linux b/gcc/config/bfin/t-bfin-linux
--- a/gcc/config/bfin/t-bfin-linux
+++ b/gcc/config/bfin/t-bfin-linux
@@ -18,8 +18,6 @@ 
 
 ## Target part of the Makefile
 
-TARGET_LIBGCC2_CFLAGS = -fpic
-
 MULTILIB_OPTIONS=mcpu=bf532-none
 MULTILIB_DIRNAMES=bf532-none
 
diff --git a/gcc/config/bfin/t-bfin-uclinux b/gcc/config/bfin/t-bfin-uclinux
--- a/gcc/config/bfin/t-bfin-uclinux
+++ b/gcc/config/bfin/t-bfin-uclinux
@@ -18,8 +18,6 @@ 
 
 ## Target part of the Makefile
 
-TARGET_LIBGCC2_CFLAGS = -fpic
-
 MULTILIB_OPTIONS=mcpu=bf532-none
 MULTILIB_OPTIONS+=mid-shared-library/msep-data mleaf-id-shared-library
 MULTILIB_DIRNAMES=bf532-none mid-shared-library msep-data mleaf-id-shared-library
diff --git a/gcc/config/c6x/t-c6x-elf b/gcc/config/c6x/t-c6x-elf
--- a/gcc/config/c6x/t-c6x-elf
+++ b/gcc/config/c6x/t-c6x-elf
@@ -18,19 +18,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXCLUDE = _cmpdi2 _ucmpdi2 _gcc_bcmp _eprintf _clzsi _clzdi
-
-LIB2FUNCS_EXTRA = $(srcdir)/config/c6x/gef.c \
-                  $(srcdir)/config/c6x/gtf.c \
-                  $(srcdir)/config/c6x/lef.c \
-                  $(srcdir)/config/c6x/ltf.c \
-                  $(srcdir)/config/c6x/eqf.c \
-                  $(srcdir)/config/c6x/ged.c \
-                  $(srcdir)/config/c6x/gtd.c \
-                  $(srcdir)/config/c6x/led.c \
-                  $(srcdir)/config/c6x/ltd.c \
-                  $(srcdir)/config/c6x/eqd.c
-
 # Use this variant for fully testing all CPU types
 #MULTILIB_OPTIONS     = mbig-endian march=c674x/march=c64x/march=c67x/march=c67x+/march=c62x
 #MULTILIB_DIRNAMES    = be c674x c64x c67x c67x+ c62x
@@ -39,6 +26,3 @@  MULTILIB_OPTIONS     = mbig-endian march
 MULTILIB_DIRNAMES    = be c674x
 MULTILIB_EXCEPTIONS  =
 MULTILIB_MATCHES     =
-
-# Avoid failures when the user's GOT becomes too large.
-TARGET_LIBGCC2_CFLAGS = -msdata=none
diff --git a/gcc/config/c6x/t-c6x-uclinux b/gcc/config/c6x/t-c6x-uclinux
--- a/gcc/config/c6x/t-c6x-uclinux
+++ b/gcc/config/c6x/t-c6x-uclinux
@@ -1,5 +1,3 @@ 
 MULTILIB_OSDIRNAMES    = march.c674x=!c674x
 MULTILIB_OSDIRNAMES   += mbig-endian=!be
 MULTILIB_OSDIRNAMES   += mbig-endian/march.c674x=!be/c674x
-
-TARGET_LIBGCC2_CFLAGS = -fPIC -msdata=none
diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h
--- a/gcc/config/cris/cris.h
+++ b/gcc/config/cris/cris.h
@@ -84,11 +84,7 @@  extern int cris_cpu_version;
 /* Changing the order used to be necessary to put the fourth __make_dp
    argument (a DImode parameter) in registers, to fit with the libfunc
    parameter passing scheme used for intrinsic functions.  FIXME: Check
-   performance and maybe remove definition from TARGET_LIBGCC2_CFLAGS now
-   that it isn't strictly necessary.  We used to do this through
-   TARGET_LIBGCC2_CFLAGS, but that became increasingly difficult as the
-   parenthesis (that needed quoting) travels through several layers of
-   make and shell invocations.  */
+   performance.  */
 #ifdef IN_LIBGCC2
 #define __make_dp(a,b,c,d) __cris_make_dp(d,a,b,c)
 #endif
diff --git a/gcc/config/cris/t-cris b/gcc/config/cris/t-cris
--- a/gcc/config/cris/t-cris
+++ b/gcc/config/cris/t-cris
@@ -25,17 +25,5 @@ 
 # section "Target Fragment" in the gcc info-files (or the paper copy) of
 # "Using and Porting GCC"
 
-LIB2FUNCS_EXTRA = _udivsi3.c _divsi3.c _umodsi3.c _modsi3.c
-CRIS_LIB1CSRC = $(srcdir)/config/cris/arit.c
-
-# The fixed-point arithmetic code is in one file, arit.c,
-# similar to libgcc2.c (or the old libgcc1.c).  We need to
-# "split it up" with one file per define.
-$(LIB2FUNCS_EXTRA): $(CRIS_LIB1CSRC)
-	name=`echo $@ | sed -e 's,.*/,,' | sed -e 's,.c$$,,'`; \
-	echo "#define L$$name" > tmp-$@ \
-	&& echo '#include "$<"' >> tmp-$@ \
-	&& mv -f tmp-$@ $@
-
 $(out_object_file): gt-cris.h
 gt-cris.h : s-gtype ; @true
diff --git a/gcc/config/cris/t-elfmulti b/gcc/config/cris/t-elfmulti
--- a/gcc/config/cris/t-elfmulti
+++ b/gcc/config/cris/t-elfmulti
@@ -16,7 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/cris/mulsi3.asm
 MULTILIB_OPTIONS = march=v10/march=v32
 MULTILIB_DIRNAMES = v10 v32
 MULTILIB_MATCHES = \
@@ -29,5 +28,3 @@  MULTILIB_MATCHES = \
 		march?v10=mcpu?v10 \
 		march?v32=mcpu?v32
 MULTILIB_EXTRA_OPTS = mbest-lib-options
-INSTALL_LIBGCC = install-multilib
-LIBGCC = stmp-multilib
diff --git a/gcc/config/cris/t-linux b/gcc/config/cris/t-linux
--- a/gcc/config/cris/t-linux
+++ b/gcc/config/cris/t-linux
@@ -1,5 +1,3 @@ 
-TARGET_LIBGCC2_CFLAGS += -fPIC
-
 # We *know* we have a limits.h in the glibc library, with extra
 # definitions needed for e.g. libgfortran.
 ifneq ($(inhibit_libc),true)
diff --git a/gcc/config/fr30/t-fr30 b/gcc/config/fr30/t-fr30
deleted file mode 100644
--- a/gcc/config/fr30/t-fr30
+++ /dev/null
@@ -1,34 +0,0 @@ 
-# Copyright (C) 1999, 2001, 2007, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# If any special flags are necessary when building libgcc2 put them here.
-#
-# TARGET_LIBGCC2_CFLAGS
-
-# Enable the following if multilibs are needed.
-# See gcc/genmultilib, gcc/gcc.texi and gcc/tm.texi for a
-# description of the options and their values.
-#
-# MULTILIB_OPTIONS    = 
-# MULTILIB_DIRNAMES   = 
-# MULTILIB_MATCHES    =
-# MULTILIB_EXCEPTIONS =
-# MULTILIB_EXTRA_OPTS = 
-#
-# LIBGCC = stmp-multilib
-# INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/frv/t-frv b/gcc/config/frv/t-frv
--- a/gcc/config/frv/t-frv
+++ b/gcc/config/frv/t-frv
@@ -16,38 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA	= cmovh.c cmovw.c cmovd.c modi.c umodi.c uitof.c uitod.c ulltof.c ulltod.c
-
-# If any special flags are necessary when building libgcc2 put them here.
-TARGET_LIBGCC2_CFLAGS =
-
-cmovh.c: $(srcdir)/config/frv/cmovh.c
-	$(LN_S) $(srcdir)/config/frv/cmovh.c .
-
-cmovw.c: $(srcdir)/config/frv/cmovw.c
-	$(LN_S) $(srcdir)/config/frv/cmovw.c .
-
-cmovd.c: $(srcdir)/config/frv/cmovd.c
-	$(LN_S) $(srcdir)/config/frv/cmovd.c .
-
-modi.c: $(srcdir)/config/frv/modi.c
-	$(LN_S) $(srcdir)/config/frv/modi.c .
-
-umodi.c: $(srcdir)/config/frv/umodi.c
-	$(LN_S) $(srcdir)/config/frv/umodi.c .
-
-uitof.c: $(srcdir)/config/frv/uitof.c
-	$(LN_S) $(srcdir)/config/frv/uitof.c .
-
-uitod.c: $(srcdir)/config/frv/uitod.c
-	$(LN_S) $(srcdir)/config/frv/uitod.c .
-
-ulltof.c: $(srcdir)/config/frv/ulltof.c
-	$(LN_S) $(srcdir)/config/frv/ulltof.c .
-
-ulltod.c: $(srcdir)/config/frv/ulltod.c
-	$(LN_S) $(srcdir)/config/frv/ulltod.c .
-
 # Enable the following if multilibs are needed.
 # See gcc/genmultilib, gcc/gcc.texi and gcc/tm.texi for a
 # description of the options and their values.
@@ -65,7 +33,4 @@  MULTILIB_MATCHES	= mcpu?simple=mcpu?fr30
 			  mcpu?fr400=mcpu?fr405 mcpu?fr400=mcpu?fr450
 MULTILIB_EXCEPTIONS	= mcpu=frv/mno-pack* mcpu=simple/mno-pack*
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 EXTRA_HEADERS = $(srcdir)/config/frv/frv-asm.h
diff --git a/gcc/config/frv/t-linux b/gcc/config/frv/t-linux
--- a/gcc/config/frv/t-linux
+++ b/gcc/config/frv/t-linux
@@ -22,5 +22,3 @@  MULTILIB_DIRNAMES=
 MULTILIB_MATCHES=
 MULTILIB_EXCEPTIONS=
 MULTILIB_EXTRA_OPTS=
-
-TARGET_LIBGCC2_CFLAGS = -fPIC
diff --git a/gcc/config/h8300/t-h8300 b/gcc/config/h8300/t-h8300
--- a/gcc/config/h8300/t-h8300
+++ b/gcc/config/h8300/t-h8300
@@ -17,23 +17,10 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA = \
-	$(srcdir)/config/h8300/clzhi2.c \
-	$(srcdir)/config/h8300/ctzhi2.c \
-	$(srcdir)/config/h8300/parityhi2.c \
-	$(srcdir)/config/h8300/popcounthi2.c \
-	$(srcdir)/config/h8300/fixunssfsi.c
-
-# We do not have DF type, so fake out the libgcc2 compilation.
-TARGET_LIBGCC2_CFLAGS = -DDF=SF
-
 MULTILIB_OPTIONS = mh/ms/msx mn mint32
 MULTILIB_DIRNAMES = h8300h h8300s h8sx normal int32
 MULTILIB_EXCEPTIONS = mint32 mn mn/mint32
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 s-config s-conditions s-flags s-codes s-constants s-emit s-recog \
 s-opinit s-extract s-peep s-attr s-attrtab s-output: \
 	$(srcdir)/config/h8300/mova.md
diff --git a/gcc/config/i386/t-cygming b/gcc/config/i386/t-cygming
--- a/gcc/config/i386/t-cygming
+++ b/gcc/config/i386/t-cygming
@@ -21,11 +21,6 @@ 
 # doing the build, it may not be installed yet.
 LIMITS_H_TEST = true
 
-# If we are building next to winsup, this will let us find the real
-# limits.h when building libgcc2.  Otherwise, winsup must be installed
-# first.
-LIBGCC2_INCLUDES = -I$(srcdir)/../winsup/w32api/include
-
 winnt.o: $(srcdir)/config/i386/winnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
   $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
   $(TM_P_H) $(HASHTAB_H) $(GGC_H) $(LTO_STREAMER_H)
diff --git a/gcc/config/i386/t-cygwin b/gcc/config/i386/t-cygwin
deleted file mode 100644
--- a/gcc/config/i386/t-cygwin
+++ /dev/null
@@ -1,24 +0,0 @@ 
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009, 2010, 2011
-# 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# If we are building next to winsup, this will let us find the real
-# limits.h when building libgcc2.  Otherwise, winsup must be installed
-# first.
-LIBGCC2_INCLUDES += -I$(srcdir)/../winsup/include \
-	-I$(srcdir)/../winsup/cygwin/include
diff --git a/gcc/config/i386/t-darwin b/gcc/config/i386/t-darwin
--- a/gcc/config/i386/t-darwin
+++ b/gcc/config/i386/t-darwin
@@ -1,5 +1,2 @@ 
 MULTILIB_OPTIONS = m64
 MULTILIB_DIRNAMES = x86_64
-LIB2_SIDITI_CONV_FUNCS=yes
-LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c
-LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi _floatditf _floatunditf
diff --git a/gcc/config/i386/t-darwin64 b/gcc/config/i386/t-darwin64
--- a/gcc/config/i386/t-darwin64
+++ b/gcc/config/i386/t-darwin64
@@ -1,8 +1,2 @@ 
-LIB2_SIDITI_CONV_FUNCS=yes
-LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c
-
 MULTILIB_OPTIONS = m32
 MULTILIB_DIRNAMES = i386
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64
--- a/gcc/config/i386/t-linux64
+++ b/gcc/config/i386/t-linux64
@@ -37,6 +37,3 @@  MULTILIB_DIRNAMES   = $(patsubst m%, %, 
 MULTILIB_OSDIRNAMES = m64=../lib64
 MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
 MULTILIB_OSDIRNAMES+= mx32=../libx32
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/i386/t-mingw-w32 b/gcc/config/i386/t-mingw-w32
--- a/gcc/config/i386/t-mingw-w32
+++ b/gcc/config/i386/t-mingw-w32
@@ -4,6 +4,3 @@  NATIVE_SYSTEM_HEADER_DIR = /mingw/includ
 MULTILIB_OPTIONS = m64/m32
 MULTILIB_DIRNAMES = 64 32
 MULTILIB_OSDIRNAMES = ../lib64 ../lib
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/i386/t-mingw-w64 b/gcc/config/i386/t-mingw-w64
--- a/gcc/config/i386/t-mingw-w64
+++ b/gcc/config/i386/t-mingw-w64
@@ -4,6 +4,3 @@  NATIVE_SYSTEM_HEADER_DIR = /mingw/includ
 MULTILIB_OPTIONS = m64/m32
 MULTILIB_DIRNAMES = 64 32
 MULTILIB_OSDIRNAMES = ../lib ../lib32
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/i386/t-nto b/gcc/config/i386/t-nto
deleted file mode 100644
--- a/gcc/config/i386/t-nto
+++ /dev/null
@@ -1,1 +0,0 @@ 
-TARGET_LIBGCC2_CFLAGS = -fPIC -fexceptions
diff --git a/gcc/config/i386/t-openbsd b/gcc/config/i386/t-openbsd
--- a/gcc/config/i386/t-openbsd
+++ b/gcc/config/i386/t-openbsd
@@ -2,5 +2,3 @@ 
 # We cope by building variants of libgcc.
 MULTILIB_OPTIONS = fpic
 MULTILIB_MATCHES=fpic=fPIC
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/ia64/t-hpux b/gcc/config/ia64/t-hpux
--- a/gcc/config/ia64/t-hpux
+++ b/gcc/config/ia64/t-hpux
@@ -19,20 +19,10 @@ 
 
 # We need multilib support for HPUX's ILP32 & LP64 modes.
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 MULTILIB_OPTIONS = milp32/mlp64
 MULTILIB_DIRNAMES = hpux32 hpux64
 MULTILIB_MATCHES =
 
-# Support routines for HP-UX 128 bit floats.
-
-LIB2FUNCS_EXTRA=quadlib.c $(srcdir)/config/floatunsitf.c
-
-quadlib.c: $(srcdir)/config/ia64/quadlib.c
-	cat $(srcdir)/config/ia64/quadlib.c > quadlib.c
-
 # We do not want to include the EH stuff that linux uses, we want to use
 # the HP-UX libunwind library.
 
diff --git a/gcc/config/ia64/t-ia64 b/gcc/config/ia64/t-ia64
--- a/gcc/config/ia64/t-ia64
+++ b/gcc/config/ia64/t-ia64
@@ -18,13 +18,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# ??? Hack to get -P option used when compiling lib1funcs.asm, because Intel
-# assembler does not accept # line number as a comment.
-# ??? This breaks C++ pragma interface/implementation, which is used in the
-# C++ part of libgcc2, hence it had to be disabled.  Must find some other way
-# to support the Intel assembler.
-#LIBGCC2_DEBUG_CFLAGS = -g1 -P
-
 ia64-c.o: $(srcdir)/config/ia64/ia64-c.c $(CONFIG_H) $(SYSTEM_H) \
     coretypes.h $(TM_H) $(TREE_H) $(CPPLIB_H) $(C_COMMON_H) $(C_PRAGMA_H)
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
diff --git a/gcc/config/iq2000/t-iq2000 b/gcc/config/iq2000/t-iq2000
deleted file mode 100644
--- a/gcc/config/iq2000/t-iq2000
+++ /dev/null
@@ -1,33 +0,0 @@ 
-# Copyright (C) 2003, 2010, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-LIB2FUNCS_EXTRA = $(srcdir)/config/udivmod.c $(srcdir)/config/divmod.c $(srcdir)/config/udivmodsi4.c $(srcdir)/config/iq2000/lib2extra-funcs.c
-
-# Enable the following if multilibs are needed.
-# See gcc/genmultilib, gcc/gcc.texi and gcc/tm.texi for a
-# description of the options and their values.
-#
-# MULTILIB_OPTIONS    = 
-# MULTILIB_DIRNAMES   = 
-# MULTILIB_MATCHES    =
-# MULTILIB_EXCEPTIONS =
-# MULTILIB_EXTRA_OPTS = 
-#
-# LIBGCC = stmp-multilib
-# INSTALL_LIBGCC = install-multilib
-
diff --git a/gcc/config/m32c/t-m32c b/gcc/config/m32c/t-m32c
--- a/gcc/config/m32c/t-m32c
+++ b/gcc/config/m32c/t-m32c
@@ -19,8 +19,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA = $(srcdir)/config/m32c/m32c-lib2.c $(srcdir)/config/m32c/m32c-lib2-trapv.c
-
 # target-specific files
 
 md_file = md
diff --git a/gcc/config/m32r/t-linux b/gcc/config/m32r/t-linux
--- a/gcc/config/m32r/t-linux
+++ b/gcc/config/m32r/t-linux
@@ -16,10 +16,5 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# Turn off the SDA while compiling libgcc2.  There are no headers for it
-# and we want maximal upward compatibility here.
-
-TARGET_LIBGCC2_CFLAGS = -G 0 -fPIC
-
 # Don't install "assert.h" in gcc. We use the one in glibc.
 INSTALL_ASSERT_H =
diff --git a/gcc/config/m32r/t-m32r b/gcc/config/m32r/t-m32r
--- a/gcc/config/m32r/t-m32r
+++ b/gcc/config/m32r/t-m32r
@@ -17,11 +17,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# Turn off the SDA while compiling libgcc2.  There are no headers for it
-# and we want maximal upward compatibility here.
-
-TARGET_LIBGCC2_CFLAGS = -G 0
-
 # -mmodel={small,medium} requires separate libraries.
 # We don't build libraries for the large model, instead we use the medium
 # libraries.  The only difference is that the large model can handle jumps
@@ -35,6 +30,3 @@  MULTILIB_MATCHES = mmodel?medium=mmodel?
 # SHN_M32R_SCOMMON.
 # This is important for objects referenced in system header files.
 MULTILIB_EXTRA_OPTS = msdata=sdata
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/m68k/t-floatlib b/gcc/config/m68k/t-floatlib
deleted file mode 100644
--- a/gcc/config/m68k/t-floatlib
+++ /dev/null
@@ -1,25 +0,0 @@ 
-# Copyright (C) 2007, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-LIB2FUNCS_EXTRA = fpgnulib.c xfgnulib.c
-
-fpgnulib.c: $(srcdir)/config/m68k/fpgnulib.c
-	cp $(srcdir)/config/m68k/fpgnulib.c fpgnulib.c
-xfgnulib.c: $(srcdir)/config/m68k/fpgnulib.c
-	echo '#define EXTFLOAT' > xfgnulib.c
-	cat $(srcdir)/config/m68k/fpgnulib.c >> xfgnulib.c
diff --git a/gcc/config/m68k/t-mlibs b/gcc/config/m68k/t-mlibs
--- a/gcc/config/m68k/t-mlibs
+++ b/gcc/config/m68k/t-mlibs
@@ -92,6 +92,3 @@  endif
 # Remove the default CPU from the explicit exceptions.
 MULTILIB_EXCEPTIONS := \
 	$(patsubst mcpu=$(M68K_MLIB_DEFAULT)/%,%,$(MULTILIB_EXCEPTIONS))
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/mcore/t-mcore b/gcc/config/mcore/t-mcore
--- a/gcc/config/mcore/t-mcore
+++ b/gcc/config/mcore/t-mcore
@@ -16,25 +16,17 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# could use -msifilter to be safe from interrupt/jmp interactions and others.
-TARGET_LIBGCC2_CFLAGS=-O3 -DNO_FLOATLIB_FIXUNSDFSI #-msifilter
-
 # We have values for float.h.
 CROSS_FLOAT_H = $(srcdir)/config/mcore/gfloat.h
 
 # If support for -m4align is ever re-enabled then comment out the
-# following line and uncomment the mutlilib lines below.
+# following line and uncomment the multilib lines below.
 
 # MULTILIB_OPTIONS     = m8align/m4align
 # MULTILIB_DIRNAMES    = align8 align4
 # MULTILIB_MATCHES     = 
 # MULTILIB_EXTRA_OPTS  = 
 # MULTILIB_EXCEPTIONS  =
-# LIBGCC               = stmp-multilib
-# INSTALL_LIBGCC       = install-multilib
 
 MULTILIB_OPTIONS     = mbig-endian/mlittle-endian m210/m340
 MULTILIB_DIRNAMES    = big little m210 m340
-
-LIBGCC               = stmp-multilib
-INSTALL_LIBGCC       = install-multilib
diff --git a/gcc/config/mep/t-mep b/gcc/config/mep/t-mep
--- a/gcc/config/mep/t-mep
+++ b/gcc/config/mep/t-mep
@@ -32,12 +32,6 @@  mep-pragma.o: $(srcdir)/config/mep/mep-p
 	function.h insn-config.h reload.h $(TARGET_H)
 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
 
-# multiply and divide routines
-
-LIB2FUNCS_EXTRA = \
-	$(srcdir)/config/mep/mep-lib2.c \
-	$(srcdir)/config/mep/mep-tramp.c
-
 MULTILIB_OPTIONS = mel mall-opts mfar
 MULTILIB_DIRNAMES = el allopt far
 
diff --git a/gcc/config/mips/t-elf b/gcc/config/mips/t-elf
--- a/gcc/config/mips/t-elf
+++ b/gcc/config/mips/t-elf
@@ -17,15 +17,8 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# We must build libgcc2.a with -G 0, in case the user wants to link
-# without the $gp register.
-TARGET_LIBGCC2_CFLAGS = -G 0
-
 # Build the libraries for both hard and soft floating point
 
 MULTILIB_OPTIONS = msoft-float EL/EB
 MULTILIB_DIRNAMES = soft-float el eb
 MULTILIB_MATCHES = EL=mel EB=meb msingle-float=m4650
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/mips/t-isa3264 b/gcc/config/mips/t-isa3264
--- a/gcc/config/mips/t-isa3264
+++ b/gcc/config/mips/t-isa3264
@@ -17,10 +17,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# We must build libgcc2.a with -G 0, in case the user wants to link
-# without the $gp register.
-TARGET_LIBGCC2_CFLAGS = -G 0
-
 # Build the libraries for both hard and soft floating point
 
 ifneq ($(filter MIPS_ABI_DEFAULT=ABI_EABI,$(tm_defines)),)
@@ -36,6 +32,3 @@  MULTILIB_EXCLUSIONS = !mips32r2/mfp64
 endif
 endif
 MULTILIB_MATCHES = EL=mel EB=meb
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/mips/t-mips b/gcc/config/mips/t-mips
--- a/gcc/config/mips/t-mips
+++ b/gcc/config/mips/t-mips
@@ -16,8 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2_SIDITI_CONV_FUNCS=yes
-
 $(srcdir)/config/mips/mips-tables.opt: $(srcdir)/config/mips/genopt.sh \
   $(srcdir)/config/mips/mips-cpus.def
 	$(SHELL) $(srcdir)/config/mips/genopt.sh $(srcdir)/config/mips > \
diff --git a/gcc/config/mips/t-r3900 b/gcc/config/mips/t-r3900
--- a/gcc/config/mips/t-r3900
+++ b/gcc/config/mips/t-r3900
@@ -17,15 +17,8 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# We must build libgcc2.a with -G 0, in case the user wants to link
-# without the $gp register.
-TARGET_LIBGCC2_CFLAGS = -G 0
-
 # Build the libraries for both hard and soft floating point
 
 MULTILIB_OPTIONS = msoft-float EL/EB
 MULTILIB_DIRNAMES = soft-float el eb
 MULTILIB_MATCHES = EL=mel EB=meb
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/mips/t-sde b/gcc/config/mips/t-sde
--- a/gcc/config/mips/t-sde
+++ b/gcc/config/mips/t-sde
@@ -33,7 +33,3 @@  MULTILIB_EXCLUSIONS += !mips32/!mips32r2
 else
 MULTILIB_EXCLUSIONS += mips64/mips16 mips64r2/mips16
 endif
-
-# Build the multilibs.
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/mips/t-sr71k b/gcc/config/mips/t-sr71k
--- a/gcc/config/mips/t-sr71k
+++ b/gcc/config/mips/t-sr71k
@@ -16,14 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# We must build libgcc2.a with -G 0, in case the user wants to link
-# without the $gp register.
-TARGET_LIBGCC2_CFLAGS = -G 0
-
 # Build the libraries for both hard and soft floating point
-
 MULTILIB_OPTIONS = EL/EB msoft-float mips2
 MULTILIB_DIRNAMES = el eb soft-float mips2
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/mips/t-vr b/gcc/config/mips/t-vr
--- a/gcc/config/mips/t-vr
+++ b/gcc/config/mips/t-vr
@@ -16,17 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# BEGIN boiler-plate MIPS stuff
-
-# We must build libgcc2.a with -G 0, in case the user wants to link
-# without the $gp register.
-TARGET_LIBGCC2_CFLAGS = -G 0
-
-LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/mips/mips16.S \
-			 $(srcdir)/config/mips/vr4120-div.S
-
-# END boiler-plate
-
 # Main multilibs
 # --------------
 #
diff --git a/gcc/config/mmix/t-mmix b/gcc/config/mmix/t-mmix
--- a/gcc/config/mmix/t-mmix
+++ b/gcc/config/mmix/t-mmix
@@ -16,9 +16,5 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# See "Target Fragment" in GCC info.  That same order is used here.
-
-TARGET_LIBGCC2_CFLAGS = -mlibfuncs -O2
-
 MULTILIB_OPTIONS = mabi=gnu
 MULTILIB_DIRNAMES = gnuabi
diff --git a/gcc/config/mn10300/t-mn10300 b/gcc/config/mn10300/t-mn10300
--- a/gcc/config/mn10300/t-mn10300
+++ b/gcc/config/mn10300/t-mn10300
@@ -19,6 +19,3 @@ 
 
 MULTILIB_OPTIONS = mam33/mam33-2/mam34
 MULTILIB_DIRNAMES = am33 am33-2 am34
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/pa/t-dce-thr b/gcc/config/pa/t-dce-thr
--- a/gcc/config/pa/t-dce-thr
+++ b/gcc/config/pa/t-dce-thr
@@ -1,5 +1,2 @@ 
 MULTILIB_OPTIONS = threads
 MULTILIB_DIRNAMES = threads
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/pa/t-linux b/gcc/config/pa/t-linux
deleted file mode 100644
--- a/gcc/config/pa/t-linux
+++ /dev/null
@@ -1,27 +0,0 @@ 
-# Copyright (C) 1999, 2001, 2002, 2008, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# Compile libgcc2.a as PIC.
-TARGET_LIBGCC2_CFLAGS = -fPIC -DELF=1 -DLINUX=1
-
-LIB2FUNCS_EXTRA=fptr.c
-LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/pa/linux-atomic.c
-
-fptr.c: $(srcdir)/config/pa/fptr.c
-	rm -f fptr.c
-	cp $(srcdir)/config/pa/fptr.c .
diff --git a/gcc/config/pa/t-linux64 b/gcc/config/pa/t-linux64
deleted file mode 100644
--- a/gcc/config/pa/t-linux64
+++ /dev/null
@@ -1,22 +0,0 @@ 
-# Copyright (C) 2001, 2008, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/pa/linux-atomic.c
-
-# Compile libgcc2.a as PIC.
-TARGET_LIBGCC2_CFLAGS = -fPIC -Dpa64=1 -DELF=1
diff --git a/gcc/config/pa/t-pa-hpux b/gcc/config/pa/t-pa-hpux
deleted file mode 100644
--- a/gcc/config/pa/t-pa-hpux
+++ /dev/null
@@ -1,7 +0,0 @@ 
-lib2funcs.asm: $(srcdir)/config/pa/lib2funcs.asm
-	rm -f lib2funcs.asm
-	cp $(srcdir)/config/pa/lib2funcs.asm .
-
-quadlib.c: $(srcdir)/config/pa/quadlib.c
-	rm -f quadlib.c
-	cp $(srcdir)/config/pa/quadlib.c .
diff --git a/gcc/config/pa/t-pa-hpux10 b/gcc/config/pa/t-pa-hpux10
deleted file mode 100644
--- a/gcc/config/pa/t-pa-hpux10
+++ /dev/null
@@ -1,2 +0,0 @@ 
-TARGET_LIBGCC2_CFLAGS = -fPIC -frandom-seed=fixed-seed -D_T_HPUX10
-LIB2FUNCS_EXTRA=lib2funcs.asm quadlib.c
diff --git a/gcc/config/pa/t-pa-hpux11 b/gcc/config/pa/t-pa-hpux11
deleted file mode 100644
--- a/gcc/config/pa/t-pa-hpux11
+++ /dev/null
@@ -1,2 +0,0 @@ 
-TARGET_LIBGCC2_CFLAGS = -fPIC -frandom-seed=fixed-seed
-LIB2FUNCS_EXTRA=lib2funcs.asm quadlib.c
diff --git a/gcc/config/pa/t-pa64 b/gcc/config/pa/t-pa64
deleted file mode 100644
--- a/gcc/config/pa/t-pa64
+++ /dev/null
@@ -1,21 +0,0 @@ 
-# Copyright (C) 2000, 2001, 2002, 2004, 2006,
-# 2007, 2010, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-TARGET_LIBGCC2_CFLAGS = -fPIC -Dpa64=1 -DELF=1 -mlong-calls
-LIB2FUNCS_EXTRA = quadlib.c
diff --git a/gcc/config/pdp11/t-pdp11 b/gcc/config/pdp11/t-pdp11
--- a/gcc/config/pdp11/t-pdp11
+++ b/gcc/config/pdp11/t-pdp11
@@ -17,11 +17,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-TARGET_LIBGCC2_CFLAGS = -O2 -mfloat32
-LIB2FUNCS_EXTRA = $(srcdir)/config/udivmod.c $(srcdir)/config/udivmodsi4.c \
-    $(srcdir)/config/memcmp.c $(srcdir)/config/memcpy.c \
-    $(srcdir)/config/memmove.c $(srcdir)/config/memset.c
-
 MULTILIB_OPTIONS = msoft-float
 
 # Because the pdp11 POINTER_SIZE is only 16, in dwarf2out.c,
diff --git a/gcc/config/picochip/t-picochip b/gcc/config/picochip/t-picochip
--- a/gcc/config/picochip/t-picochip
+++ b/gcc/config/picochip/t-picochip
@@ -16,37 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# Compile the extra library functions.
-
-LIB2FUNCS_EXTRA = \
-	$(srcdir)/config/picochip/libgccExtras/ashrsi3.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/ashlsi3.asm		\
-	$(srcdir)/config/picochip/libgccExtras/divmodhi4.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/udivmodhi4.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/divmodsi4.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/udivmodsi4.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/divmod15.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/ucmpsi2.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/cmpsi2.asm 		\
-	$(srcdir)/config/picochip/libgccExtras/clzsi2.asm			\
-	$(srcdir)/config/picochip/libgccExtras/adddi3.asm			\
-	$(srcdir)/config/picochip/libgccExtras/subdi3.asm			\
-	$(srcdir)/config/picochip/libgccExtras/lshrsi3.asm		\
-	$(srcdir)/config/picochip/libgccExtras/parityhi2.asm		\
-	$(srcdir)/config/picochip/libgccExtras/popcounthi2.asm
-
-# Turn off ranlib on target libraries.
-RANLIB_FOR_TARGET = cat
-
-# Special libgcc setup. Make single/double floating point the same,
-# and use our own include files.
-TARGET_LIBGCC2_CFLAGS = -DDF=SF -I../../includes/
-
-# Switch off all debugging for the embedded libraries.
-# (embedded processors need small libraries by default).
-# NOTE: If the debug level is increased, turn off instruction scheduling.
-LIBGCC2_DEBUG_CFLAGS = -g0
-
 # Build all combinations of library for different multiply units, and
 # presence/absence of byte access.
 MULTILIB_OPTIONS = mmul-type=none/mmul-type=mac/mmul-type=mul mno-byte-access/mbyte-access
diff --git a/gcc/config/rs6000/t-aix43 b/gcc/config/rs6000/t-aix43
--- a/gcc/config/rs6000/t-aix43
+++ b/gcc/config/rs6000/t-aix43
@@ -44,6 +44,3 @@  MULTILIB_MATCHES	= mcpu?power=mcpu?power
 			  mcpu?powerpc=mcpu?604e \
 			  mcpu?powerpc=mcpu?620 \
 			  mcpu?powerpc=mcpu?630
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/rs6000/t-aix52 b/gcc/config/rs6000/t-aix52
--- a/gcc/config/rs6000/t-aix52
+++ b/gcc/config/rs6000/t-aix52
@@ -25,6 +25,3 @@  MULTILIB_OPTIONS	= pthread maix64
 MULTILIB_DIRNAMES	= pthread ppc64
 
 MULTILIB_MATCHES	= 
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/rs6000/t-darwin b/gcc/config/rs6000/t-darwin
deleted file mode 100644
--- a/gcc/config/rs6000/t-darwin
+++ /dev/null
@@ -1,39 +0,0 @@ 
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006,
-# 2007, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-LIB2FUNCS_EXTRA = $(srcdir)/config/rs6000/darwin-tramp.asm \
-	$(srcdir)/config/darwin-64.c \
-	$(srcdir)/config/rs6000/darwin-world.asm
-
-LIB2FUNCS_STATIC_EXTRA = \
-	$(srcdir)/config/rs6000/darwin-fpsave.asm  \
-	$(srcdir)/config/rs6000/darwin-vecsave.asm
-
-# The .asm files above are designed to run on all processors,
-# even though they use AltiVec instructions.  -Wa is used because
-# -force_cpusubtype_ALL doesn't work with -dynamiclib.
-#
-# -pipe because there's an assembler bug, 4077127, which causes
-# it to not properly process the first # directive, causing temporary
-# file names to appear in stabs, causing the bootstrap to fail.  Using -pipe
-# works around this by not having any temporary file names.
-TARGET_LIBGCC2_CFLAGS = -Wa,-force_cpusubtype_ALL -pipe -mmacosx-version-min=10.4
-
-darwin-fpsave.o:	$(srcdir)/config/rs6000/darwin-asm.h
-darwin-tramp.o:		$(srcdir)/config/rs6000/darwin-asm.h
diff --git a/gcc/config/rs6000/t-darwin64 b/gcc/config/rs6000/t-darwin64
--- a/gcc/config/rs6000/t-darwin64
+++ b/gcc/config/rs6000/t-darwin64
@@ -1,11 +1,2 @@ 
-LIB2_SIDITI_CONV_FUNCS=yes
-
-LIB2FUNCS_EXTRA = $(srcdir)/config/rs6000/darwin-tramp.asm \
-	$(srcdir)/config/darwin-64.c \
-	$(srcdir)/config/rs6000/darwin-world.asm
-
 MULTILIB_OPTIONS = m32
 MULTILIB_DIRNAMES = ppc
-
-#LIBGCC = stmp-multilib
-#INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/rs6000/t-fprules b/gcc/config/rs6000/t-fprules
--- a/gcc/config/rs6000/t-fprules
+++ b/gcc/config/rs6000/t-fprules
@@ -1,4 +1,4 @@ 
-# Copyright (C) 2002, 2005, 2006, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2005, 2006, 2008, 2011 Free Software Foundation, Inc.
 #
 # This file is part of GCC.
 #
@@ -33,6 +33,3 @@  MULTILIB_MATCHES_FLOAT	= msoft-float=mcp
 MULTILIB_OPTIONS = msoft-float
 MULTILIB_DIRNAMES = soft-float
 MULTILIB_MATCHES	= ${MULTILIB_MATCHES_FLOAT}
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/rs6000/t-linux64 b/gcc/config/rs6000/t-linux64
--- a/gcc/config/rs6000/t-linux64
+++ b/gcc/config/rs6000/t-linux64
@@ -19,8 +19,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-TARGET_LIBGCC2_CFLAGS += -mno-minimal-toc
-
 # On Debian, Ubuntu and other derivative distributions, the 32bit libraries
 # are found in /lib32 and /usr/lib32, /lib64 and /usr/lib64 are symlinks to
 # /lib and /usr/lib, while other distributions install libraries into /lib64
diff --git a/gcc/config/rs6000/t-lynx b/gcc/config/rs6000/t-lynx
--- a/gcc/config/rs6000/t-lynx
+++ b/gcc/config/rs6000/t-lynx
@@ -16,14 +16,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA = tramp.S
-
-tramp.S: $(srcdir)/config/rs6000/tramp.asm
-	cat $(srcdir)/config/rs6000/tramp.asm > tramp.S
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 MULTILIB_OPTIONS    += msoft-float
 MULTILIB_DIRNAMES   += soft-float
 
diff --git a/gcc/config/rs6000/t-netbsd b/gcc/config/rs6000/t-netbsd
--- a/gcc/config/rs6000/t-netbsd
+++ b/gcc/config/rs6000/t-netbsd
@@ -18,33 +18,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA = tramp.S
-
-LIB2FUNCS_STATIC_EXTRA = crtsavfpr.S crtresfpr.S \
-  crtsavgpr.S crtresgpr.S \
-  crtresxfpr.S crtresxgpr.S
-
-tramp.S: $(srcdir)/config/rs6000/tramp.asm
-	cat $(srcdir)/config/rs6000/tramp.asm > tramp.S
-
-crtsavfpr.S: $(srcdir)/config/rs6000/crtsavfpr.asm
-	cat $(srcdir)/config/rs6000/crtsavfpr.asm >crtsavfpr.S
-
-crtresfpr.S: $(srcdir)/config/rs6000/crtresfpr.asm
-	cat $(srcdir)/config/rs6000/crtresfpr.asm >crtresfpr.S
-
-crtsavgpr.S: $(srcdir)/config/rs6000/crtsavgpr.asm
-	cat $(srcdir)/config/rs6000/crtsavgpr.asm >crtsavgpr.S
-
-crtresgpr.S: $(srcdir)/config/rs6000/crtresgpr.asm
-	cat $(srcdir)/config/rs6000/crtresgpr.asm >crtresgpr.S
-
-crtresxfpr.S: $(srcdir)/config/rs6000/crtresxfpr.asm
-	cat $(srcdir)/config/rs6000/crtresxfpr.asm >crtresxfpr.S
-
-crtresxgpr.S: $(srcdir)/config/rs6000/crtresxgpr.asm
-	cat $(srcdir)/config/rs6000/crtresxgpr.asm >crtresxgpr.S
-
 # Switch synonyms
 MULTILIB_MATCHES_FLOAT	= msoft-float=mcpu?401 \
 			  msoft-float=mcpu?403 \
@@ -61,24 +34,3 @@  MULTILIB_EXTRA_OPTS	= fPIC mstrict-align
 MULTILIB_EXCEPTIONS	=
 
 MULTILIB_MATCHES	= ${MULTILIB_MATCHES_FLOAT}
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
-$(T)crtsavfpr$(objext): crtsavfpr.S
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c crtsavfpr.S -o $(T)crtsavfpr$(objext)
-
-$(T)crtresfpr$(objext): crtresfpr.S
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c crtresfpr.S -o $(T)crtresfpr$(objext)
-
-$(T)crtsavgpr$(objext): crtsavgpr.S
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c crtsavgpr.S -o $(T)crtsavgpr$(objext)
-
-$(T)crtresgpr$(objext): crtresgpr.S
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c crtresgpr.S -o $(T)crtresgpr$(objext)
-
-$(T)crtresxfpr$(objext): crtresxfpr.S
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c crtresxfpr.S -o $(T)crtresxfpr$(objext)
-
-$(T)crtresxgpr$(objext): crtresxgpr.S
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c crtresxgpr.S -o $(T)crtresxgpr$(objext)
diff --git a/gcc/config/rs6000/t-ppccomm b/gcc/config/rs6000/t-ppccomm
--- a/gcc/config/rs6000/t-ppccomm
+++ b/gcc/config/rs6000/t-ppccomm
@@ -19,17 +19,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA += tramp.S
-
-# These can't end up in shared libgcc
-LIB2FUNCS_STATIC_EXTRA = eabi.S
-
-eabi.S: $(srcdir)/config/rs6000/eabi.asm
-	cat $(srcdir)/config/rs6000/eabi.asm > eabi.S
-
-tramp.S: $(srcdir)/config/rs6000/tramp.asm
-	cat $(srcdir)/config/rs6000/tramp.asm > tramp.S
-
 # 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 --git a/gcc/config/rs6000/t-spe b/gcc/config/rs6000/t-spe
--- a/gcc/config/rs6000/t-spe
+++ b/gcc/config/rs6000/t-spe
@@ -18,9 +18,6 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 # What we really want are these variants:
 #	-mcpu=7400
 #	-mcpu=7400 -maltivec -mabi=altivec
diff --git a/gcc/config/rs6000/t-vxworks b/gcc/config/rs6000/t-vxworks
--- a/gcc/config/rs6000/t-vxworks
+++ b/gcc/config/rs6000/t-vxworks
@@ -1,6 +1,6 @@ 
 # Multilibs for VxWorks.
 #
-# Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2005, 2006, 2011 Free Software Foundation, Inc.
 #
 # This file is part of GCC.
 #
@@ -23,8 +23,3 @@  MULTILIB_OPTIONS = mrtp fPIC msoft-float
 MULTILIB_DIRNAMES =
 MULTILIB_MATCHES = fPIC=fpic
 MULTILIB_EXCEPTIONS = fPIC*
-
-# Similarily, LIB2FUNCS_EXTRA is set from config/t-vxworks and
-# t-ppccomm *adds* to it, but the common contents are useful to us.
-# In particular the base trampoline_setup bits are expected to be
-# provided there.
diff --git a/gcc/config/rx/t-rx b/gcc/config/rx/t-rx
--- a/gcc/config/rx/t-rx
+++ b/gcc/config/rx/t-rx
@@ -27,6 +27,3 @@  MULTILIB_MATCHES    = nofpu=mnofpu  nofp
 
 MULTILIB_EXCEPTIONS =
 MULTILIB_EXTRA_OPTS = 
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/sh/t-linux b/gcc/config/sh/t-linux
--- a/gcc/config/sh/t-linux
+++ b/gcc/config/sh/t-linux
@@ -1,4 +1,2 @@ 
-LIB2FUNCS_EXTRA= $(srcdir)/config/sh/linux-atomic.asm
-
 MULTILIB_DIRNAMES= 
 MULTILIB_MATCHES = 
diff --git a/gcc/config/sh/t-netbsd b/gcc/config/sh/t-netbsd
deleted file mode 100644
--- a/gcc/config/sh/t-netbsd
+++ /dev/null
@@ -1,21 +0,0 @@ 
-# Copyright (C) 2002, 2004, 2009, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-TARGET_LIBGCC2_CFLAGS = -fpic -mieee
-
-LIB2FUNCS_EXTRA=
diff --git a/gcc/config/sh/t-sh b/gcc/config/sh/t-sh
--- a/gcc/config/sh/t-sh
+++ b/gcc/config/sh/t-sh
@@ -22,8 +22,6 @@  sh-c.o: $(srcdir)/config/sh/sh-c.c \
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
 		$(srcdir)/config/sh/sh-c.c
 
-TARGET_LIBGCC2_CFLAGS = -mieee
-
 DEFAULT_ENDIAN = $(word 1,$(TM_ENDIAN_CONFIG))
 OTHER_ENDIAN = $(word 2,$(TM_ENDIAN_CONFIG))
 
@@ -84,9 +82,6 @@  MULTILIB_OSDIRNAMES = \
 	m5-64media=!m5-64media $(OTHER_ENDIAN)/m5-64media=!$(OTHER_ENDIAN)/m5-64media \
 	m5-64media-nofpu=!m5-64media-nofpu $(OTHER_ENDIAN)/m5-64media-nofpu=!$(OTHER_ENDIAN)/m5-64media-nofpu
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 $(out_object_file): gt-sh.h
 gt-sh.h : s-gtype ; @true
 
diff --git a/gcc/config/sparc/t-elf b/gcc/config/sparc/t-elf
--- a/gcc/config/sparc/t-elf
+++ b/gcc/config/sparc/t-elf
@@ -20,6 +20,3 @@ 
 MULTILIB_OPTIONS = msoft-float mcpu=v8 mflat
 MULTILIB_DIRNAMES = soft v8 flat
 MULTILIB_MATCHES = msoft-float=mno-fpu
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/sparc/t-leon b/gcc/config/sparc/t-leon
--- a/gcc/config/sparc/t-leon
+++ b/gcc/config/sparc/t-leon
@@ -22,6 +22,3 @@ 
 MULTILIB_OPTIONS = mcpu=v7 msoft-float mflat
 MULTILIB_DIRNAMES = v7 soft flat
 MULTILIB_MATCHES = mcpu?v7=mv7 msoft-float=mno-fpu
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/sparc/t-leon3 b/gcc/config/sparc/t-leon3
--- a/gcc/config/sparc/t-leon3
+++ b/gcc/config/sparc/t-leon3
@@ -20,6 +20,3 @@ 
 MULTILIB_OPTIONS = msoft-float
 MULTILIB_DIRNAMES = soft
 MULTILIB_MATCHES = msoft-float=mno-fpu
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/sparc/t-linux64 b/gcc/config/sparc/t-linux64
--- a/gcc/config/sparc/t-linux64
+++ b/gcc/config/sparc/t-linux64
@@ -27,6 +27,3 @@ 
 MULTILIB_OPTIONS = m64/m32
 MULTILIB_DIRNAMES = 64 32
 MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/sparc/t-netbsd64 b/gcc/config/sparc/t-netbsd64
--- a/gcc/config/sparc/t-netbsd64
+++ b/gcc/config/sparc/t-netbsd64
@@ -1,8 +1,5 @@ 
-# Disable multilib fow now, as NetBSD/sparc64 does not ship with
+# Disable multilib for now, as NetBSD/sparc64 does not ship with
 # a 32-bit environment.
 #MULTILIB_OPTIONS = m32/m64
 #MULTILIB_DIRNAMES = 32 64
 #MULTILIB_MATCHES =
-
-#LIBGCC = stmp-multilib
-#INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/spu/t-spu-elf b/gcc/config/spu/t-spu-elf
--- a/gcc/config/spu/t-spu-elf
+++ b/gcc/config/spu/t-spu-elf
@@ -19,36 +19,9 @@ 
 # allowing combined SPU/PPU sysroot builds.
 NATIVE_SYSTEM_HEADER_DIR = /include
 
-TARGET_LIBGCC2_CFLAGS = -fPIC -mwarn-reloc -D__IN_LIBGCC2
-
-# We exclude those because the libgcc2.c default versions do not support
-# the SPU single-precision format (round towards zero).  We provide our
-# own versions below and/or via direct expansion.
-LIB2FUNCS_EXCLUDE = _floatdisf _floatundisf _floattisf _floatunstisf
-
-LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/spu/float_unssidf.c \
-			 $(srcdir)/config/spu/float_unsdidf.c \
-			 $(srcdir)/config/spu/float_unsdisf.c \
-			 $(srcdir)/config/spu/float_disf.c \
-			 $(srcdir)/config/spu/mfc_tag_table.c \
-			 $(srcdir)/config/spu/mfc_tag_reserve.c \
-			 $(srcdir)/config/spu/mfc_tag_release.c \
-			 $(srcdir)/config/spu/mfc_multi_tag_reserve.c \
-			 $(srcdir)/config/spu/mfc_multi_tag_release.c \
-			 $(srcdir)/config/spu/multi3.c \
-			 $(srcdir)/config/spu/divmodti4.c \
-			 $(srcdir)/config/spu/divv2df3.c
-
-# Build TImode conversion routines to support Fortran 128-bit
-# integer data types.
-LIB2_SIDITI_CONV_FUNCS=yes
-
 # Multi-lib support.
 MULTILIB_OPTIONS=mea64
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 spu.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
   $(RTL_H) $(REGS_H) hard-reg-set.h \
   real.h insn-config.h conditions.h insn-attr.h flags.h $(RECOG_H) \
diff --git a/gcc/config/t-darwin b/gcc/config/t-darwin
--- a/gcc/config/t-darwin
+++ b/gcc/config/t-darwin
@@ -41,9 +41,3 @@  darwin-driver.o: $(srcdir)/config/darwin
   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H) opts.h
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
 	  $(srcdir)/config/darwin-driver.c
-
-# -pipe because there's an assembler bug, 4077127, which causes
-# it to not properly process the first # directive, causing temporary
-# file names to appear in stabs, causing the bootstrap to fail.  Using -pipe
-# works around this by not having any temporary file names.
-TARGET_LIBGCC2_CFLAGS = -fPIC -pipe
diff --git a/gcc/config/t-freebsd b/gcc/config/t-freebsd
deleted file mode 100644
--- a/gcc/config/t-freebsd
+++ /dev/null
@@ -1,2 +0,0 @@ 
-# Compile libgcc.a with pic.
-TARGET_LIBGCC2_CFLAGS += -fPIC
diff --git a/gcc/config/t-libunwind b/gcc/config/t-libunwind
--- a/gcc/config/t-libunwind
+++ b/gcc/config/t-libunwind
@@ -19,4 +19,3 @@ 
 # Use the system libunwind library.
 
 T_CFLAGS += -DUSE_LIBUNWIND_EXCEPTIONS
-TARGET_LIBGCC2_CFLAGS += -DUSE_GAS_SYMVER
diff --git a/gcc/config/t-linux b/gcc/config/t-linux
deleted file mode 100644
--- a/gcc/config/t-linux
+++ /dev/null
@@ -1,21 +0,0 @@ 
-# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003,
-# 2004, 2011 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 3, 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 COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# Compile libgcc2.a with pic.
-TARGET_LIBGCC2_CFLAGS = -fPIC
diff --git a/gcc/config/t-lynx b/gcc/config/t-lynx
--- a/gcc/config/t-lynx
+++ b/gcc/config/t-lynx
@@ -16,15 +16,9 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# Compile libgcc2.a with pic.
-TARGET_LIBGCC2_CFLAGS = -fPIC
-
 MULTILIB_OPTIONS = mthreads
 MULTILIB_DIRNAMES = thread
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
 Local Variables:
 mode: makefile
 End:
diff --git a/gcc/config/t-rtems b/gcc/config/t-rtems
--- a/gcc/config/t-rtems
+++ b/gcc/config/t-rtems
@@ -1,7 +1,2 @@ 
 # RTEMS always has limits.h.
 LIMITS_H_TEST = true
-
-# If we are building next to newlib, this will let us find the RTEMS
-# limits.h when building libgcc2.  Otherwise, newlib must be installed
-# first.
-LIBGCC2_INCLUDES = -I$(srcdir)/../newlib/libc/sys/rtems/include
diff --git a/gcc/config/t-sol2 b/gcc/config/t-sol2
--- a/gcc/config/t-sol2
+++ b/gcc/config/t-sol2
@@ -36,6 +36,3 @@  sol2-stubs.o: $(srcdir)/config/sol2-stub
 sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
   tree.h output.h $(TM_H) $(TARGET_H) $(TM_P_H) $(GGC_H)
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
-
-# This is required by gcc/ada/gcc-interface/Makefile.in.
-TARGET_LIBGCC2_CFLAGS = -fPIC
diff --git a/gcc/config/t-svr4 b/gcc/config/t-svr4
deleted file mode 100644
--- a/gcc/config/t-svr4
+++ /dev/null
@@ -1,7 +0,0 @@ 
-# We need to use -fPIC when we are using gcc to compile the routines in
-# crtstuff.c.  This is only really needed when we are going to use gcc/g++
-# to produce a shared library, but since we don't know ahead of time when
-# we will be doing that, we just always use -fPIC when compiling the
-# routines in crtstuff.c.  Likewise for libgcc2.c.
-
-TARGET_LIBGCC2_CFLAGS = -fPIC
diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks
--- a/gcc/config/t-vxworks
+++ b/gcc/config/t-vxworks
@@ -17,32 +17,10 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-# Build libgcc using the multilib mechanism
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
-# No special flags needed for libgcc.a
-TARGET_LIBGCC2_CFLAGS =
-
-# Don't build libgcc.a with debug info
-LIBGCC2_DEBUG_CFLAGS =
-
-# Extra libgcc2 modules used by gthr-vxworks.h functions
-LIB2FUNCS_EXTRA = $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
-
 # Some runtime modules need these.  Can't set extra_headers in config.gcc
 # because the paths are always made absolute to the cpu config dir.
 EXTRA_HEADERS += $(srcdir)/gthr-vxworks.h gthr-default.h
 
-# This ensures that the correct target headers are used; some
-# VxWorks system headers have names that collide with GCC's
-# internal (host) headers, e.g. regs.h.
-LIBGCC2_INCLUDES = -nostdinc -I \
-  `case "/$$(MULTIDIR)" in \
-     */mrtp*) echo $(WIND_USR)/h ;; \
-     *) echo $(WIND_BASE)/target/h ;; \
-   esac`
-
 # Both the kernel and RTP headers provide limits.h.
 LIMITS_H_TEST = true
 
diff --git a/gcc/config/v850/t-v850 b/gcc/config/v850/t-v850
--- a/gcc/config/v850/t-v850
+++ b/gcc/config/v850/t-v850
@@ -20,7 +20,6 @@ 
 # Create target-specific versions of the libraries
 MULTILIB_OPTIONS  = mv850/mv850e/mv850e2/mv850e2v3
 MULTILIB_DIRNAMES = v850 v850e v850e2 v850e2v3
-INSTALL_LIBGCC    = install-multilib
 MULTILIB_MATCHES  = mv850e=mv850e1 
 
 TCFLAGS = -mno-app-regs -msmall-sld -Wa,-mwarn-signed-overflow -Wa,-mwarn-unsigned-overflow
diff --git a/gcc/config/xtensa/t-elf b/gcc/config/xtensa/t-elf
deleted file mode 100644
--- a/gcc/config/xtensa/t-elf
+++ /dev/null
@@ -1,1 +0,0 @@ 
-TARGET_LIBGCC2_CFLAGS += -mlongcalls
diff --git a/gcc/config/xtensa/t-xtensa b/gcc/config/xtensa/t-xtensa
--- a/gcc/config/xtensa/t-xtensa
+++ b/gcc/config/xtensa/t-xtensa
@@ -17,6 +17,4 @@ 
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-LIB2FUNCS_EXTRA = $(srcdir)/config/xtensa/lib2funcs.S
-
 $(out_object_file): gt-xtensa.h
diff --git a/gcc/po/EXCLUDES b/gcc/po/EXCLUDES
--- a/gcc/po/EXCLUDES
+++ b/gcc/po/EXCLUDES
@@ -22,8 +22,6 @@ 
 # .def are examined to begin with.
 
 #   These files are part of libgcc, or target headers provided by gcc.
-config/vxlib.c
-gbl-ctors.h
 gcov-io.h
 gcov-iov.c
 gthr-aix.h
@@ -36,11 +34,8 @@  gthr-solaris.h
 gthr-vxworks.h
 gthr-win32.h
 gthr.h
-libgcc2.c
-libgcc2.h
 limitx.h
 limity.h
-longlong.h
 
 #   These programs are meant to be executed only by GCC maintainers or
 #   installers.  Such files do not need to be translated, as these
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -22,7 +22,6 @@ 
 libgcc_topdir = @libgcc_topdir@
 host_subdir = @host_subdir@
 
-gcc_srcdir = $(libgcc_topdir)/gcc
 gcc_objdir = $(MULTIBUILDTOP)../../$(host_subdir)/gcc
 
 srcdir = @srcdir@
@@ -220,6 +219,42 @@  else
 DECNUMINC =
 endif
 
+# Options to use when compiling libgcc2.a.
+#
+LIBGCC2_DEBUG_CFLAGS = -g
+LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
+		 $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \
+		 -DIN_LIBGCC2 \
+		 -fbuilding-libgcc -fno-stack-protector \
+		 $(INHIBIT_LIBC_CFLAGS)
+
+# Additional options to use when compiling libgcc2.a.
+# Some targets override this to -isystem include
+LIBGCC2_INCLUDES =
+
+# Additional target-dependent options for compiling libgcc2.a.
+HOST_LIBGCC2_CFLAGS =
+
+PICFLAG = @PICFLAG@
+
+# Defined in libgcc2.c, included only in the static library.
+LIB2FUNCS_ST = _eprintf __gcc_bcmp
+
+# List of functions not to build from libgcc2.c.
+LIB2FUNCS_EXCLUDE =
+
+# 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
+
+# List of extra C and assembler files to add to static and shared libgcc2.
+# Assembler files should have names ending in `.S'.
+LIB2ADD = 
+
+# List of extra C and assembler files to add to static libgcc2.
+# Assembler files should have names ending in `.S'.
+LIB2ADD_ST =
+
 # 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
@@ -416,15 +451,14 @@  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)
+$(lib2funcs-o): %$(objext): $(srcdir)/libgcc2.c
+	$(gcc_compile) -DL$* -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
+$(lib2funcs-s-o): %_s$(objext): $(srcdir)/libgcc2.c
+	$(gcc_s_compile) -DL$* -c $<
 libgcc-s-objects += $(lib2funcs-s-o)
 endif
 
@@ -452,15 +486,15 @@  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 \
+$(lib2-divmod-o): %$(objext): $(srcdir)/libgcc2.c
+	$(gcc_compile) -DL$* -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 \
+$(lib2-divmod-s-o): %_s$(objext): $(srcdir)/libgcc2.c
+	$(gcc_s_compile) -DL$* -c $< \
 	  -fexceptions -fnon-call-exceptions
 libgcc-s-objects += $(lib2-divmod-s-o)
 endif
@@ -1027,11 +1061,3 @@  install-strip: install
 .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 --git a/libgcc/config.host b/libgcc/config.host
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -163,7 +163,7 @@  esac
 case ${host} in
 *-*-darwin*)
   asm_hidden_op=.private_extern
-  tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
+  tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin t-libgcc-pic t-slibgcc-darwin"
   extra_parts=crt3.o
   ;;
 *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
@@ -179,10 +179,11 @@  case ${host} in
   # This is the generic ELF configuration of FreeBSD.  Later
   # machine-specific sections may refine and add to this
   # configuration.
-  tmake_file="$tmake_file t-crtstuff-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver"
+  tmake_file="$tmake_file t-freebsd t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver"
   extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
   case ${target_thread_file} in
     posix)
+      tmake_file="${tmake_file} t-freebsd-thread"
       # Before 5.0, FreeBSD can't bind shared libraries to -lc
       # when "optionally" threaded via weak pthread_* checks.
       case ${host} in
@@ -194,15 +195,15 @@  case ${host} in
   esac
   ;;
 *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
-  tmake_file="$tmake_file t-crtstuff-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
+  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
   extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
   ;;
 *-*-lynxos*)
-  tmake_file="$tmake_file $cpu_type/t-crtstuff t-crtstuff-pic"
+  tmake_file="$tmake_file t-lynx $cpu_type/t-crtstuff t-crtstuff-pic t-libgcc-pic"
   extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
   ;;
 *-*-netbsd*)
-  tmake_file="$tmake_file t-crtstuff-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver"
+  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver"
   # NetBSD 1.7 and later are set up to use GCC's crtstuff for
   # ELF configurations.  We will clear extra_parts in the
   # a.out configurations.
@@ -213,7 +214,12 @@  case ${host} in
   esac
   ;;
 *-*-openbsd*)
-  tmake_file="$tmake_file t-crtstuff-pic"
+  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic"
+  case ${target_thread_file} in
+    posix)
+      tmake_file="$tmake_file t-openbsd-thread"
+      ;;
+  esac
   ;;
 *-*-rtems*)
   extra_parts="crtbegin.o crtend.o"
@@ -221,7 +227,7 @@  case ${host} in
 *-*-solaris2*)
   # Unless linker support and dl_iterate_phdr are present,
   # unwind-dw2-fde-dip.c automatically falls back to unwind-dw2-fde.c.
-  tmake_file="$tmake_file t-sol2 t-eh-dw2-dip t-slibgcc t-slibgcc-elf-ver"
+  tmake_file="$tmake_file t-sol2 t-eh-dw2-dip t-libgcc-pic t-slibgcc t-slibgcc-elf-ver"
   if test $with_gnu_ld = yes; then
     tmake_file="$tmake_file t-slibgcc-gld"
   else
@@ -252,6 +258,7 @@  case ${host} in
   extra_parts="vcrt0.o pcrt0.o crtbegin.o crtbeginS.o crtend.o crtendS.o"
   ;;
 *-*-vxworks*)
+  tmake_file=t-vxworks
   ;;
 *-*-elf)
   extra_parts="crtbegin.o crtend.o"
@@ -273,17 +280,19 @@  esac
 
 case ${host} in
 alpha*-*-linux*)
-	tmake_file="${tmake_file} t-crtfm alpha/t-linux"
+	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee t-crtfm alpha/t-linux"
 	extra_parts="$extra_parts crtfastmath.o"
 	md_unwind_header=alpha/linux-unwind.h
 	;;
 alpha*-*-freebsd*)
-	tmake_file="${tmake_file} t-crtfm"
+	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee t-crtfm"
 	extra_parts="$extra_parts crtbeginT.o crtfastmath.o"
 	;;
 alpha*-*-netbsd*)
+	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
 	;;
 alpha*-*-openbsd*)
+	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
 	;;
 alpha*-dec-osf5.1*)
 	tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee t-crtfm t-slibgcc alpha/t-slibgcc-osf"
@@ -292,16 +301,16 @@  alpha*-dec-osf5.1*)
 	    tmake_file="${tmake_file} alpha/t-osf-pthread"
 	    ;;
 	esac
-	extra_parts="${extra_parts} qrnnd.o crtfastmath.o gthr-posix.o"
+	extra_parts="${extra_parts} crtfastmath.o"
 	md_unwind_header=alpha/osf5-unwind.h
 	;;
 alpha64-dec-*vms*)
-	tmake_file="$tmake_file alpha/t-vms t-slibgcc-vms"
+	tmake_file="$tmake_file alpha/t-alpha alpha/t-ieee alpha/t-vms t-slibgcc-vms"
 	extra_parts="$extra_parts vms-dwarf2.o vms-dwarf2eh.o"
 	md_unwind_header=alpha/vms-unwind.h
 	;;
 alpha*-dec-*vms*)
-	tmake_file="$tmake_file alpha/t-vms t-slibgcc-vms"
+	tmake_file="$tmake_file alpha/t-alpha alpha/t-ieee alpha/t-vms t-slibgcc-vms"
 	extra_parts="$extra_parts vms-dwarf2.o vms-dwarf2eh.o"
 	md_unwind_header=alpha/vms-unwind.h
 	;;
@@ -313,7 +322,7 @@  arm*-*-freebsd*)
 	tmake_file="$tmake_file arm/t-arm arm/t-strongarm-elf t-fdpbit"
 	;;
 arm*-*-netbsdelf*)
-	tmake_file="$tmake_file arm/t-arm t-slibgcc-gld-nover"
+	tmake_file="$tmake_file arm/t-arm arm/t-netbsd t-slibgcc-gld-nover"
 	;;
 arm*-*-linux*)			# ARM GNU/Linux with ELF
 	tmake_file="${tmake_file} arm/t-arm t-fixedpoint-gnu-prefix"
@@ -379,16 +388,16 @@  avr-*-*)
 	tmake_file="${cpu_type}/t-avr t-fpbit"
 	;;
 bfin*-elf*)
-	tmake_file="bfin/t-bfin bfin/t-crtlibid bfin/t-crtstuff t-fdpbit"
+	tmake_file="bfin/t-bfin bfin/t-elf bfin/t-crtlibid bfin/t-crtstuff t-fdpbit"
 	extra_parts="$extra_parts crtbeginS.o crtendS.o crti.o crtn.o crtlibid.o"
         ;;
 bfin*-uclinux*)
-	tmake_file="bfin/t-bfin bfin/t-crtlibid bfin/t-crtstuff t-fdpbit"
+	tmake_file="bfin/t-bfin bfin/t-elf bfin/t-crtlibid bfin/t-crtstuff t-fdpbit"
 	extra_parts="$extra_parts crtbeginS.o crtendS.o crtlibid.o"
 	md_unwind_header=bfin/linux-unwind.h
         ;;
 bfin*-linux-uclibc*)
-	tmake_file="$tmake_file bfin/t-bfin bfin/t-crtstuff t-fdpbit bfin/t-linux"
+	tmake_file="$tmake_file bfin/t-bfin bfin/t-elf bfin/t-crtstuff t-fdpbit bfin/t-linux"
 	# No need to build crtbeginT.o on uClibc systems.  Should probably
 	# be moved to the OS specific section above.
 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
@@ -403,21 +412,21 @@  bfin*-*)
 	extra_parts="crtbegin.o crtend.o crti.o crtn.o"
         ;;
 crisv32-*-elf)
- 	tmake_file=t-fdpbit
+	tmake_file="cris/t-cris t-fdpbit"
  	;;
 crisv32-*-none)
-	tmake_file=t-fdpbit
+	tmake_file="cris/t-cris t-fdpbit"
 	extra_parts="crtbegin.o crtend.o"
 	;;
 cris-*-elf)
-	tmake_file="$tmake_file cris/t-elfmulti"
+	tmake_file="$tmake_file cris/t-cris cris/t-elfmulti"
 	;;
 cris-*-none)
-	tmake_file="$tmake_file cris/t-elfmulti"
+	tmake_file="$tmake_file cris/t-cris cris/t-elfmulti"
  	extra_parts="crtbegin.o crtend.o"
 	;;
 cris-*-linux* | crisv32-*-linux*)
-	tmake_file="$tmake_file t-fdpbit cris/t-linux"
+	tmake_file="$tmake_file cris/t-cris t-fdpbit cris/t-linux"
 	;;
 fr30-*-elf)
 	tmake_file="$tmake_file fr30/t-fr30 t-fdpbit"
@@ -453,7 +462,7 @@  hppa*-*-linux*)
 	md_unwind_header=pa/linux-unwind.h
 	;;
 hppa[12]*-*-hpux10*)
-	tmake_file="$tmake_file t-slibgcc"
+	tmake_file="$tmake_file pa/t-hpux pa/t-hpux10 t-libgcc-pic t-slibgcc"
 	# Set the libgcc version number
 	if test x$enable_sjlj_exceptions = xyes; then
 	    tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver"
@@ -464,7 +473,7 @@  hppa[12]*-*-hpux10*)
 	md_unwind_header=pa/hpux-unwind.h
 	;;
 hppa*64*-*-hpux11*)
-	tmake_file="$tmake_file pa/t-stublib pa/t-stublib64 t-slibgcc"
+	tmake_file="$tmake_file pa/t-hpux pa/t-pa64 pa/t-stublib pa/t-stublib64 t-libgcc-pic t-slibgcc"
 	# Set the libgcc version number
 	if test x$enable_sjlj_exceptions = xyes; then
 	    tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver"
@@ -477,7 +486,7 @@  hppa*64*-*-hpux11*)
 	md_unwind_header=pa/hpux-unwind.h
 	;;
 hppa[12]*-*-hpux11*)
-	tmake_file="$tmake_file pa/t-stublib t-slibgcc"
+	tmake_file="$tmake_file pa/t-hpux pa/t-stublib t-libgcc-pic t-slibgcc"
 	# Set the libgcc version number
 	if test x$enable_sjlj_exceptions = xyes; then
 	    tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver"
@@ -497,10 +506,10 @@  x86_64-*-darwin*)
 	extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
 	;;
 i[34567]86-*-elf*)
-	tmake_file="$tmake_file t-crtstuff-pic"
+	tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic"
 	;;
 x86_64-*-elf*)
-	tmake_file="$tmake_file t-crtstuff-pic"
+	tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic"
 	;;
 i[34567]86-*-freebsd*)
 	tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff"
@@ -540,7 +549,7 @@  i[34567]86-pc-msdosdjgpp*)
 i[34567]86-*-lynxos*)
 	;;
 i[34567]86-*-nto-qnx*)
-	tmake_file="$tmake_file i386/t-nto"
+	tmake_file="$tmake_file i386/t-nto t-libgcc-pic"
 	extra_parts=crtbegin.o
 	;;
 i[34567]86-*-rtems*)
@@ -577,6 +586,11 @@  i[34567]86-*-cygwin*)
 	;;
 i[34567]86-*-mingw*)
 	extra_parts="crtbegin.o crtend.o crtfastmath.o"
+	case ${target_thread_file} in
+	  win32)
+	    tmake_file="$tmake_file i386/t-gthr-win32"
+	    ;;
+	esac
 	# This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h
 	if test x$enable_sjlj_exceptions = xyes; then
 		tmake_eh_file="i386/t-sjlj-eh"
@@ -593,6 +607,11 @@  i[34567]86-*-mingw*)
 	md_unwind_header=i386/w32-unwind.h
 	;;
 x86_64-*-mingw*)
+	case ${target_thread_file} in
+	  win32)
+	    tmake_file="$tmake_file i386/t-gthr-win32"
+	    ;;
+	esac
 	# This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h
 	if test x$enable_sjlj_exceptions = xyes; then
 		tmake_eh_file="i386/t-sjlj-eh"
@@ -609,7 +628,7 @@  x86_64-*-mingw*)
 	extra_parts="$extra_parts crtfastmath.o"
 	;;
 i[34567]86-*-interix3*)
-	tmake_file="$tmake_file i386/t-chkstk"
+	tmake_file="$tmake_file i386/t-interix i386/t-chkstk"
 	;;
 ia64*-*-elf*)
 	extra_parts="$extra_parts crtbeginS.o crtendS.o crtfastmath.o"
@@ -647,7 +666,7 @@  lm32-*-elf*|lm32-*-rtems*)
 	;;
 lm32-*-uclinux*)
         extra_parts="$extra_parts crtbegin.o crtendS.o crtbeginT.o"
-        tmake_file="lm32/t-lm32 lm32/t-uclinux t-softfp-sfdf t-softfp"
+        tmake_file="lm32/t-lm32 lm32/t-uclinux t-libgcc-pic t-softfp-sfdf t-softfp"
 	;;	
 m32r-*-elf*)
 	tmake_file=t-fdpbit
@@ -737,35 +756,35 @@  mipsisa32-*-elf* | mipsisa32el-*-elf* | 
 mipsisa32r2-*-elf* | mipsisa32r2el-*-elf* | \
 mipsisa64-*-elf* | mipsisa64el-*-elf* | \
 mipsisa64r2-*-elf* | mipsisa64r2el-*-elf*)
-	tmake_file="$tmake_file mips/t-crtstuff mips/t-mips16"
+	tmake_file="$tmake_file mips/t-elf mips/t-crtstuff mips/t-mips16"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
 mipsisa64sr71k-*-elf*)
-	tmake_file="mips/t-crtstuff t-fdpbit"
+	tmake_file="mips/t-elf mips/t-crtstuff t-fdpbit"
 	extra_parts="$extra_parts crti.o crtn.o"
         ;;
 mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*)
-	tmake_file="$tmake_file mips/t-crtstuff mips/t-mips16"
+	tmake_file="$tmake_file mips/t-elf mips/t-crtstuff mips/t-mips16"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
 mips-*-elf* | mipsel-*-elf*)
-	tmake_file="$tmake_file mips/t-crtstuff mips/t-mips16"
+	tmake_file="$tmake_file mips/t-elf mips/t-crtstuff mips/t-mips16"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
 mips64-*-elf* | mips64el-*-elf*)
-	tmake_file="$tmake_file mips/t-crtstuff mips/t-mips16"
+	tmake_file="$tmake_file mips/t-elf mips/t-crtstuff mips/t-mips16"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
 mips64vr-*-elf* | mips64vrel-*-elf*)
-	tmake_file="$tmake_file mips/t-crtstuff"
+	tmake_file="$tmake_file mips/t-elf mips/t-vr mips/t-crtstuff"
 	extra_parts="$extra_parts crti.o crtn.o"
         ;;
 mips64orion-*-elf* | mips64orionel-*-elf*)
-	tmake_file="$tmake_file mips/t-crtstuff mips/t-mips16"
+	tmake_file="$tmake_file mips/t-elf mips/t-crtstuff mips/t-mips16"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
 mips*-*-rtems*)
-	tmake_file="$tmake_file mips/t-crtstuff mips/t-mips16"
+	tmake_file="$tmake_file mips/t-elf mips/t-crtstuff mips/t-mips16"
 	extra_parts="$extra_parts crti.o crtn.o"
 	;;
 mips-wrs-vxworks)
@@ -790,7 +809,7 @@  moxie-*-rtems*)
 	extra_parts=
 	;;
 pdp11-*-*)
-	tmake_file=t-fdpbit
+	tmake_file="pdp11/t-pdp11 t-fdpbit"
 	;;
 picochip-*-*)
 	tmake_file="picochip/t-picochip t-fpbit"
@@ -809,7 +828,7 @@  powerpc-*-darwin*)
 	extra_parts="$extra_parts crt2.o"
 	;;
 powerpc64-*-darwin*)
-	tmake_file="$tmake_file rs6000/t-ibm-ldouble"
+	tmake_file="$tmake_file rs6000/t-darwin64 rs6000/t-ibm-ldouble"
 	extra_parts="$extra_parts crt2.o"
 	;;
 powerpc-*-freebsd*)
@@ -898,7 +917,7 @@  s390x-*-linux*)
 	md_unwind_header=s390/linux-unwind.h
 	;;
 s390x-ibm-tpf*)
-	tmake_file="${tmake_file} s390/t-crtstuff s390/t-tpf t-eh-dw2-dip"
+	tmake_file="${tmake_file} s390/t-crtstuff t-libgcc-pic t-eh-dw2-dip"
 	extra_parts="crtbeginS.o crtendS.o"
 	md_unwind_header=s390/tpf-unwind.h
 	;;
@@ -1019,14 +1038,14 @@  sparc64-*-linux*)		# 64-bit SPARC's runn
 sparc64-*-netbsd*)
 	;;
 spu-*-elf*)
-	tmake_file="$tmake_file spu/t-elf t-fdpbit"
+	tmake_file="$tmake_file spu/t-elf t-libgcc-pic t-fdpbit"
 	extra_parts="$extra_parts \
 		libgcc_cachemgr.a libgcc_cachemgr_nonatomic.a \
 		libgcc_cache8k.a libgcc_cache16k.a libgcc_cache32k.a \
 		libgcc_cache64k.a libgcc_cache128k.a"
 	;;
 tic6x-*-uclinux)
-	tmake_file="${tmake_file} t-softfp-sfdf t-softfp-excl t-softfp c6x/t-elf  c6x/t-uclinux t-crtstuff-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-gnu-prefix"
+	tmake_file="${tmake_file} t-softfp-sfdf t-softfp-excl t-softfp c6x/t-elf  c6x/t-uclinux t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-gnu-prefix"
 	extra_parts="crtbeginS.o crtendS.o crti.o crtn.o"
 	;;
 tic6x-*-elf)
diff --git a/gcc/gthr-posix.c b/libgcc/config/alpha/gthr-posix.c
rename from gcc/gthr-posix.c
rename to libgcc/config/alpha/gthr-posix.c
--- a/gcc/gthr-posix.c
+++ b/libgcc/config/alpha/gthr-posix.c
@@ -1,6 +1,7 @@ 
 /* POSIX threads dummy routines for systems without weak definitions.  */
 /* Compile this one with gcc.  */
-/* Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2011
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -177,7 +178,7 @@  pthread_cond_wait (pthread_cond_t *cond 
 }
 
 int
-pthread_cond_timedwait (pthread_cond_t *cond ATTRIBUTE_UNUSED, 
+pthread_cond_timedwait (pthread_cond_t *cond ATTRIBUTE_UNUSED,
 			pthread_mutex_t *mutex ATTRIBUTE_UNUSED,
 			const struct timespec *abstime ATTRIBUTE_UNUSED)
 {
diff --git a/gcc/config/alpha/qrnnd.asm b/libgcc/config/alpha/qrnnd.S
rename from gcc/config/alpha/qrnnd.asm
rename to libgcc/config/alpha/qrnnd.S
diff --git a/libgcc/config/alpha/t-alpha b/libgcc/config/alpha/t-alpha
--- a/libgcc/config/alpha/t-alpha
+++ b/libgcc/config/alpha/t-alpha
@@ -1,2 +1,2 @@ 
 # This is a support routine for longlong.h, used by libgcc2.c.
-LIB2ADD += $(gcc_srcdir)/config/alpha/qrnnd.asm
+LIB2ADD += $(srcdir)/config/alpha/qrnnd.S
diff --git a/libgcc/config/alpha/t-osf-pthread b/libgcc/config/alpha/t-osf-pthread
--- a/libgcc/config/alpha/t-osf-pthread
+++ b/libgcc/config/alpha/t-osf-pthread
@@ -2,4 +2,4 @@ 
 HOST_LIBGCC2_CFLAGS += -pthread
 
 # Provide dummy POSIX threads functions
-LIB2ADD += $(gcc_srcdir)/gthr-posix.c
+LIB2ADD += $(srcdir)/config/alpha/gthr-posix.c
diff --git a/libgcc/config/alpha/t-vms b/libgcc/config/alpha/t-vms
--- a/libgcc/config/alpha/t-vms
+++ b/libgcc/config/alpha/t-vms
@@ -5,3 +5,5 @@  vms-dwarf2.o: $(srcdir)/config/alpha/vms
 
 vms-dwarf2eh.o: $(srcdir)/config/alpha/vms-dwarf2eh.S
 	$(gcc_compile) -c -x assembler-with-cpp $<
+
+LIB2ADD += $(srcdir)/config/alpha/vms-gcc_shell_handler.c
diff --git a/gcc/config/alpha/vms-gcc_shell_handler.c b/libgcc/config/alpha/vms-gcc_shell_handler.c
rename from gcc/config/alpha/vms-gcc_shell_handler.c
rename to libgcc/config/alpha/vms-gcc_shell_handler.c
diff --git a/gcc/config/arm/bpabi.c b/libgcc/config/arm/bpabi.c
rename from gcc/config/arm/bpabi.c
rename to libgcc/config/arm/bpabi.c
diff --git a/gcc/config/arm/fp16.c b/libgcc/config/arm/fp16.c
rename from gcc/config/arm/fp16.c
rename to libgcc/config/arm/fp16.c
diff --git a/gcc/config/arm/linux-atomic.c b/libgcc/config/arm/linux-atomic.c
rename from gcc/config/arm/linux-atomic.c
rename to libgcc/config/arm/linux-atomic.c
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
--- a/libgcc/config/arm/t-bpabi
+++ b/libgcc/config/arm/t-bpabi
@@ -1,6 +1,12 @@ 
 # Add the bpabi.S functions.
 LIB1ASMFUNCS += _aeabi_lcmp _aeabi_ulcmp _aeabi_ldivmod _aeabi_uldivmod
 
+# Add the BPABI C functions.
+LIB2ADD += $(srcdir)/config/arm/bpabi.c \
+	   $(srcdir)/config/arm/unaligned-funcs.c
+
+LIB2ADD_ST += $(srcdir)/config/arm/fp16.c
+
 LIB2ADDEH = $(srcdir)/config/arm/unwind-arm.c \
   $(srcdir)/config/arm/libunwind.S \
   $(srcdir)/config/arm/pr-support.c $(srcdir)/unwind-c.c
diff --git a/libgcc/config/arm/t-elf b/libgcc/config/arm/t-elf
--- a/libgcc/config/arm/t-elf
+++ b/libgcc/config/arm/t-elf
@@ -11,3 +11,8 @@  LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi
 	_arm_cmpsf2 _arm_unordsf2 _arm_fixsfsi _arm_fixunssfsi \
 	_arm_floatdidf _arm_floatdisf _arm_floatundidf _arm_floatundisf \
 	_clzsi2 _clzdi2 
+
+# Currently there is a bug somewhere in GCC's alias analysis
+# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+# Disabling function inlining is a workaround for this problem.
+HOST_LIBGCC2_CFLAGS = -fno-inline
diff --git a/libgcc/config/arm/t-linux b/libgcc/config/arm/t-linux
--- a/libgcc/config/arm/t-linux
+++ b/libgcc/config/arm/t-linux
@@ -1,3 +1,7 @@ 
 LIB1ASMSRC = arm/lib1funcs.S
 LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \
 	_arm_addsubdf3 _arm_addsubsf3
+
+# Just for these, we omit the frame pointer since it makes such a big
+# difference.
+HOST_LIBGCC2_CFLAGS += -fomit-frame-pointer
diff --git a/libgcc/config/arm/t-linux-eabi b/libgcc/config/arm/t-linux-eabi
--- a/libgcc/config/arm/t-linux-eabi
+++ b/libgcc/config/arm/t-linux-eabi
@@ -1,2 +1,4 @@ 
 # Use a version of div0 which raises SIGFPE, and a special __clear_cache.
 LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx _clear_cache
+
+LIB2ADD_ST += $(srcdir)/config/arm/linux-atomic.c
diff --git a/libgcc/config/arm/t-netbsd b/libgcc/config/arm/t-netbsd
new file mode 100644
--- /dev/null
+++ b/libgcc/config/arm/t-netbsd
@@ -0,0 +1,7 @@ 
+# Just for these, we omit the frame pointer since it makes such a big
+# difference.  It is then pointless adding debugging.
+HOST_LIBGCC2_CFLAGS += -fomit-frame-pointer
+
+LIBGCC2_DEBUG_CFLAGS = -g0
+
+LIB2ADD += $(srcdir)/floatunsidf.c $(srcdir)/floatunsisf.c
diff --git a/libgcc/config/arm/t-strongarm-elf b/libgcc/config/arm/t-strongarm-elf
--- a/libgcc/config/arm/t-strongarm-elf
+++ b/libgcc/config/arm/t-strongarm-elf
@@ -1,1 +1,6 @@ 
 LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _clzsi2 _clzdi2
+
+# Currently there is a bug somewhere in GCC's alias analysis
+# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+# Disabling function inlining is a workaround for this problem.
+HOST_LIBGCC2_CFLAGS = -fno-inline
diff --git a/libgcc/config/arm/t-symbian b/libgcc/config/arm/t-symbian
--- a/libgcc/config/arm/t-symbian
+++ b/libgcc/config/arm/t-symbian
@@ -12,5 +12,8 @@  LIB1ASMFUNCS += \
 	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
 	_fixsfsi _fixunssfsi
 
+# Include half-float helpers.
+LIB2ADD_ST += $(srcdir)/config/arm/fp16.c
+
 # Include the gcc personality routine
 LIB2ADDEH = $(srcdir)/unwind-c.c $(srcdir)/config/arm/pr-support.c
diff --git a/gcc/config/arm/unaligned-funcs.c b/libgcc/config/arm/unaligned-funcs.c
rename from gcc/config/arm/unaligned-funcs.c
rename to libgcc/config/arm/unaligned-funcs.c
diff --git a/libgcc/config/avr/t-avr b/libgcc/config/avr/t-avr
--- a/libgcc/config/avr/t-avr
+++ b/libgcc/config/avr/t-avr
@@ -46,6 +46,14 @@  LIB1ASMFUNCS = \
 	_lshrdi3 \
 	_fmul _fmuls _fmulsu
 
+LIB2FUNCS_EXCLUDE = \
+	_clz
+
+# We do not have the DF type.
+# Most of the C functions in libgcc2 use almost all registers,
+# so use -mcall-prologues for smaller code size.
+HOST_LIBGCC2_CFLAGS = -DDF=SF -Dinhibit_libc -mcall-prologues -Os
+
 # Extra 16-bit integer functions.
 intfuncs16 = _absvXX2 _addvXX3 _subvXX3 _mulvXX3 _negvXX2 _clrsbXX2
 
diff --git a/libgcc/config/bfin/t-crtstuff b/libgcc/config/bfin/t-crtstuff
--- a/libgcc/config/bfin/t-crtstuff
+++ b/libgcc/config/bfin/t-crtstuff
@@ -1,1 +1,1 @@ 
-CRTSTUFF_T_CFLAGS = -fpic
+CRTSTUFF_T_CFLAGS = $(PICFLAG)
diff --git a/libgcc/config/bfin/t-elf b/libgcc/config/bfin/t-elf
new file mode 100644
--- /dev/null
+++ b/libgcc/config/bfin/t-elf
@@ -0,0 +1,1 @@ 
+HOST_LIBGCC2_CFLAGS = $(PICFLAG)
diff --git a/gcc/config/c6x/eqd.c b/libgcc/config/c6x/eqd.c
rename from gcc/config/c6x/eqd.c
rename to libgcc/config/c6x/eqd.c
diff --git a/gcc/config/c6x/eqf.c b/libgcc/config/c6x/eqf.c
rename from gcc/config/c6x/eqf.c
rename to libgcc/config/c6x/eqf.c
diff --git a/gcc/config/c6x/ged.c b/libgcc/config/c6x/ged.c
rename from gcc/config/c6x/ged.c
rename to libgcc/config/c6x/ged.c
diff --git a/gcc/config/c6x/gef.c b/libgcc/config/c6x/gef.c
rename from gcc/config/c6x/gef.c
rename to libgcc/config/c6x/gef.c
diff --git a/gcc/config/c6x/gtd.c b/libgcc/config/c6x/gtd.c
rename from gcc/config/c6x/gtd.c
rename to libgcc/config/c6x/gtd.c
diff --git a/gcc/config/c6x/gtf.c b/libgcc/config/c6x/gtf.c
rename from gcc/config/c6x/gtf.c
rename to libgcc/config/c6x/gtf.c
diff --git a/gcc/config/c6x/led.c b/libgcc/config/c6x/led.c
rename from gcc/config/c6x/led.c
rename to libgcc/config/c6x/led.c
diff --git a/gcc/config/c6x/lef.c b/libgcc/config/c6x/lef.c
rename from gcc/config/c6x/lef.c
rename to libgcc/config/c6x/lef.c
diff --git a/gcc/config/c6x/ltd.c b/libgcc/config/c6x/ltd.c
rename from gcc/config/c6x/ltd.c
rename to libgcc/config/c6x/ltd.c
diff --git a/gcc/config/c6x/ltf.c b/libgcc/config/c6x/ltf.c
rename from gcc/config/c6x/ltf.c
rename to libgcc/config/c6x/ltf.c
diff --git a/libgcc/config/c6x/t-elf b/libgcc/config/c6x/t-elf
--- a/libgcc/config/c6x/t-elf
+++ b/libgcc/config/c6x/t-elf
@@ -6,6 +6,22 @@  LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3
 LIB1ASMFUNCS += _strasgi _strasgi_64plus _clzsi2 _clzdi2 _clz
 LIB1ASMFUNCS += _push_rts _pop_rts _call_stub
 
+LIB2FUNCS_EXCLUDE = _cmpdi2 _ucmpdi2 _gcc_bcmp _eprintf _clzsi _clzdi
+
+LIB2ADD = $(srcdir)/config/c6x/gef.c \
+          $(srcdir)/config/c6x/gtf.c \
+          $(srcdir)/config/c6x/lef.c \
+          $(srcdir)/config/c6x/ltf.c \
+          $(srcdir)/config/c6x/eqf.c \
+          $(srcdir)/config/c6x/ged.c \
+          $(srcdir)/config/c6x/gtd.c \
+          $(srcdir)/config/c6x/led.c \
+          $(srcdir)/config/c6x/ltd.c \
+          $(srcdir)/config/c6x/eqd.c
+
+# Avoid failures when the user's GOT becomes too large.
+HOST_LIBGCC2_CFLAGS = -msdata=none
+
 # Assemble startup files.
 crti.o: $(srcdir)/config/c6x/crti.S
 	$(crt_compile) -c $(CRTSTUFF_T_CFLAGS) $<
diff --git a/libgcc/config/c6x/t-uclinux b/libgcc/config/c6x/t-uclinux
--- a/libgcc/config/c6x/t-uclinux
+++ b/libgcc/config/c6x/t-uclinux
@@ -1,1 +1,3 @@ 
-CRTSTUFF_T_CFLAGS += -fPIC
+HOST_LIBGCC2_CFLAGS += -msdata=none
+
+CRTSTUFF_T_CFLAGS += $(PICFLAG)
diff --git a/gcc/config/cris/arit.c b/libgcc/config/cris/arit.c
rename from gcc/config/cris/arit.c
rename to libgcc/config/cris/arit.c
diff --git a/gcc/config/cris/cris_abi_symbol.c b/libgcc/config/cris/cris_abi_symbol.c
rename from gcc/config/cris/cris_abi_symbol.c
rename to libgcc/config/cris/cris_abi_symbol.c
diff --git a/gcc/config/cris/mulsi3.asm b/libgcc/config/cris/mulsi3.S
rename from gcc/config/cris/mulsi3.asm
rename to libgcc/config/cris/mulsi3.S
diff --git a/libgcc/config/cris/t-cris b/libgcc/config/cris/t-cris
new file mode 100644
--- /dev/null
+++ b/libgcc/config/cris/t-cris
@@ -0,0 +1,10 @@ 
+LIB2ADD = _udivsi3.c _divsi3.c _umodsi3.c _modsi3.c
+
+# The fixed-point arithmetic code is in one file, arit.c,
+# similar to libgcc2.c (or the old libgcc1.c).  We need to
+# "split it up" with one file per define.
+$(LIB2ADD): $(srcdir)/config/cris/arit.c
+	name=`echo $@ | sed -e 's,.*/,,' | sed -e 's,.c$$,,'`; \
+	echo "#define L$$name" > tmp-$@ \
+	&& echo '#include "$<"' >> tmp-$@ \
+	&& mv -f tmp-$@ $@
diff --git a/libgcc/config/cris/t-elfmulti b/libgcc/config/cris/t-elfmulti
--- a/libgcc/config/cris/t-elfmulti
+++ b/libgcc/config/cris/t-elfmulti
@@ -1,1 +1,3 @@ 
+LIB2ADD_ST = $(srcdir)/config/cris/mulsi3.S
+
 CRTSTUFF_T_CFLAGS = -moverride-best-lib-options
diff --git a/libgcc/config/cris/t-linux b/libgcc/config/cris/t-linux
--- a/libgcc/config/cris/t-linux
+++ b/libgcc/config/cris/t-linux
@@ -1,4 +1,2 @@ 
-CRTSTUFF_T_CFLAGS_S = $(HOST_LIBGCC2_CFLAGS)
-
 # Override t-linux default.
 SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/cris/libgcc-glibc.ver
diff --git a/gcc/config/darwin-64.c b/libgcc/config/darwin-64.c
rename from gcc/config/darwin-64.c
rename to libgcc/config/darwin-64.c
diff --git a/libgcc/config/darwin-crt3.c b/libgcc/config/darwin-crt3.c
--- a/libgcc/config/darwin-crt3.c
+++ b/libgcc/config/darwin-crt3.c
@@ -1,5 +1,5 @@ 
 /* __cxa_atexit backwards-compatibility support for Darwin.
-   Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009, 2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -25,10 +25,6 @@  see the files COPYING3 and COPYING.RUNTI
 /* Don't do anything if we are compiling for a kext multilib. */
 #ifdef __PIC__
 
-/* It is incorrect to include config.h here, because this file is being
-   compiled for the target, and hence definitions concerning only the host
-   do not apply.  */
-
 #include "tconfig.h"
 #include "tsystem.h"
 
diff --git a/gcc/config/frv/cmovd.c b/libgcc/config/frv/cmovd.c
rename from gcc/config/frv/cmovd.c
rename to libgcc/config/frv/cmovd.c
diff --git a/gcc/config/frv/cmovh.c b/libgcc/config/frv/cmovh.c
rename from gcc/config/frv/cmovh.c
rename to libgcc/config/frv/cmovh.c
diff --git a/gcc/config/frv/cmovw.c b/libgcc/config/frv/cmovw.c
rename from gcc/config/frv/cmovw.c
rename to libgcc/config/frv/cmovw.c
diff --git a/gcc/config/frv/modi.c b/libgcc/config/frv/modi.c
rename from gcc/config/frv/modi.c
rename to libgcc/config/frv/modi.c
diff --git a/libgcc/config/frv/t-frv b/libgcc/config/frv/t-frv
--- a/libgcc/config/frv/t-frv
+++ b/libgcc/config/frv/t-frv
@@ -1,6 +1,16 @@ 
 LIB1ASMSRC	= frv/lib1funcs.S
 LIB1ASMFUNCS	= _cmpll _cmpf _cmpd _addll _subll _andll _orll _xorll _notll _cmov
 
+LIB2ADD	= $(srcdir)/config/frv/cmovh.c \
+	  $(srcdir)/config/frv/cmovw.c \
+	  $(srcdir)/config/frv/cmovd.c \
+	  $(srcdir)/config/frv/modi.c \
+	  $(srcdir)/config/frv/umodi.c \
+	  $(srcdir)/config/frv/uitof.c \
+	  $(srcdir)/config/frv/uitod.c \
+	  $(srcdir)/config/frv/ulltof.c \
+	  $(srcdir)/config/frv/ulltod.c
+
 # 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.
diff --git a/libgcc/config/frv/t-linux b/libgcc/config/frv/t-linux
--- a/libgcc/config/frv/t-linux
+++ b/libgcc/config/frv/t-linux
@@ -1,3 +1,3 @@ 
-CRTSTUFF_T_CFLAGS = -fPIC
+CRTSTUFF_T_CFLAGS = $(PICFLAG)
 
 SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/frv/libgcc-glibc.ver
diff --git a/gcc/config/frv/uitod.c b/libgcc/config/frv/uitod.c
rename from gcc/config/frv/uitod.c
rename to libgcc/config/frv/uitod.c
diff --git a/gcc/config/frv/uitof.c b/libgcc/config/frv/uitof.c
rename from gcc/config/frv/uitof.c
rename to libgcc/config/frv/uitof.c
diff --git a/gcc/config/frv/ulltod.c b/libgcc/config/frv/ulltod.c
rename from gcc/config/frv/ulltod.c
rename to libgcc/config/frv/ulltod.c
diff --git a/gcc/config/frv/ulltof.c b/libgcc/config/frv/ulltof.c
rename from gcc/config/frv/ulltof.c
rename to libgcc/config/frv/ulltof.c
diff --git a/gcc/config/frv/umodi.c b/libgcc/config/frv/umodi.c
rename from gcc/config/frv/umodi.c
rename to libgcc/config/frv/umodi.c
diff --git a/gcc/config/h8300/clzhi2.c b/libgcc/config/h8300/clzhi2.c
rename from gcc/config/h8300/clzhi2.c
rename to libgcc/config/h8300/clzhi2.c
diff --git a/gcc/config/h8300/ctzhi2.c b/libgcc/config/h8300/ctzhi2.c
rename from gcc/config/h8300/ctzhi2.c
rename to libgcc/config/h8300/ctzhi2.c
diff --git a/gcc/config/h8300/fixunssfsi.c b/libgcc/config/h8300/fixunssfsi.c
rename from gcc/config/h8300/fixunssfsi.c
rename to libgcc/config/h8300/fixunssfsi.c
diff --git a/gcc/config/h8300/parityhi2.c b/libgcc/config/h8300/parityhi2.c
rename from gcc/config/h8300/parityhi2.c
rename to libgcc/config/h8300/parityhi2.c
diff --git a/gcc/config/h8300/popcounthi2.c b/libgcc/config/h8300/popcounthi2.c
rename from gcc/config/h8300/popcounthi2.c
rename to libgcc/config/h8300/popcounthi2.c
diff --git a/libgcc/config/h8300/t-h8300 b/libgcc/config/h8300/t-h8300
--- a/libgcc/config/h8300/t-h8300
+++ b/libgcc/config/h8300/t-h8300
@@ -1,3 +1,13 @@ 
 LIB1ASMSRC = h8300/lib1funcs.S
 LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \
   _fixunssfsi_asm
+
+LIB2ADD = \
+	$(srcdir)/config/h8300/clzhi2.c \
+	$(srcdir)/config/h8300/ctzhi2.c \
+	$(srcdir)/config/h8300/parityhi2.c \
+	$(srcdir)/config/h8300/popcounthi2.c \
+	$(srcdir)/config/h8300/fixunssfsi.c
+
+# We do not have DF type, so fake out the libgcc2 compilation.
+HOST_LIBGCC2_CFLAGS = -DDF=SF
diff --git a/gcc/config/i386/gthr-win32.c b/libgcc/config/i386/gthr-win32.c
rename from gcc/config/i386/gthr-win32.c
rename to libgcc/config/i386/gthr-win32.c
diff --git a/libgcc/config/i386/t-cygming b/libgcc/config/i386/t-cygming
--- a/libgcc/config/i386/t-cygming
+++ b/libgcc/config/i386/t-cygming
@@ -1,3 +1,8 @@ 
+# If we are building next to winsup, this will let us find the real
+# limits.h when building libgcc2.  Otherwise, winsup must be installed
+# first.
+LIBGCC2_INCLUDES = -I$(srcdir)/../winsup/w32api/include
+
 CUSTOM_CRTSTUFF = yes
 
 crtbegin.o: $(srcdir)/config/i386/cygming-crtbegin.c
diff --git a/libgcc/config/i386/t-cygwin b/libgcc/config/i386/t-cygwin
--- a/libgcc/config/i386/t-cygwin
+++ b/libgcc/config/i386/t-cygwin
@@ -1,3 +1,9 @@ 
+# If we are building next to winsup, this will let us find the real
+# limits.h when building libgcc2.  Otherwise, winsup must be installed
+# first.
+LIBGCC2_INCLUDES += -I$(srcdir)/../winsup/include \
+	-I$(srcdir)/../winsup/cygwin/include
+
 # Cygwin-specific parts of LIB_SPEC
 SHLIB_LC = -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32
 
diff --git a/libgcc/config/i386/t-darwin b/libgcc/config/i386/t-darwin
new file mode 100644
--- /dev/null
+++ b/libgcc/config/i386/t-darwin
@@ -0,0 +1,3 @@ 
+LIB2_SIDITI_CONV_FUNCS = yes
+LIB2ADD = $(srcdir)/config/darwin-64.c
+LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi _floatditf _floatunditf
diff --git a/libgcc/config/i386/t-darwin64 b/libgcc/config/i386/t-darwin64
new file mode 100644
--- /dev/null
+++ b/libgcc/config/i386/t-darwin64
@@ -0,0 +1,2 @@ 
+LIB2_SIDITI_CONV_FUNCS = yes
+LIB2ADD = $(srcdir)/config/darwin-64.c
diff --git a/gcc/config/i386/t-gthr-win32 b/libgcc/config/i386/t-gthr-win32
rename from gcc/config/i386/t-gthr-win32
rename to libgcc/config/i386/t-gthr-win32
--- a/gcc/config/i386/t-gthr-win32
+++ b/libgcc/config/i386/t-gthr-win32
@@ -1,2 +1,2 @@ 
 # We hide calls to w32api needed for w32 thread support here:
-LIB2FUNCS_EXTRA = $(srcdir)/config/i386/gthr-win32.c
+LIB2ADD = $(srcdir)/config/i386/gthr-win32.c
diff --git a/libgcc/config/i386/t-interix b/libgcc/config/i386/t-interix
new file mode 100644
--- /dev/null
+++ b/libgcc/config/i386/t-interix
@@ -0,0 +1,3 @@ 
+# We need to override LIBGCC2_DEBUG_CFLAGS so libgcc2 will be
+# built without debugging information
+LIBGCC2_DEBUG_CFLAGS =
diff --git a/libgcc/config/i386/t-nto b/libgcc/config/i386/t-nto
--- a/libgcc/config/i386/t-nto
+++ b/libgcc/config/i386/t-nto
@@ -1,1 +1,3 @@ 
-CRTSTUFF_T_CFLAGS = -fno-omit-frame-pointer -fPIC
+HOST_LIBGCC2_CFLAGS += -fexceptions
+
+CRTSTUFF_T_CFLAGS = -fno-omit-frame-pointer $(PICFLAG)
diff --git a/libgcc/config/i386/t-sol2 b/libgcc/config/i386/t-sol2
--- a/libgcc/config/i386/t-sol2
+++ b/libgcc/config/i386/t-sol2
@@ -7,7 +7,7 @@ 
 # We must also enable optimization to avoid having any code appear after
 # the call & alignment statement, but before we switch back to the
 # .text section.
-CRTSTUFF_T_CFLAGS = -fPIC -O2
+CRTSTUFF_T_CFLAGS = $(PICFLAG) -O2
 
 # Add support for the introduction of 128-bit long double.
 SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-sol2.ver
diff --git a/gcc/config/ia64/quadlib.c b/libgcc/config/ia64/quadlib.c
rename from gcc/config/ia64/quadlib.c
rename to libgcc/config/ia64/quadlib.c
diff --git a/libgcc/config/ia64/t-hpux b/libgcc/config/ia64/t-hpux
--- a/libgcc/config/ia64/t-hpux
+++ b/libgcc/config/ia64/t-hpux
@@ -3,4 +3,7 @@ 
 # to 80 bit conversions and were done for Linux backwards compatibility.
 LIB1ASMFUNCS := $(filter-out _fixtfdi _fixunstfdi _floatditf,$(LIB1ASMFUNCS))
 
+# Support routines for HP-UX 128 bit floats.
+LIB2ADD = $(srcdir)/config/ia64/quadlib.c $(srcdir)/floatunsitf.c
+
 LIB2ADDEH = $(srcdir)/unwind-c.c
diff --git a/libgcc/config/ia64/t-ia64 b/libgcc/config/ia64/t-ia64
--- a/libgcc/config/ia64/t-ia64
+++ b/libgcc/config/ia64/t-ia64
@@ -11,6 +11,13 @@  LIB1ASMFUNCS  = __divxf3 __divdf3 __divs
 	__nonlocal_goto __restore_stack_nonlocal __trampoline \
 	_fixtfdi _fixunstfdi _floatditf
 
+# ??? Hack to get -P option used when compiling lib1funcs.S, because Intel
+# assembler does not accept # line number as a comment.
+# ??? This breaks C++ pragma interface/implementation, which is used in the
+# C++ part of libgcc2, hence it had to be disabled.  Must find some other way
+# to support the Intel assembler.
+#LIBGCC2_DEBUG_CFLAGS = -g1 -P
+
 CUSTOM_CRTSTUFF = yes
 
 # Assemble startup files.
diff --git a/gcc/config/iq2000/lib2extra-funcs.c b/libgcc/config/iq2000/lib2funcs.c
rename from gcc/config/iq2000/lib2extra-funcs.c
rename to libgcc/config/iq2000/lib2funcs.c
diff --git a/libgcc/config/iq2000/t-iq2000 b/libgcc/config/iq2000/t-iq2000
new file mode 100644
--- /dev/null
+++ b/libgcc/config/iq2000/t-iq2000
@@ -0,0 +1,5 @@ 
+LIB2ADD = $(srcdir)/udivmod.c \
+	  $(srcdir)/divmod.c \
+	  $(srcdir)/udivmodsi4.c \
+	  $(srcdir)/config/iq2000/lib2funcs.c
+
diff --git a/libgcc/config/lm32/t-uclinux b/libgcc/config/lm32/t-uclinux
--- a/libgcc/config/lm32/t-uclinux
+++ b/libgcc/config/lm32/t-uclinux
@@ -1,2 +1,2 @@ 
-CRTSTUFF_T_CFLAGS = -fPIC -msign-extend-enabled
-HOST_LIBGCC2_CFLAGS = -fPIC -msign-extend-enabled
+CRTSTUFF_T_CFLAGS = $(PICFLAG) -msign-extend-enabled
+HOST_LIBGCC2_CFLAGS += -msign-extend-enabled
diff --git a/gcc/config/m32c/m32c-lib2.c b/libgcc/config/m32c/lib2funcs.c
rename from gcc/config/m32c/m32c-lib2.c
rename to libgcc/config/m32c/lib2funcs.c
diff --git a/libgcc/config/m32c/t-m32c b/libgcc/config/m32c/t-m32c
--- a/libgcc/config/m32c/t-m32c
+++ b/libgcc/config/m32c/t-m32c
@@ -7,3 +7,7 @@  LIB1ASMFUNCS = \
 	__m32c_cmpsi2 \
 	__m32c_ucmpsi2 \
 	__m32c_jsri16
+
+LIB2ADD = $(srcdir)/config/m32c/lib2funcs.c \
+	  $(srcdir)/config/m32c/trapv.c
+
diff --git a/gcc/config/m32c/m32c-lib2-trapv.c b/libgcc/config/m32c/trapv.c
rename from gcc/config/m32c/m32c-lib2-trapv.c
rename to libgcc/config/m32c/trapv.c
--- a/gcc/config/m32c/m32c-lib2-trapv.c
+++ b/libgcc/config/m32c/trapv.c
@@ -1,5 +1,5 @@ 
 /* 16-bit trapping arithmetic routines for R8C/M16C/M32C
-   Copyright (C) 2009
+   Copyright (C) 2009, 2011
    Free Software Foundation, Inc.
    Contributed by Red Hat.
 
@@ -28,10 +28,10 @@ 
    m32c.h for why we are creating extra versions of some of the
    functions defined in libgcc2.c.
 
-   Note - this file is separate from m32c-lib2.c so that the following
+   Note - this file is separate from lib2funcs.c so that the following
    functions will appear in the their object file.  This is necessary
    because they call abort() which is defined in the C library whereas
-   the functions in m32c-lib2.c are completely self sufficieent.  */
+   the functions in lib2funcs.c are completely self sufficient.  */
 
 #define LIBGCC2_UNITS_PER_WORD 2
 
diff --git a/libgcc/config/m32r/t-linux b/libgcc/config/m32r/t-linux
--- a/libgcc/config/m32r/t-linux
+++ b/libgcc/config/m32r/t-linux
@@ -1,1 +1,5 @@ 
+# Turn off the SDA while compiling libgcc2.  There are no headers for it
+# and we want maximal upward compatibility here.
+HOST_LIBGCC2_CFLAGS += -G 0
+
 SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/m32r/libgcc-glibc.ver
diff --git a/libgcc/config/m32r/t-m32r b/libgcc/config/m32r/t-m32r
--- a/libgcc/config/m32r/t-m32r
+++ b/libgcc/config/m32r/t-m32r
@@ -1,3 +1,7 @@ 
+# Turn off the SDA while compiling libgcc2.  There are no headers for it
+# and we want maximal upward compatibility here.
+HOST_LIBGCC2_CFLAGS = -G 0
+
 # We need to use -fpic when we are using gcc to compile the routines in
 # initfini.c.  This is only really needed when we are going to use gcc/g++
 # to produce a shared library, but since we don't know ahead of time when
diff --git a/gcc/config/m68k/fpgnulib.c b/libgcc/config/m68k/fpgnulib.c
rename from gcc/config/m68k/fpgnulib.c
rename to libgcc/config/m68k/fpgnulib.c
--- a/gcc/config/m68k/fpgnulib.c
+++ b/libgcc/config/m68k/fpgnulib.c
@@ -1,6 +1,6 @@ 
 /* This is a stripped down version of floatlib.c.  It supplies only those
    functions which exist in libgcc, but for which there is not assembly
-   language versions in m68k/lb1sf68.asm.
+   language versions in m68k/lb1sf68.S.
 
    It also includes simplistic support for extended floats (by working in
    double precision).  You must compile this file again with -DEXTFLOAT
diff --git a/libgcc/config/m68k/t-floatlib b/libgcc/config/m68k/t-floatlib
--- a/libgcc/config/m68k/t-floatlib
+++ b/libgcc/config/m68k/t-floatlib
@@ -3,3 +3,9 @@  LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 
    _double _float _floatex \
    _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \
    _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2
+
+LIB2ADD = $(srcdir)/config/m68k/fpgnulib.c xfgnulib.c
+
+xfgnulib.c: $(srcdir)/config/m68k/fpgnulib.c
+	echo '#define EXTFLOAT' > xfgnulib.c
+	cat $< >> xfgnulib.c
diff --git a/libgcc/config/mcore/t-mcore b/libgcc/config/mcore/t-mcore
--- a/libgcc/config/mcore/t-mcore
+++ b/libgcc/config/mcore/t-mcore
@@ -1,2 +1,5 @@ 
 LIB1ASMSRC    = mcore/lib1funcs.S
 LIB1ASMFUNCS  = _divsi3 _udivsi3 _modsi3 _umodsi3
+
+# could use -msifilter to be safe from interrupt/jmp interactions and others.
+HOST_LIBGCC2_CFLAGS = -O3 -DNO_FLOATLIB_FIXUNSDFSI #-msifilter
diff --git a/gcc/config/mep/mep-lib2.c b/libgcc/config/mep/lib2funcs.c
rename from gcc/config/mep/mep-lib2.c
rename to libgcc/config/mep/lib2funcs.c
diff --git a/libgcc/config/mep/t-mep b/libgcc/config/mep/t-mep
--- a/libgcc/config/mep/t-mep
+++ b/libgcc/config/mep/t-mep
@@ -7,5 +7,10 @@  LIB1ASMFUNCS = _mep_profile \
 	       _mep_bb_trace \
 	       _mep_bb_increment
 
+# multiply and divide routines
+LIB2ADD = \
+	$(srcdir)/config/mep/lib2funcs.c \
+	$(srcdir)/config/mep/tramp.c
+
 # Use -O0 instead of -O2 so we don't get complex relocations
 CRTSTUFF_CFLAGS += -O0
diff --git a/gcc/config/mep/mep-tramp.c b/libgcc/config/mep/tramp.c
rename from gcc/config/mep/mep-tramp.c
rename to libgcc/config/mep/tramp.c
diff --git a/libgcc/config/microblaze/divsi3.asm b/libgcc/config/microblaze/divsi3.S
rename from libgcc/config/microblaze/divsi3.asm
rename to libgcc/config/microblaze/divsi3.S
--- a/libgcc/config/microblaze/divsi3.asm
+++ b/libgcc/config/microblaze/divsi3.S
@@ -1,6 +1,6 @@ 
 ###################################-
 # 
-#  Copyright 2009, 2010 Free Software Foundation, Inc.
+#  Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
 #
@@ -23,7 +23,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>. 
 #
-#  divsi3.asm 
+#  divsi3.S
 # 
 #  Divide operation for 32 bit integers.
 #	Input :	Dividend in Reg r5
diff --git a/libgcc/config/microblaze/moddi3.asm b/libgcc/config/microblaze/moddi3.S
rename from libgcc/config/microblaze/moddi3.asm
rename to libgcc/config/microblaze/moddi3.S
--- a/libgcc/config/microblaze/moddi3.asm
+++ b/libgcc/config/microblaze/moddi3.S
@@ -1,6 +1,6 @@ 
 ###################################
 # 
-#  Copyright 2009, 2010 Free Software Foundation, Inc.
+#  Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
 #
@@ -23,7 +23,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>. 
 #
-#  modsi3.asm 
+#  modsi3.S
 # 
 #  modulo operation for 64 bit integers.
 # 
diff --git a/libgcc/config/microblaze/modsi3.asm b/libgcc/config/microblaze/modsi3.S
rename from libgcc/config/microblaze/modsi3.asm
rename to libgcc/config/microblaze/modsi3.S
--- a/libgcc/config/microblaze/modsi3.asm
+++ b/libgcc/config/microblaze/modsi3.S
@@ -1,6 +1,6 @@ 
 ###################################
 # 
-#  Copyright 2009, 2010 Free Software Foundation, Inc.
+#  Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
 #
@@ -23,7 +23,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>. 
 # 
-#  modsi3.asm 
+#  modsi3.S
 # 
 #  modulo operation for 32 bit integers.
 #	Input :	op1 in Reg r5
diff --git a/libgcc/config/microblaze/muldi3_hard.asm b/libgcc/config/microblaze/muldi3_hard.S
rename from libgcc/config/microblaze/muldi3_hard.asm
rename to libgcc/config/microblaze/muldi3_hard.S
--- a/libgcc/config/microblaze/muldi3_hard.asm
+++ b/libgcc/config/microblaze/muldi3_hard.S
@@ -1,6 +1,6 @@ 
 ###################################- 
 # 
-#  Copyright 2009, 2010 Free Software Foundation, Inc.
+#  Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
 #
@@ -23,7 +23,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>. 
 # 
-#  muldi3_hard.asm 
+#  muldi3_hard.S
 # 
 #  Multiply operation for 64 bit integers, for devices with hard multiply
 #	Input :	Operand1[H] in Reg r5
diff --git a/libgcc/config/microblaze/mulsi3.asm b/libgcc/config/microblaze/mulsi3.S
rename from libgcc/config/microblaze/mulsi3.asm
rename to libgcc/config/microblaze/mulsi3.S
--- a/libgcc/config/microblaze/mulsi3.asm
+++ b/libgcc/config/microblaze/mulsi3.S
@@ -1,6 +1,6 @@ 
 ###################################-*-asm*- 
 # 
-#  Copyright 2009, 2010 Free Software Foundation, Inc.
+#  Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
 #
@@ -23,7 +23,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>. 
 # 
-#  mulsi3.asm 
+#  mulsi3.S
 # 
 #  Multiply operation for 32 bit integers.
 #	Input :	Operand1 in Reg r5
diff --git a/libgcc/config/microblaze/stack_overflow_exit.asm b/libgcc/config/microblaze/stack_overflow_exit.S
rename from libgcc/config/microblaze/stack_overflow_exit.asm
rename to libgcc/config/microblaze/stack_overflow_exit.S
--- a/libgcc/config/microblaze/stack_overflow_exit.asm
+++ b/libgcc/config/microblaze/stack_overflow_exit.S
@@ -1,6 +1,6 @@ 
 ###################################-*-asm*- 
 # 
-#    Copyright 2009 Free Software Foundation, Inc.
+#    Copyright 2009, 2011 Free Software Foundation, Inc.
 # 
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
@@ -24,7 +24,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>.  
 # 
-#  stack_overflow_exit.asm
+#  stack_overflow_exit.S
 # 
 #  Checks for stack overflows and sets the global variable 
 #  stack_overflow_error with the value of current stack pointer
diff --git a/libgcc/config/microblaze/t-microblaze b/libgcc/config/microblaze/t-microblaze
--- a/libgcc/config/microblaze/t-microblaze
+++ b/libgcc/config/microblaze/t-microblaze
@@ -1,10 +1,10 @@ 
 LIB2ADD += \
-        $(srcdir)/config/microblaze/divsi3.asm \
-        $(srcdir)/config/microblaze/moddi3.asm \
-        $(srcdir)/config/microblaze/modsi3.asm \
-        $(srcdir)/config/microblaze/muldi3_hard.asm \
-        $(srcdir)/config/microblaze/mulsi3.asm \
-        $(srcdir)/config/microblaze/stack_overflow_exit.asm \
-        $(srcdir)/config/microblaze/udivsi3.asm \
-        $(srcdir)/config/microblaze/umodsi3.asm \
+        $(srcdir)/config/microblaze/divsi3.S \
+        $(srcdir)/config/microblaze/moddi3.S \
+        $(srcdir)/config/microblaze/modsi3.S \
+        $(srcdir)/config/microblaze/muldi3_hard.S \
+        $(srcdir)/config/microblaze/mulsi3.S \
+        $(srcdir)/config/microblaze/stack_overflow_exit.S \
+        $(srcdir)/config/microblaze/udivsi3.S \
+        $(srcdir)/config/microblaze/umodsi3.S \
         $(srcdir)/config/microblaze/divsi3_table.c
diff --git a/libgcc/config/microblaze/udivsi3.asm b/libgcc/config/microblaze/udivsi3.S
rename from libgcc/config/microblaze/udivsi3.asm
rename to libgcc/config/microblaze/udivsi3.S
--- a/libgcc/config/microblaze/udivsi3.asm
+++ b/libgcc/config/microblaze/udivsi3.S
@@ -1,6 +1,6 @@ 
 ###################################-
 # 
-#  Copyright 2009, 2010 Free Software Foundation, Inc.
+#  Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
 #
@@ -23,7 +23,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>. 
 # 
-#  udivsi3.asm 
+#  udivsi3.S
 # 
 #  Unsigned divide operation.
 #	Input :	Divisor in Reg r5
diff --git a/libgcc/config/microblaze/umodsi3.asm b/libgcc/config/microblaze/umodsi3.S
rename from libgcc/config/microblaze/umodsi3.asm
rename to libgcc/config/microblaze/umodsi3.S
--- a/libgcc/config/microblaze/umodsi3.asm
+++ b/libgcc/config/microblaze/umodsi3.S
@@ -1,6 +1,6 @@ 
 ###################################
 # 
-#  Copyright 2009, 2010 Free Software Foundation, Inc.
+#  Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 #  Contributed by Michael Eager <eager@eagercon.com>.
 #
@@ -23,7 +23,7 @@ 
 #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #  <http://www.gnu.org/licenses/>. 
 # 
-#  umodsi3.asm 
+#  umodsi3.S
 #
 #  Unsigned modulo operation for 32 bit integers.
 #	Input :	op1 in Reg r5
diff --git a/libgcc/config/mips/t-elf b/libgcc/config/mips/t-elf
new file mode 100644
--- /dev/null
+++ b/libgcc/config/mips/t-elf
@@ -0,0 +1,3 @@ 
+# We must build libgcc2.a with -G 0, in case the user wants to link
+# without the $gp register.
+HOST_LIBGCC2_CFLAGS = -G 0
diff --git a/libgcc/config/mips/t-mips b/libgcc/config/mips/t-mips
--- a/libgcc/config/mips/t-mips
+++ b/libgcc/config/mips/t-mips
@@ -1,3 +1,5 @@ 
+LIB2_SIDITI_CONV_FUNCS = yes
+
 FPBIT = true
 FPBIT_CFLAGS = -DQUIET_NAN_NEGATED
 DPBIT = true
diff --git a/libgcc/config/mips/t-vr b/libgcc/config/mips/t-vr
new file mode 100644
--- /dev/null
+++ b/libgcc/config/mips/t-vr
@@ -0,0 +1,2 @@ 
+LIB2ADD_ST = $(srcdir)/config/mips/mips16.S \
+	     $(srcdir)/config/mips/vr4120-div.S
diff --git a/gcc/config/mips/vr4120-div.S b/libgcc/config/mips/vr4120-div.S
rename from gcc/config/mips/vr4120-div.S
rename to libgcc/config/mips/vr4120-div.S
diff --git a/libgcc/config/mmix/t-mmix b/libgcc/config/mmix/t-mmix
--- a/libgcc/config/mmix/t-mmix
+++ b/libgcc/config/mmix/t-mmix
@@ -1,3 +1,5 @@ 
+HOST_LIBGCC2_CFLAGS = -mlibfuncs -O2
+
 # We need to turn off some assumptions on normality for code in crtstuff.c
 # and crt{i,n}.S, specifically about execution not continuing past the
 # end of the section in the file being compiled.  Thus we must stop the
diff --git a/gcc/config/pa/fptr.c b/libgcc/config/pa/fptr.c
rename from gcc/config/pa/fptr.c
rename to libgcc/config/pa/fptr.c
diff --git a/gcc/config/pa/lib2funcs.asm b/libgcc/config/pa/lib2funcs.S
rename from gcc/config/pa/lib2funcs.asm
rename to libgcc/config/pa/lib2funcs.S
diff --git a/gcc/config/pa/linux-atomic.c b/libgcc/config/pa/linux-atomic.c
rename from gcc/config/pa/linux-atomic.c
rename to libgcc/config/pa/linux-atomic.c
diff --git a/gcc/config/pa/quadlib.c b/libgcc/config/pa/quadlib.c
rename from gcc/config/pa/quadlib.c
rename to libgcc/config/pa/quadlib.c
diff --git a/libgcc/config/pa/t-hpux b/libgcc/config/pa/t-hpux
new file mode 100644
--- /dev/null
+++ b/libgcc/config/pa/t-hpux
@@ -0,0 +1,3 @@ 
+LIB2ADD = $(srcdir)/config/pa/lib2funcs.S $(srcdir)/config/pa/quadlib.c
+
+HOST_LIBGCC2_CFLAGS += -frandom-seed=fixed-seed
diff --git a/libgcc/config/pa/t-hpux10 b/libgcc/config/pa/t-hpux10
new file mode 100644
--- /dev/null
+++ b/libgcc/config/pa/t-hpux10
@@ -0,0 +1,1 @@ 
+HOST_LIBGCC2_CFLAGS += -D_T_HPUX10
diff --git a/libgcc/config/pa/t-linux b/libgcc/config/pa/t-linux
--- a/libgcc/config/pa/t-linux
+++ b/libgcc/config/pa/t-linux
@@ -1,6 +1,10 @@ 
 #Plug millicode routines into libgcc.a  We want these on both native and
 #cross compiles.  We use the "64-bit" routines because the "32-bit" code
 #is broken for certain corner cases.
-
 LIB1ASMSRC = pa/milli64.S
 LIB1ASMFUNCS = _divI _divU _remI _remU _div_const _mulI _dyncall
+
+HOST_LIBGCC2_CFLAGS += -DELF=1 -DLINUX=1
+
+LIB2ADD = $(srcdir)/config/pa/fptr.c
+LIB2ADD_ST = $(srcdir)/config/pa/linux-atomic.c
diff --git a/libgcc/config/pa/t-linux64 b/libgcc/config/pa/t-linux64
--- a/libgcc/config/pa/t-linux64
+++ b/libgcc/config/pa/t-linux64
@@ -2,3 +2,7 @@ 
 # cross compiles.
 # FIXME: Explain.
 LIB1ASMFUNCS := $(filter-out _dyncall, $(LIB1ASMFUNCS))
+
+LIB2ADD_ST = $(srcdir)/config/pa/linux-atomic.c
+
+HOST_LIBGCC2_CFLAGS += -Dpa64=1 -DELF=1
diff --git a/libgcc/config/pa/t-pa64 b/libgcc/config/pa/t-pa64
new file mode 100644
--- /dev/null
+++ b/libgcc/config/pa/t-pa64
@@ -0,0 +1,3 @@ 
+LIB2ADD = $(srcdir)/config/pa/quadlib.c
+
+HOST_LIBGCC2_CFLAGS += -Dpa64=1 -DELF=1 -mlong-calls
diff --git a/libgcc/config/pdp11/t-pdp11 b/libgcc/config/pdp11/t-pdp11
new file mode 100644
--- /dev/null
+++ b/libgcc/config/pdp11/t-pdp11
@@ -0,0 +1,8 @@ 
+LIB2ADD = $(srcdir)/udivmod.c \
+	  $(srcdir)/udivmodsi4.c \
+	  $(srcdir)/memcmp.c \
+	  $(srcdir)/memcpy.c \
+	  $(srcdir)/memmove.c \
+	  $(srcdir)/memset.c
+
+HOST_LIBGCC2_CFLAGS = -O2 -mfloat32
diff --git a/gcc/config/picochip/libgccExtras/adddi3.asm b/libgcc/config/picochip/adddi3.S
rename from gcc/config/picochip/libgccExtras/adddi3.asm
rename to libgcc/config/picochip/adddi3.S
diff --git a/gcc/config/picochip/libgccExtras/ashlsi3.asm b/libgcc/config/picochip/ashlsi3.S
rename from gcc/config/picochip/libgccExtras/ashlsi3.asm
rename to libgcc/config/picochip/ashlsi3.S
diff --git a/gcc/config/picochip/libgccExtras/ashlsi3.c b/libgcc/config/picochip/ashlsi3.c
rename from gcc/config/picochip/libgccExtras/ashlsi3.c
rename to libgcc/config/picochip/ashlsi3.c
diff --git a/gcc/config/picochip/libgccExtras/ashrsi3.asm b/libgcc/config/picochip/ashrsi3.S
rename from gcc/config/picochip/libgccExtras/ashrsi3.asm
rename to libgcc/config/picochip/ashrsi3.S
diff --git a/gcc/config/picochip/libgccExtras/ashrsi3.c b/libgcc/config/picochip/ashrsi3.c
rename from gcc/config/picochip/libgccExtras/ashrsi3.c
rename to libgcc/config/picochip/ashrsi3.c
diff --git a/gcc/config/picochip/libgccExtras/clzsi2.asm b/libgcc/config/picochip/clzsi2.S
rename from gcc/config/picochip/libgccExtras/clzsi2.asm
rename to libgcc/config/picochip/clzsi2.S
--- a/gcc/config/picochip/libgccExtras/clzsi2.asm
+++ b/libgcc/config/picochip/clzsi2.S
@@ -1,4 +1,4 @@ 
-// Copyright (C) 2008 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2011 Free Software Foundation, Inc.
 //
 // This file is part of GCC.
 //
@@ -22,7 +22,7 @@ 
 // <http://www.gnu.org/licenses/>.
 
 // picoChip ASM file
-//.file "clzsi2.asm"
+//.file "clzsi2.S"
 
 .section .text
 
diff --git a/gcc/config/picochip/libgccExtras/cmpsi2.asm b/libgcc/config/picochip/cmpsi2.S
rename from gcc/config/picochip/libgccExtras/cmpsi2.asm
rename to libgcc/config/picochip/cmpsi2.S
diff --git a/gcc/config/picochip/libgccExtras/divmod15.asm b/libgcc/config/picochip/divmod15.S
rename from gcc/config/picochip/libgccExtras/divmod15.asm
rename to libgcc/config/picochip/divmod15.S
diff --git a/gcc/config/picochip/libgccExtras/divmodhi4.asm b/libgcc/config/picochip/divmodhi4.S
rename from gcc/config/picochip/libgccExtras/divmodhi4.asm
rename to libgcc/config/picochip/divmodhi4.S
diff --git a/gcc/config/picochip/libgccExtras/divmodsi4.asm b/libgcc/config/picochip/divmodsi4.S
rename from gcc/config/picochip/libgccExtras/divmodsi4.asm
rename to libgcc/config/picochip/divmodsi4.S
diff --git a/gcc/config/picochip/libgccExtras/longjmp.asm b/libgcc/config/picochip/longjmp.S
rename from gcc/config/picochip/libgccExtras/longjmp.asm
rename to libgcc/config/picochip/longjmp.S
diff --git a/gcc/config/picochip/libgccExtras/lshrsi3.asm b/libgcc/config/picochip/lshrsi3.S
rename from gcc/config/picochip/libgccExtras/lshrsi3.asm
rename to libgcc/config/picochip/lshrsi3.S
diff --git a/gcc/config/picochip/libgccExtras/lshrsi3.c b/libgcc/config/picochip/lshrsi3.c
rename from gcc/config/picochip/libgccExtras/lshrsi3.c
rename to libgcc/config/picochip/lshrsi3.c
diff --git a/gcc/config/picochip/libgccExtras/parityhi2.asm b/libgcc/config/picochip/parityhi2.S
rename from gcc/config/picochip/libgccExtras/parityhi2.asm
rename to libgcc/config/picochip/parityhi2.S
diff --git a/gcc/config/picochip/libgccExtras/popcounthi2.asm b/libgcc/config/picochip/popcounthi2.S
rename from gcc/config/picochip/libgccExtras/popcounthi2.asm
rename to libgcc/config/picochip/popcounthi2.S
diff --git a/gcc/config/picochip/libgccExtras/setjmp.asm b/libgcc/config/picochip/setjmp.S
rename from gcc/config/picochip/libgccExtras/setjmp.asm
rename to libgcc/config/picochip/setjmp.S
diff --git a/gcc/config/picochip/libgccExtras/subdi3.asm b/libgcc/config/picochip/subdi3.S
rename from gcc/config/picochip/libgccExtras/subdi3.asm
rename to libgcc/config/picochip/subdi3.S
diff --git a/libgcc/config/picochip/t-picochip b/libgcc/config/picochip/t-picochip
--- a/libgcc/config/picochip/t-picochip
+++ b/libgcc/config/picochip/t-picochip
@@ -5,5 +5,35 @@ 
 LIB1ASMSRC = picochip/lib1funcs.S
 LIB1ASMFUNCS = _mulsc3 _divsc3
 
+# Compile the extra library functions.
+LIB2ADD = \
+	$(srcdir)/config/picochip/ashrsi3.S 		\
+	$(srcdir)/config/picochip/ashlsi3.S		\
+	$(srcdir)/config/picochip/divmodhi4.S 		\
+	$(srcdir)/config/picochip/udivmodhi4.S 		\
+	$(srcdir)/config/picochip/divmodsi4.S 		\
+	$(srcdir)/config/picochip/udivmodsi4.S 		\
+	$(srcdir)/config/picochip/divmod15.S 		\
+	$(srcdir)/config/picochip/ucmpsi2.S 		\
+	$(srcdir)/config/picochip/cmpsi2.S 		\
+	$(srcdir)/config/picochip/clzsi2.S			\
+	$(srcdir)/config/picochip/adddi3.S			\
+	$(srcdir)/config/picochip/subdi3.S			\
+	$(srcdir)/config/picochip/lshrsi3.S		\
+	$(srcdir)/config/picochip/parityhi2.S		\
+	$(srcdir)/config/picochip/popcounthi2.S
+
+# Special libgcc setup. Make single/double floating point the same,
+# and use our own include files.
+HOST_LIBGCC2_CFLAGS = -DDF=SF -I../../includes/
+
+# Switch off all debugging for the embedded libraries.
+# (embedded processors need small libraries by default).
+# NOTE: If the debug level is increased, turn off instruction scheduling.
+LIBGCC2_DEBUG_CFLAGS = -g0
+
 # Turn off the building of exception handling libraries.
 LIB2ADDEH =
+
+# Turn off ranlib on target libraries.
+RANLIB_FOR_TARGET = cat
diff --git a/gcc/config/picochip/libgccExtras/ucmpsi2.asm b/libgcc/config/picochip/ucmpsi2.S
rename from gcc/config/picochip/libgccExtras/ucmpsi2.asm
rename to libgcc/config/picochip/ucmpsi2.S
diff --git a/gcc/config/picochip/libgccExtras/udivmodhi4.asm b/libgcc/config/picochip/udivmodhi4.S
rename from gcc/config/picochip/libgccExtras/udivmodhi4.asm
rename to libgcc/config/picochip/udivmodhi4.S
diff --git a/gcc/config/picochip/libgccExtras/udivmodsi4.asm b/libgcc/config/picochip/udivmodsi4.S
rename from gcc/config/picochip/libgccExtras/udivmodsi4.asm
rename to libgcc/config/picochip/udivmodsi4.S
diff --git a/gcc/config/rs6000/crtresfpr.asm b/libgcc/config/rs6000/crtresfpr.S
rename from gcc/config/rs6000/crtresfpr.asm
rename to libgcc/config/rs6000/crtresfpr.S
diff --git a/gcc/config/rs6000/crtresgpr.asm b/libgcc/config/rs6000/crtresgpr.S
rename from gcc/config/rs6000/crtresgpr.asm
rename to libgcc/config/rs6000/crtresgpr.S
diff --git a/gcc/config/rs6000/crtresxfpr.asm b/libgcc/config/rs6000/crtresxfpr.S
rename from gcc/config/rs6000/crtresxfpr.asm
rename to libgcc/config/rs6000/crtresxfpr.S
diff --git a/gcc/config/rs6000/crtresxgpr.asm b/libgcc/config/rs6000/crtresxgpr.S
rename from gcc/config/rs6000/crtresxgpr.asm
rename to libgcc/config/rs6000/crtresxgpr.S
diff --git a/gcc/config/rs6000/crtsavfpr.asm b/libgcc/config/rs6000/crtsavfpr.S
rename from gcc/config/rs6000/crtsavfpr.asm
rename to libgcc/config/rs6000/crtsavfpr.S
diff --git a/gcc/config/rs6000/crtsavgpr.asm b/libgcc/config/rs6000/crtsavgpr.S
rename from gcc/config/rs6000/crtsavgpr.asm
rename to libgcc/config/rs6000/crtsavgpr.S
diff --git a/gcc/config/rs6000/darwin-asm.h b/libgcc/config/rs6000/darwin-asm.h
rename from gcc/config/rs6000/darwin-asm.h
rename to libgcc/config/rs6000/darwin-asm.h
diff --git a/gcc/config/rs6000/darwin-fpsave.asm b/libgcc/config/rs6000/darwin-fpsave.S
rename from gcc/config/rs6000/darwin-fpsave.asm
rename to libgcc/config/rs6000/darwin-fpsave.S
diff --git a/gcc/config/rs6000/darwin-tramp.asm b/libgcc/config/rs6000/darwin-tramp.S
rename from gcc/config/rs6000/darwin-tramp.asm
rename to libgcc/config/rs6000/darwin-tramp.S
diff --git a/gcc/config/rs6000/darwin-vecsave.asm b/libgcc/config/rs6000/darwin-vecsave.S
rename from gcc/config/rs6000/darwin-vecsave.asm
rename to libgcc/config/rs6000/darwin-vecsave.S
diff --git a/gcc/config/rs6000/darwin-world.asm b/libgcc/config/rs6000/darwin-world.S
rename from gcc/config/rs6000/darwin-world.asm
rename to libgcc/config/rs6000/darwin-world.S
diff --git a/gcc/config/rs6000/e500crtres32gpr.asm b/libgcc/config/rs6000/e500crtres32gpr.S
rename from gcc/config/rs6000/e500crtres32gpr.asm
rename to libgcc/config/rs6000/e500crtres32gpr.S
diff --git a/gcc/config/rs6000/e500crtres64gpr.asm b/libgcc/config/rs6000/e500crtres64gpr.S
rename from gcc/config/rs6000/e500crtres64gpr.asm
rename to libgcc/config/rs6000/e500crtres64gpr.S
diff --git a/gcc/config/rs6000/e500crtres64gprctr.asm b/libgcc/config/rs6000/e500crtres64gprctr.S
rename from gcc/config/rs6000/e500crtres64gprctr.asm
rename to libgcc/config/rs6000/e500crtres64gprctr.S
diff --git a/gcc/config/rs6000/e500crtrest32gpr.asm b/libgcc/config/rs6000/e500crtrest32gpr.S
rename from gcc/config/rs6000/e500crtrest32gpr.asm
rename to libgcc/config/rs6000/e500crtrest32gpr.S
diff --git a/gcc/config/rs6000/e500crtrest64gpr.asm b/libgcc/config/rs6000/e500crtrest64gpr.S
rename from gcc/config/rs6000/e500crtrest64gpr.asm
rename to libgcc/config/rs6000/e500crtrest64gpr.S
diff --git a/gcc/config/rs6000/e500crtresx32gpr.asm b/libgcc/config/rs6000/e500crtresx32gpr.S
rename from gcc/config/rs6000/e500crtresx32gpr.asm
rename to libgcc/config/rs6000/e500crtresx32gpr.S
diff --git a/gcc/config/rs6000/e500crtresx64gpr.asm b/libgcc/config/rs6000/e500crtresx64gpr.S
rename from gcc/config/rs6000/e500crtresx64gpr.asm
rename to libgcc/config/rs6000/e500crtresx64gpr.S
diff --git a/gcc/config/rs6000/e500crtsav32gpr.asm b/libgcc/config/rs6000/e500crtsav32gpr.S
rename from gcc/config/rs6000/e500crtsav32gpr.asm
rename to libgcc/config/rs6000/e500crtsav32gpr.S
diff --git a/gcc/config/rs6000/e500crtsav64gpr.asm b/libgcc/config/rs6000/e500crtsav64gpr.S
rename from gcc/config/rs6000/e500crtsav64gpr.asm
rename to libgcc/config/rs6000/e500crtsav64gpr.S
diff --git a/gcc/config/rs6000/e500crtsav64gprctr.asm b/libgcc/config/rs6000/e500crtsav64gprctr.S
rename from gcc/config/rs6000/e500crtsav64gprctr.asm
rename to libgcc/config/rs6000/e500crtsav64gprctr.S
diff --git a/gcc/config/rs6000/e500crtsavg32gpr.asm b/libgcc/config/rs6000/e500crtsavg32gpr.S
rename from gcc/config/rs6000/e500crtsavg32gpr.asm
rename to libgcc/config/rs6000/e500crtsavg32gpr.S
diff --git a/gcc/config/rs6000/e500crtsavg64gpr.asm b/libgcc/config/rs6000/e500crtsavg64gpr.S
rename from gcc/config/rs6000/e500crtsavg64gpr.asm
rename to libgcc/config/rs6000/e500crtsavg64gpr.S
diff --git a/gcc/config/rs6000/e500crtsavg64gprctr.asm b/libgcc/config/rs6000/e500crtsavg64gprctr.S
rename from gcc/config/rs6000/e500crtsavg64gprctr.asm
rename to libgcc/config/rs6000/e500crtsavg64gprctr.S
diff --git a/gcc/config/rs6000/eabi.asm b/libgcc/config/rs6000/eabi.S
rename from gcc/config/rs6000/eabi.asm
rename to libgcc/config/rs6000/eabi.S
diff --git a/libgcc/config/rs6000/t-darwin b/libgcc/config/rs6000/t-darwin
--- a/libgcc/config/rs6000/t-darwin
+++ b/libgcc/config/rs6000/t-darwin
@@ -3,6 +3,24 @@  DARWIN_EXTRA_CRT_BUILD_CFLAGS = -mlongca
 crt2.o: $(srcdir)/config/rs6000/darwin-crt2.c
 	$(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $<
 
+LIB2ADD = $(srcdir)/config/rs6000/darwin-tramp.S \
+	  $(srcdir)/config/darwin-64.c \
+	  $(srcdir)/config/rs6000/darwin-world.S
+
+LIB2ADD_ST = \
+	  $(srcdir)/config/rs6000/darwin-fpsave.S  \
+	  $(srcdir)/config/rs6000/darwin-vecsave.S
+
 LIB2ADD += $(srcdir)/config/rs6000/ppc64-fp.c
 
+# The .S files above are designed to run on all processors,
+# even though they use AltiVec instructions.  -Wa is used because
+# -force_cpusubtype_ALL doesn't work with -dynamiclib.
+#
+# -pipe because there's an assembler bug, 4077127, which causes
+# it to not properly process the first # directive, causing temporary
+# file names to appear in stabs, causing the bootstrap to fail.  Using -pipe
+# works around this by not having any temporary file names.
+HOST_LIBGCC2_CFLAGS = -Wa,-force_cpusubtype_ALL -pipe -mmacosx-version-min=10.4
+
 LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
diff --git a/libgcc/config/rs6000/t-darwin64 b/libgcc/config/rs6000/t-darwin64
new file mode 100644
--- /dev/null
+++ b/libgcc/config/rs6000/t-darwin64
@@ -0,0 +1,6 @@ 
+LIB2_SIDITI_CONV_FUNCS = yes
+
+LIB2ADD = $(srcdir)/config/rs6000/darwin-tramp.S \
+	  $(srcdir)/config/darwin-64.c \
+	  $(srcdir)/config/rs6000/darwin-world.S
+
diff --git a/libgcc/config/rs6000/t-linux64 b/libgcc/config/rs6000/t-linux64
--- a/libgcc/config/rs6000/t-linux64
+++ b/libgcc/config/rs6000/t-linux64
@@ -1,2 +1,4 @@ 
+HOST_LIBGCC2_CFLAGS += -mno-minimal-toc
+
 softfp_wrap_start := '\#ifndef __powerpc64__'
 softfp_wrap_end := '\#endif'
diff --git a/libgcc/config/rs6000/t-lynx b/libgcc/config/rs6000/t-lynx
new file mode 100644
--- /dev/null
+++ b/libgcc/config/rs6000/t-lynx
@@ -0,0 +1,1 @@ 
+LIB2ADD = $(srcdir)/config/rs6000/tramp.S
diff --git a/libgcc/config/rs6000/t-netbsd b/libgcc/config/rs6000/t-netbsd
new file mode 100644
--- /dev/null
+++ b/libgcc/config/rs6000/t-netbsd
@@ -0,0 +1,9 @@ 
+LIB2ADD = $(srcdir)/config/rs6000/tramp.S
+
+LIB2ADD_ST = \
+	$(srcdir)/config/rs6000/crtsavfpr.S \
+	$(srcdir)/config/rs6000/crtresfpr.S \
+	$(srcdir)/config/rs6000/crtsavgpr.S \
+	$(srcdir)/config/rs6000/crtresgpr.S \
+	$(srcdir)/config/rs6000/crtresxfpr.S \
+	$(srcdir)/config/rs6000/crtresxgpr.S
diff --git a/libgcc/config/rs6000/t-ppccomm b/libgcc/config/rs6000/t-ppccomm
--- a/libgcc/config/rs6000/t-ppccomm
+++ b/libgcc/config/rs6000/t-ppccomm
@@ -1,83 +1,33 @@ 
-LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c
+LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c \
+	   $(srcdir)/config/rs6000/tramp.S
 
-LIB2ADD_ST += crtsavfpr.S crtresfpr.S \
-  crtsavgpr.S crtresgpr.S \
-  crtresxfpr.S crtresxgpr.S \
-  e500crtres32gpr.S \
-  e500crtres64gpr.S \
-  e500crtres64gprctr.S \
-  e500crtrest32gpr.S \
-  e500crtrest64gpr.S \
-  e500crtresx32gpr.S \
-  e500crtresx64gpr.S \
-  e500crtsav32gpr.S \
-  e500crtsav64gpr.S \
-  e500crtsav64gprctr.S \
-  e500crtsavg32gpr.S \
-  e500crtsavg64gpr.S \
-  e500crtsavg64gprctr.S
+# These can't end up in shared libgcc
+LIB2ADD_ST += \
+	   $(srcdir)/config/rs6000/crtsavfpr.S \
+	   $(srcdir)/config/rs6000/crtresfpr.S \
+	   $(srcdir)/config/rs6000/crtsavgpr.S \
+	   $(srcdir)/config/rs6000/crtresgpr.S \
+	   $(srcdir)/config/rs6000/crtresxfpr.S 
+	   $(srcdir)/config/rs6000/crtresxgpr.S \
+	   $(srcdir)/config/rs6000/e500crtres32gpr.S \
+	   $(srcdir)/config/rs6000/e500crtres64gpr.S \
+	   $(srcdir)/config/rs6000/e500crtres64gprctr.S \
+	   $(srcdir)/config/rs6000/e500crtrest32gpr.S \
+	   $(srcdir)/config/rs6000/e500crtrest64gpr.S \
+	   $(srcdir)/config/rs6000/e500crtresx32gpr.S \
+	   $(srcdir)/config/rs6000/e500crtresx64gpr.S \
+	   $(srcdir)/config/rs6000/e500crtsav32gpr.S \
+	   $(srcdir)/config/rs6000/e500crtsav64gpr.S \
+	   $(srcdir)/config/rs6000/e500crtsav64gprctr.S \
+	   $(srcdir)/config/rs6000/e500crtsavg32gpr.S \
+	   $(srcdir)/config/rs6000/e500crtsavg64gpr.S \
+	   $(srcdir)/config/rs6000/e500crtsavg64gprctr.S
+	   $(srcdir)/config/rs6000/eabi.S
 
 # 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.
-crtsavfpr.S: $(gcc_srcdir)/config/rs6000/crtsavfpr.asm
-	cat $(gcc_srcdir)/config/rs6000/crtsavfpr.asm >crtsavfpr.S
-
-crtresfpr.S: $(gcc_srcdir)/config/rs6000/crtresfpr.asm
-	cat $(gcc_srcdir)/config/rs6000/crtresfpr.asm >crtresfpr.S
-
-crtsavgpr.S: $(gcc_srcdir)/config/rs6000/crtsavgpr.asm
-	cat $(gcc_srcdir)/config/rs6000/crtsavgpr.asm >crtsavgpr.S
-
-crtresgpr.S: $(gcc_srcdir)/config/rs6000/crtresgpr.asm
-	cat $(gcc_srcdir)/config/rs6000/crtresgpr.asm >crtresgpr.S
-
-crtresxfpr.S: $(gcc_srcdir)/config/rs6000/crtresxfpr.asm
-	cat $(gcc_srcdir)/config/rs6000/crtresxfpr.asm >crtresxfpr.S
-
-crtresxgpr.S: $(gcc_srcdir)/config/rs6000/crtresxgpr.asm
-	cat $(gcc_srcdir)/config/rs6000/crtresxgpr.asm >crtresxgpr.S
-
-e500crtres32gpr.S: $(gcc_srcdir)/config/rs6000/e500crtres32gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtres32gpr.asm >e500crtres32gpr.S
-
-e500crtres64gpr.S: $(gcc_srcdir)/config/rs6000/e500crtres64gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtres64gpr.asm >e500crtres64gpr.S
-
-e500crtres64gprctr.S: $(gcc_srcdir)/config/rs6000/e500crtres64gprctr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtres64gprctr.asm >e500crtres64gprctr.S
-
-e500crtrest32gpr.S: $(gcc_srcdir)/config/rs6000/e500crtrest32gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtrest32gpr.asm >e500crtrest32gpr.S
-
-e500crtrest64gpr.S: $(gcc_srcdir)/config/rs6000/e500crtrest64gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtrest64gpr.asm >e500crtrest64gpr.S
-
-e500crtresx32gpr.S: $(gcc_srcdir)/config/rs6000/e500crtresx32gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtresx32gpr.asm >e500crtresx32gpr.S
-
-e500crtresx64gpr.S: $(gcc_srcdir)/config/rs6000/e500crtresx64gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtresx64gpr.asm >e500crtresx64gpr.S
-
-e500crtsav32gpr.S: $(gcc_srcdir)/config/rs6000/e500crtsav32gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtsav32gpr.asm >e500crtsav32gpr.S
-
-e500crtsav64gpr.S: $(gcc_srcdir)/config/rs6000/e500crtsav64gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtsav64gpr.asm >e500crtsav64gpr.S
-
-e500crtsav64gprctr.S: $(gcc_srcdir)/config/rs6000/e500crtsav64gprctr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtsav64gprctr.asm >e500crtsav64gprctr.S
-
-e500crtsavg32gpr.S: $(gcc_srcdir)/config/rs6000/e500crtsavg32gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtsavg32gpr.asm >e500crtsavg32gpr.S
-
-e500crtsavg64gpr.S: $(gcc_srcdir)/config/rs6000/e500crtsavg64gpr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtsavg64gpr.asm >e500crtsavg64gpr.S
-
-e500crtsavg64gprctr.S: $(gcc_srcdir)/config/rs6000/e500crtsavg64gprctr.asm
-	cat $(gcc_srcdir)/config/rs6000/e500crtsavg64gprctr.asm >e500crtsavg64gprctr.S
-
 ecrti$(objext): $(srcdir)/config/rs6000/eabi-ci.S
 	$(crt_compile) -c ecrti.S
 
diff --git a/gcc/config/rs6000/tramp.asm b/libgcc/config/rs6000/tramp.S
rename from gcc/config/rs6000/tramp.asm
rename to libgcc/config/rs6000/tramp.S
diff --git a/libgcc/config/s390/t-tpf b/libgcc/config/s390/t-tpf
deleted file mode 100644
--- a/libgcc/config/s390/t-tpf
+++ /dev/null
@@ -1,2 +0,0 @@ 
-# Compile libgcc2.a with pic.
-HOST_LIBGCC2_CFLAGS += -fPIC
diff --git a/gcc/config/sh/linux-atomic.asm b/libgcc/config/sh/linux-atomic.S
rename from gcc/config/sh/linux-atomic.asm
rename to libgcc/config/sh/linux-atomic.S
diff --git a/libgcc/config/sh/t-linux b/libgcc/config/sh/t-linux
--- a/libgcc/config/sh/t-linux
+++ b/libgcc/config/sh/t-linux
@@ -1,6 +1,8 @@ 
 LIB1ASMFUNCS_CACHE = _ic_invalidate _ic_invalidate_array
 
-HOST_LIBGCC2_CFLAGS = -fpic -mieee -DNO_FPSCR_VALUES
+LIB2ADD = $(srcdir)/config/sh/linux-atomic.S
+
+HOST_LIBGCC2_CFLAGS += -mieee -DNO_FPSCR_VALUES
 
 # Override t-slibgcc-elf-ver to export some libgcc symbols with
 # the symbol versions that glibc used, and hide some lib1func
diff --git a/libgcc/config/sh/t-netbsd b/libgcc/config/sh/t-netbsd
--- a/libgcc/config/sh/t-netbsd
+++ b/libgcc/config/sh/t-netbsd
@@ -1,1 +1,5 @@ 
 LIB1ASMFUNCS_CACHE = _ic_invalidate
+
+LIB2ADD =
+
+HOST_LIBGCC2_CFLAGS += -mieee
diff --git a/libgcc/config/sh/t-sh b/libgcc/config/sh/t-sh
--- a/libgcc/config/sh/t-sh
+++ b/libgcc/config/sh/t-sh
@@ -46,7 +46,7 @@  sdivsi3_i4i-Os-4-200.o: $(srcdir)/config
 	$(compile) -c -DL_sdivsi3_i4i $<
 udivsi3_i4i-Os-4-200.o: $(srcdir)/config/sh/lib1funcs-Os-4-200.S
 	$(gcc_compile) -c -DL_udivsi3_i4i $<
-unwind-dw2-Os-4-200.o: $(gcc_srcdir)/unwind-dw2.c
+unwind-dw2-Os-4-200.o: $(srcdir)/unwind-dw2.c
 	$(gcc_compile) $(LIBGCC2_CFLAGS) $(vis_hide) -fexceptions -Os -c $<
 
 OBJS_Os_4_200=sdivsi3_i4i-Os-4-200.o udivsi3_i4i-Os-4-200.o unwind-dw2-Os-4-200.o
@@ -58,3 +58,6 @@  div_table-4-300.o: $(srcdir)/config/sh/l
 
 libgcc-4-300.a: div_table-4-300.o
 	$(AR_CREATE_FOR_TARGET) $@ div_table-4-300.o
+
+HOST_LIBGCC2_CFLAGS = -mieee
+
diff --git a/libgcc/config/sparc/t-sol2 b/libgcc/config/sparc/t-sol2
--- a/libgcc/config/sparc/t-sol2
+++ b/libgcc/config/sparc/t-sol2
@@ -3,4 +3,4 @@ 
 # to produce a shared library, but since we don't know ahead of time when
 # we will be doing that, we just always use -fPIC when compiling the
 # routines in crtstuff.c.
-CRTSTUFF_T_CFLAGS = -fPIC
+CRTSTUFF_T_CFLAGS = $(PICFLAG)
diff --git a/gcc/config/spu/divmodti4.c b/libgcc/config/spu/divmodti4.c
rename from gcc/config/spu/divmodti4.c
rename to libgcc/config/spu/divmodti4.c
--- a/gcc/config/spu/divmodti4.c
+++ b/libgcc/config/spu/divmodti4.c
@@ -1,4 +1,4 @@ 
-/* Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc.
  
    This file 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
@@ -65,7 +65,7 @@  count_leading_zeros (UTItype x)
 }
 
 /* Based on implementation of udivmodsi4, which is essentially
- * an optimized version of gcc/config/udivmodsi4.c
+ * an optimized version of libgcc/udivmodsi4.c
         clz      %7,%2
         clz      %4,%1
         il       %5,1
diff --git a/gcc/config/spu/divv2df3.c b/libgcc/config/spu/divv2df3.c
rename from gcc/config/spu/divv2df3.c
rename to libgcc/config/spu/divv2df3.c
diff --git a/gcc/config/spu/float_disf.c b/libgcc/config/spu/float_disf.c
rename from gcc/config/spu/float_disf.c
rename to libgcc/config/spu/float_disf.c
diff --git a/gcc/config/spu/float_unsdidf.c b/libgcc/config/spu/float_unsdidf.c
rename from gcc/config/spu/float_unsdidf.c
rename to libgcc/config/spu/float_unsdidf.c
diff --git a/gcc/config/spu/float_unsdisf.c b/libgcc/config/spu/float_unsdisf.c
rename from gcc/config/spu/float_unsdisf.c
rename to libgcc/config/spu/float_unsdisf.c
diff --git a/gcc/config/spu/float_unssidf.c b/libgcc/config/spu/float_unssidf.c
rename from gcc/config/spu/float_unssidf.c
rename to libgcc/config/spu/float_unssidf.c
diff --git a/gcc/config/spu/mfc_multi_tag_release.c b/libgcc/config/spu/mfc_multi_tag_release.c
rename from gcc/config/spu/mfc_multi_tag_release.c
rename to libgcc/config/spu/mfc_multi_tag_release.c
diff --git a/gcc/config/spu/mfc_multi_tag_reserve.c b/libgcc/config/spu/mfc_multi_tag_reserve.c
rename from gcc/config/spu/mfc_multi_tag_reserve.c
rename to libgcc/config/spu/mfc_multi_tag_reserve.c
diff --git a/gcc/config/spu/mfc_tag_release.c b/libgcc/config/spu/mfc_tag_release.c
rename from gcc/config/spu/mfc_tag_release.c
rename to libgcc/config/spu/mfc_tag_release.c
diff --git a/gcc/config/spu/mfc_tag_reserve.c b/libgcc/config/spu/mfc_tag_reserve.c
rename from gcc/config/spu/mfc_tag_reserve.c
rename to libgcc/config/spu/mfc_tag_reserve.c
diff --git a/gcc/config/spu/mfc_tag_table.c b/libgcc/config/spu/mfc_tag_table.c
rename from gcc/config/spu/mfc_tag_table.c
rename to libgcc/config/spu/mfc_tag_table.c
diff --git a/gcc/config/spu/multi3.c b/libgcc/config/spu/multi3.c
rename from gcc/config/spu/multi3.c
rename to libgcc/config/spu/multi3.c
diff --git a/gcc/config/spu/spu_cache.h b/libgcc/config/spu/spu_cache.h
rename from gcc/config/spu/spu_cache.h
rename to libgcc/config/spu/spu_cache.h
diff --git a/gcc/config/spu/spu_internals.h b/libgcc/config/spu/spu_internals.h
rename from gcc/config/spu/spu_internals.h
rename to libgcc/config/spu/spu_internals.h
diff --git a/gcc/config/spu/spu_intrinsics.h b/libgcc/config/spu/spu_intrinsics.h
rename from gcc/config/spu/spu_intrinsics.h
rename to libgcc/config/spu/spu_intrinsics.h
diff --git a/gcc/config/spu/spu_mfcio.h b/libgcc/config/spu/spu_mfcio.h
rename from gcc/config/spu/spu_mfcio.h
rename to libgcc/config/spu/spu_mfcio.h
diff --git a/libgcc/config/spu/t-elf b/libgcc/config/spu/t-elf
--- a/libgcc/config/spu/t-elf
+++ b/libgcc/config/spu/t-elf
@@ -2,6 +2,30 @@ 
 # FIXME: This is the default.
 CRTSTUFF_T_CFLAGS =
 
+# We exclude those because the libgcc2.c default versions do not support
+# the SPU single-precision format (round towards zero).  We provide our
+# own versions below and/or via direct expansion.
+LIB2ADD = _floatdisf _floatundisf _floattisf _floatunstisf
+
+LIB2ADD_ST = $(srcdir)/config/spu/float_unssidf.c \
+	     $(srcdir)/config/spu/float_unsdidf.c \
+	     $(srcdir)/config/spu/float_unsdisf.c \
+	     $(srcdir)/config/spu/float_disf.c \
+	     $(srcdir)/config/spu/mfc_tag_table.c \
+	     $(srcdir)/config/spu/mfc_tag_reserve.c \
+	     $(srcdir)/config/spu/mfc_tag_release.c \
+	     $(srcdir)/config/spu/mfc_multi_tag_reserve.c \
+	     $(srcdir)/config/spu/mfc_multi_tag_release.c \
+	     $(srcdir)/config/spu/multi3.c \
+	     $(srcdir)/config/spu/divmodti4.c \
+	     $(srcdir)/config/spu/divv2df3.c
+
+# Build TImode conversion routines to support Fortran 128-bit
+# integer data types.
+LIB2_SIDITI_CONV_FUNCS = yes
+
+HOST_LIBGCC2_CFLAGS += -mwarn-reloc -D__IN_LIBGCC2
+
 # Neither gcc or newlib seem to have a standard way to generate multiple
 # crt*.o files.  So we don't use the standard crt0.o name anymore.
 
diff --git a/gcc/config/spu/vec_types.h b/libgcc/config/spu/vec_types.h
rename from gcc/config/spu/vec_types.h
rename to libgcc/config/spu/vec_types.h
diff --git a/gcc/config/spu/vmx2spu.h b/libgcc/config/spu/vmx2spu.h
rename from gcc/config/spu/vmx2spu.h
rename to libgcc/config/spu/vmx2spu.h
diff --git a/gcc/config/stormy16/stormy16-lib2-ashlsi3.c b/libgcc/config/stormy16/ashlsi3.c
rename from gcc/config/stormy16/stormy16-lib2-ashlsi3.c
rename to libgcc/config/stormy16/ashlsi3.c
--- a/gcc/config/stormy16/stormy16-lib2-ashlsi3.c
+++ b/libgcc/config/stormy16/ashlsi3.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_ASHLSI3
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-ashrsi3.c b/libgcc/config/stormy16/ashrsi3.c
rename from gcc/config/stormy16/stormy16-lib2-ashrsi3.c
rename to libgcc/config/stormy16/ashrsi3.c
--- a/gcc/config/stormy16/stormy16-lib2-ashrsi3.c
+++ b/libgcc/config/stormy16/ashrsi3.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_ASHRSI3
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-clzhi2.c b/libgcc/config/stormy16/clzhi2.c
rename from gcc/config/stormy16/stormy16-lib2-clzhi2.c
rename to libgcc/config/stormy16/clzhi2.c
--- a/gcc/config/stormy16/stormy16-lib2-clzhi2.c
+++ b/libgcc/config/stormy16/clzhi2.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_CLZHI2
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-cmpsi2.c b/libgcc/config/stormy16/cmpsi2.c
rename from gcc/config/stormy16/stormy16-lib2-cmpsi2.c
rename to libgcc/config/stormy16/cmpsi2.c
--- a/gcc/config/stormy16/stormy16-lib2-cmpsi2.c
+++ b/libgcc/config/stormy16/cmpsi2.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_CMPSI2
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-ctzhi2.c b/libgcc/config/stormy16/ctzhi2.c
rename from gcc/config/stormy16/stormy16-lib2-ctzhi2.c
rename to libgcc/config/stormy16/ctzhi2.c
--- a/gcc/config/stormy16/stormy16-lib2-ctzhi2.c
+++ b/libgcc/config/stormy16/ctzhi2.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_CTZHI2
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-divsi3.c b/libgcc/config/stormy16/divsi3.c
rename from gcc/config/stormy16/stormy16-lib2-divsi3.c
rename to libgcc/config/stormy16/divsi3.c
--- a/gcc/config/stormy16/stormy16-lib2-divsi3.c
+++ b/libgcc/config/stormy16/divsi3.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_DIVSI3
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-ffshi2.c b/libgcc/config/stormy16/ffshi2.c
rename from gcc/config/stormy16/stormy16-lib2-ffshi2.c
rename to libgcc/config/stormy16/ffshi2.c
--- a/gcc/config/stormy16/stormy16-lib2-ffshi2.c
+++ b/libgcc/config/stormy16/ffshi2.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_FFSHI2
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2.c b/libgcc/config/stormy16/lib2funcs.c
rename from gcc/config/stormy16/stormy16-lib2.c
rename to libgcc/config/stormy16/lib2funcs.c
diff --git a/gcc/config/stormy16/stormy16-lib2-lshrsi3.c b/libgcc/config/stormy16/lshrsi3.c
rename from gcc/config/stormy16/stormy16-lib2-lshrsi3.c
rename to libgcc/config/stormy16/lshrsi3.c
--- a/gcc/config/stormy16/stormy16-lib2-lshrsi3.c
+++ b/libgcc/config/stormy16/lshrsi3.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_LSHRSI3
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-modsi3.c b/libgcc/config/stormy16/modsi3.c
rename from gcc/config/stormy16/stormy16-lib2-modsi3.c
rename to libgcc/config/stormy16/modsi3.c
--- a/gcc/config/stormy16/stormy16-lib2-modsi3.c
+++ b/libgcc/config/stormy16/modsi3.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_MODSI3
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-parityhi2.c b/libgcc/config/stormy16/parityhi2.c
rename from gcc/config/stormy16/stormy16-lib2-parityhi2.c
rename to libgcc/config/stormy16/parityhi2.c
--- a/gcc/config/stormy16/stormy16-lib2-parityhi2.c
+++ b/libgcc/config/stormy16/parityhi2.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_PARITYHI2
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-popcounthi2.c b/libgcc/config/stormy16/popcounthi2.c
rename from gcc/config/stormy16/stormy16-lib2-popcounthi2.c
rename to libgcc/config/stormy16/popcounthi2.c
--- a/gcc/config/stormy16/stormy16-lib2-popcounthi2.c
+++ b/libgcc/config/stormy16/popcounthi2.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_POPCOUNTHI2
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/t-stormy16 b/libgcc/config/stormy16/t-stormy16
rename from gcc/config/stormy16/t-stormy16
rename to libgcc/config/stormy16/t-stormy16
--- a/gcc/config/stormy16/t-stormy16
+++ b/libgcc/config/stormy16/t-stormy16
@@ -19,21 +19,21 @@ 
 # <http://www.gnu.org/licenses/>.
 
 # SImode arithmetic and logical routines, HImode bit counting routines.
-LIB2FUNCS_EXTRA = \
-	$(srcdir)/config/stormy16/stormy16-lib2-udivmodsi4.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-divsi3.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-modsi3.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-udivsi3.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-umodsi3.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-ashlsi3.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-ashrsi3.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-lshrsi3.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-popcounthi2.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-parityhi2.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-clzhi2.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-ctzhi2.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-ffshi2.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-cmpsi2.c \
-	$(srcdir)/config/stormy16/stormy16-lib2-ucmpsi2.c
+LIB2ADD = \
+	$(srcdir)/config/stormy16/udivmodsi4.c \
+	$(srcdir)/config/stormy16/divsi3.c \
+	$(srcdir)/config/stormy16/modsi3.c \
+	$(srcdir)/config/stormy16/udivsi3.c \
+	$(srcdir)/config/stormy16/umodsi3.c \
+	$(srcdir)/config/stormy16/ashlsi3.c \
+	$(srcdir)/config/stormy16/ashrsi3.c \
+	$(srcdir)/config/stormy16/lshrsi3.c \
+	$(srcdir)/config/stormy16/popcounthi2.c \
+	$(srcdir)/config/stormy16/parityhi2.c \
+	$(srcdir)/config/stormy16/clzhi2.c \
+	$(srcdir)/config/stormy16/ctzhi2.c \
+	$(srcdir)/config/stormy16/ffshi2.c \
+	$(srcdir)/config/stormy16/cmpsi2.c \
+	$(srcdir)/config/stormy16/ucmpsi2.c
 
-TARGET_LIBGCC2_CFLAGS = -O2
+HOST_LIBGCC2_CFLAGS = -O2
diff --git a/gcc/config/stormy16/stormy16-lib2-ucmpsi2.c b/libgcc/config/stormy16/ucmpsi2.c
rename from gcc/config/stormy16/stormy16-lib2-ucmpsi2.c
rename to libgcc/config/stormy16/ucmpsi2.c
--- a/gcc/config/stormy16/stormy16-lib2-ucmpsi2.c
+++ b/libgcc/config/stormy16/ucmpsi2.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_UCMPSI2
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-udivmodsi4.c b/libgcc/config/stormy16/udivmodsi4.c
rename from gcc/config/stormy16/stormy16-lib2-udivmodsi4.c
rename to libgcc/config/stormy16/udivmodsi4.c
--- a/gcc/config/stormy16/stormy16-lib2-udivmodsi4.c
+++ b/libgcc/config/stormy16/udivmodsi4.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_UDIVMODSI4
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-udivsi3.c b/libgcc/config/stormy16/udivsi3.c
rename from gcc/config/stormy16/stormy16-lib2-udivsi3.c
rename to libgcc/config/stormy16/udivsi3.c
--- a/gcc/config/stormy16/stormy16-lib2-udivsi3.c
+++ b/libgcc/config/stormy16/udivsi3.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_UDIVSI3
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/gcc/config/stormy16/stormy16-lib2-umodsi3.c b/libgcc/config/stormy16/umodsi3.c
rename from gcc/config/stormy16/stormy16-lib2-umodsi3.c
rename to libgcc/config/stormy16/umodsi3.c
--- a/gcc/config/stormy16/stormy16-lib2-umodsi3.c
+++ b/libgcc/config/stormy16/umodsi3.c
@@ -1,2 +1,2 @@ 
 #define XSTORMY16_UMODSI3
-#include "stormy16-lib2.c"
+#include "lib2funcs.c"
diff --git a/libgcc/config/t-crtstuff-pic b/libgcc/config/t-crtstuff-pic
--- a/libgcc/config/t-crtstuff-pic
+++ b/libgcc/config/t-crtstuff-pic
@@ -1,2 +1,2 @@ 
 # Compile crtbeginS.o and crtendS.o with pic.
-CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
+CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) $(PICFLAG)
diff --git a/libgcc/config/t-darwin b/libgcc/config/t-darwin
--- a/libgcc/config/t-darwin
+++ b/libgcc/config/t-darwin
@@ -3,6 +3,12 @@  crt3.o: $(srcdir)/config/darwin-crt3.c
 	$(crt_compile) \
 	  -fno-tree-dominator-opts $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $<
 
+# -pipe because there's an assembler bug, 4077127, which causes
+# it to not properly process the first # directive, causing temporary
+# file names to appear in stabs, causing the bootstrap to fail.  Using -pipe
+# works around this by not having any temporary file names.
+HOST_LIBGCC2_CFLAGS += -pipe
+
 # Use unwind-dw2-fde-darwin
 LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/config/unwind-dw2-fde-darwin.c \
   $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
diff --git a/gcc/config/t-freebsd-thread b/libgcc/config/t-freebsd-thread
rename from gcc/config/t-freebsd-thread
rename to libgcc/config/t-freebsd-thread
--- a/gcc/config/t-freebsd-thread
+++ b/libgcc/config/t-freebsd-thread
@@ -1,2 +1,2 @@ 
 # This is currently needed to compile libgcc2 for threads support
-TARGET_LIBGCC2_CFLAGS += -pthread
+HOST_LIBGCC2_CFLAGS += -pthread
diff --git a/gcc/config/t-libgcc-pic b/libgcc/config/t-libgcc-pic
rename from gcc/config/t-libgcc-pic
rename to libgcc/config/t-libgcc-pic
--- a/gcc/config/t-libgcc-pic
+++ b/libgcc/config/t-libgcc-pic
@@ -1,2 +1,2 @@ 
 # Compile libgcc2.a with pic.
-TARGET_LIBGCC2_CFLAGS = -fPIC
+HOST_LIBGCC2_CFLAGS += $(PICFLAG)
diff --git a/libgcc/config/t-libunwind b/libgcc/config/t-libunwind
--- a/libgcc/config/t-libunwind
+++ b/libgcc/config/t-libunwind
@@ -1,5 +1,7 @@ 
 # Use the system libunwind library.
 
+HOST_LIBGCC2_CFLAGS += -DUSE_GAS_SYMVER
+
 LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \
   $(srcdir)/unwind-compat.c $(srcdir)/unwind-dw2-fde-compat.c
 LIB2ADDEHSTATIC = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
diff --git a/gcc/config/t-openbsd-thread b/libgcc/config/t-openbsd-thread
rename from gcc/config/t-openbsd-thread
rename to libgcc/config/t-openbsd-thread
--- a/gcc/config/t-openbsd-thread
+++ b/libgcc/config/t-openbsd-thread
@@ -1,3 +1,3 @@ 
 # This is currently needed to compile libgcc2 for threads support
-TARGET_LIBGCC2_CFLAGS=-pthread
+HOST_LIBGCC2_CFLAGS=-pthread
 
diff --git a/libgcc/config/t-sol2 b/libgcc/config/t-sol2
--- a/libgcc/config/t-sol2
+++ b/libgcc/config/t-sol2
@@ -31,5 +31,3 @@  crti.o: $(srcdir)/config/$(cpu_type)/sol
 	$(crt_compile) -c $<
 crtn.o: $(srcdir)/config/$(cpu_type)/sol2-cn.S
 	$(crt_compile) -c $<
-
-HOST_LIBGCC2_CFLAGS = -fPIC
diff --git a/libgcc/config/t-vxworks b/libgcc/config/t-vxworks
new file mode 100644
--- /dev/null
+++ b/libgcc/config/t-vxworks
@@ -0,0 +1,18 @@ 
+# FIXME: Need to specify the next two?
+# No special flags needed for libgcc.a
+HOST_LIBGCC2_CFLAGS =
+
+# Don't build libgcc.a with debug info
+LIBGCC2_DEBUG_CFLAGS =
+
+# Extra libgcc2 modules used by gthr-vxworks.h functions
+LIB2ADD = $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
+
+# This ensures that the correct target headers are used; some
+# VxWorks system headers have names that collide with GCC's
+# internal (host) headers, e.g. regs.h.
+LIBGCC2_INCLUDES = -nostdinc -I \
+  `case "/$$(MULTIDIR)" in \
+     */mrtp*) echo $(WIND_USR)/h ;; \
+     *) echo $(WIND_BASE)/target/h ;; \
+   esac`
diff --git a/gcc/config/vxlib-tls.c b/libgcc/config/vxlib-tls.c
rename from gcc/config/vxlib-tls.c
rename to libgcc/config/vxlib-tls.c
diff --git a/gcc/config/vxlib.c b/libgcc/config/vxlib.c
rename from gcc/config/vxlib.c
rename to libgcc/config/vxlib.c
diff --git a/gcc/config/xtensa/lib2funcs.S b/libgcc/config/xtensa/lib2funcs.S
rename from gcc/config/xtensa/lib2funcs.S
rename to libgcc/config/xtensa/lib2funcs.S
diff --git a/libgcc/config/xtensa/t-elf b/libgcc/config/xtensa/t-elf
--- a/libgcc/config/xtensa/t-elf
+++ b/libgcc/config/xtensa/t-elf
@@ -1,3 +1,5 @@ 
 # Build CRT files and libgcc with the "longcalls" option
 CRTSTUFF_T_CFLAGS += -mlongcalls
 CRTSTUFF_T_CFLAGS_S += -mlongcalls
+
+HOST_LIBGCC2_CFLAGS += -mlongcalls
diff --git a/libgcc/config/xtensa/t-xtensa b/libgcc/config/xtensa/t-xtensa
--- a/libgcc/config/xtensa/t-xtensa
+++ b/libgcc/config/xtensa/t-xtensa
@@ -10,5 +10,7 @@  LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3 _
 	_floatdidf _floatundidf \
 	_truncdfsf2 _extendsfdf2
 
+LIB2ADD = $(srcdir)/config/xtensa/lib2funcs.S
+
 LIB2ADDEH = $(srcdir)/config/xtensa/unwind-dw2-xtensa.c \
    $(srcdir)/unwind-dw2-fde.c $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
diff --git a/libgcc/configure b/libgcc/configure
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -627,6 +627,13 @@  build_subdir
 build_libsubdir
 target_noncanonical
 host_noncanonical
+AWK
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+MAINT
+slibdir
+PICFLAG
 host_os
 host_vendor
 host_cpu
@@ -635,12 +642,6 @@  build_os
 build_vendor
 build_cpu
 build
-AWK
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-MAINT
-slibdir
 enable_shared
 libgcc_topdir
 target_alias
@@ -2197,6 +2198,159 @@  fi
 
 
 
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+  # FIXME: Do we need something for CFLAGS below?
+
+case "${host}" in
+    # PIC is the default on some targets or must not be used.
+    *-*-darwin*)
+	# PIC is the default on this platform
+	# Common symbols not allowed in MH_DYLIB files
+	PICFLAG=-fno-common
+	;;
+    alpha*-dec-osf5*)
+	# PIC is the default.
+	;;
+    hppa*64*-*-hpux*)
+	# PIC is the default for 64-bit PA HP-UX.
+	;;
+    i3456786-*-cygwin* | i3456786-*-mingw* | x86_64-*-mingw*)
+	;;
+    i3456786-*-interix3*)
+	# Interix 3.x gcc -fpic/-fPIC options generate broken code.
+	# Instead, we relocate shared libraries at runtime.
+	;;
+    i3456786-*-nto-qnx*)
+	# QNX uses GNU C++, but need to define -shared option too, otherwise
+	# it will coredump.
+	PICFLAG='-fPIC -shared'
+	;;
+    i3456786-pc-msdosdjgpp*)
+	# DJGPP does not support shared libraries at all.
+	;;
+    ia64*-*-hpux*)
+	# On IA64 HP-UX, PIC is the default but the pic flag
+	# sets the default TLS model and affects inlining.
+	# FIXME: Still in gcc 4.7?
+	PICFLAG=-fPIC
+	;;
+    mips-sgi-irix6*)
+	# PIC is the default.
+	;;
+    rs6000-ibm-aix* | powerpc-ibm-aix*)
+	# All AIX code is PIC.
+	;;
+
+    # Some targets support both -fPIC and -fpic, but prefer the latter.
+    # FIXME: Why?
+    i3456786-*-* | x86_64-*-*)
+	PICFLAG=-fpic
+	;;
+    m68k-*-*)
+	PICFLAG=-fpic
+	;;
+    s390*-*-*)
+	PICFLAG=-fpic
+	;;
+    # FIXME: Override -fPIC default in libgcc only?
+    sh-*-linux* | sh2346lbe*-*-linux*)
+	PICFLAG=-fpic
+	;;
+    # FIXME: Simplify to sh*-*-netbsd*?
+    sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+      sh64-*-netbsd* | sh64l*-*-netbsd*)
+	PICFLAG=-fpic
+	;;
+    sparc*-*-*)
+	# FIXME: This could be done everywhere -fpic and -fPIC differ.
+	case "${CFLAGS}" in
+	    *-fpic*)
+		PICFLAG=-fpic
+		;;
+	    *)
+		PICFLAG=-fPIC
+		;;
+	esac ;;
+    # Default to -fPIC unless specified otherwise.
+    *)
+	PICFLAG=-fPIC
+	;;
+esac
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-version-specific-runtime-libs" >&5
 $as_echo_n "checking for --enable-version-specific-runtime-libs... " >&6; }
 # Check whether --enable-version-specific-runtime-libs was given.
@@ -2385,76 +2539,6 @@  case ${AWK} in
   "") as_fn_error "can't build without awk, bailing out" "$LINENO" 5 ;;
 esac
 
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
 
  case ${build_alias} in
   "") build_noncanonical=${build} ;;
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -6,6 +6,7 @@  sinclude(../config/acx.m4)
 sinclude(../config/no-executables.m4)
 sinclude(../config/lib-ld.m4)
 sinclude(../config/override.m4)
+sinclude(../config/picflag.m4)
 sinclude(../config/dfp.m4)
 sinclude(../config/unwind_ipinfo.m4)
 
@@ -58,6 +59,9 @@  AC_ARG_ENABLE(shared,
 ], [enable_shared=yes])
 AC_SUBST(enable_shared)
 
+GCC_PICFLAG
+AC_SUBST(PICFLAG)
+
 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
 AC_ARG_ENABLE(version-specific-runtime-libs,
 [  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
diff --git a/gcc/config/divmod.c b/libgcc/divmod.c
rename from gcc/config/divmod.c
rename to libgcc/divmod.c
diff --git a/gcc/config/floatunsidf.c b/libgcc/floatunsidf.c
rename from gcc/config/floatunsidf.c
rename to libgcc/floatunsidf.c
diff --git a/gcc/config/floatunsisf.c b/libgcc/floatunsisf.c
rename from gcc/config/floatunsisf.c
rename to libgcc/floatunsisf.c
diff --git a/gcc/config/floatunsitf.c b/libgcc/floatunsitf.c
rename from gcc/config/floatunsitf.c
rename to libgcc/floatunsitf.c
diff --git a/gcc/config/floatunsixf.c b/libgcc/floatunsixf.c
rename from gcc/config/floatunsixf.c
rename to libgcc/floatunsixf.c
diff --git a/gcc/gbl-ctors.h b/libgcc/gbl-ctors.h
rename from gcc/gbl-ctors.h
rename to libgcc/gbl-ctors.h
diff --git a/gcc/libgcc2.c b/libgcc/libgcc2.c
rename from gcc/libgcc2.c
rename to libgcc/libgcc2.c
diff --git a/gcc/libgcc2.h b/libgcc/libgcc2.h
rename from gcc/libgcc2.h
rename to libgcc/libgcc2.h
diff --git a/gcc/longlong.h b/libgcc/longlong.h
rename from gcc/longlong.h
rename to libgcc/longlong.h
diff --git a/gcc/config/memcmp.c b/libgcc/memcmp.c
rename from gcc/config/memcmp.c
rename to libgcc/memcmp.c
diff --git a/gcc/config/memcpy.c b/libgcc/memcpy.c
rename from gcc/config/memcpy.c
rename to libgcc/memcpy.c
diff --git a/gcc/config/memmove.c b/libgcc/memmove.c
rename from gcc/config/memmove.c
rename to libgcc/memmove.c
diff --git a/gcc/config/memset.c b/libgcc/memset.c
rename from gcc/config/memset.c
rename to libgcc/memset.c
diff --git a/libgcc/siditi-object.mk b/libgcc/siditi-object.mk
--- a/libgcc/siditi-object.mk
+++ b/libgcc/siditi-object.mk
@@ -11,12 +11,12 @@  iter-labels := $(wordlist 2,$(words $(it
 $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) \
+$o$(objext): %$(objext): $(srcdir)/libgcc2.c
+	$(gcc_compile) -DL$($*-label) -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 \
+$(o)_s$(objext): %_s$(objext): $(srcdir)/libgcc2.c
+	$(gcc_s_compile) -DL$($*-label) -c $< \
 		-DLIBGCC2_UNITS_PER_WORD=$($*-size)
 endif
diff --git a/gcc/config/udivmod.c b/libgcc/udivmod.c
rename from gcc/config/udivmod.c
rename to libgcc/udivmod.c
diff --git a/gcc/config/udivmodsi4.c b/libgcc/udivmodsi4.c
rename from gcc/config/udivmodsi4.c
rename to libgcc/udivmodsi4.c
diff --git a/libquadmath/printf/gmp-impl.h b/libquadmath/printf/gmp-impl.h
--- a/libquadmath/printf/gmp-impl.h
+++ b/libquadmath/printf/gmp-impl.h
@@ -1,6 +1,6 @@ 
 /* Include file for internal GNU MP types and definitions.
 
-Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+Copyright (C) 1991, 1993, 1994, 1995, 1996, 2011 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -60,7 +60,7 @@  typedef unsigned int UHWtype;
 #define attribute_hidden
 #endif
 
-#include "../../gcc/longlong.h"
+#include "../../libgcc/longlong.h"
 
 /* Copy NLIMBS *limbs* from SRC to DST.  */
 #define MPN_COPY_INCR(DST, SRC, NLIMBS) \