diff options
author | Alan Modra <amodra@gmail.com> | 2003-06-18 05:18:06 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2003-06-18 05:18:06 +0000 |
commit | 64c456e1a1a185f930059aebd96e7fe8e52735fc (patch) | |
tree | 66f5c7d0f8e3e57ec4965a8ed7a8da91d7fee4df | |
parent | 3dab95d3244ea1c94115fb3a5bad35453fe41f59 (diff) | |
download | gdb-64c456e1a1a185f930059aebd96e7fe8e52735fc.zip gdb-64c456e1a1a185f930059aebd96e7fe8e52735fc.tar.gz gdb-64c456e1a1a185f930059aebd96e7fe8e52735fc.tar.bz2 |
* elflink.h (elf_gc_record_vtentry): Revert last change. Correct
size calculation from addend. Round size up.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elflink.h | 17 |
2 files changed, 14 insertions, 8 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5100257..8b2decf 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2003-06-18 Alan Modra <amodra@bigpond.net.au> + + * elflink.h (elf_gc_record_vtentry): Revert last change. Correct + size calculation from addend. Round size up. + 2003-06-18 Hans-Peter Nilsson <hp@axis.com> * elf32-cris.c (cris_elf_relocate_section) <case diff --git a/bfd/elflink.h b/bfd/elflink.h index 64554e7..4a7d27d 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -6301,30 +6301,31 @@ elf_gc_record_vtentry (abfd, sec, h, addend) struct elf_backend_data *bed = get_elf_backend_data (abfd); unsigned int log_file_align = bed->s->log_file_align; - if (addend > h->vtable_entries_size) + if (addend >= h->vtable_entries_size) { - size_t size, bytes; + size_t size, bytes, file_align; bfd_boolean *ptr = h->vtable_entries_used; /* While the symbol is undefined, we have to be prepared to handle a zero size. */ + file_align = 1 << log_file_align; if (h->root.type == bfd_link_hash_undefined) - size = addend; + size = addend + file_align; else { size = h->size; - if (size < addend) + if (addend >= size) { /* Oops! We've got a reference past the defined end of the table. This is probably a bug -- shall we warn? */ - size = addend; + size = addend + file_align; } } + size = (size + file_align - 1) & -file_align; /* Allocate one extra entry for use as a "done" flag for the - consolidation pass and another extra entry because we are - going to write up to and including 'size' entries. */ - bytes = ((size >> log_file_align) + 2) * sizeof (bfd_boolean); + consolidation pass. */ + bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean); if (ptr) { |