diff options
| author | Mark Wielaard <[email protected]> | 2018-10-13 10:27:47 +0200 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2018-10-19 22:53:40 +0200 |
| commit | eee4269e53154daaf0251371aacd91ec5db3eb30 (patch) | |
| tree | 7acbdb928e04115c4c79f08e81faedd798f84d76 /src/unstrip.c | |
| parent | c06ab0bbb4761a69d2f188675d21d1a9131e9ecb (diff) | |
unstrip: Renumber the group section indexes.
When unstripping we might need to renumber the group section indexes.
Just like we do when stripping.
Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'src/unstrip.c')
| -rw-r--r-- | src/unstrip.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/unstrip.c b/src/unstrip.c index 03a03462..2cfd3b37 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -1708,6 +1708,20 @@ more sections in stripped file than debug file -- arguments reversed?")); if (shdr_mem.sh_type == SHT_DYNSYM) stripped_dynsym = sec; } + + if (shdr_mem.sh_type == SHT_GROUP) + { + /* We must adjust all the section indices in the group. + Skip the first word, which is the section group flag. + Everything else is a section index. */ + Elf32_Word *shndx = (Elf32_Word *) outdata->d_buf; + for (size_t i = 1; i < shdr_mem.sh_size / sizeof (Elf32_Word); ++i) + if (shndx[i] == SHN_UNDEF || shndx[i] >= stripped_shnum) + error (EXIT_FAILURE, 0, + _("group has invalid section index [%zd]"), i); + else + shndx[i] = ndx_section[shndx[i] - 1]; + } } /* We may need to update the symbol table. */ |
