aboutsummaryrefslogtreecommitdiff
path: root/package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch')
-rw-r--r--package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch b/package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch
new file mode 100644
index 0000000000..9fb3e260c1
--- /dev/null
+++ b/package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch
@@ -0,0 +1,55 @@
+From 5df4791bf077127684faceeeea8bfab063e43774 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Wed, 3 Jun 2020 12:14:58 +0100
+Subject: [PATCH] Fix shared library corruption when rerunning patchelf
+
+When running patchelf on some existing patchelf'd binaries to change to longer
+RPATHS, ldd would report the binaries as invalid. The output of objdump -x on
+those libraryies should show the top of the .dynamic section is getting trashed,
+something like:
+
+0x600000001 0x0000000000429000
+0x335000 0x0000000000335000
+0xc740 0x000000000000c740
+0x1000 0x0000000000009098
+SONAME libglib-2.0.so.0
+
+(which should be RPATH and DT_NEEDED entries)
+
+This was tracked down to the code which injects the PT_LOAD section.
+
+The issue is that if the program headers were previously relocated to the end
+of the file which was how patchelf operated previously, the relocation code
+wouldn't work properly on a second run as it now assumes they're located after
+the elf header. This change forces them back to immediately follow the elf
+header which is where the code has made space for them.
+
+Should fix https://github.com/NixOS/patchelf/issues/170
+and https://github.com/NixOS/patchelf/issues/192
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Fetch from: https://github.com/NixOS/patchelf/commit/ad5f1f078b716802dfb8f7226cb1d5c720348a78
+
+Backported to v0.9
+
+Signed-off-by: Conrad Ratschan <conrad.ratschan@rockwellcollins.com>
+---
+ src/patchelf.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/patchelf.cc b/src/patchelf.cc
+index c2147af..1224a89 100644
+--- a/src/patchelf.cc
++++ b/src/patchelf.cc
+@@ -706,6 +706,7 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
+
+
+ /* Add a segment that maps the replaced sections into memory. */
++ wri(hdr->e_phoff, sizeof(Elf_Ehdr));
+ phdrs.resize(rdi(hdr->e_phnum) + 1);
+ wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
+ Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
+--
+2.17.1
+