From fe6fae079099c0eeb3186086d6b150800c0e8770 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 2 Dec 2016 15:03:05 +0000 Subject: [PATCH] Fix seg-fault in linker when applying relocs to a corrupt binary. PR ld/20911 * ldctor.c (ldctor_build_sets): Produce alternative error message if the reloc was being applied to a special section. --- ld/ChangeLog | 4 ++++ ld/ldctor.c | 15 +++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index e9734ac95b9..1d1c91ae72f 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,9 @@ 2016-12-02 Nick Clifton + PR ld/20911 + * ldctor.c (ldctor_build_sets): Produce alternative error message + if the reloc was being applied to a special section. + PR ld/20912 * emultempl/elf32.em (_place_orphan): Test for ELF format of the orphan before looking for the SHF_EXCLUDE flag. diff --git a/ld/ldctor.c b/ld/ldctor.c index 2075ad34f2f..505702aa53c 100644 --- a/ld/ldctor.c +++ b/ld/ldctor.c @@ -290,10 +290,17 @@ ldctor_build_sets (void) p->reloc); if (howto == NULL) { - einfo (_("%P%X: %s does not support reloc %s for set %s\n"), - bfd_get_target (p->elements->section->owner), - bfd_get_reloc_code_name (p->reloc), - p->h->root.string); + /* See PR 20911 for a reproducer. */ + if (p->elements->section->owner == NULL) + einfo (_("%P%X: Special section %s does not support reloc %s for set %s\n"), + bfd_get_section_name (link_info.output_bfd, p->elements->section), + bfd_get_reloc_code_name (p->reloc), + p->h->root.string); + else + einfo (_("%P%X: %s does not support reloc %s for set %s\n"), + bfd_get_target (p->elements->section->owner), + bfd_get_reloc_code_name (p->reloc), + p->h->root.string); continue; } } -- 2.30.2