main/binutils: fix static linking on PIE

The linker script mistakenly assumess crtbegin, or crtbegin? for
the gcc crt glue filename. On PIE system it is called crtbeginTS
which would not match the filter. Fixes #855.
This commit is contained in:
Timo Teräs 2011-12-09 09:28:48 +02:00
parent 84009e4c79
commit bfc02e3184
2 changed files with 58 additions and 4 deletions

View File

@ -1,18 +1,34 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=binutils
pkgver=2.22
pkgrel=0
pkgrel=1
pkgdesc="Tools necessary to build programs"
url="http://www.gnu.org/software/binutils/"
source="http://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2"
depends=
makedepends="bison flex texinfo zlib-dev"
arch="all"
license="GPL"
subpackages="$pkgname-doc"
source="http://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2
binutils-ld-fix-static-linking.patch"
_builddir="$srcdir/$pkgname-$pkgver"
prepare() {
local i
cd "$_builddir"
for i in $source; do
case $i in
*.patch|*.diff)
msg "Applying $i..."
patch -p1 -i "$srcdir"/$i || return 1
;;
esac
done
}
build() {
cd "$srcdir/$pkgname-$pkgver"
cd "$_builddir"
./configure --prefix=/usr \
--mandir /usr/share/man \
--build ${CHOST:-i486-alpine-linux-uclibc} \
@ -35,4 +51,5 @@ package() {
fi
rm "$pkgdir"/usr/lib/*.la || return 1
}
md5sums="ee0f10756c84979622b992a4a61ea3f5 binutils-2.22.tar.bz2"
md5sums="ee0f10756c84979622b992a4a61ea3f5 binutils-2.22.tar.bz2
6b744d0574338cc69d3096a890a7b609 binutils-ld-fix-static-linking.patch"

View File

@ -0,0 +1,37 @@
Index: binutils-2.22/ld/scripttempl/elf.sc
===================================================================
--- binutils-2.22.orig/ld/scripttempl/elf.sc 2011-04-11 18:38:12.000000000 +0300
+++ binutils-2.22/ld/scripttempl/elf.sc 2011-12-09 09:11:24.000000000 +0200
@@ -225,8 +225,8 @@
if test "${ENABLE_INITFINI_ARRAY}" = "yes"; then
SORT_INIT_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))"
SORT_FINI_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))"
- CTORS_IN_INIT_ARRAY="KEEP (*(EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))"
- DTORS_IN_FINI_ARRAY="KEEP (*(EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))"
+ CTORS_IN_INIT_ARRAY="KEEP (*(EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .ctors))"
+ DTORS_IN_FINI_ARRAY="KEEP (*(EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .dtors))"
else
SORT_INIT_ARRAY="KEEP (*(SORT(.init_array.*)))"
SORT_FINI_ARRAY="KEEP (*(SORT(.fini_array.*)))"
@@ -262,8 +262,7 @@
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin.o(.ctors))
- KEEP (*crtbegin?.o(.ctors))
+ KEEP (*crtbegin*.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
@@ -278,9 +277,8 @@
DTOR=".dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin.o(.dtors))
- KEEP (*crtbegin?.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}