diff options
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.patch | 57 |
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; |