This is the mail archive of the binutils@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]

[committed, PATCH] Convert mov to lea for loading address of local common symbol


There is no need to check def_regular when converting mov to lea for
loading address of local symbols since def_regular may be false for
common symbols and SYMBOL_REFERENCES_LOCAL is sufficient.

bfd/

	* elf32-i386.c (elf_i386_convert_mov_to_lea): Don't check
	def_regular.
	* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Likewise.

ld/testsuite/

	* ld-i386/lea1.s: Add a test for loading address of local common
	symbol.
	* ld-x86-64/lea1.s: Likewise.
	* ld-i386/lea1a.d: Updated.
	* ld-i386/lea1b.d: Likewise.
	* ld-i386/lea1c.d: Likewise.
	* ld-x86-64/lea1a.d: Likewise.
	* ld-x86-64/lea1b.d: Likewise.
	* ld-x86-64/lea1c.d: Likewise.
	* ld-x86-64/lea1d.d: Likewise.
	* ld-x86-64/lea1e.d: Likewise.
	* ld-x86-64/lea1f.d: Likewise.
---
 bfd/ChangeLog                  |  6 ++++++
 bfd/elf32-i386.c               |  3 +--
 bfd/elf64-x86-64.c             |  3 +--
 ld/testsuite/ChangeLog         | 15 +++++++++++++++
 ld/testsuite/ld-i386/lea1.s    |  3 +++
 ld/testsuite/ld-i386/lea1a.d   |  1 +
 ld/testsuite/ld-i386/lea1b.d   |  1 +
 ld/testsuite/ld-i386/lea1c.d   |  1 +
 ld/testsuite/ld-x86-64/lea1.s  |  3 +++
 ld/testsuite/ld-x86-64/lea1a.d |  1 +
 ld/testsuite/ld-x86-64/lea1b.d |  1 +
 ld/testsuite/ld-x86-64/lea1c.d |  1 +
 ld/testsuite/ld-x86-64/lea1d.d |  1 +
 ld/testsuite/ld-x86-64/lea1e.d |  1 +
 ld/testsuite/ld-x86-64/lea1f.d |  1 +
 15 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 8400cf6..d26a526 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf32-i386.c (elf_i386_convert_mov_to_lea): Don't check
+	def_regular.
+	* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Likewise.
+
 2015-10-15  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* elflink.c (_bfd_elf_merge_symbol): Fix typos in comments
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 0a06191..2e5c04d 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -2815,8 +2815,7 @@ elf_i386_convert_mov_to_lea (bfd *abfd, asection *sec,
 
       /* STT_GNU_IFUNC must keep R_386_GOT32 relocation.  We also avoid
 	 optimizing _DYNAMIC since ld.so may use its link-time address.  */
-      if (h->def_regular
-	  && h->type != STT_GNU_IFUNC
+      if (h->type != STT_GNU_IFUNC
 	  && h != htab->elf.hdynamic
 	  && SYMBOL_REFERENCES_LOCAL (link_info, h)
 	  && irel->r_offset >= 2
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 29639d8..aad3244 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -3074,8 +3074,7 @@ elf_x86_64_convert_mov_to_lea (bfd *abfd, asection *sec,
 	  /* STT_GNU_IFUNC must keep R_X86_64_GOTPCREL relocation.  We also
 	     avoid optimizing _DYNAMIC since ld.so may use its link-time
 	     address.  */
-	  if (h->def_regular
-	      && h->type != STT_GNU_IFUNC
+	  if (h->type != STT_GNU_IFUNC
 	      && h != htab->elf.hdynamic
 	      && SYMBOL_REFERENCES_LOCAL (link_info, h))
 	    {
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index af8a69f..83d28f0 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,18 @@
+2015-10-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* ld-i386/lea1.s: Add a test for loading address of local common
+	symbol.
+	* ld-x86-64/lea1.s: Likewise.
+	* ld-i386/lea1a.d: Updated.
+	* ld-i386/lea1b.d: Likewise.
+	* ld-i386/lea1c.d: Likewise.
+	* ld-x86-64/lea1a.d: Likewise.
+	* ld-x86-64/lea1b.d: Likewise.
+	* ld-x86-64/lea1c.d: Likewise.
+	* ld-x86-64/lea1d.d: Likewise.
+	* ld-x86-64/lea1e.d: Likewise.
+	* ld-x86-64/lea1f.d: Likewise.
+
 2015-10-15  Alan Modra  <amodra@gmail.com>
 
 	* config/default.exp (size): New global.
diff --git a/ld/testsuite/ld-i386/lea1.s b/ld/testsuite/ld-i386/lea1.s
index 6afad88..f754ec0 100644
--- a/ld/testsuite/ld-i386/lea1.s
+++ b/ld/testsuite/ld-i386/lea1.s
@@ -8,4 +8,7 @@ foo:
 	.type	_start, @function
 _start:
 	movl	foo@GOT(%ecx), %eax
+	movl	bar@GOT(%ecx), %eax
 	.size	_start, .-_start
+	.comm	pad,4,4
+	.comm	bar,4,4
diff --git a/ld/testsuite/ld-i386/lea1a.d b/ld/testsuite/ld-i386/lea1a.d
index 45b4965..0435d34 100644
--- a/ld/testsuite/ld-i386/lea1a.d
+++ b/ld/testsuite/ld-i386/lea1a.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	8d 81 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%ecx\),%eax
+[ 	]*[a-f0-9]+:	8d 81 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%ecx\),%eax
 #pass
diff --git a/ld/testsuite/ld-i386/lea1b.d b/ld/testsuite/ld-i386/lea1b.d
index 9ad4464..8cef2c4 100644
--- a/ld/testsuite/ld-i386/lea1b.d
+++ b/ld/testsuite/ld-i386/lea1b.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	8d 81 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%ecx\),%eax
+[ 	]*[a-f0-9]+:	8d 81 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%ecx\),%eax
 #pass
diff --git a/ld/testsuite/ld-i386/lea1c.d b/ld/testsuite/ld-i386/lea1c.d
index 5ba8275..c84f413 100644
--- a/ld/testsuite/ld-i386/lea1c.d
+++ b/ld/testsuite/ld-i386/lea1c.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	8d 81 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%ecx\),%eax
+[ 	]*[a-f0-9]+:	8d 81 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%ecx\),%eax
 #pass
diff --git a/ld/testsuite/ld-x86-64/lea1.s b/ld/testsuite/ld-x86-64/lea1.s
index 4dce487..c2a499c 100644
--- a/ld/testsuite/ld-x86-64/lea1.s
+++ b/ld/testsuite/ld-x86-64/lea1.s
@@ -8,4 +8,7 @@ foo:
 	.type	_start, @function
 _start:
 	movq	foo@GOTPCREL(%rip), %rax
+	movq	bar@GOTPCREL(%rip), %rax
 	.size	_start, .-_start
+	.comm	pad,4,4
+	.comm	bar,4,4
diff --git a/ld/testsuite/ld-x86-64/lea1a.d b/ld/testsuite/ld-x86-64/lea1a.d
index b48f253..75dad70 100644
--- a/ld/testsuite/ld-x86-64/lea1a.d
+++ b/ld/testsuite/ld-x86-64/lea1a.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <foo>
+[ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <bar>
 #pass
diff --git a/ld/testsuite/ld-x86-64/lea1b.d b/ld/testsuite/ld-x86-64/lea1b.d
index 9ee7220..d968ca2 100644
--- a/ld/testsuite/ld-x86-64/lea1b.d
+++ b/ld/testsuite/ld-x86-64/lea1b.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <foo>
+[ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <bar>
 #pass
diff --git a/ld/testsuite/ld-x86-64/lea1c.d b/ld/testsuite/ld-x86-64/lea1c.d
index 6ff1618..5f7e6c3 100644
--- a/ld/testsuite/ld-x86-64/lea1c.d
+++ b/ld/testsuite/ld-x86-64/lea1c.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <foo>
+[ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <bar>
 #pass
diff --git a/ld/testsuite/ld-x86-64/lea1d.d b/ld/testsuite/ld-x86-64/lea1d.d
index d117f6b..524980f 100644
--- a/ld/testsuite/ld-x86-64/lea1d.d
+++ b/ld/testsuite/ld-x86-64/lea1d.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <foo>
+[ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <bar>
 #pass
diff --git a/ld/testsuite/ld-x86-64/lea1e.d b/ld/testsuite/ld-x86-64/lea1e.d
index bde3e6f..22e6dcc 100644
--- a/ld/testsuite/ld-x86-64/lea1e.d
+++ b/ld/testsuite/ld-x86-64/lea1e.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <foo>
+[ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <bar>
 #pass
diff --git a/ld/testsuite/ld-x86-64/lea1f.d b/ld/testsuite/ld-x86-64/lea1f.d
index 568143a..9aff34d 100644
--- a/ld/testsuite/ld-x86-64/lea1f.d
+++ b/ld/testsuite/ld-x86-64/lea1f.d
@@ -10,4 +10,5 @@ Disassembly of section .text:
 
 #...
 [ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    -0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <foo>
+[ 	]*[a-f0-9]+:	48 8d 05 ([0-9a-f]{2} ){4} *	lea    0x[a-f0-9]+\(%rip\),%rax        # [a-f0-9]+ <bar>
 #pass
-- 
2.4.3


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