From: Nick Clifton Date: Wed, 27 Apr 2005 16:47:24 +0000 (+0000) Subject: (elf_link_input_bfd): Handle the case where a badly formatted input file results X-Git-Tag: binutils-2_16~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41993a6850927a3972cfabdf861cd705b4a8f564;p=thirdparty%2Fbinutils-gdb.git (elf_link_input_bfd): Handle the case where a badly formatted input file results in a reloc which has no associated global symbol. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 194f7414a7f..616f20dd492 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-20 Daniel Jacobowitz * configure.in: Bump version to 2.15.97. diff --git a/bfd/elflink.c b/bfd/elflink.c index 914096c017f..3a10c715ba6 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -6993,6 +6993,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;