mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
sys-libs/glibc: workaround ia64 early ldso crashes #503838
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user