summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2015-12-28 13:23:57 -0500
committerMike Frysinger <vapier@gentoo.org>2015-12-28 13:31:07 -0500
commitcbd2a52033efd9a333508d5cd9bd35bd00a2c06b (patch)
tree99e4d7ec1b166400007aa87df4e1fe11fbe48475 /sys-libs
parentprofile/package.mask: Clean up dev-perl/Parse-CPAN-Meta mask entry. (diff)
downloadgentoo-cbd2a52033efd9a333508d5cd9bd35bd00a2c06b.tar.gz
gentoo-cbd2a52033efd9a333508d5cd9bd35bd00a2c06b.tar.bz2
gentoo-cbd2a52033efd9a333508d5cd9bd35bd00a2c06b.zip
sys-libs/glibc: workaround ia64 early ldso crashes #503838
Diffstat (limited to 'sys-libs')
-rw-r--r--sys-libs/glibc/files/2.19/glibc-2.19-ia64-gcc-4.8-reloc-hack.patch32
-rw-r--r--sys-libs/glibc/glibc-2.19-r1.ebuild5
-rw-r--r--sys-libs/glibc/glibc-2.20-r2.ebuild2
-rw-r--r--sys-libs/glibc/glibc-2.21-r1.ebuild2
-rw-r--r--sys-libs/glibc/glibc-2.22-r1.ebuild2
5 files changed, 42 insertions, 1 deletions
diff --git a/sys-libs/glibc/files/2.19/glibc-2.19-ia64-gcc-4.8-reloc-hack.patch b/sys-libs/glibc/files/2.19/glibc-2.19-ia64-gcc-4.8-reloc-hack.patch
new file mode 100644
index 000000000000..72a616a046a8
--- /dev/null
+++ b/sys-libs/glibc/files/2.19/glibc-2.19-ia64-gcc-4.8-reloc-hack.patch
@@ -0,0 +1,32 @@
+https://bugs.gentoo.org/503838
+http://gcc.gnu.org/PR60465
+https://sourceware.org/ml/libc-alpha/2015-12/msg00556.html
+https://trofi.github.io/posts/189-glibc-on-ia64-or-how-relocations-bootstrap.html
+
+newer versions of gcc generate relocations in the elf_get_dynamic_info func
+which glibc relies on to populate some info structs. those structs are then
+used by ldso to process relocations in itself. glibc requires that there are
+no relocations until that point (*after* elf_get_dynamic_info), so we end up
+crashing during elf_get_dynamic_info because the relocation has not yet been
+processed.
+
+this hack shuffles the code in a way that tricks gcc into not generating the
+relocation. we need to figure out something better for upstream.
+
+--- a/elf/get-dynamic-info.h
++++ b/elf/get-dynamic-info.h
+@@ -66,8 +66,12 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp)
+ info[DT_VALTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM
+ + DT_VERSIONTAGNUM + DT_EXTRANUM] = dyn;
+ else if ((d_tag_utype) DT_ADDRTAGIDX (dyn->d_tag) < DT_ADDRNUM)
+- info[DT_ADDRTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM
+- + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] = dyn;
++ {
++ d_tag_utype i =
++ DT_ADDRTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM
++ + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM;
++ info[i] = dyn;
++ }
+ ++dyn;
+ }
+
diff --git a/sys-libs/glibc/glibc-2.19-r1.ebuild b/sys-libs/glibc/glibc-2.19-r1.ebuild
index a683fa59060a..998b7fda0c9c 100644
--- a/sys-libs/glibc/glibc-2.19-r1.ebuild
+++ b/sys-libs/glibc/glibc-2.19-r1.ebuild
@@ -157,8 +157,11 @@ eblit-src_unpack-pre() {
}
eblit-src_unpack-post() {
+ cd "${S}"
+
+ epatch "${FILESDIR}"/2.19/${PN}-2.19-ia64-gcc-4.8-reloc-hack.patch #503838
+
if use hardened ; then
- cd "${S}"
einfo "Patching to get working PIE binaries on PIE (hardened) platforms"
gcc-specs-pie && epatch "${FILESDIR}"/2.17/glibc-2.17-hardened-pie.patch
epatch "${FILESDIR}"/2.19/glibc-2.19-hardened-configure-picdefault.patch
diff --git a/sys-libs/glibc/glibc-2.20-r2.ebuild b/sys-libs/glibc/glibc-2.20-r2.ebuild
index 8280980a4169..0ea96b27052f 100644
--- a/sys-libs/glibc/glibc-2.20-r2.ebuild
+++ b/sys-libs/glibc/glibc-2.20-r2.ebuild
@@ -160,6 +160,8 @@ eblit-src_unpack-pre() {
eblit-src_prepare-post() {
cd "${S}"
+ epatch "${FILESDIR}"/2.19/${PN}-2.19-ia64-gcc-4.8-reloc-hack.patch #503838
+
if use hardened ; then
einfo "Patching to get working PIE binaries on PIE (hardened) platforms"
gcc-specs-pie && epatch "${FILESDIR}"/2.17/glibc-2.17-hardened-pie.patch
diff --git a/sys-libs/glibc/glibc-2.21-r1.ebuild b/sys-libs/glibc/glibc-2.21-r1.ebuild
index 9963ae3152d5..3dcbb52c367d 100644
--- a/sys-libs/glibc/glibc-2.21-r1.ebuild
+++ b/sys-libs/glibc/glibc-2.21-r1.ebuild
@@ -160,6 +160,8 @@ eblit-src_unpack-pre() {
eblit-src_prepare-post() {
cd "${S}"
+ epatch "${FILESDIR}"/2.19/${PN}-2.19-ia64-gcc-4.8-reloc-hack.patch #503838
+
if use hardened ; then
einfo "Patching to get working PIE binaries on PIE (hardened) platforms"
gcc-specs-pie && epatch "${FILESDIR}"/2.17/glibc-2.17-hardened-pie.patch
diff --git a/sys-libs/glibc/glibc-2.22-r1.ebuild b/sys-libs/glibc/glibc-2.22-r1.ebuild
index d6f6033f0d08..6e41fa91e665 100644
--- a/sys-libs/glibc/glibc-2.22-r1.ebuild
+++ b/sys-libs/glibc/glibc-2.22-r1.ebuild
@@ -163,6 +163,8 @@ eblit-src_unpack-pre() {
eblit-src_prepare-post() {
cd "${S}"
+ epatch "${FILESDIR}"/2.19/${PN}-2.19-ia64-gcc-4.8-reloc-hack.patch #503838
+
if use hardened ; then
# We don't enable these for non-hardened as the output is very terse --
# it only states that a crash happened. The default upstream behavior