From 503294e755498eb6545ca72b338c5037facab7f7 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 2 Sep 2017 05:55:25 -0700 Subject: [PATCH] x86: Add sizeof_reloc to elf_x86_link_hash_table Initialize htab->sizeof_reloc once, instead of computing it every time. * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Initialize sizeof_reloc. (_bfd_x86_elf_adjust_dynamic_symbol): Use sizeof_reloc. * elfxx-x86.h (elf_x86_link_hash_table): Add sizeof_reloc. --- bfd/ChangeLog | 7 +++++++ bfd/elfxx-x86.c | 7 ++++--- bfd/elfxx-x86.h | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 554c1e75201..764d3e7766d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2017-09-02 H.J. Lu + + * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Initialize + sizeof_reloc. + (_bfd_x86_elf_adjust_dynamic_symbol): Use sizeof_reloc. + * elfxx-x86.h (elf_x86_link_hash_table): Add sizeof_reloc. + 2017-09-02 H.J. Lu * elf32-i386.c (elf_i386_allocate_dynrelocs): Check VxWorks diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index 50d945ef0ac..fe5d211af2d 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -277,6 +277,7 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd) { ret->r_info = elf64_r_info; ret->r_sym = elf64_r_sym; + ret->sizeof_reloc = sizeof (Elf64_External_Rela); ret->pointer_r_type = R_X86_64_64; ret->dynamic_interpreter = ELF64_DYNAMIC_INTERPRETER; ret->dynamic_interpreter_size = sizeof ELF64_DYNAMIC_INTERPRETER; @@ -289,6 +290,7 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd) ret->r_sym = elf32_r_sym; if (bed->target_id == X86_64_ELF_DATA) { + ret->sizeof_reloc = sizeof (Elf32_External_Rela); ret->pointer_r_type = R_X86_64_32; ret->dynamic_interpreter = ELFX32_DYNAMIC_INTERPRETER; ret->dynamic_interpreter_size @@ -297,6 +299,7 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd) } else { + ret->sizeof_reloc = sizeof (Elf32_External_Rel); ret->pointer_r_type = R_386_32; ret->dynamic_interpreter = ELF32_DYNAMIC_INTERPRETER; ret->dynamic_interpreter_size @@ -735,9 +738,7 @@ _bfd_x86_elf_adjust_dynamic_symbol (struct bfd_link_info *info, } if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0) { - srel->size += ((bed->target_id == I386_ELF_DATA) - ? sizeof (Elf32_External_Rel) - : bed->s->sizeof_rela); + srel->size += htab->sizeof_reloc; h->needs_copy = 1; } diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h index 86af21f431c..0c80ca45bea 100644 --- a/bfd/elfxx-x86.h +++ b/bfd/elfxx-x86.h @@ -313,6 +313,7 @@ struct elf_x86_link_hash_table bfd_vma (*r_info) (bfd_vma, bfd_vma); bfd_vma (*r_sym) (bfd_vma); + unsigned int sizeof_reloc; unsigned int pointer_r_type; int dynamic_interpreter_size; const char *dynamic_interpreter; -- 2.30.2