summaryrefslogtreecommitdiff
path: root/dev-util/debugedit/files/debugedit-4.14.2-no-reorder.patch
blob: 0c196a842b4c701c262c4e247eb160447f2202b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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;