diff options
author | Michael Haubenwallner <haubi@gentoo.org> | 2013-11-08 14:19:30 +0000 |
---|---|---|
committer | Michael Haubenwallner <haubi@gentoo.org> | 2013-11-08 14:19:30 +0000 |
commit | bd654664799c03c081002fb13cef033cf7ae7dea (patch) | |
tree | b6934e09bbe6e860c3a7db943469d0b70588a31b /sys-devel | |
parent | Fix systems where the stack grows up (bug #490746). (diff) | |
download | gentoo-2-bd654664799c03c081002fb13cef033cf7ae7dea.tar.gz gentoo-2-bd654664799c03c081002fb13cef033cf7ae7dea.tar.bz2 gentoo-2-bd654664799c03c081002fb13cef033cf7ae7dea.zip |
+native-cctools-4: Wrapp AIX nm for long TMPDIR. Group AIX wrappers in one subdir.
(Portage version: 2.2.7/cvs/Linux x86_64, signed Manifest commit with key A630CCB8)
Diffstat (limited to 'sys-devel')
-rw-r--r-- | sys-devel/native-cctools/ChangeLog | 9 | ||||
-rw-r--r-- | sys-devel/native-cctools/files/aix-2/ld | 139 | ||||
-rw-r--r-- | sys-devel/native-cctools/files/aix-2/mkexpfile | 70 | ||||
-rw-r--r-- | sys-devel/native-cctools/files/aix-2/nm | 6 | ||||
-rw-r--r-- | sys-devel/native-cctools/files/aix-mkexpfile-1 | 56 | ||||
-rw-r--r-- | sys-devel/native-cctools/native-cctools-4.ebuild (renamed from sys-devel/native-cctools/native-cctools-3.ebuild) | 11 |
6 files changed, 229 insertions, 62 deletions
diff --git a/sys-devel/native-cctools/ChangeLog b/sys-devel/native-cctools/ChangeLog index f9b8af5cfdeb..2f7d17ea8769 100644 --- a/sys-devel/native-cctools/ChangeLog +++ b/sys-devel/native-cctools/ChangeLog @@ -1,6 +1,13 @@ # ChangeLog for sys-devel/native-cctools # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/ChangeLog,v 1.4 2013/11/05 15:03:13 haubi Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/ChangeLog,v 1.5 2013/11/08 14:19:30 haubi Exp $ + +*native-cctools-4 (08 Nov 2013) + + 08 Nov 2013; Michael Haubenwallner <haubi@gentoo.org> -files/aix-mkexpfile-1, + +files/aix-2/ld, +files/aix-2/mkexpfile, +files/aix-2/nm, + -native-cctools-3.ebuild, +native-cctools-4.ebuild: + Wrapp AIX nm for long TMPDIR. Group AIX wrappers in one subdir. *native-cctools-3 (05 Nov 2013) diff --git a/sys-devel/native-cctools/files/aix-2/ld b/sys-devel/native-cctools/files/aix-2/ld new file mode 100644 index 000000000000..f71edea7f590 --- /dev/null +++ b/sys-devel/native-cctools/files/aix-2/ld @@ -0,0 +1,139 @@ +#! /usr/bin/env /bin/ksh +# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/files/aix-2/ld,v 1.1 2013/11/08 14:19:30 haubi Exp $ + +# Upon '-soname' and similar flags, create a "shared library" on AIX being an +# archive file containing an Import File and the shared object file, as in: +# http://lists.gnu.org/archive/html/libtool/2011-01/msg00023.html +# with updates in: +# http://lists.gnu.org/archive/html/libtool/2011-02/msg00000.html +# +# This helper script is meant not depend on anything Gentoo specific. + +ld=/usr/ccs/bin/ld +ar=/usr/ccs/bin/ar +strip=/usr/ccs/bin/strip +dump=/usr/sbin/dump +awk=/usr/bin/awk +rm=/usr/bin/rm +mkdir=/usr/bin/mkdir +mv=/usr/bin/mv +ln=/usr/bin/ln + +oldargs= +output= +soname= +newargs= +OBJECT_MODE=${OBJECT_MODE:-32} + +while [[ $# -gt 0 ]] +do + arg=$1 + shift + oldargs="${oldargs} '${arg}'" + case ${arg} in + -o) + newargs="${newargs} -o '$1'" + output=$1 + oldargs="${oldargs} '$1'" + shift + ;; + -bM:SRE) + newargs="${newargs} '-G' '-bernotok'" + ;; + -soname=*) + soname=${arg#-soname=} + ;; + -h*) + soname=${arg#-h} + ;; + -soname|-h) + soname=$1 + shift + ;; + -b32) + newargs="${newargs} '${arg}'" + OBJECT_MODE=32 + ;; + -b64) + newargs="${newargs} '${arg}'" + OBJECT_MODE=64 + ;; + *) + newargs="${newargs} '${arg}'" + ;; + esac +done + +if [[ -z ${output} || -z ${soname} ]]; then + eval "exec ${ld} ${oldargs}" + exit 1 +fi + +# Running ld against the orginal target file to retain +# ld error message when there's a problem with it: +eval "${ld} -o '${output}' ${newargs}" || exit 1 + +workdir="${output}.$$" + +${rm} -rf "${workdir}" || exit 1 +trap "${rm} -rf '${workdir}'" 0 + +case ${soname} in +*\(*\)) + shro=${soname#*\(} + shro=${shro%\)} + shri=${shro%.*}.imp + ;; +*\[*\]) + shro=${soname#*\[} + shro=${shro%\]} + shri=${shro%.*}.imp + ;; +none) # loadable only module, not linkable: no import file + shro='shr.o' + soname="${output##*/}(${shro})" + shri= + ;; +auto) + shro='shr.o' + soname=${output##*/} + if [[ ${soname} == lib*.so* ]]; then + # linkable library: need import file + shri=${shro%.*}.imp + else + # loadable only module, not linkable: no import file + shri= + fi + soname="${soname}(${shro})" + ;; +*) + shro='shr.o' + shri=${shro%.*}.imp + soname="${soname}(${shro})" + ;; +esac + +export OBJECT_MODE + +${mkdir} "${workdir}" || exit 1 +${strip} -e "${output}" || exit 1 +if [[ -n ${shri} ]]; then + ${dump} -Tv "${output}" > "${workdir}"/syms || exit 1 + ${awk} ' + BEGIN { + print "#! '"${soname}"'" + print "# '"${OBJECT_MODE}"'" + } + { + if ($4 == "EXP" || $4 == "ImpExp") { + print $8 + } else + if ($4 == "wEXP") { + print $8" weak" + } + }' <"${workdir}"/syms > "${workdir}"/${shri} || exit 1 +fi +${mv} "${output}" "${workdir}/${shro}" || exit 1 +${ar} rc "${output}" ${shri:+"${workdir}/${shri}"} "${workdir}/${shro}" || exit 1 +exit 0 diff --git a/sys-devel/native-cctools/files/aix-2/mkexpfile b/sys-devel/native-cctools/files/aix-2/mkexpfile new file mode 100644 index 000000000000..4e79e4647b06 --- /dev/null +++ b/sys-devel/native-cctools/files/aix-2/mkexpfile @@ -0,0 +1,70 @@ +#! /bin/sh + +nm="${0%mkexpfile}nm" +showwith= +expfile="ld.aix.exports.$$" +srcobjs= + +# /bin/sort does not allow TMPDIR to be longer than 85 characters +test ${#TMPDIR} -le 85 || TMPDIR=/tmp export TMPDIR + +while test $# -gt 0 +do + arg=$1 + shift + + case ${arg} in + --) for arg in "$@" + do + srcobjs="${srcobjs} '${arg}'" + done + break + ;; + --show-with=*) showwith="${arg#--show-with=}" ;; + -o) expfile="${1}"; shift ;; + -o*) expfile="${arg#-o}"; ;; + *) srcobjs="${srcobjs} '${arg}'" ;; + esac +done + +/bin/rm -f "${expfile}" || exit 1 + +if ! type "${nm}" >/dev/null 2>&1 +then + case ${nm} in + *-nm) nm=${nm##*/} ;; # use "powerpc-ibm-aix7.1.0.0-nm" from PATH + */nm|nm) nm=/usr/ccs/bin/nm ;; # native anyway + esac + type "${nm}" >/dev/null || exit 1 # let 'type' yell when necessary +fi + +if "${nm}" -V 2>&1 | /bin/grep 'GNU' >/dev/null +then + eval "${nm}" -Bpg ${srcobjs} | + /bin/awk '{ + if ((($2 == "T") || ($2 == "D") || ($2 == "B") || ($2 == "W")) && (substr($3,1,1) != ".")) { + if ($2 == "W") { + print $3 " weak" + } else { + print $3 + } + } + }' | + /bin/sort -u > "${expfile}" || exit 1 +else + eval "${nm}" -PCpgl ${srcobjs} | + /bin/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 + } + } + }' | + /bin/sort -u > "${expfile}" || exit 1 +fi + +echo "${showwith}${expfile}" + +exit 0 diff --git a/sys-devel/native-cctools/files/aix-2/nm b/sys-devel/native-cctools/files/aix-2/nm new file mode 100644 index 000000000000..5ba1d650d23a --- /dev/null +++ b/sys-devel/native-cctools/files/aix-2/nm @@ -0,0 +1,6 @@ +#! /bin/sh + +# /usr/bin/sort (used by nm) cannot work with TMPDIR longer than 85 characters. +test ${#TMPDIR} -le 85 || TMPDIR=/tmp export TMPDIR + +exec /usr/ccs/bin/nm ${1+"$@"} diff --git a/sys-devel/native-cctools/files/aix-mkexpfile-1 b/sys-devel/native-cctools/files/aix-mkexpfile-1 deleted file mode 100644 index 7b36f3bc1f7a..000000000000 --- a/sys-devel/native-cctools/files/aix-mkexpfile-1 +++ /dev/null @@ -1,56 +0,0 @@ -#! /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 diff --git a/sys-devel/native-cctools/native-cctools-3.ebuild b/sys-devel/native-cctools/native-cctools-4.ebuild index 0cb79b0c8e91..b950955536b8 100644 --- a/sys-devel/native-cctools/native-cctools-3.ebuild +++ b/sys-devel/native-cctools/native-cctools-4.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/native-cctools-3.ebuild,v 1.1 2013/11/05 15:03:13 haubi Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/native-cctools-4.ebuild,v 1.1 2013/11/08 14:19:30 haubi Exp $ EAPI="3" @@ -13,8 +13,7 @@ SRC_URI="" LICENSE="GPL-2" # actually, we don't know, the wrapper is SLOT="0" -AIX_LD_V=2 -AIX_MKEXPFILE_V=1 +AIX_V='aix-2' KEYWORDS="~ppc-aix ~x86-interix ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris ~x86-solaris" @@ -39,8 +38,9 @@ src_install() { ;; *-aix*) nativepath=/usr/ccs/bin - wrappers=("${wrappers[@]}" "ld=${FILESDIR}/ld-aix-${AIX_LD_V}") - wrappers=("${wrappers[@]}" "mkexpfile=${FILESDIR}/aix-mkexpfile-${AIX_MKEXPFILE_V}") + wrappers=("${wrappers[@]}" "ld=${FILESDIR}/${AIX_V}/ld") + wrappers=("${wrappers[@]}" "nm=${FILESDIR}/${AIX_V}/nm") + wrappers=("${wrappers[@]}" "mkexpfile=${FILESDIR}/${AIX_V}/mkexpfile") ;; *-apple-darwin*|*-netbsd*|*-openbsd*) nativepath=/usr/bin @@ -92,6 +92,7 @@ src_install() { for wrapper in "${wrappers[@]}" ; do source=${wrapper#*=} target=${wrapper%%=*} + rm -f "${target}" newexe "${source}" "${target}" || die done # Generate an env.d entry for this binutils |