eprintf.patch   [plain text]


diff -uprN ../../libstdcxx-orig/libstdcxx/libstdc++-v3/config/os/bsd/darwin/eprintf.ver libstdc++-v3/config/os/bsd/darwin/eprintf.ver
--- ../../libstdcxx-orig/libstdcxx/libstdc++-v3/config/os/bsd/darwin/eprintf.ver	1969-12-31 16:00:00.000000000 -0800
+++ libstdc++-v3/config/os/bsd/darwin/eprintf.ver	2005-08-19 15:49:02.000000000 -0700
@@ -0,0 +1 @@
+  __eprintf;
diff -uprN ../../libstdcxx-orig/libstdcxx/libstdc++-v3/src/Makefile.am libstdc++-v3/src/Makefile.am
--- ../../libstdcxx-orig/libstdcxx/libstdc++-v3/src/Makefile.am	2005-08-19 15:05:54.000000000 -0700
+++ libstdc++-v3/src/Makefile.am	2005-08-19 15:50:31.000000000 -0700
@@ -28,10 +28,11 @@ include $(top_srcdir)/fragment.am
 toolexeclib_LTLIBRARIES = libstdc++.la
 
 # Symbol versioning for shared libraries.
-if ENABLE_SYMVERS_GNU
-version_arg = -Wl,--version-script=libstdc++-symbol.ver
-version_dep = libstdc++-symbol.ver
-libstdc++-symbol.ver:  ${glibcxx_srcdir}/$(SYMVER_MAP)
+# This could be conditional on
+# ENABLE_SYMVERS_GNU || ENABLE_SYMVERS_DARWIN_EXPORT
+# but automake doesn't support OR operations in conditionals.
+libstdc++-symbol.ver:  ${glibcxx_srcdir}/$(SYMVER_MAP) \
+		$(port_specific_symbol_files)
 	cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
 	if test "x$(port_specific_symbol_files)" != x; then \
 	  sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
@@ -39,15 +40,19 @@ libstdc++-symbol.ver:  ${glibcxx_srcdir}
 	  cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
 	  rm tmp.top tmp.bottom; \
 	fi
+
+if ENABLE_SYMVERS_GNU
+version_arg = -Wl,--version-script=libstdc++-symbol.ver
+version_dep = libstdc++-symbol.ver
 else
 if ENABLE_SYMVERS_DARWIN_EXPORT
 version_arg = -Wl,-exported_symbols_list,libstdc++-symbol.explist
 version_dep = libstdc++-symbol.explist
-libstdc++-symbol.explist : ${glibcxx_srcdir}/$(SYMVER_MAP) \
+libstdc++-symbol.explist : libstdc++-symbol.ver \
 		${glibcxx_srcdir}/scripts/make_exports.pl \
 		$(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
 	perl ${glibcxx_srcdir}/scripts/make_exports.pl \
-	  ${glibcxx_srcdir}/$(SYMVER_MAP) \
+	  libstdc++-symbol.ver \
 	  $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
 	 `echo $(libstdc___la_LIBADD) | \
 	    sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
@@ -152,6 +157,7 @@ sources = \
 	valarray-inst.cc \
 	wlocale-inst.cc \
 	wstring-inst.cc \
+	compatibility.cc \
 	${host_sources} \
 	${host_sources_extra}
 
@@ -168,7 +174,6 @@ libstdc___la_DEPENDENCIES = ${version_de
 libstdc___la_LDFLAGS = \
 	-version-info $(libtool_VERSION) ${version_arg} -lm 
 
-
 # Use special rules for the deprecated source files so that they find
 # deprecated include files.
 GLIBCXX_INCLUDE_DIR=$(glibcxx_builddir)/include
diff -uprN ../../libstdcxx-orig/libstdcxx/libstdc++-v3/src/Makefile.in libstdc++-v3/src/Makefile.in
--- ../../libstdcxx-orig/libstdcxx/libstdc++-v3/src/Makefile.in	2005-08-19 15:05:54.000000000 -0700
+++ libstdc++-v3/src/Makefile.in	2005-08-19 15:51:43.000000000 -0700
@@ -74,7 +74,8 @@ am__objects_3 = bitmap_allocator.lo pool
 	istream-inst.lo istream.lo locale-inst.lo locale-misc-inst.lo \
 	misc-inst.lo ostream-inst.lo sstream-inst.lo streambuf-inst.lo \
 	streambuf.lo string-inst.lo valarray-inst.lo wlocale-inst.lo \
-	wstring-inst.lo $(am__objects_1) $(am__objects_2)
+	wstring-inst.lo compatibility.lo $(am__objects_1) \
+	$(am__objects_2)
 am_libstdc___la_OBJECTS = $(am__objects_3)
 libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
@@ -279,8 +280,6 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
 toolexeclib_LTLIBRARIES = libstdc++.la
 @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@@ENABLE_SYMVERS_GNU_FALSE@version_arg = 
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@version_arg = -Wl,-exported_symbols_list,libstdc++-symbol.explist
-
-# Symbol versioning for shared libraries.
 @ENABLE_SYMVERS_GNU_TRUE@version_arg = -Wl,--version-script=libstdc++-symbol.ver
 @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@@ENABLE_SYMVERS_GNU_FALSE@version_dep = 
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@version_dep = libstdc++-symbol.explist
@@ -351,6 +350,7 @@ sources = \
 	valarray-inst.cc \
 	wlocale-inst.cc \
 	wstring-inst.cc \
+	compatibility.cc \
 	${host_sources} \
 	${host_sources_extra}
 
@@ -670,19 +670,25 @@ uninstall-am: uninstall-info-am uninstal
 	tags uninstall uninstall-am uninstall-info-am \
 	uninstall-toolexeclibLTLIBRARIES
 
-@ENABLE_SYMVERS_GNU_TRUE@libstdc++-symbol.ver:  ${glibcxx_srcdir}/$(SYMVER_MAP)
-@ENABLE_SYMVERS_GNU_TRUE@	cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
-@ENABLE_SYMVERS_GNU_TRUE@	if test "x$(port_specific_symbol_files)" != x; then \
-@ENABLE_SYMVERS_GNU_TRUE@	  sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
-@ENABLE_SYMVERS_GNU_TRUE@	  sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
-@ENABLE_SYMVERS_GNU_TRUE@	  cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
-@ENABLE_SYMVERS_GNU_TRUE@	  rm tmp.top tmp.bottom; \
-@ENABLE_SYMVERS_GNU_TRUE@	fi
-@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@libstdc++-symbol.explist : ${glibcxx_srcdir}/$(SYMVER_MAP) \
+
+# Symbol versioning for shared libraries.
+# This could be conditional on
+# ENABLE_SYMVERS_GNU || ENABLE_SYMVERS_DARWIN_EXPORT
+# but automake doesn't support OR operations in conditionals.
+libstdc++-symbol.ver:  ${glibcxx_srcdir}/$(SYMVER_MAP) \
+		$(port_specific_symbol_files)
+	cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
+	if test "x$(port_specific_symbol_files)" != x; then \
+	  sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
+	  sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
+	  cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
+	  rm tmp.top tmp.bottom; \
+	fi
+@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@libstdc++-symbol.explist : libstdc++-symbol.ver \
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@		${glibcxx_srcdir}/scripts/make_exports.pl \
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@		$(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@	perl ${glibcxx_srcdir}/scripts/make_exports.pl \
-@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@	  ${glibcxx_srcdir}/$(SYMVER_MAP) \
+@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@	  libstdc++-symbol.ver \
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@	  $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@	 `echo $(libstdc___la_LIBADD) | \
 @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@	    sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
diff -uprN ../../libstdcxx-orig/libstdcxx/libstdc++-v3/src/compatibility.cc libstdc++-v3/src/compatibility.cc
--- ../../libstdcxx-orig/libstdcxx/libstdc++-v3/src/compatibility.cc	1969-12-31 16:00:00.000000000 -0800
+++ libstdc++-v3/src/compatibility.cc	2005-08-19 15:51:14.000000000 -0700
@@ -0,0 +1,24 @@
+#ifdef __APPLE__
+#if (defined(__ppc__) || defined (__ppc64__)) && defined (PIC)
+/* __eprintf shouldn't have been made visible from libstdc++, or
+   anywhere, but on Mac OS X 10.4 it was defined in
+   libstdc++.6.0.3.dylib; so on that platform we have to keep defining
+   it to keep binary compatibility.  We can't just put the libgcc
+   version in the export list, because that doesn't work; once a
+   symbol is marked as hidden, it stays that way.  */
+
+#include <cstdio>
+#include <cstdlib>
+
+using namespace std;
+
+extern "C" void
+__eprintf (const char *string, const char *expression,
+	   unsigned int line, const char *filename)
+{
+  fprintf (stderr, string, expression, line, filename);
+  fflush (stderr);
+  abort ();
+}
+#endif
+#endif /* __APPLE__ */
--- ../../libstdcxx-orig/libstdcxx/libstdc++-v3/configure.host	2005-01-13 14:48:14.000000000 -0800
+++ libstdc++-v3/configure.host	2005-08-19 17:15:07.000000000 -0700
@@ -180,12 +180,14 @@ case "${host_os}" in
     # treatment of coalesced symbols.
     OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module -Wl,-flat_namespace"
     os_include_dir="os/bsd/darwin"
+    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/eprintf.ver"
     ;;
   darwin[89] | darwin[89].* | darwin[1-9][0-9]* )
     # On Darwin, performance is improved if libstdc++ is single-module,
     # and on 8+ compatibility is better if not -flat_namespace.
     OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module"
     os_include_dir="os/bsd/darwin"
+    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/eprintf.ver"
     ;;
   *djgpp*)      # leading * picks up "msdosdjgpp"
     os_include_dir="os/djgpp"