This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[committed, PATCH] x86: Increment PLT count only for function symbols
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Wed, 23 Aug 2017 13:14:35 -0700
- Subject: [committed, PATCH] x86: Increment PLT count only for function symbols
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Since PLT entry is needed only for function symbols, increment PLT count
only for function symbols.
* elf32-i386.c (elf_i386_check_relocs): Increment PLT count only
for function symbols.
* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
---
bfd/ChangeLog | 6 ++++++
bfd/elf32-i386.c | 5 +++--
bfd/elf64-x86-64.c | 5 +++--
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c7ce75d379..db93894511 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
2017-08-23 H.J. Lu <hongjiu.lu@intel.com>
+ * elf32-i386.c (elf_i386_check_relocs): Increment PLT count only
+ for function symbols.
+ * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
+
+2017-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
* elf32-i386.c (elf_i386_link_setup_gnu_properties): Set
extern_protected_data to FALSE if GNU_PROPERTY_NO_COPY_ON_PROTECTED
is set on any input relocatable file.
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 1009c17ff2..ae23752119 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -2273,8 +2273,9 @@ do_relocation:
/* We may need a .plt entry if the symbol is a function
defined in a shared lib or is a STT_GNU_IFUNC function
referenced from the code or read-only section. */
- if (!h->def_regular
- || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
+ if ((h->type == STT_FUNC || h->type == STT_GNU_IFUNC)
+ && (!h->def_regular
+ || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0))
h->plt.refcount += 1;
if (r_type == R_386_PC32)
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 244db80ed6..3dc2c356c4 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -2716,8 +2716,9 @@ pointer:
/* We may need a .plt entry if the symbol is a function
defined in a shared lib or is a STT_GNU_IFUNC function
referenced from the code or read-only section. */
- if (!h->def_regular
- || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
+ if ((h->type == STT_FUNC || h->type == STT_GNU_IFUNC)
+ && (!h->def_regular
+ || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0))
h->plt.refcount += 1;
if (r_type == R_X86_64_PC32)
--
2.13.5