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


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

PATCH: Support Sun symbol versioning in libgfortran


After Sun symbol versioning support was in place for libstc++ and
libgomp, libgfortran was pretty straightforward.

The patch is practically obvious.

Tested by comparing pvs -dsvo output for libgfortran.so in two
bootstraps on i386-pc-solaris2.11, one with Sun ld, the other with GNU
ld, and only finding the expected differerences (Solaris 2 ABI symbols
in the base version).

Ok for mainline once 4.5 has branched?

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2010-02-22  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* configure.ac: Check for Sun symbol versioning.
	* configure: Regenerate.

	* Makefile.am [LIBGFOR_USE_SYMVER]: Protect version_arg with
	LIBGFOR_USE_SYMVER_GNU.
	Add version_dep.
	[LIBGFOR_USE_SYMVER_SUN]: Handle Sun symbol versioning.
	[!LIBGFOR_USE_SYMVER]: Add version_dep.
	(libgfortran_la_DEPENDENCIES): Set to $(version_dep).
	* Makefile.in: Regenerate.

diff -r 053540158b61 -r 89102c72f6ef libgfortran/Makefile.am
--- a/libgfortran/Makefile.am	Tue Feb 23 23:26:33 2010 +0100
+++ b/libgfortran/Makefile.am	Tue Feb 23 23:26:33 2010 +0100
@@ -8,9 +8,26 @@
 
 ## Symbol versioning (copied from libssp).
 if LIBGFOR_USE_SYMVER
+if LIBGFOR_USE_SYMVER_GNU
 version_arg = -Wl,--version-script=$(srcdir)/gfortran.map
+version_dep = $(srcdir)/gfortran.map
+endif
+if LIBGFOR_USE_SYMVER_SUN
+version_arg = -Wl,-M,gfortran.map-sun
+version_dep = gfortran.map-sun
+gfortran.map-sun : $(srcdir)/gfortran.map \
+		$(top_srcdir)/../contrib/make_sunver.pl \
+		$(libgfortran_la_OBJECTS) $(libgfortran_la_LIBADD)
+	perl $(top_srcdir)/../contrib/make_sunver.pl \
+	  $(srcdir)/gfortran.map \
+	  $(libgfortran_la_OBJECTS:%.lo=.libs/%.o) \
+	 `echo $(libgfortran_la_LIBADD) | \
+	    sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
+	 > $@ || (rm -f $@ ; exit 1)
+endif
 else
 version_arg =
+version_dep =
 endif
 
 LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \
@@ -19,6 +36,7 @@
 toolexeclib_LTLIBRARIES = libgfortran.la
 libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
 libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg)
+libgfortran_la_DEPENDENCIES = $(version_dep)
 
 myexeclib_LTLIBRARIES = libgfortranbegin.la
 myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
diff -r 053540158b61 -r 89102c72f6ef libgfortran/configure.ac
--- a/libgfortran/configure.ac	Tue Feb 23 23:26:33 2010 +0100
+++ b/libgfortran/configure.ac	Tue Feb 23 23:26:33 2010 +0100
@@ -137,17 +137,30 @@
 
 # Check for symbol versioning (copied from libssp).
 AC_MSG_CHECKING([whether symbol versioning is supported])
+save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
 cat > conftest.map <<EOF
 FOO_1.0 {
   global: *foo*; bar; local: *;
 };
 EOF
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
-AC_TRY_LINK([int foo;],[],[gfortran_use_symver=yes],[gfortran_use_symver=no])
+AC_TRY_LINK([int foo;],[],[gfortran_use_symver=gnu],[gfortran_use_symver=no])
+if test x$gfortran_use_symver = xno; then
+  LDFLAGS="$save_LDFLAGS"
+  LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+  # Sun ld cannot handle wildcards and treats all entries as undefined.
+  cat > conftest.map <<EOF
+FOO_1.0 {
+  global: foo; local: *;
+};
+EOF
+  AC_TRY_LINK([int foo;],[],[gfortran_use_symver=sun],[gfortran_use_symver=no])
+fi
 LDFLAGS="$save_LDFLAGS"
 AC_MSG_RESULT($gfortran_use_symver)
-AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" = xyes])
+AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" != xno])
+AM_CONDITIONAL(LIBGFOR_USE_SYMVER_GNU, [test "x$gfortran_use_symver" = xgnu])
+AM_CONDITIONAL(LIBGFOR_USE_SYMVER_SUN, [test "x$gfortran_use_symver" = xsun])
 
 # Figure out whether the compiler supports "-ffunction-sections -fdata-sections",
 # similarly to how libstdc++ does it


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