diff options
author | Mike Frysinger <vapier@gentoo.org> | 2015-12-28 13:23:57 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2015-12-28 13:31:07 -0500 |
commit | cbd2a52033efd9a333508d5cd9bd35bd00a2c06b (patch) | |
tree | 99e4d7ec1b166400007aa87df4e1fe11fbe48475 /sys-libs | |
parent | profile/package.mask: Clean up dev-perl/Parse-CPAN-Meta mask entry. (diff) | |
download | gentoo-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.patch | 32 | ||||
-rw-r--r-- | sys-libs/glibc/glibc-2.19-r1.ebuild | 5 | ||||
-rw-r--r-- | sys-libs/glibc/glibc-2.20-r2.ebuild | 2 | ||||
-rw-r--r-- | sys-libs/glibc/glibc-2.21-r1.ebuild | 2 | ||||
-rw-r--r-- | sys-libs/glibc/glibc-2.22-r1.ebuild | 2 |
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 |