From: Mark Wielaard Date: Sat, 13 Oct 2018 08:27:47 +0000 (+0200) Subject: unstrip: Renumber the group section indexes. X-Git-Tag: elfutils-0.175~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eee4269e53154daaf0251371aacd91ec5db3eb30;p=thirdparty%2Felfutils.git 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 --- diff --git a/src/ChangeLog b/src/ChangeLog index d151e0d97..5aa31fc7b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2018-10-19 Mark Wielaard + + * unstrip.c (copy_elided_sections): Renumber group section indexes. + 2018-10-12 Mark Wielaard * strip.c (handle_elf): Don't remove SHF_GROUP flag from sections. diff --git a/src/unstrip.c b/src/unstrip.c index 03a034624..2cfd3b374 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. */