diff options
Diffstat (limited to 'sys-devel/native-cctools/files/aix-mkexpfile-1')
-rw-r--r-- | sys-devel/native-cctools/files/aix-mkexpfile-1 | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sys-devel/native-cctools/files/aix-mkexpfile-1 b/sys-devel/native-cctools/files/aix-mkexpfile-1 new file mode 100644 index 000000000000..7b36f3bc1f7a --- /dev/null +++ b/sys-devel/native-cctools/files/aix-mkexpfile-1 @@ -0,0 +1,56 @@ +#! /usr/bin/env bash +# Copyright 2013-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/files/aix-mkexpfile-1,v 1.1 2013/11/05 15:03:13 haubi Exp $ + +# Creating shared libraries on AIX involves lots of commands. While there is +# the ld-wrapper supporting the '-soname' flag already, it also is necessary +# to create the list of exported symbols from all the local object files only, +# because with the -bexpfull linker flag we would export symbols from static +# objects found in libc.a too, which should be privately linked into +# subsequent shared libs instead of importing them from current sharedlib. + +# Also, -bexpfull may trigger this AIX 7.1 kernel bug: +# https://www-304.ibm.com/support/docview.wss?uid=isg1IV39558 + +# Example to use this helper script, in combination with ld-wrapper: +# gcc -shared -soname=lib.so.1 -o lib.so *.o -Wl,-bexport:`mkexpfile *.o` + +nm=${0%mkexpfile}nm +showwith= +expfile="ld.aix.exports.$$" +srcobjs=() + +while [[ $# -gt 0 ]] +do + arg=$1 + shift + + case ${arg} in + --) srcobjs=( "${srcobjs[@]}" "$@" ); break ;; + --show-with=*) showwith=${arg#--show-with=} ;; + -o) expfile=$1; shift ;; + -o*) expfile=${arg#-o}; ;; + *) srcobjs=( "${srcobjs[@]}" "${arg}" ) ;; + esac +done + +rm -f "${expfile}" || exit 1 + +type ${nm} >/dev/null 2>&1 || nm=nm + +${nm} -PCpgl "${srcobjs[@]}" | + awk '{ + if ((($2 == "T") || ($2 == "D") || ($2 == "B") || ($2 == "W") || ($2 == "V") || ($2 == "Z")) && (substr($1,1,1) != ".")) { + if (($2 == "W") || ($2 == "V") || ($2 == "Z")) { + print $1 " weak" + } else { + print $1 + } + } + }' | + sort -u > "${expfile}" || exit 1 + +printf "%s\n" "${showwith}${expfile}" + +exit 0 |