This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: Support Sun symbol versioning in libgfortran
- From: Rainer Orth <ro at CeBiTec dot Uni-Bielefeld dot DE>
- To: gcc-patches at gcc dot gnu dot org
- Cc: fortran at gcc dot gnu dot org
- Date: Wed, 24 Feb 2010 15:56:32 +0100
- Subject: 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