diff options
author | dje <dje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-09 20:48:48 +0000 |
---|---|---|
committer | dje <dje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-09 20:48:48 +0000 |
commit | 4c87b50c790029271d24922011793f5e219ecef7 (patch) | |
tree | 10510d74a5813885f41938cf584b9c70b5f0e1b3 /libgcc | |
parent | 57687d8b3d8c6255f9bb8ba02e02281bafe695e4 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libgcc/config/rs6000/t-slibgcc-aix | 82 | ||||
-rw-r--r-- | libgcc/configure | 28 | ||||
-rw-r--r-- | libgcc/configure.ac | 17 |
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) |