This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Remove convert_mov_to_lea


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=77697d411ef33c3e603275b905ae965ff555400d

commit 77697d411ef33c3e603275b905ae965ff555400d
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Sep 3 04:13:21 2015 -0700

    Remove convert_mov_to_lea
    
    	* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Remove
    	convert_mov_to_lea.

Diff:
---
 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 cfd5f39..d51800e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Remove
+	convert_mov_to_lea.
+
 2015-09-02  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* elf32-i386.c (R_386_irelative): Renamed to ...
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index f753c7a..2230c15 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,16 +3157,16 @@ 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 (local_got_refcounts != NULL
-	      && local_got_refcounts[r_symndx] > 0)
-	    local_got_refcounts[r_symndx] -= 1;
+	  if (h->got.refcount > 0)
+	    h->got.refcount -= 1;
 	}
       else
 	{
-	  if (h->got.refcount > 0)
-	    h->got.refcount -= 1;
+	  if (local_got_refcounts != NULL
+	      && local_got_refcounts[r_symndx] > 0)
+	    local_got_refcounts[r_symndx] -= 1;
 	}
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]