summaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>2014-12-09 20:48:48 +0000
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>2014-12-09 20:48:48 +0000
commit4c87b50c790029271d24922011793f5e219ecef7 (patch)
tree10510d74a5813885f41938cf584b9c70b5f0e1b3 /libgcc
parent57687d8b3d8c6255f9bb8ba02e02281bafe695e4 (diff)
downloadgcc-4c87b50c790029271d24922011793f5e219ecef7.tar.gz
2014-12-09 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
(libgcc_s) Optional filename-based shared library versioning on AIX. * gcc/doc/install.texi: Describe --with-aix-soname option. * Makefile.in (with_aix_soname): Define. * config/rs6000/t-slibgcc-aix: Act upon --with-aix-soname option. * configure.ac: Accept --with-aix-soname=aix|svr4|both option. * configure: Recreate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218539 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog7
-rw-r--r--libgcc/config/rs6000/t-slibgcc-aix82
-rw-r--r--libgcc/configure28
-rw-r--r--libgcc/configure.ac17
4 files changed, 118 insertions, 16 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index ce8c1f7470f..2ee1476e798 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,10 @@
+2015-12-09 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
+
+ * Makefile.in (with_aix_soname): Define.
+ * config/rs6000/t-slibgcc-aix: Act upon --with-aix-soname option.
+ * configure.ac: Accept --with-aix-soname=aix|svr4|both option.
+ * configure: Recreate.
+
2014-12-05 Olivier Hainque <hainque@adacore.com>
* unwind-dw2.c (DWARF_REG_TO_UNWIND_COLUMN): Remove default def,
diff --git a/libgcc/config/rs6000/t-slibgcc-aix b/libgcc/config/rs6000/t-slibgcc-aix
index 288c2c9a4aa..2de307e91cc 100644
--- a/libgcc/config/rs6000/t-slibgcc-aix
+++ b/libgcc/config/rs6000/t-slibgcc-aix
@@ -16,24 +16,74 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
-# Build a shared libgcc library.
-SHLIB_EXT = .a
-SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
- -Wl,-bE:@shlib_map_file@ -o @multilib_dir@/shr.o \
- @multilib_flags@ @shlib_objs@ -lc \
- `case @multilib_dir@ in \
- *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \
- *) echo -lc ;; esac` ; \
- rm -f @multilib_dir@/tmp-@shlib_base_name@.a ; \
- $(AR_CREATE_FOR_TARGET) @multilib_dir@/tmp-@shlib_base_name@.a \
- @multilib_dir@/shr.o ; \
- mv @multilib_dir@/tmp-@shlib_base_name@.a \
- @multilib_dir@/@shlib_base_name@.a ; \
- rm -f @multilib_dir@/shr.o
+# Build a shared libgcc library according to --with-aix-soname selection:
+# aix-soname=aix:
+# libgcc_s.a(shr.o) # traditional (-bnortl)
+#
+# aix-soname=both:
+# libgcc_s.a(shr.o) # traditional (-bnortl)
+# libgcc_s.so.1(shrXX.o,shrXX.imp) # the SONAME (-G)
+# libgcc_s.so -> libgcc_s.so.1 # the symlink
+#
+# aix-soname=svr4:
+# libgcc_s.so.1(shrXX.o,shrXX.imp) # the SONAME (-G)
+# libgcc_s.so -> libgcc_s.so.1 # the symlink
+SHLIB_EXT_aix = .a
+SHLIB_EXT_both = .so
+SHLIB_EXT_svr4 = .so
+SHLIB_EXT = $(SHLIB_EXT_$(with_aix_soname))
+SHLIB_SOVERSION = 1
+SHLIB_SONAME = @shlib_base_name@.so.$(SHLIB_SOVERSION)
+SHLIB_LINK = \
+ if test svr4 != $(with_aix_soname) ; then \
+ $(CC) $(LIBGCC2_CFLAGS) -shared -Wl,-bnortl -nodefaultlibs \
+ -Wl,-bE:@shlib_map_file@ -o @multilib_dir@/shr.o \
+ @multilib_flags@ @shlib_objs@ -lc \
+ `case @multilib_dir@ in \
+ *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \
+ *) echo -lc ;; esac` ; \
+ rm -f @multilib_dir@/tmp-@shlib_base_name@.a ; \
+ $(AR_CREATE_FOR_TARGET) @multilib_dir@/tmp-@shlib_base_name@.a \
+ @multilib_dir@/shr.o ; \
+ mv @multilib_dir@/tmp-@shlib_base_name@.a \
+ @multilib_dir@/@shlib_base_name@.a ; \
+ rm -f @multilib_dir@/shr.o ; \
+ fi ; \
+ if test aix != $(with_aix_soname) ; then \
+ case @multilib_dir@ in *64*) shr='shr_64' ;; *) shr='shr' ;; esac ; \
+ $(CC) $(LIBGCC2_CFLAGS) -shared -Wl,-G -nodefaultlibs \
+ -Wl,-bE:@shlib_map_file@ -o @multilib_dir@/$$shr.o \
+ @multilib_flags@ @shlib_objs@ -lc \
+ `case @multilib_dir@ in \
+ *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \
+ *) echo -lc ;; esac` ; \
+ $(STRIP_FOR_TARGET) -X32_64 -e @multilib_dir@/$$shr.o ; \
+ { echo "\#! $(SHLIB_SONAME)($$shr.o)" ; \
+ case @multilib_dir@ in *64*) echo '\# 64' ;; *) echo '\# 32' ;; esac ; \
+ cat @shlib_map_file@ ; \
+ } > @multilib_dir@/$$shr.imp ; \
+ rm -f @multilib_dir@/tmp-$(SHLIB_SONAME) ; \
+ $(AR_CREATE_FOR_TARGET) @multilib_dir@/tmp-$(SHLIB_SONAME) \
+ @multilib_dir@/$$shr.imp @multilib_dir@/$$shr.o ; \
+ mv @multilib_dir@/tmp-$(SHLIB_SONAME) \
+ @multilib_dir@/$(SHLIB_SONAME) ; \
+ rm -f @multilib_dir@/@shlib_base_name@.so ; \
+ $(LN_S) $(SHLIB_SONAME) @multilib_dir@/@shlib_base_name@.so ; \
+ rm -f @multilib_dir@/$$shr.imp @multilib_dir@/$$shr.o ; \
+ fi
SHLIB_INSTALL = \
$(mkinstalldirs) $(DESTDIR)$(slibdir)@shlib_slibdir_qual@; \
- $(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.a \
- $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/
+ if test svr4 != $(with_aix_soname) ; then \
+ $(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.a \
+ $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/ ; \
+ fi ; \
+ if test aix != $(with_aix_soname) ; then \
+ $(INSTALL_DATA) @multilib_dir@/$(SHLIB_SONAME) \
+ $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/ ; \
+ rm -f $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so ; \
+ $(LN_S) $(SHLIB_SONAME) \
+ $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so ; \
+ fi
SHLIB_LIBS = -lc `case @multilib_dir@ in *pthread*) echo -lpthread ;; esac`
SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
SHLIB_MAPFILES = libgcc-std.ver
diff --git a/libgcc/configure b/libgcc/configure
index 87924653210..8480dd132c7 100644
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -610,6 +610,7 @@ build_os
build_vendor
build_cpu
build
+with_aix_soname
enable_vtable_verify
enable_shared
libgcc_topdir
@@ -659,6 +660,7 @@ with_cross_host
with_ld
enable_shared
enable_vtable_verify
+with_aix_soname
enable_version_specific_runtime_libs
with_slibdir
enable_maintainer_mode
@@ -1317,6 +1319,9 @@ Optional Packages:
--with-target-subdir=SUBDIR Configuring in a subdirectory for target
--with-cross-host=HOST Configuring with a cross compiler
--with-ld arrange to use the specified ld (full pathname)
+ --with-aix-soname=aix|svr4|both
+ shared library versioning (aka "SONAME") variant to
+ provide on AIX
--with-slibdir=DIR shared libraries in DIR LIBDIR
--with-build-libsubdir=DIR Directory where to find libraries for build system
--with-system-libunwind use installed libunwind
@@ -2166,6 +2171,29 @@ fi
+
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+ withval=$with_aix_soname; case "${host}:${enable_shared}" in
+ power*-*-aix[5-9]*:yes)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide for shared libgcc" >&5
+$as_echo_n "checking which variant of shared library versioning to provide for shared libgcc... " >&6; }
+ case ${withval} in
+ aix|svr4|both) ;;
+ *) as_fn_error "Unknown argument to --with-aix-soname" "$LINENO" 5;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5
+$as_echo "$withval" >&6; }
+ ;;
+ *) with_aix_soname=aix ;;
+ esac
+
+else
+ with_aix_soname=aix
+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
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index ab9c5562e28..23d5f35af57 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -76,6 +76,23 @@ AC_ARG_ENABLE(vtable-verify,
[enable_vtable_verify=no])
AC_SUBST(enable_vtable_verify)
+AC_ARG_WITH(aix-soname,
+[AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+ [shared library versioning (aka "SONAME") variant to provide on AIX])],
+[case "${host}:${enable_shared}" in
+ power*-*-aix[[5-9]]*:yes)
+ AC_MSG_CHECKING([which variant of shared library versioning to provide for shared libgcc])
+ case ${withval} in
+ aix|svr4|both) ;;
+ *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]);;
+ esac
+ AC_MSG_RESULT($withval)
+ ;;
+ *) with_aix_soname=aix ;;
+ esac
+], [with_aix_soname=aix])
+AC_SUBST(with_aix_soname)
+
GCC_PICFLAG
AC_SUBST(PICFLAG)