diff options
author | Nick Clifton <nickc@redhat.com> | 2005-04-27 16:47:24 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2005-04-27 16:47:24 +0000 |
commit | 051a6462bac6bd030d647aa7541066008e22fb73 (patch) | |
tree | 2b8f995df89f6f1b57158c94c456a2ed85e5e496 | |
parent | f745cd479f698ebdc5f2ec511fef752d9d7994f4 (diff) | |
download | gdb-051a6462bac6bd030d647aa7541066008e22fb73.tar.gz |
(elf_link_input_bfd): Handle the case where a badly formatted input file results
in a reloc which has no associated global symbol.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elflink.c | 17 |
2 files changed, 23 insertions, 0 deletions
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 <nickc@redhat.com> + + * 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 <dan@codesourcery.com> * 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; |