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/elfxx-tilegx.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/elfxx-tilegx.c')
-rw-r--r-- | bfd/elfxx-tilegx.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c index 1f5c458..c0daf18 100644 --- a/bfd/elfxx-tilegx.c +++ b/bfd/elfxx-tilegx.c @@ -2470,10 +2470,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* Allocate room for the header and tail. */ if (s->size == 0) { - s->size = PLT_HEADER_SIZE + PLT_TAIL_SIZE; + s->size = PLT_ENTRY_SIZE; } - h->plt.offset = s->size - PLT_TAIL_SIZE; + h->plt.offset = s->size - PLT_ENTRY_SIZE + PLT_HEADER_SIZE; /* If this symbol is not defined in a regular file, and we are not generating a shared library, then set the symbol to this @@ -4247,6 +4247,7 @@ tilegx_elf_finish_dynamic_sections (bfd *output_bfd, bfd *dynobj; asection *sdyn; struct tilegx_elf_link_hash_table *htab; + size_t pad_size; htab = tilegx_elf_hash_table (info); BFD_ASSERT (htab != NULL); @@ -4275,10 +4276,15 @@ tilegx_elf_finish_dynamic_sections (bfd *output_bfd, tilegx64_plt0_entry : tilegx32_plt0_entry, PLT_HEADER_SIZE); - memcpy (splt->contents + splt->size - PLT_TAIL_SIZE, + memcpy (splt->contents + splt->size + - PLT_ENTRY_SIZE + PLT_HEADER_SIZE, ABI_64_P (output_bfd) ? tilegx64_plt_tail_entry : tilegx32_plt_tail_entry, PLT_TAIL_SIZE); + /* Add padding so that the plt section is a multiple of its + entry size. */ + pad_size = PLT_ENTRY_SIZE - PLT_HEADER_SIZE - PLT_TAIL_SIZE; + memset (splt->contents + splt->size - pad_size, 0, pad_size); } elf_section_data (splt->output_section)->this_hdr.sh_entsize |