[binutils-gdb] Add RESOLVED_LOCALLY_P

H.J.Lu hjl@sourceware.org
Fri Oct 6 07:28:00 GMT 2017


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

commit 2eba97c207399d8b541092a7b0a4428dc02f5cf1
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Oct 5 14:36:58 2017 -0700

    Add RESOLVED_LOCALLY_P

Diff:
---
 bfd/elf32-i386.c   | 23 +++++------------------
 bfd/elf64-x86-64.c | 21 +++++----------------
 bfd/elfxx-x86.h    | 11 +++++++++++
 3 files changed, 21 insertions(+), 34 deletions(-)

diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 4a3c690..25d349c 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -2512,26 +2512,13 @@ r_386_got32:
 	  relative_reloc = FALSE;
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
-
 	      off = h->got.offset;
-	      dyn = htab->elf.dynamic_sections_created;
-	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
-						     bfd_link_pic (info),
-						     h)
-		  || (bfd_link_pic (info)
-		      && SYMBOL_REFERENCES_LOCAL_P (info, h))
-		  || (ELF_ST_VISIBILITY (h->other)
-		      && h->root.type == bfd_link_hash_undefweak))
+	      if (RESOLVED_LOCALLY_P (info, h, htab))
 		{
-		  /* This is actually a static link, or it is a
-		     -Bsymbolic link and the symbol is defined
-		     locally, or the symbol was forced to be local
-		     because of a version file.  We must initialize
-		     this entry in the global offset table.  Since the
-		     offset must always be a multiple of 4, we use the
-		     least significant bit to record whether we have
-		     initialized it already.
+		  /* We must initialize this entry in the global offset
+		     table.  Since the offset must always be a multiple
+		     of 4, we use the least significant bit to record
+		     whether we have initialized it already.
 
 		     When doing a dynamic link, we create a .rel.got
 		     relocation entry to initialize the value.  This
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index df91ab8..5a9e3fd 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -2762,8 +2762,6 @@ do_ifunc_pointer:
 	  relative_reloc = FALSE;
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
-
 	      off = h->got.offset;
 	      if (h->needs_plt
 		  && h->plt.offset != (bfd_vma)-1
@@ -2779,21 +2777,12 @@ do_ifunc_pointer:
 		  base_got = htab->elf.sgotplt;
 		}
 
-	      dyn = htab->elf.dynamic_sections_created;
-
-	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
-		  || (bfd_link_pic (info)
-		      && SYMBOL_REFERENCES_LOCAL_P (info, h))
-		  || (ELF_ST_VISIBILITY (h->other)
-		      && h->root.type == bfd_link_hash_undefweak))
+	      if (RESOLVED_LOCALLY_P (info, h, htab))
 		{
-		  /* This is actually a static link, or it is a -Bsymbolic
-		     link and the symbol is defined locally, or the symbol
-		     was forced to be local because of a version file.	We
-		     must initialize this entry in the global offset table.
-		     Since the offset must always be a multiple of 8, we
-		     use the least significant bit to record whether we
-		     have initialized it already.
+		  /* We must initialize this entry in the global offset
+		     table.  Since the offset must always be a multiple
+		     of 8, we use the least significant bit to record
+		     whether we have initialized it already.
 
 		     When doing a dynamic link, we create a .rela.got
 		     relocation entry to initialize the value.	This is
diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h
index 88202b4..317c86e 100644
--- a/bfd/elfxx-x86.h
+++ b/bfd/elfxx-x86.h
@@ -113,6 +113,17 @@
 			&& ((H)->root.type == bfd_link_hash_defweak \
 			    || !(H)->def_regular)))
 
+/* TRUE if this is actually a static link, or it is a -Bsymbolic link
+   and the symbol is defined locally, or the symbol was forced to be
+   local because of a version file.  */
+#define RESOLVED_LOCALLY_P(INFO, H, HTAB) \
+  (!WILL_CALL_FINISH_DYNAMIC_SYMBOL ((HTAB)->elf.dynamic_sections_created, \
+				     bfd_link_pic (INFO), (H)) \
+   || (bfd_link_pic (INFO) \
+       && SYMBOL_REFERENCES_LOCAL_P ((INFO), (H))) \
+       || (ELF_ST_VISIBILITY ((H)->other) \
+	   && (H)->root.type == bfd_link_hash_undefweak))
+
 /* TRUE if TLS IE->LE transition is OK.  */
 #define TLS_TRANSITION_IE_TO_LE_P(INFO, H, TLS_TYPE) \
   (bfd_link_executable (INFO) \



More information about the Binutils-cvs mailing list