From 8c19749adc5f155f7a51f1799cd3494851c75909 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 27 Apr 2005 10:09:43 +0000 Subject: [PATCH] (elf_link_input_bfd): Handle the case where a badly formatted input file results in a reloc which has no associated global symbol --- bfd/ChangeLog | 6 ++++++ bfd/elflink.c | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index bf49cc0e42..2e70d771a1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2005-04-27 Nick Clifton + + * elflink.c (elf_link_input_bfd): Handle the case where a badly + formatted input file results in a reloc which has no associated + global symbol. + 2005-04-26 Jerome Guitton * bfd.m4 (BFD_NEED_DECLARATION): Restore. diff --git a/bfd/elflink.c b/bfd/elflink.c index cd9131ef38..bf2178090c 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -7019,6 +7019,23 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) && finfo->sections[r_symndx] == NULL)) { h = sym_hashes[r_symndx - extsymoff]; + + /* Badly formatted input files can contain relocs that + reference non-existant symbols. Check here so that + we do not seg fault. */ + if (h == NULL) + { + char buffer [32]; + + sprintf_vma (buffer, rel->r_info); + (*_bfd_error_handler) + (_("error: %B contains a reloc (0x%s) for section %A " + "that references a non-existent global symbol"), + input_bfd, o, buffer); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + while (h->root.type == bfd_link_hash_indirect || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link;