From 77697d411ef33c3e603275b905ae965ff555400d Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 3 Sep 2015 04:13:21 -0700 Subject: [PATCH] Remove convert_mov_to_lea * elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Remove convert_mov_to_lea. --- bfd/ChangeLog | 5 +++++ bfd/elf64-x86-64.c | 53 ++++++++++++++++++---------------------------- 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index cfd5f3961d..d51800e855 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2015-09-03 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Remove + convert_mov_to_lea. + 2015-09-02 H.J. Lu * elf32-i386.c (R_386_irelative): Renamed to ... diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index f753c7a132..2230c15bc1 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -3010,9 +3010,6 @@ elf_x86_64_convert_mov_to_lea (bfd *abfd, asection *sec, asection *tsec; char symtype; bfd_vma toff, roff; - enum { - none, local, global - } convert_mov_to_lea; unsigned int opcode; if (r_type != R_X86_64_GOTPCREL) @@ -3030,17 +3027,11 @@ elf_x86_64_convert_mov_to_lea (bfd *abfd, asection *sec, if (opcode != 0x8b) continue; - tsec = NULL; - convert_mov_to_lea = none; - /* Get the symbol referred to by the reloc. */ if (r_symndx < symtab_hdr->sh_info) { Elf_Internal_Sym *isym; - /* Silence older GCC warning. */ - h = NULL; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); @@ -3048,20 +3039,20 @@ elf_x86_64_convert_mov_to_lea (bfd *abfd, asection *sec, /* STT_GNU_IFUNC must keep R_X86_64_GOTPCREL relocation and skip relocation against undefined symbols. */ - if (symtype != STT_GNU_IFUNC && isym->st_shndx != SHN_UNDEF) - { - if (isym->st_shndx == SHN_ABS) - tsec = bfd_abs_section_ptr; - else if (isym->st_shndx == SHN_COMMON) - tsec = bfd_com_section_ptr; - else if (isym->st_shndx == SHN_X86_64_LCOMMON) - tsec = &_bfd_elf_large_com_section; - else - tsec = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (symtype == STT_GNU_IFUNC || isym->st_shndx == SHN_UNDEF) + continue; - toff = isym->st_value; - convert_mov_to_lea = local; - } + if (isym->st_shndx == SHN_ABS) + tsec = bfd_abs_section_ptr; + else if (isym->st_shndx == SHN_COMMON) + tsec = bfd_com_section_ptr; + else if (isym->st_shndx == SHN_X86_64_LCOMMON) + tsec = &_bfd_elf_large_com_section; + else + tsec = bfd_section_from_elf_index (abfd, isym->st_shndx); + + h = NULL; + toff = isym->st_value; } else { @@ -3084,13 +3075,11 @@ elf_x86_64_convert_mov_to_lea (bfd *abfd, asection *sec, tsec = h->root.u.def.section; toff = h->root.u.def.value; symtype = h->type; - convert_mov_to_lea = global; } + else + continue; } - if (convert_mov_to_lea == none) - continue; - if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE) { /* At this stage in linking, no SEC_MERGE symbol has been @@ -3168,17 +3157,17 @@ elf_x86_64_convert_mov_to_lea (bfd *abfd, asection *sec, changed_contents = TRUE; changed_relocs = TRUE; - if (convert_mov_to_lea == local) + if (h) + { + if (h->got.refcount > 0) + h->got.refcount -= 1; + } + else { if (local_got_refcounts != NULL && local_got_refcounts[r_symndx] > 0) local_got_refcounts[r_symndx] -= 1; } - else - { - if (h->got.refcount > 0) - h->got.refcount -= 1; - } } if (contents != NULL