diff options
author | Walter Lee <walt@tilera.com> | 2012-08-28 06:28:31 +0000 |
---|---|---|
committer | Walter Lee <walt@tilera.com> | 2012-08-28 06:28:31 +0000 |
commit | 663b5850121926ab9d7685c4c4f2961ab65adcb8 (patch) | |
tree | 40b695eafb405e53120578af6d9dd8d502954bb8 /bfd/elf32-tilepro.c | |
parent | e5b95258d9dd1ecc4a53baf56308ce78f19f4904 (diff) | |
download | gdb-663b5850121926ab9d7685c4c4f2961ab65adcb8.zip gdb-663b5850121926ab9d7685c4c4f2961ab65adcb8.tar.gz gdb-663b5850121926ab9d7685c4c4f2961ab65adcb8.tar.bz2 |
Add padding to the plt section so that its size is a multiple of its
entry size.
* elf32-tilepro.c (allocate_dynrelocs): Use PLT_ENTRY_SIZE as size
of header.
(tilepro_plt_entry_build): Account for new header size.
(tilepro_elf_finish_dynamic_sections): Ditto.
(tilepro_elf_plt_sym_val): Ditto.
* elfxx-tilegx.c (allocate_dynrelocs): Use PLT_ENTRY_SIZE as size
of header + tail.
(tilegx_elf_finish_dynamic_sections): Account for new padding.
Diffstat (limited to 'bfd/elf32-tilepro.c')
-rw-r--r-- | bfd/elf32-tilepro.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c index fa883e1..aa2dfd6 100644 --- a/bfd/elf32-tilepro.c +++ b/bfd/elf32-tilepro.c @@ -1105,7 +1105,7 @@ static int tilepro_plt_entry_build (asection *splt, asection *sgotplt, bfd_vma offset, bfd_vma *r_offset) { - int plt_index = (offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE; + int plt_index = (offset - PLT_ENTRY_SIZE) / PLT_ENTRY_SIZE; int got_offset = plt_index * GOT_ENTRY_SIZE + GOTPLT_HEADER_SIZE; tilepro_bundle_bits *pc; @@ -2193,7 +2193,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* Allocate room for the header. */ if (s->size == 0) { - s->size = PLT_HEADER_SIZE; + s->size = PLT_ENTRY_SIZE; } h->plt.offset = s->size; @@ -3867,7 +3867,11 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd, /* Fill in the first entry in the procedure linkage table. */ if (splt->size > 0) - memcpy (splt->contents, tilepro_plt0_entry, PLT_HEADER_SIZE); + { + memcpy (splt->contents, tilepro_plt0_entry, PLT_HEADER_SIZE); + memset (splt->contents + PLT_HEADER_SIZE, 0, + PLT_ENTRY_SIZE - PLT_HEADER_SIZE); + } elf_section_data (splt->output_section)->this_hdr.sh_entsize = PLT_ENTRY_SIZE; @@ -3924,7 +3928,7 @@ static bfd_vma tilepro_elf_plt_sym_val (bfd_vma i, const asection *plt, const arelent *rel ATTRIBUTE_UNUSED) { - return plt->vma + PLT_HEADER_SIZE + i * PLT_ENTRY_SIZE; + return plt->vma + (i + 1) * PLT_ENTRY_SIZE; } static enum elf_reloc_type_class |