summaryrefslogtreecommitdiff
path: root/dev-util/debugedit/files/debugedit-4.14.2-no-reorder.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-util/debugedit/files/debugedit-4.14.2-no-reorder.patch')
-rw-r--r--dev-util/debugedit/files/debugedit-4.14.2-no-reorder.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/dev-util/debugedit/files/debugedit-4.14.2-no-reorder.patch b/dev-util/debugedit/files/debugedit-4.14.2-no-reorder.patch
new file mode 100644
index 000000000000..0c196a842b4c
--- /dev/null
+++ b/dev-util/debugedit/files/debugedit-4.14.2-no-reorder.patch
@@ -0,0 +1,57 @@
+From 0779d60cb5941610dd1f31632aa1655bf2cc447a Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyfox@gentoo.org>
+Date: Sat, 6 Oct 2018 17:56:00 +0100
+Subject: [PATCH] debugedit: don't reorder sections
+
+In https://bugs.gentoo.org/666954 debugedit processed
+crtbeginS.o from gcc-8.2.0 and turned into invalid ELF:
+
+```
+$ cp crtbeginS-ok-7.3.0.o.back crtbeginS-ok-7.3.0.o
+$ debugedit -i -b $(pwd) -d /usr/src/debug -l ./foo crtbeginS-ok-7.3.0.o
+$ export LANG=C
+$ readelf -a crtbeginS-ok-7.3.0.o.back >/dev/null && echo ok
+readelf: Warning: [ 9]: Info field (8) should index a relocatable section.
+ok
+
+$ readelf -a crtbeginS-ok-7.3.0.o >/dev/null && echo ok
+readelf: Warning: [ 9]: Info field (8) should index a relocatable section.
+readelf: Error: bad symbol index: 54495f00 in reloc
+readelf: Error: bad symbol index: 656c6261 in reloc
+readelf: Error: bad symbol index: 62615465 in reloc
+readelf: Error: bad symbol index: 69665f61 in reloc
+readelf: Warning: local symbol 11 found at index >= symtab's sh_info value of 11
+readelf: Warning: local symbol 14 found at index >= symtab's sh_info value of 11
+readelf: Warning: local symbol 15 found at index >= symtab's sh_info value of 11
+```
+
+Ths fix is not to reorder sections as debugedit does not
+account for offset change.
+
+debugedit already does it for final executables and shared libraries.
+
+Bug: https://bugs.gentoo.org/666954
+Closes: https://github.com/rpm-software-management/rpm/issues/423
+Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
+---
+ tools/debugedit.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/tools/debugedit.c b/tools/debugedit.c
+index 84568dd29..a723283c0 100644
+--- a/tools/debugedit.c
++++ b/tools/debugedit.c
+@@ -2347,10 +2347,9 @@ fdopen_dso (int fd, const char *name)
+ goto error_out;
+ }
+
+- /* If there are phdrs we want to maintain the layout of the
+- allocated sections in the file. */
+- if (phnum != 0)
+- elf_flagelf (elf, ELF_C_SET, ELF_F_LAYOUT);
++ /* We maintain the layout of the allocated sections in the file:
++ https://github.com/rpm-software-management/rpm/issues/423 */
++ elf_flagelf (elf, ELF_C_SET, ELF_F_LAYOUT);
+
+ memset (dso, 0, sizeof(DSO));
+ dso->elf = elf;