Index: libgcc/configure =================================================================== --- libgcc/configure (revision 152187) +++ libgcc/configure (working copy) @@ -1918,7 +1918,7 @@ withval=$with_slibdir; slibdir="$with_slibdir" else if test "${version_specific_libs}" = yes; then - slibdir='$(libsubdir)' + slibdir='$(libdir)/gcc/$(host_noncanonical)/$(version)' elif test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then slibdir='$(exec_prefix)/$(host_noncanonical)/lib' else Index: libgcc/configure.ac =================================================================== --- libgcc/configure.ac (revision 152187) +++ libgcc/configure.ac (working copy) @@ -70,7 +70,7 @@ [ --with-slibdir=DIR shared libraries in DIR [LIBDIR]], slibdir="$with_slibdir", if test "${version_specific_libs}" = yes; then - slibdir='$(libsubdir)' + slibdir='$(libdir)/gcc/$(host_noncanonical)/$(version)' elif test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then slibdir='$(exec_prefix)/$(host_noncanonical)/lib' else Index: libgcc/config/t-slibgcc-darwin =================================================================== --- libgcc/config/t-slibgcc-darwin (revision 152187) +++ libgcc/config/t-slibgcc-darwin (working copy) @@ -11,10 +11,19 @@ SHLIB_DIR = @multilib_dir@ SHLIB_LC = -lc +ifeq (/usr/lib,$(shlib_slibdir)) +$(warning "Looks like we BUILD stubs, slib install path = $(shlib_slibdir)") +BUILD_STUBS=1 +else +$(warning "Looks like we don't BUILD stubs, slib install path = $(shlib_slibdir)") +BUILD_STUBS=0 +endif + # Darwin only searches in /usr/lib for shared libraries, not in subdirectories, # so the libgcc variants have different names not different locations. # Note that this version is used for the loader, not the linker; the linker # uses the stub versions named by the versioned members of $(INSTALL_FILES). + SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \ -install_name @shlib_slibdir@/$(SHLIB_INSTALL_NAME) \ -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ @@ -26,8 +35,21 @@ SHLIB_MKMAP_OPTS = -v leading_underscore=1 SHLIB_MAPFILES += $(gcc_srcdir)/libgcc-std.ver -INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib +LGCC_FILES = libgcc_s.1.dylib +ifeq ($(BUILD_STUBS),1) +LGCC_STUBS = libgcc_s.10.4.dylib libgcc_s.10.5.dylib +else +LGCC_STUBS = +endif +LGCC_FILES += $(LGCC_STUBS) + +LEXT_STUBS = libgcc_ext.10.4$(SHLIB_EXT) libgcc_ext.10.5$(SHLIB_EXT) + +LGCC_FILES += $(LEXT_STUBS) + +INSTALL_FILES=$(LGCC_FILES) + # For the toplevel multilib, build a fat archive including all the multilibs. ifeq ($(MULTIBUILDTOP),) @@ -62,8 +84,21 @@ $(LIPO) -output $@ -create $(@)_T* rm $(@)_T* -libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT) \ - libgcc_s.10.4.dylib libgcc_s.10.5.dylib +libgcc_ext.%.dylib : $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT) all-multi + $(STRIP) -o $(@)_T \ + -R $(SHLIB_VERPFX).$(*).ver -c -urx \ + ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp + MLIBS=`$(CC) --print-multi-lib \ + | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \ + for mlib in $$MLIBS ; do \ + $(STRIP) -o $(@)_T$${mlib} \ + -R $(SHLIB_VERPFX).$(*).ver -c -urx \ + ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \ + done + $(LIPO) -output $@ -create $(@)_T* + rm $(@)_T* + +libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT) $(LGCC_STUBS) $(LEXT_STUBS) cp libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \ ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_ || exit 1 ; \ MLIBS=`$(CC) --print-multi-lib \ Index: gcc/config/darwin.opt =================================================================== --- gcc/config/darwin.opt (revision 152187) +++ gcc/config/darwin.opt (working copy) @@ -22,6 +22,10 @@ Target Report Var(darwin_fix_and_continue) Generate code suitable for fast turn around debugging +muse-shared-libgcc-ext +Target Report Var(darwin_shared_libgcc_ext) +Use gcc functionality added since the OS release. + ; The Init here is for the convenience of GCC developers, so that ; cc1 and cc1plus don't crash if no -mmacosx-version-min is passed. The ; driver will always pass a -mmacosx-version-min, so in normal use Index: gcc/config/darwin.h =================================================================== --- gcc/config/darwin.h (revision 152187) +++ gcc/config/darwin.h (working copy) @@ -391,12 +391,18 @@ #define REAL_LIBGCC_SPEC \ "%{static-libgcc|static: -lgcc_eh -lgcc; \ shared-libgcc|fexceptions|fgnu-runtime: \ - %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \ - %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ - -lgcc; \ - :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \ - %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ - -lgcc}" + %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4 ) \ + %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5 ) \ + %{muse-shared-libgcc-ext: \ + %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ + %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \ + } -lgcc; \ + :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4 ) \ + %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5 ) \ + %{muse-shared-libgcc-ext: \ + %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ + %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \ + } -lgcc } " /* We specify crt0.o as -lcrt0.o so that ld will search the library path.