diff options
author | Nick Clifton <nickc@redhat.com> | 2004-02-09 10:30:13 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2004-02-09 10:30:13 +0000 |
commit | 0d5f99947baa22a5dda53be002c3885ffe311ca5 (patch) | |
tree | 7a385a5d7d110dfaf15dfa120a5433679a5dfebf /bfd | |
parent | 174fd7f9556183397625dbfa99ef68ecd325c74b (diff) | |
download | gdb-0d5f99947baa22a5dda53be002c3885ffe311ca5.zip gdb-0d5f99947baa22a5dda53be002c3885ffe311ca5.tar.gz gdb-0d5f99947baa22a5dda53be002c3885ffe311ca5.tar.bz2 |
Catch GOT offsets for a symbol which have no associated GOT subsection.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf64-alpha.c | 16 |
2 files changed, 19 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 19b521c..cbd41d0 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2004-02-09 Christian Vogel <vogelchr@vogel.cx> + Nick Clifton <nickc@redhat.com> + + * elf64-alpha.c (elf64_alpha_calc_got_offsets_for_symbol): Catch + GOT entries with no associated GOT subsection. + 2004-02-09 Richard Sandiford <rsandifo@redhat.com> * bfd-elf.h (elf_backend_name_local_section_symbols): New hook. diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index 6025277..8bd03c2 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -3547,6 +3547,7 @@ elf64_alpha_calc_got_offsets_for_symbol (h, arg) struct alpha_elf_link_hash_entry *h; PTR arg ATTRIBUTE_UNUSED; { + bfd_boolean result = TRUE; struct alpha_elf_got_entry *gotent; if (h->root.root.type == bfd_link_hash_warning) @@ -3555,14 +3556,23 @@ elf64_alpha_calc_got_offsets_for_symbol (h, arg) for (gotent = h->got_entries; gotent; gotent = gotent->next) if (gotent->use_count > 0) { - bfd_size_type *plge - = &alpha_elf_tdata (gotent->gotobj)->got->_raw_size; + struct alpha_elf_obj_tdata *td; + bfd_size_type *plge; + td = alpha_elf_tdata (gotent->gotobj); + if (td == NULL) + { + _bfd_error_handler (_("Symbol %s has no GOT subsection for offset 0x%x"), + h->root.root.root.string, gotent->got_offset); + result = FALSE; + continue; + } + plge = &td->got->_raw_size; gotent->got_offset = *plge; *plge += alpha_got_entry_size (gotent->reloc_type); } - return TRUE; + return result; } static void |