This matches how handle_relocs_rel already printed the header. Signed-off-by: Mark Wielaard --- src/ChangeLog | 5 +++++ src/readelf.c | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4062fc7..5535cff 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2014-05-26 Mark Wielaard + * readelf.c (handle_relocs_rela): Print header like handle_relocs_rel + does, when sh_info == 0. + +2014-05-26 Mark Wielaard + * unstrip.c (find_alloc_sections_prelink): Allow non-split .bss section when sh_size of the original and undo .bss section are equal. diff --git a/src/readelf.c b/src/readelf.c index 45b1910..ea14a09 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1971,7 +1971,8 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); - printf (ngettext ("\ + if (shdr->sh_info != 0) + printf (ngettext ("\ \nRelocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n", "\ \nRelocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n", @@ -1982,6 +1983,19 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) elf_strptr (ebl->elf, shstrndx, destshdr->sh_name), shdr->sh_offset, nentries); + else + /* The .rela.dyn section does not refer to a specific section but + instead of section index zero. Do not try to print a section + name. */ + printf (ngettext ("\ +\nRelocation section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n", + "\ +\nRelocation section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n", + nentries), + (unsigned int) elf_ndxscn (scn), + elf_strptr (ebl->elf, shstrndx, shdr->sh_name), + shdr->sh_offset, + nentries); fputs_unlocked (class == ELFCLASS32 ? gettext ("\ Offset Type Value Addend Name\n") -- 1.7.1