diff options
Diffstat (limited to 'bfd/elf64-alpha.c')
-rw-r--r-- | bfd/elf64-alpha.c | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index bbea92c..54205bc 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -1300,6 +1300,7 @@ elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) | SEC_LINKER_CREATED | (elf64_alpha_use_secureplt ? SEC_READONLY : 0)); s = bfd_make_section_anyway_with_flags (abfd, ".plt", flags); + elf_hash_table (info)->splt = s; if (s == NULL || ! bfd_set_section_alignment (abfd, s, 4)) return FALSE; @@ -1314,6 +1315,7 @@ elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED | SEC_READONLY); s = bfd_make_section_anyway_with_flags (abfd, ".rela.plt", flags); + elf_hash_table (info)->srelplt = s; if (s == NULL || ! bfd_set_section_alignment (abfd, s, 3)) return FALSE; @@ -1321,6 +1323,7 @@ elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) { flags = SEC_ALLOC | SEC_LINKER_CREATED; s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags); + elf_hash_table (info)->sgotplt = s; if (s == NULL || ! bfd_set_section_alignment (abfd, s, 3)) return FALSE; } @@ -1337,6 +1340,7 @@ elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED | SEC_READONLY); s = bfd_make_section_anyway_with_flags (abfd, ".rela.got", flags); + elf_hash_table (info)->srelgot = s; if (s == NULL || !bfd_set_section_alignment (abfd, s, 3)) return FALSE; @@ -2128,7 +2132,7 @@ elf64_alpha_adjust_dynamic_symbol (struct bfd_link_info *info, { h->needs_plt = TRUE; - s = bfd_get_linker_section (dynobj, ".plt"); + s = elf_hash_table(info)->splt; if (!s && !elf64_alpha_create_dynamic_sections (dynobj, info)) return FALSE; @@ -2612,15 +2616,13 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info) { asection *splt, *spltrel, *sgotplt; unsigned long entries; - bfd *dynobj; struct alpha_elf_link_hash_table * htab; htab = alpha_elf_hash_table (info); if (htab == NULL) return; - dynobj = elf_hash_table(info)->dynobj; - splt = bfd_get_linker_section (dynobj, ".plt"); + splt = elf_hash_table(info)->splt; if (splt == NULL) return; @@ -2630,7 +2632,7 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info) elf64_alpha_size_plt_section_1, splt); /* Every plt entry requires a JMP_SLOT relocation. */ - spltrel = bfd_get_linker_section (dynobj, ".rela.plt"); + spltrel = elf_hash_table(info)->srelplt; entries = 0; if (splt->size) { @@ -2646,7 +2648,7 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info) entire contents of the .got.plt section. */ if (elf64_alpha_use_secureplt) { - sgotplt = bfd_get_linker_section (dynobj, ".got.plt"); + sgotplt = elf_hash_table(info)->sgotplt; sgotplt->size = entries ? 16 : 0; } } @@ -2806,8 +2808,7 @@ elf64_alpha_size_rela_got_1 (struct alpha_elf_link_hash_entry *h, if (entries > 0) { - bfd *dynobj = elf_hash_table(info)->dynobj; - asection *srel = bfd_get_linker_section (dynobj, ".rela.got"); + asection *srel = elf_hash_table(info)->srelgot; BFD_ASSERT (srel != NULL); srel->size += sizeof (Elf64_External_Rela) * entries; } @@ -2821,7 +2822,7 @@ static void elf64_alpha_size_rela_got_section (struct bfd_link_info *info) { unsigned long entries; - bfd *i, *dynobj; + bfd *i; asection *srel; struct alpha_elf_link_hash_table * htab; @@ -2857,8 +2858,7 @@ elf64_alpha_size_rela_got_section (struct bfd_link_info *info) } } - dynobj = elf_hash_table(info)->dynobj; - srel = bfd_get_linker_section (dynobj, ".rela.got"); + srel = elf_hash_table(info)->srelgot; if (!srel) { BFD_ASSERT (entries == 0); @@ -4238,10 +4238,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, symtab_hdr = &elf_symtab_hdr (input_bfd); dynobj = elf_hash_table (info)->dynobj; - if (dynobj) - srelgot = bfd_get_linker_section (dynobj, ".rela.got"); - else - srelgot = NULL; + srelgot = elf_hash_table (info)->srelgot; if (input_section->flags & SEC_ALLOC) { @@ -4866,7 +4863,6 @@ elf64_alpha_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, Elf_Internal_Sym *sym) { struct alpha_elf_link_hash_entry *ah = (struct alpha_elf_link_hash_entry *)h; - bfd *dynobj = elf_hash_table(info)->dynobj; if (h->needs_plt) { @@ -4880,9 +4876,9 @@ elf64_alpha_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, BFD_ASSERT (h->dynindx != -1); - splt = bfd_get_linker_section (dynobj, ".plt"); + splt = elf_hash_table (info)->splt; BFD_ASSERT (splt != NULL); - srel = bfd_get_linker_section (dynobj, ".rela.plt"); + srel = elf_hash_table (info)->srelplt; BFD_ASSERT (srel != NULL); for (gotent = ah->got_entries; gotent ; gotent = gotent->next) @@ -4952,7 +4948,7 @@ elf64_alpha_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, asection *srel; struct alpha_elf_got_entry *gotent; - srel = bfd_get_linker_section (dynobj, ".rela.got"); + srel = elf_hash_table (info)->srelgot; BFD_ASSERT (srel != NULL); for (gotent = ((struct alpha_elf_link_hash_entry *) h)->got_entries; @@ -5025,8 +5021,8 @@ elf64_alpha_finish_dynamic_sections (bfd *output_bfd, Elf64_External_Dyn *dyncon, *dynconend; bfd_vma plt_vma, gotplt_vma; - splt = bfd_get_linker_section (dynobj, ".plt"); - srelaplt = bfd_get_linker_section (dynobj, ".rela.plt"); + splt = elf_hash_table (info)->splt; + srelaplt = elf_hash_table (info)->srelplt; BFD_ASSERT (splt != NULL && sdyn != NULL); plt_vma = splt->output_section->vma + splt->output_offset; @@ -5034,7 +5030,7 @@ elf64_alpha_finish_dynamic_sections (bfd *output_bfd, gotplt_vma = 0; if (elf64_alpha_use_secureplt) { - sgotplt = bfd_get_linker_section (dynobj, ".got.plt"); + sgotplt = elf_hash_table (info)->sgotplt; BFD_ASSERT (sgotplt != NULL); if (sgotplt->size > 0) gotplt_vma = sgotplt->output_section->vma + sgotplt->output_offset; |