This commit is contained in:
Manuel 2011-10-08 18:35:19 +00:00
parent d2bf8a5b30
commit 26e2a25d44
19 changed files with 775 additions and 249 deletions

View File

@ -5,49 +5,55 @@
# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc
pkgname=binutils-multilib
_pkgname=binutils
pkgver=2.20.1
pkgrel=2
_date=20100908
pkgname=binutils-multilib
pkgver=2.21.1
pkgrel=1
_date=20110627
pkgdesc="A set of programs to assemble and manipulate binary and object files for multilib"
arch=('x86_64')
url="http://www.gnu.org/software/binutils/"
license=('GPL')
groups=('multilib-devel')
provides=("binutils=$pkgver-$pkgrel")
conflicts=('binutils')
depends=('glibc>=2.12-1' 'zlib')
makedepends=('gcc-multilib') # Make sure we compile this with gcc-multilib
depends=('glibc>=2.14' 'zlib')
makedepends=('dejagnu' 'gcc-multilib') # Make sure we compile this with gcc-multilib
options=('!libtool' '!distcc' '!ccache')
install=binutils.install
source=(http://chakra-project.org/sources/${_pkgname}/${_pkgname}-${pkgver}_${_date}.tar.bz2)
md5sums=('c653cd51d2c23129cb010ac8c9ce0582')
md5sums=('2face559e80d649ba148e42bb2d1fb0f')
build() {
cd ${srcdir}
mkdir build && cd build
mkdir binutils-build && cd binutils-build
CC="gcc -L`pwd`/bfd/.libs/"
if [ "${CARCH}" = "x86_64" ]; then
../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-64-bit-bfd
else
../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared
fi
# fix man files install path
sed -i -e "s:mandir \= \/usr\/share:mandir \= ${pkgdir}\/usr\/share:" ${srcdir}/build/Makefile || return 1
# fix info files install path
sed -i -e "s:infodir \= \/usr\/share:infodir \= ${pkgdir}\/usr\/share:" ${srcdir}/build/Makefile || return 1
${srcdir}/binutils/configure --prefix=/usr \
--enable-ld=default --enable-gold \
--enable-plugins --enable-threads \
--enable-shared \
--enable-64-bit-bfd --enable-multilib
# This checks the host environment and makes sure all the necessary tools are available to compile Binutils.
make configure-host || return 1
# check the host environment and makes sure all the necessary tools are available
make configure-host
make tooldir=${pkgdir}/usr || return 1
make tooldir=${pkgdir}/usr
}
check() {
cd ${srcdir}/binutils-build
# do not abort on errors - manually check log files
make -k -j1 check || true
}
package() {
cd ${srcdir}/build
cd ${srcdir}/binutils-build
make prefix=${pkgdir}/usr tooldir=${pkgdir}/usr install
install -m644 ${srcdir}/include/libiberty.h ${pkgdir}/usr/include
# Add some useful headers
install -m644 ${srcdir}/binutils/include/libiberty.h ${pkgdir}/usr/include
install -m644 ${srcdir}/binutils/include/demangle.h ${pkgdir}/usr/include
# Rebuild libiberty.a with -fPIC
make -C libiberty clean
@ -60,9 +66,10 @@ package() {
make CFLAGS="$CFLAGS -fPIC -fvisibility=hidden" -C bfd
install -m644 bfd/libbfd.a ${pkgdir}/usr/lib
# Remove Windows/Novell specific man pages
rm -f ${pkgdir}/usr/share/man/man1/{dlltool,nlmconv,windres,windmc}*
# Remove these symlinks, with binutils prereleases they are not ABI stable.
# Remove these symlinks, they are not ABI stable.
# Programs should compile static to the .a file.
rm -f ${pkgdir}/usr/lib/lib{bfd,opcodes}.so
echo "INPUT ( /usr/lib/libbfd.a -liberty -lz )" >${pkgdir}/usr/lib/libbfd.so

View File

@ -7,33 +7,28 @@
# NOTE: libtool requires rebuilt with each new gcc version
pkgbase='gcc-multilib'
pkgname=('gcc-multilib' 'gcc-libs-multilib' 'lib32-gcc-libs' 'gcc-fortran-multilib' 'gcc-objc-multilib' 'gcc-ada-multilib')
pkgver=4.5.2
pkgname=('gcc-multilib' 'gcc-libs-multilib' 'lib32-gcc-libs' 'gcc-fortran-multilib' 'gcc-objc-multilib' 'gcc-ada-multilib' 'gcc-go-multilib')
pkgver=4.6.1
pkgrel=1
#_snapshot=4.5-20100610
_libstdcppmanver=4.5.2 # Note: check source directory name when updating this
_snapshot=4.6-20110819
_libstdcppmanver=20110814 # Note: check source directory name when updating this
pkgdesc="The GNU Compiler Collection for multilib"
arch=('x86_64')
license=('GPL' 'LGPL' 'custom')
license=('GPL' 'LGPL' 'FDL' 'custom')
url="http://gcc.gnu.org"
makedepends=('binutils-multilib>=2.20.1' 'libmpc>=0.8.2-1' 'cloog-ppl>=0.15.9-2' 'elfutils' 'gcc-ada-multilib'
'glibc>=2.11.1-2' 'lib32-glibc>=2.12.1')
makedepends=('binutils-multilib>=2.21.1' 'libmpc' 'cloog' 'ppl' 'gcc-ada-multilib'
'lib32-glibc>=2.14')
checkdepends=('dejagnu')
options=('!libtool' '!emptydirs')
source=(http://gcc.fyxm.net/releases/gcc-${pkgver}/gcc-{core,g++,fortran,objc,ada,testsuite}-${pkgver}.tar.bz2
#ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-{core,g++,fortran,objc,ada,testsuite}-${_snapshot}.tar.bz2
ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/libstdc++-api-${_libstdcppmanver}.man.tar.bz2
source=(#ftp://gcc.gnu.org/pub/gcc/releases/gcc-${pkgver}/gcc-${pkgver}.tar.bz2
ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-${_snapshot}.tar.bz2
ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/libstdc++-api.${_libstdcppmanver}.man.tar.bz2
gcc_pure64.patch
gcc-hash-style-both.patch)
md5sums=('aa9e36bec080452372bfba793428ee82'
'9821f1c61e43755866861485ff364e90'
'8cc545fda70085c78076d79e0e23962a'
'3561c6585e9062105cc3591a8c39d7dc'
'ee24023972f337fbc22202d6d219a727'
'29ae615438aba0bd3384b94bac54c235'
'2776eab5ebb7f9cc62dd2199a3a24382'
md5sums=('b14d22730f9085eab7fd927039e68d28'
'ce920d2550ff7e042b9f091d27764d8f'
'22cec272f9cc2801d3cd348feaca888b'
'6fd395bacbd7b6e47c7b74854b478363')
'4df25b623799b148a0703eaeec8fdf3f')
if [ -n "${_snapshot}" ]; then
_basedir="${srcdir}/gcc-${_snapshot}"
@ -44,9 +39,6 @@ fi
build() {
cd ${_basedir}
# "Add" ppl-0.11 compatibility
sed -i "/ppl_minor_version=/s#10#11#" configure
# Do not install libiberty
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
@ -60,18 +52,26 @@ build() {
cd ${srcdir}
mkdir gcc-build && cd gcc-build
${_basedir}/configure --prefix=/usr \
--enable-languages=c,c++,fortran,objc,obj-c++,ada \
--enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-clocale=gnu --enable-gnu-unique-object \
--enable-lto --enable-plugin \
--enable-gold --with-plugin-ld=ld.gold \
--enable-multilib --disable-libstdcxx-pch \
--with-system-zlib --with-ppl \
--with-cloog --with-cloog-include=/usr/include/cloog-ppl \
--libdir=/usr/lib --libexecdir=/usr/lib \
--mandir=/usr/share/man --infodir=/usr/share/info
--mandir=/usr/share/man --infodir=/usr/share/info \
--with-bugurl=https://bugs.archlinux.org/ \
--enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ \
--enable-shared --enable-threads=posix \
--with-system-zlib --enable-__cxa_atexit \
--disable-libunwind-exceptions --enable-clocale=gnu \
--enable-gnu-unique-object --enable-linker-build-id \
--with-ppl --enable-cloog-backend=isl \
--enable-lto --enable-gold --enable-ld=default \
--enable-plugin --with-plugin-ld=ld.gold \
--enable-multilib --disable-libssp --disable-libstdcxx-pch \
--enable-checking=release
make
}
check() {
cd gcc-build
# increase stack size to prevent test failures
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31827
@ -85,24 +85,27 @@ build() {
package_gcc-libs-multilib()
{
pkgdesc="Runtime libraries shipped by GCC for multilib"
depends=('glibc>=2.11.1-2' "lib32-gcc-libs=$pkgver-$pkgrel")
depends=('glibc>=2.14' "lib32-gcc-libs=$pkgver-$pkgrel")
provides=("gcc-libs=$pkgver-$pkgrel")
conflicts=('gcc-libs')
install=gcc-libs.install
cd gcc-build
make -j1 -C $CHOST/libgcc DESTDIR=${pkgdir} install-shared
for lib in libmudflap libgomp libssp libstdc++-v3/src; do
for lib in libmudflap libgomp libstdc++-v3/src; do
make -j1 -C $CHOST/$lib DESTDIR=${pkgdir} install-toolexeclibLTLIBRARIES
done
make -j1 -C $CHOST/libstdc++-v3/po DESTDIR=${pkgdir} install
make -j1 -C $CHOST/libgomp DESTDIR=${pkgdir} install-info
make -j1 DESTDIR=${pkgdir} install-target-libquadmath
make -j1 DESTDIR=${pkgdir} install-target-libgfortran
make -j1 DESTDIR=${pkgdir} install-target-libobjc
# I thought I said to only install the lib...
rm -rf ${pkgdir}/usr/lib/gcc/
# remove unnecessary files installed by install-target-{libquadmath,libgfortran,libobjc}
rm -rf ${pkgdir}/usr/lib/{gcc/,libgfortran.spec}
# remove stuff in lib32-gcc-libs
rm -rf ${pkgdir}/usr/lib32
# remove static libraries
@ -116,20 +119,24 @@ package_gcc-libs-multilib()
package_lib32-gcc-libs()
{
pkgdesc="Runtime libraries shipped by GCC (32-bit)"
depends=('lib32-glibc>=2.12.1' "gcc-libs")
depends=('lib32-glibc>=2.14' "gcc-libs>=$pkgver")
cd gcc-build
make -j1 -C $CHOST/32/libgcc DESTDIR=${pkgdir} install-shared
for lib in libmudflap libgomp libssp libstdc++-v3/src; do
for lib in libmudflap libgomp libstdc++-v3/src; do
make -j1 -C $CHOST/32/$lib DESTDIR=${pkgdir} install-toolexeclibLTLIBRARIES
done
make -j1 DESTDIR=${pkgdir} install-target-libquadmath
make -j1 DESTDIR=${pkgdir} install-target-libgfortran
make -j1 DESTDIR=${pkgdir} install-target-libobjc
# I thought I said to only install the lib...
# remove unnecessary files installed by install-target-{libquadmath,libgfortran,libobjc}
rm ${pkgdir}/usr/lib32/libgfortran.spec
# remove stuff in gcc-libs-multilib
rm -rf ${pkgdir}/usr/lib
rm -rf ${pkgdir}/usr/share/info
# remove static libraries
find ${pkgdir} -name *.a -delete
@ -142,8 +149,7 @@ package_lib32-gcc-libs()
package_gcc-multilib()
{
pkgdesc="The GNU Compiler Collection - C and C++ frontends for multilib"
depends=('binutils-multilib>=2.20' 'libmpc>=0.8.1-2' 'cloog-ppl>=0.15.9-2' 'elfutils' \
"gcc-libs-multilib=$pkgver-$pkgrel")
depends=("gcc-libs-multilib=$pkgver-$pkgrel" 'binutils-multilib>=2.21.1' 'libmpc' 'cloog' 'ppl')
groups=('multilib-devel')
provides=("gcc=$pkgver-$pkgrel")
conflicts=('gcc')
@ -151,15 +157,20 @@ package_gcc-multilib()
cd gcc-build
# much, much easier to install the lot and clean-up the mess
# unfortunately it is much, much easier to install the lot and clean-up the mess...
make -j1 DESTDIR=${pkgdir} install
rm $pkgdir/usr/bin/{*gfortran,gnat*}
rm $pkgdir/usr/lib/gcc/$CHOST/${pkgver}/{{,32/}ada{include,lib},finclude,include/objc}/*
rm $pkgdir/usr/lib/gcc/$CHOST/${pkgver}/{cc1obj{,plus},f951,gnat1,{,32/}libgfortranbegin.a}
rm $pkgdir/usr/lib{,32}/{*.so*,lib{gfortran,objc}.a}
rm $pkgdir/usr/share/info/{gfortran,gnat*,libgomp}.info
rm $pkgdir/usr/bin/{{$CHOST-,}gfortran,{$CHOST-,}gccgo,gnat*}
rm $pkgdir/usr/lib{,32}/*.so*
rm $pkgdir/usr/lib{,32}/lib{ffi,gfortran,go{,begin},objc,quadmath}.a
rm $pkgdir/usr/lib{,32}/libgfortran.spec
rm -r $pkgdir/usr/lib/gcc/$CHOST/${pkgver}/{{,32/}ada{include,lib},finclude,include/objc}
rm $pkgdir/usr/lib/gcc/$CHOST/${pkgver}/include/{ffi{,target}.h,quadmath{,_weak}.h}
rm $pkgdir/usr/lib/gcc/$CHOST/${pkgver}/{cc1obj{,plus},f951,gnat1,go1,{,32/}libgfortranbegin.a}
rm -r $pkgdir/usr/lib{,32}/go
rm $pkgdir/usr/share/info/{gccgo,gfortran,gnat*,libgomp,libquadmath}.info
rm $pkgdir/usr/share/locale/{de,fr}/LC_MESSAGES/libstdc++.mo
rm $pkgdir/usr/share/man/man1/gfortran.1
rm $pkgdir/usr/share/man/man1/{gccgo,gfortran}.1
rm $pkgdir/usr/share/man/man3/ffi*
# many packages require these symlinks
install -dm755 ${pkgdir}/lib
@ -167,6 +178,10 @@ package_gcc-multilib()
ln -sf gcc ${pkgdir}/usr/bin/cc
ln -sf g++ ${pkgdir}/usr/bin/c++
# install gengtype for plugin support
install -m755 gcc/build/gengtype $pkgdir/usr/lib/gcc/$CHOST/${pkgver}/
install -m644 gcc/gtype.state $pkgdir/usr/lib/gcc/$CHOST/${pkgver}/
# POSIX conformance launcher scripts for c89 and c99
cat > $pkgdir/usr/bin/c89 <<"EOF"
#!/bin/sh
@ -198,8 +213,7 @@ EOF
# install the libstdc++ man pages
install -dm755 ${pkgdir}/usr/share/man/man3
install -m644 ${srcdir}/libstdc++-api-${_libstdcppmanver}.man/man3/* \
${pkgdir}/usr/share/man/man3/
install -m644 ${srcdir}/man/man3/* ${pkgdir}/usr/share/man/man3/
# Install Runtime Library Exception
install -Dm644 ${_basedir}/COPYING.RUNTIME \
@ -215,13 +229,15 @@ package_gcc-fortran-multilib()
install=gcc-fortran.install
cd gcc-build
make -j1 DESTDIR=${pkgdir} install-target-libquadmath
make -j1 DESTDIR=$pkgdir install-target-libgfortran
make -j1 -C $CHOST/libgomp DESTDIR=$pkgdir install-nodist_fincludeHEADERS
make -j1 -C gcc DESTDIR=$pkgdir fortran.install-{common,man,info}
install -Dm755 gcc/f951 $pkgdir/usr/lib/gcc/$CHOST/$pkgver/f951
# remove libraries included in gcc-libs
rm -f ${pkgdir}/usr/lib{,32}/libgfortran.so*
rm ${pkgdir}/usr/lib{,32}/lib{gfortran,quadmath}.so*
rm ${pkgdir}/usr/share/info/libquadmath.info
# Install Runtime Library Exception
install -Dm644 ${_basedir}/COPYING.RUNTIME \
@ -241,7 +257,7 @@ package_gcc-objc-multilib()
install -m755 gcc/cc1obj{,plus} $pkgdir/usr/lib/gcc/$CHOST/$pkgver/
# remove libraries included in gcc-libs
rm -f ${pkgdir}/usr/lib{,32}/libobjc.so*
rm ${pkgdir}/usr/lib{,32}/libobjc.so*
# Install Runtime Library Exception
install -Dm644 ${_basedir}/COPYING.RUNTIME \
@ -256,12 +272,33 @@ package_gcc-ada-multilib()
conflicts=('gcc-ada')
install=gcc-ada.install
cd gcc-build
make -j1 -C gcc DESTDIR=$pkgdir ada.install-{common,info}
install -m755 gcc/gnat1 $pkgdir/usr/lib/gcc/$CHOST/$pkgver
make -j1 -C $CHOST/32/libada DESTDIR=${pkgdir} install-gnatlib
cd gcc-build/gcc
make -j1 DESTDIR=$pkgdir ada.install-{common,info}
install -m755 gnat1 $pkgdir/usr/lib/gcc/$CHOST/$pkgver
cd ../$CHOST/32/libada
make -j1 DESTDIR=${pkgdir} INSTALL="install" \
INSTALL_DATA="install -m644" install-gnatlib
# Install Runtime Library Exception
install -Dm644 ${_basedir}/COPYING.RUNTIME \
${pkgdir}/usr/share/licenses/gcc-ada-multilib/RUNTIME.LIBRARY.EXCEPTION
}
package_gcc-go-multilib()
{
pkgdesc="Go front-end for GCC for multilib"
depends=("gcc-multilib=$pkgver-$pkgrel")
provides=("gcc-go=$pkgver-$pkgrel")
conflicts=('gcc-go')
install=gcc-go.install
cd gcc-build
make -j1 DESTDIR=$pkgdir install-target-libgo
make -j1 -C gcc DESTDIR=$pkgdir go.install-{common,man,info}
install -Dm755 gcc/go1 $pkgdir/usr/lib/gcc/$CHOST/$pkgver/go1
# Install Runtime Library Exception
install -Dm644 ${_basedir}/COPYING.RUNTIME \
${pkgdir}/usr/share/licenses/gcc-go/RUNTIME.LIBRARY.EXCEPTION
}

View File

@ -1,4 +1,4 @@
infodir=/usr/share/info
infodir=usr/share/info
filelist=(gnat-style.info gnat_rm.info gnat_ugn.info)
post_install() {
@ -18,5 +18,3 @@ pre_remove() {
install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
done
}
# vim:set ts=2 sw=2 et:

View File

@ -1,4 +1,4 @@
infodir=/usr/share/info
infodir=usr/share/info
file="gfortran.info"
post_install() {
@ -14,5 +14,3 @@ pre_remove() {
[ -x usr/bin/install-info ] || return 0
install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
}
# vim:set ts=2 sw=2 et:

View File

@ -0,0 +1,20 @@
infodir=usr/share/info
filelist=(gccgo.info)
post_install() {
[ -x usr/bin/install-info ] || return 0
for file in ${filelist[@]}; do
install-info $infodir/$file.gz $infodir/dir 2> /dev/null
done
}
post_upgrade() {
post_install $1
}
pre_remove() {
[ -x usr/bin/install-info ] || return 0
for file in ${filelist[@]}; do
install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
done
}

View File

@ -1,47 +1,6 @@
#! /bin/sh -e
# DP: Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64, s390, sparc)
dir=
if [ $# -eq 3 -a "$2" = '-d' ]; then
pdir="-d $3"
dir="$3/"
elif [ $# -ne 1 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch)
patch $pdir -f --no-backup-if-mismatch -p0 < $0
#cd ${dir}gcc && autoconf
;;
-unpatch)
patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
#rm ${dir}gcc/configure
;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
2006-07-11 Jakub Jelinek <jakub@redhat.com>
* config/i386/linux.h (LINK_SPEC): Add --hash-style=both.
* config/i386/linux64.h (LINK_SPEC): Likewise.
* config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
* config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
LINK_OS_LINUX_SPEC64): Likewise.
* config/s390/linux.h (LINK_SPEC): Likewise.
* config/ia64/linux.h (LINK_SPEC): Likewise.
* config/sparc/linux.h (LINK_SPEC): Likewise.
* config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
LINK_ARCH64_SPEC): Likewise.
* config/alpha/linux-elf.h (LINK_SPEC): Likewise.
--- gcc/config/alpha/linux-elf.h.orig 2007-08-04 08:55:58.000000000 +0200
+++ gcc/config/alpha/linux-elf.h 2007-09-01 15:47:26.605865578 +0200
@@ -39,7 +39,7 @@
--- gcc/config/alpha/linux-elf.h.orig 2010-12-09 23:27:07.000000000 +1000
+++ gcc/config/alpha/linux-elf.h 2011-03-11 10:01:47.770000457 +1000
@@ -41,7 +41,7 @@
#define ELF_DYNAMIC_LINKER LINUX_DYNAMIC_LINKER
@ -50,8 +9,68 @@ exit 0
%{O*:-O3} %{!O*:-O1} \
%{shared:-shared} \
%{!shared: \
--- gcc/config/s390/linux.h.orig 2007-08-04 08:55:59.000000000 +0200
+++ gcc/config/s390/linux.h 2007-09-01 15:47:26.605865578 +0200
--- gcc/config/i386/linux64.h.orig 2011-03-03 08:35:36.000000000 +1000
+++ gcc/config/i386/linux64.h 2011-03-11 10:01:47.770000457 +1000
@@ -78,7 +78,7 @@
%{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}"
#undef LINK_SPEC
-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
+#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
%{shared:-shared} \
%{!shared: \
%{!static: \
--- gcc/config/i386/linux.h.orig 2011-01-15 04:45:06.000000000 +1000
+++ gcc/config/i386/linux.h 2011-03-11 10:01:47.770000457 +1000
@@ -104,7 +104,7 @@
{ "dynamic_linker", LINUX_DYNAMIC_LINKER }
#undef LINK_SPEC
-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
+#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
%{!shared: \
%{!static: \
%{rdynamic:-export-dynamic} \
--- gcc/config/ia64/linux.h.orig 2010-12-09 23:27:07.000000000 +1000
+++ gcc/config/ia64/linux.h 2011-03-11 10:01:47.770000457 +1000
@@ -64,7 +64,7 @@
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
#undef LINK_SPEC
-#define LINK_SPEC "\
+#define LINK_SPEC "--hash-style=both \
%{shared:-shared} \
%{!shared: \
%{!static: \
--- gcc/config/rs6000/linux64.h.orig 2011-02-11 03:30:10.000000000 +1000
+++ gcc/config/rs6000/linux64.h 2011-03-11 10:03:34.280000457 +1000
@@ -389,11 +389,11 @@
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}"
-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}"
--- gcc/config/rs6000/sysv4.h.orig 2011-01-28 04:36:03.000000000 +1000
+++ gcc/config/rs6000/sysv4.h 2011-03-11 10:01:47.773333792 +1000
@@ -830,7 +830,7 @@
#define LINUX_DYNAMIC_LINKER \
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
-dynamic-linker " LINUX_DYNAMIC_LINKER "}}"
--- gcc/config/s390/linux.h.orig 2010-12-09 23:27:07.000000000 +1000
+++ gcc/config/s390/linux.h 2011-03-11 10:01:47.770000457 +1000
@@ -77,7 +77,7 @@
#undef LINK_SPEC
@ -61,103 +80,43 @@ exit 0
%{shared:-shared} \
%{!shared: \
%{static:-static} \
--- gcc/config/sparc/linux.h.orig 2007-08-04 08:56:01.000000000 +0200
+++ gcc/config/sparc/linux.h 2007-09-01 15:47:26.605865578 +0200
@@ -132,7 +132,7 @@
#undef LINK_SPEC
-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
%{!mno-relax:%{!r:-relax}} \
%{!shared: \
%{!ibcs: \
--- gcc/config/sparc/linux64.h.orig 2007-08-04 08:56:01.000000000 +0200
+++ gcc/config/sparc/linux64.h 2007-09-01 15:47:26.605865578 +0200
@@ -166,7 +166,7 @@
--- gcc/config/sparc/linux64.h.orig 2011-02-17 23:57:21.000000000 +1000
+++ gcc/config/sparc/linux64.h 2011-03-11 10:01:47.770000457 +1000
@@ -113,7 +113,7 @@
{ "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
{ "link_arch", LINK_ARCH_SPEC },
-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,%R/usr/lib %{shared:-shared} \
+#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=both -Y P,%R/usr/lib %{shared:-shared} \
%{!shared: \
%{!ibcs: \
%{!static: \
@@ -175,7 +175,7 @@
%{static:-static}}} \
%{rdynamic:-export-dynamic} \
@@ -121,7 +121,7 @@
%{static:-static}} \
"
-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
+#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \
%{!shared: \
%{!ibcs: \
%{!static: \
@@ -256,7 +256,7 @@
%{rdynamic:-export-dynamic} \
@@ -193,7 +193,7 @@
#else /* !SPARC_BI_ARCH */
#undef LINK_SPEC
-#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
+#define LINK_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \
%{!shared: \
%{!ibcs: \
%{!static: \
--- gcc/config/i386/linux.h.orig 2007-08-04 08:56:07.000000000 +0200
+++ gcc/config/i386/linux.h 2007-09-01 15:47:26.605865578 +0200
@@ -108,7 +108,7 @@
{ "dynamic_linker", LINUX_DYNAMIC_LINKER }
%{rdynamic:-export-dynamic} \
--- gcc/config/sparc/linux.h.orig 2011-01-27 06:30:12.000000000 +1000
+++ gcc/config/sparc/linux.h 2011-03-11 10:01:47.770000457 +1000
@@ -74,7 +74,7 @@
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
#undef LINK_SPEC
-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
+#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
%{!shared: \
%{!ibcs: \
%{!static: \
--- gcc/config/i386/linux64.h.orig 2007-08-04 08:56:07.000000000 +0200
+++ gcc/config/i386/linux64.h 2007-09-01 15:48:27.336781690 +0200
@@ -65,7 +65,7 @@
#endif
#undef LINK_SPEC
-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
+#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
%{shared:-shared} \
-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
%{!mno-relax:%{!r:-relax}} \
%{!shared: \
%{!static: \
--- gcc/config/ia64/linux.h.orig 2006-12-12 18:59:53.000000000 +0100
+++ gcc/config/ia64/linux.h 2007-09-01 15:47:26.605865578 +0200
@@ -40,7 +40,7 @@
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
#undef LINK_SPEC
-#define LINK_SPEC "\
+#define LINK_SPEC "--hash-style=both \
%{shared:-shared} \
%{!shared: \
%{!static: \
--- gcc/config/rs6000/sysv4.h.orig 2007-08-08 23:37:49.000000000 +0200
+++ gcc/config/rs6000/sysv4.h 2007-09-01 15:47:26.615865729 +0200
@@ -901,7 +901,7 @@
#define LINUX_DYNAMIC_LINKER \
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
--- gcc/config/rs6000/linux64.h.orig 2007-08-04 08:56:12.000000000 +0200
+++ gcc/config/rs6000/linux64.h 2007-09-01 15:47:26.615865729 +0200
@@ -354,11 +354,11 @@
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}}"
-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"

View File

@ -1,14 +1,16 @@
infodir=/usr/share/info
file="libgomp.info"
infodir=usr/share/info
filelist=(libgomp.info libquadmath.info)
post_upgrade() {
[ -x usr/bin/install-info ] || return 0
for file in ${filelist[@]}; do
install-info $infodir/$file.gz $infodir/dir 2> /dev/null
done
}
pre_remove() {
[ -x usr/bin/install-info ] || return 0
for file in ${filelist[@]}; do
install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
done
}
# vim:set ts=2 sw=2 et:

View File

@ -1,4 +1,4 @@
infodir=/usr/share/info
infodir=usr/share/info
filelist=(cpp.info cppinternals.info gcc.info gccinstall.info gccint.info)
post_install() {
@ -18,5 +18,3 @@ pre_remove() {
install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
done
}
# vim:set ts=2 sw=2 et:

View File

@ -8,29 +8,42 @@
_pkgbasename=glibc
pkgname=lib32-$_pkgbasename
pkgver=2.12.1
pkgrel=2
_glibcdate=20101025
pkgver=2.14
pkgrel=1
_glibcdate=20110908
pkgdesc="GNU C Library for multilib"
arch=('x86_64')
url="http://www.gnu.org/software/libc"
license=('GPL' 'LGPL')
depends=("glibc>=$pkgver")
makedepends=('gcc-multilib>=4.4')
#makedepends=('gcc-multilib>=4.6')
makedepends=('gcc-multilib')
options=('!strip' '!emptydirs')
source=(http://mirrors.kernel.org/archlinux/other/glibc/${_pkgbasename}-${pkgver}_${_glibcdate}.tar.xz
source=(http://chakra-project.org/sources/${pkgbasename}/${pkgbasename}-${pkgver}_${_glibcdate}.tar.xz
glibc-2.10-dont-build-timezone.patch
glibc-2.10-bz4781.patch
glibc-__i686.patch
glibc-2.12.1-static-shared-getpagesize.patch
#glibc-2.12.2-ignore-origin-of-privileged-program.patch
glibc-2.12.2-ignore-origin-of-privileged-program.patch
glibc-2.13-futex.patch
glibc-2.13-dlclose-search-reset.patch
glibc-2.14-libdl-crash.patch
glibc-2.14-avoid-assertion-on-empty-dns-answer.patch
glibc-2.14-reexport-rpc-interface.patch
glibc-2.14-reinstall-nis-rpc-headers.patch
lib32-glibc.conf)
md5sums=('b12192eff7306f2a6e919641b847e7cf'
md5sums=('069069eb9100cc7affd7ad884cb3c3e9'
'4dadb9203b69a3210d53514bb46f41c3'
'0c5540efc51c0b93996c51b57a8540ae'
'40cd342e21f71f5e49e32622b25acc52'
'597057bfd593d434ed1929596868f11d'
#'b042647ea7d6f22ad319e12e796bd13e'
'a3ac6f318d680347bb6e2805d42b73b2'
'b042647ea7d6f22ad319e12e796bd13e'
'7d0154b7e17ea218c9fa953599d24cc4'
'22d09c58718fb3d1d31c3a6c14ca6886'
'cea62cc6b903d222c5f26e05a3c0e0e6'
'13728807283f111e5d9d38cf38e0a461'
'c5de2a946215d647c8af5432ec4b0da0'
'55febbb72139ac7b65757df085024b83'
'6e052f1cb693d5d3203f50f9d4e8c33b')
build() {
@ -52,18 +65,43 @@ build() {
# http://www.exploit-db.com/exploits/15274/
# http://sourceware.org/git/?p=glibc.git;a=patch;h=d14e6b09 (only fedora branch...)
#patch -Np1 -i ${srcdir}/glibc-2.12.2-ignore-origin-of-privileged-program.patch
patch -Np1 -i ${srcdir}/glibc-2.12.2-ignore-origin-of-privileged-program.patch
# http://sourceware.org/bugzilla/show_bug.cgi?id=12403
patch -Np1 -i ${srcdir}/glibc-2.13-futex.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=593675
# http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=2f811bf8 (only fedora branch...)
patch -Np1 -i ${srcdir}/glibc-2.13-dlclose-search-reset.patch
# http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=675155e9 (only fedora branch...)
# http://sourceware.org/ml/libc-alpha/2011-06/msg00006.html
patch -Np1 -i ${srcdir}/glibc-2.14-libdl-crash.patch
# http://sourceware.org/bugzilla/show_bug.cgi?id=13013
# http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=032c0ee3 (only fedora branch...)
patch -Np1 -i ${srcdir}/glibc-2.14-avoid-assertion-on-empty-dns-answer.patch
# re-export RPC interface until libtirpc is ready as a replacement
# http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=acee4873 (only fedora branch...)
patch -Np1 -i ${srcdir}/glibc-2.14-reexport-rpc-interface.patch
# http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=bdd816a3 (only fedora branch...)
patch -Np1 -i ${srcdir}/glibc-2.14-reinstall-nis-rpc-headers.patch
cd ${srcdir}
mkdir glibc-build
cd glibc-build
export CC="gcc -m32"
# Hack to fix NPTL issues with Xen, only required on 32bit platforms
export CFLAGS="${CFLAGS} -mno-tls-direct-seg-refs"
echo "slibdir=/usr/lib32" >> configparms
export CC="gcc -m32"
# remove hardening options from CFLAGS for building libraries
CFLAGS=${CFLAGS/-fstack-protector/}
CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
${srcdir}/glibc/configure --prefix=/usr \
--libdir=/usr/lib32 --libexecdir=/usr/lib32 \
@ -75,8 +113,23 @@ build() {
--without-cvs --disable-profile \
--disable-multi-arch i686-unknown-linux-gnu
# build libraries with hardening disabled
echo "build-programs=no" >> configparms
make
# re-enable hardening for programs
sed -i "s#=no#=yes#" configparms
echo "CC += -fstack-protector -D_FORTIFY_SOURCE=2" >> configparms
echo "CXX += -fstack-protector -D_FORTIFY_SOURCE=2" >> configparms
make
# remove harding in preparation to run test-suite
sed -i '2,4d' configparms
}
check() {
cd ${srcdir}/glibc-build
# some errors are expected - manually check log files
make -k check || true
}
@ -104,7 +157,7 @@ package() {
usr/lib32/libnss_{compat,dns,files,hesiod,nis,nisplus}-${pkgver}.so \
usr/lib32/{libdl,libm,libnsl,libresolv,librt,libutil}-${pkgver}.so \
usr/lib32/{libmemusage,libpcprofile,libSegFault}.so \
usr/lib32/{pt_chown,gconv/*.so}
usr/lib32/{pt_chown,{audit,gconv}/*.so}
# Dynamic linker
install -d -m755 ${pkgdir}/lib

View File

@ -0,0 +1,26 @@
From d14e6b09d60d52cc12f0396c3106b14e1bd0fe8f Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@redhat.com>
Date: Thu, 9 Dec 2010 15:00:59 +0100
Subject: [PATCH 1/1] Ignore origin of privileged program
---
ChangeLog | 5 +++++
elf/dl-object.c | 3 +++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/elf/dl-object.c b/elf/dl-object.c
index 22a1635..7674d49 100644
--- a/elf/dl-object.c
+++ b/elf/dl-object.c
@@ -214,6 +214,9 @@ _dl_new_object (char *realname, const char *libname, int type,
out:
new->l_origin = origin;
}
+ else if (INTUSE(__libc_enable_secure) && type == lt_executable)
+ /* The origin of a privileged program cannot be trusted. */
+ new->l_origin = (char *) -1;
return new;
}
--
1.7.2

View File

@ -0,0 +1,196 @@
From 2f811bf88bed4a6c0dec8778847ba441736d509d Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@redhat.com>
Date: Wed, 26 May 2010 18:28:59 +0200
Subject: [PATCH] Fix scope handling during dl_close
---
ChangeLog | 12 ++++++++++++
elf/Makefile | 10 +++++++++-
elf/dl-close.c | 7 +++++++
elf/unload8.c | 33 +++++++++++++++++++++++++++++++++
elf/unload8mod1.c | 7 +++++++
elf/unload8mod1x.c | 1 +
elf/unload8mod2.c | 7 +++++++
elf/unload8mod3.c | 27 +++++++++++++++++++++++++++
8 files changed, 103 insertions(+), 1 deletions(-)
create mode 100644 elf/unload8.c
create mode 100644 elf/unload8mod1.c
create mode 100644 elf/unload8mod1x.c
create mode 100644 elf/unload8mod2.c
create mode 100644 elf/unload8mod3.c
diff --git a/elf/Makefile b/elf/Makefile
index 59e835f..65b6deb 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -89,6 +89,7 @@ distribute := rtld-Rules \
unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \
unload6mod1.c unload6mod2.c unload6mod3.c \
unload7mod1.c unload7mod2.c \
+ unload8mod1.c unload8mod1x.c unload8mod2.c unload8mod3.c \
tst-audit1.c tst-audit2.c tst-audit3.c tst-audit4.c \
tst-auditmod1.c tst-auditmod3a.c tst-auditmod3b.c \
tst-auditmod4a.c tst-auditmod4b.c \
@@ -196,7 +197,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \
tst-dlmodcount tst-dlopenrpath tst-deep1 \
tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \
- unload3 unload4 unload5 unload6 unload7 tst-global1 order2 \
+ unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
tst-audit1 tst-audit2 \
tst-stackguard1 tst-addr1 tst-thrlock \
tst-unique1 tst-unique2
@@ -247,6 +248,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
unload4mod1 unload4mod2 unload4mod3 unload4mod4 \
unload6mod1 unload6mod2 unload6mod3 \
unload7mod1 unload7mod2 \
+ unload8mod1 unload8mod1x unload8mod2 unload8mod3 \
order2mod1 order2mod2 order2mod3 order2mod4 \
tst-unique1mod1 tst-unique1mod2 \
tst-unique2mod1 tst-unique2mod2
@@ -522,6 +524,9 @@ $(objpfx)unload6mod2.so: $(libdl)
$(objpfx)unload6mod3.so: $(libdl)
$(objpfx)unload7mod1.so: $(libdl)
$(objpfx)unload7mod2.so: $(objpfx)unload7mod1.so
+$(objpfx)unload8mod1.so: $(objpfx)unload8mod2.so
+$(objpfx)unload8mod2.so: $(objpfx)unload8mod3.so
+$(objpfx)unload8mod3.so: $(libdl)
$(objpfx)tst-initordera2.so: $(objpfx)tst-initordera1.so
$(objpfx)tst-initorderb2.so: $(objpfx)tst-initorderb1.so $(objpfx)tst-initordera2.so
$(objpfx)tst-initordera3.so: $(objpfx)tst-initorderb2.so $(objpfx)tst-initorderb1.so
@@ -823,6 +828,9 @@ $(objpfx)unload7: $(libdl)
$(objpfx)unload7.out: $(objpfx)unload7mod1.so $(objpfx)unload7mod2.so
unload7-ENV = MALLOC_PERTURB_=85
+$(objpfx)unload8: $(libdl)
+$(objpfx)unload8.out: $(objpfx)unload8mod1.so $(objpfx)unload8mod1x.so
+
ifdef libdl
$(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a
$(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so
diff --git a/elf/dl-close.c b/elf/dl-close.c
index 700e765..f47d5f8 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -421,6 +421,13 @@ _dl_close_worker (struct link_map *map)
imap->l_scope_max = new_size;
}
+ else if (new_list != NULL)
+ {
+ /* We didn't change the scope array, so reset the search
+ list. */
+ imap->l_searchlist.r_list = NULL;
+ imap->l_searchlist.r_nlist = 0;
+ }
/* The loader is gone, so mark the object as not having one.
Note: l_idx != IDX_STILL_USED -> object will be removed. */
diff --git a/elf/unload8.c b/elf/unload8.c
new file mode 100644
index 0000000..f984a38
--- /dev/null
+++ b/elf/unload8.c
@@ -0,0 +1,33 @@
+#include <dlfcn.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ void *h = dlopen ("$ORIGIN/unload8mod1.so", RTLD_LAZY);
+ if (h == NULL)
+ {
+ puts ("dlopen unload8mod1.so failed");
+ return 1;
+ }
+
+ void *h2 = dlopen ("$ORIGIN/unload8mod1x.so", RTLD_LAZY);
+ if (h2 == NULL)
+ {
+ puts ("dlopen unload8mod1x.so failed");
+ return 1;
+ }
+ dlclose (h2);
+
+ int (*mod1) (void) = dlsym (h, "mod1");
+ if (mod1 == NULL)
+ {
+ puts ("dlsym failed");
+ return 1;
+ }
+
+ mod1 ();
+ dlclose (h);
+
+ return 0;
+}
diff --git a/elf/unload8mod1.c b/elf/unload8mod1.c
new file mode 100644
index 0000000..fe7e81c
--- /dev/null
+++ b/elf/unload8mod1.c
@@ -0,0 +1,7 @@
+extern void mod2 (void);
+
+void
+mod1 (void)
+{
+ mod2 ();
+}
diff --git a/elf/unload8mod1x.c b/elf/unload8mod1x.c
new file mode 100644
index 0000000..835b634
--- /dev/null
+++ b/elf/unload8mod1x.c
@@ -0,0 +1 @@
+int mod1x;
diff --git a/elf/unload8mod2.c b/elf/unload8mod2.c
new file mode 100644
index 0000000..2fd8b67
--- /dev/null
+++ b/elf/unload8mod2.c
@@ -0,0 +1,7 @@
+extern void mod3 (void);
+
+void
+mod2 (void)
+{
+ mod3 ();
+}
diff --git a/elf/unload8mod3.c b/elf/unload8mod3.c
new file mode 100644
index 0000000..d49e22b
--- /dev/null
+++ b/elf/unload8mod3.c
@@ -0,0 +1,27 @@
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void
+mod3_fini2 (void)
+{
+}
+
+void
+mod3_fini (void)
+{
+ mod3_fini2 ();
+}
+
+void
+mod3 (void)
+{
+ void *h = dlopen ("$ORIGIN/unload8mod2.so", RTLD_LAZY);
+ if (h == NULL)
+ {
+ puts ("dlopen unload8mod2.so failed");
+ exit (1);
+ }
+
+ atexit (mod3_fini);
+}
--
1.7.3.4

View File

@ -0,0 +1,31 @@
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
+++ a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
@@ -210,7 +210,7 @@ pthread_rwlock_timedrdlock:
cfi_restore(%r12)
retq
-#ifdef __ASSUME_PRIVATE_FUTEX
+#ifdef __ASSUME_FUTEX_CLOCK_REALTIME
cfi_adjust_cfa_offset(16)
cfi_rel_offset(%r12, 8)
cfi_rel_offset(%r13, 0)
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
+++ a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
@@ -192,7 +192,7 @@ pthread_rwlock_timedwrlock:
7: movq %rdx, %rax
-#ifndef __ASSUME_PRIVATE_FUTEX
+#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
addq $16, %rsp
cfi_adjust_cfa_offset(-16)
popq %r14
@@ -207,7 +207,7 @@ pthread_rwlock_timedwrlock:
cfi_restore(%r12)
retq
-#ifdef __ASSUME_PRIVATE_FUTEX
+#ifdef __ASSUME_FUTEX_CLOCK_REALTIME
cfi_adjust_cfa_offset(16)
cfi_rel_offset(%r12, 8)
cfi_rel_offset(%r13, 0)

View File

@ -0,0 +1,26 @@
From 032c0ee3ee28841d684950e33a77210118697566 Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@redhat.com>
Date: Thu, 1 Sep 2011 10:46:14 +0200
Subject: [PATCH] Avoid assertion failure when first DNS answer was empty
---
ChangeLog | 4 ++++
resolv/res_query.c | 2 +-
2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/resolv/res_query.c b/resolv/res_query.c
index 2f7cfaa..2ded9fb 100644
--- a/resolv/res_query.c
+++ b/resolv/res_query.c
@@ -248,7 +248,7 @@ __libc_res_nquery(res_state statp,
&& *resplen2 > (int) sizeof (HEADER))
{
/* Special case of partial answer. */
- assert (hp != hp2);
+ assert (n == 0 || hp != hp2);
hp = hp2;
}
else if (answerp2 != NULL && *resplen2 < (int) sizeof (HEADER)
--
1.7.3.4

View File

@ -0,0 +1,132 @@
diff --git a/elf/dl-close.c b/elf/dl-close.c
index 73b2a2f..9bd91e3 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -1,5 +1,5 @@
/* Close a shared object opened by `_dl_open'.
- Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1996-2007, 2009, 2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
if (map->l_direct_opencount > 0 || map->l_type != lt_loaded
|| dl_close_state != not_pending)
{
- if (map->l_direct_opencount == 0)
- {
- if (map->l_type == lt_loaded)
- dl_close_state = rerun;
- else if (map->l_type == lt_library)
- {
- struct link_map **oldp = map->l_initfini;
- map->l_initfini = map->l_orig_initfini;
- _dl_scope_free (oldp);
- }
- }
+ if (map->l_direct_opencount == 0 && map->l_type == lt_loaded)
+ dl_close_state = rerun;
/* There are still references to this object. Do nothing more. */
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index 9e30594..3890d00 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
nneeded * sizeof needed[0]);
atomic_write_barrier ();
l->l_initfini = l_initfini;
+ l->l_free_initfini = 1;
}
/* If we have no auxiliary objects just go on to the next map. */
@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING"));
l_initfini[nlist] = NULL;
atomic_write_barrier ();
map->l_initfini = l_initfini;
+ map->l_free_initfini = 1;
if (l_reldeps != NULL)
{
atomic_write_barrier ();
@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING"));
_dl_scope_free (old_l_reldeps);
}
if (old_l_initfini != NULL)
- map->l_orig_initfini = old_l_initfini;
+ _dl_scope_free (old_l_initfini);
}
diff --git a/elf/dl-libc.c b/elf/dl-libc.c
index 7be9483..a13fce3 100644
--- a/elf/dl-libc.c
+++ b/elf/dl-libc.c
@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns)
{
- /* Remove all additional names added to the objects. */
for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next)
{
struct libname_list *lnp = l->l_libname->next;
l->l_libname->next = NULL;
+ /* Remove all additional names added to the objects. */
while (lnp != NULL)
{
struct libname_list *old = lnp;
@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
if (! old->dont_free)
free (old);
}
+
+ /* Free the initfini dependency list. */
+ if (l->l_free_initfini)
+ free (l->l_initfini);
}
if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
diff --git a/elf/rtld.c b/elf/rtld.c
index 4a9109e..617e30e 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -2251,6 +2251,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
lnp->dont_free = 1;
lnp = lnp->next;
}
+ l->l_free_initfini = 0;
if (l != &GL(dl_rtld_map))
_dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
diff --git a/include/link.h b/include/link.h
index e877104..051b99a 100644
--- a/include/link.h
+++ b/include/link.h
@@ -1,6 +1,6 @@
/* Data structure for communication from the run-time dynamic linker for
loaded ELF shared objects.
- Copyright (C) 1995-2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1995-2006, 2007, 2009, 2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -192,6 +192,9 @@ struct link_map
during LD_TRACE_PRELINKING=1
contains any DT_SYMBOLIC
libraries. */
+ unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be
+ freed, ie. not allocated with
+ the dummy malloc in ld.so. */
/* Collected information about own RPATH directories. */
struct r_search_path_struct l_rpath_dirs;
@@ -240,9 +243,6 @@ struct link_map
/* List of object in order of the init and fini calls. */
struct link_map **l_initfini;
- /* The init and fini list generated at startup, saved when the
- object is also loaded dynamically. */
- struct link_map **l_orig_initfini;
/* List of the dependencies introduced through symbol binding. */
struct link_map_reldeps

View File

@ -0,0 +1,26 @@
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index 67e1ca2..5e7cca5 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -635,7 +635,7 @@ for linking")
# define libc_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
# define libc_hidden_def(name) hidden_def (name)
# define libc_hidden_weak(name) hidden_weak (name)
-# define libc_hidden_nolink(name, version) hidden_nolink (name, libc, version)
+# define libc_hidden_nolink(name, version) hidden_def (name)
# define libc_hidden_ver(local, name) hidden_ver (local, name)
# define libc_hidden_data_def(name) hidden_data_def (name)
# define libc_hidden_data_weak(name) hidden_data_weak (name)
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index 5134ce9..40c73d1 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -53,7 +53,7 @@ headers-in-tirpc = $(addprefix rpc/,auth.h auth_unix.h clnt.h pmap_clnt.h \
des_crypt.h)
headers-not-in-tirpc = $(addprefix rpc/,key_prot.h rpc_des.h) \
$(rpcsvc:%=rpcsvc/%) rpcsvc/bootparam.h
-headers = rpc/netdb.h
+headers = rpc/netdb.h $(headers-in-tirpc) $(headers-not-in-tirpc)
install-others = $(inst_sysconfdir)/rpc
generated = $(rpcsvc:%.x=rpcsvc/%.h) $(rpcsvc:%.x=x%.c) $(rpcsvc:%.x=x%.stmp) \
$(rpcsvc:%.x=rpcsvc/%.stmp) rpcgen

View File

@ -0,0 +1,28 @@
From bdd816a366c4e5bba5de7157d948e0c0737fb4fb Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@redhat.com>
Date: Tue, 17 May 2011 17:42:30 +0200
Subject: [PATCH] Reinstall NIS RPC headers
---
nis/Makefile | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/nis/Makefile b/nis/Makefile
index b5c9609..d2934d9 100644
--- a/nis/Makefile
+++ b/nis/Makefile
@@ -23,9 +23,9 @@ subdir := nis
aux := nis_hash
+headers := $(wildcard rpcsvc/*.[hx])
distribute := nss-nis.h nss-nisplus.h nis_intern.h Banner \
- nisplus-parser.h nis_xdr.h nss \
- $(wildcard rpcsvc/*.[hx])
+ nisplus-parser.h nis_xdr.h nss
# These are the databases available for the nis (and perhaps later nisplus)
# service. This must be a superset of the services in nss.
--
1.7.5.4

View File

@ -1,11 +0,0 @@
post_install() {
sbin/ldconfig -r .
}
post_upgrade() {
post_install
}
post_remove() {
post_install
}

View File

@ -9,7 +9,7 @@ pkgbase=libtool-multilib
_pkgbase=libtool
pkgname=(libtool-multilib lib32-libtool)
pkgver=2.2.6b
pkgrel=1
pkgrel=2
pkgdesc="A generic library support script for multilib"
arch=('x86_64')
url="http://www.gnu.org/software/libtool"