public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hongjiu.lu@intel.com>
To: binutils@sourceware.org, gdb-patches@sourceware.org
Subject: Re: [PATCH] PR binutils/17154: Properly match PLT entry against .got.plt relocation
Date: Wed, 16 Jul 2014 18:18:00 -0000	[thread overview]
Message-ID: <20140716181800.GA7834@intel.com> (raw)
In-Reply-To: <20140716180104.GA449@intel.com>

On Wed, Jul 16, 2014 at 11:01:04AM -0700, H.J. Lu wrote:
> Relocations against .got.plt section may not be in the same order as
> entries in PLT section.  It is incorrect to assume that the Ith reloction
> index against .got.plt section always maps to the (I + 1)th entry in PLT
> section.  This patch matches the .got.plt relocation offset/index in PLT
> entry against the index in .got.plt relocation table.  It only checks
> R_*_JUMP_SLOT and R_*_IRELATIVE relocations.  It ignores R_*_TLS_DESC
> and R_*_TLSDESC relocations since they have different PLT entries.  I
> checked it into master.
> 
> 

I checked in this patch to match PLT entry only for ELFOSABI_GNU input.


H.J.
---
	* elf32-i386.c (elf_i386_plt_sym_val): Match PLT entry only for
	ELFOSABI_GNU input.
	* elf64-x86-64.c (elf_x86_64_plt_sym_val): Likewise.
	(elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise.
---
 bfd/ChangeLog      | 7 +++++++
 bfd/elf32-i386.c   | 4 ++++
 bfd/elf64-x86-64.c | 8 ++++++++
 3 files changed, 19 insertions(+)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5e9ce0f..9be9b8cf 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,12 @@
 2014-07-16  H.J. Lu  <hongjiu.lu@intel.com>
 
+	* elf32-i386.c (elf_i386_plt_sym_val): Match PLT entry only for
+	ELFOSABI_GNU input.
+	* elf64-x86-64.c (elf_x86_64_plt_sym_val): Likewise.
+	(elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise.
+
+2014-07-16  H.J. Lu  <hongjiu.lu@intel.com>
+
 	PR binutils/17154
 	* elf32-i386.c (elf_i386_plt_sym_val): Only match R_*_JUMP_SLOT
 	and R_*_IRELATIVE relocation offset with PLT entry.
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index aa01a7a..7c4b4bb 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -4994,6 +4994,10 @@ elf_i386_plt_sym_val (bfd_vma i, const asection *plt, const arelent *rel)
   abfd = plt->owner;
   bed = get_elf_i386_backend_data (abfd);
   plt_offset = bed->plt->plt_entry_size;
+
+  if (elf_elfheader (abfd)->e_ident[EI_OSABI] != ELFOSABI_GNU)
+    return plt->vma + (i + 1) * plt_offset;
+
   while (plt_offset < plt->size)
     {
       bfd_vma reloc_offset;
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 5eea810..f71291e 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -5311,6 +5311,10 @@ elf_x86_64_plt_sym_val (bfd_vma i, const asection *plt,
   abfd = plt->owner;
   bed = get_elf_x86_64_backend_data (abfd);
   plt_offset = bed->plt_entry_size;
+
+  if (elf_elfheader (abfd)->e_ident[EI_OSABI] != ELFOSABI_GNU)
+    return plt->vma + (i + 1) * plt_offset;
+
   while (plt_offset < plt->size)
     {
       bfd_vma reloc_index;
@@ -5340,6 +5344,10 @@ elf_x86_64_plt_sym_val_offset_plt_bnd (bfd_vma i, const asection *plt)
   const struct elf_x86_64_backend_data *bed = &elf_x86_64_bnd_arch_bed;
   bfd *abfd = plt->owner;
   bfd_vma plt_offset = bed->plt_entry_size;
+
+  if (elf_elfheader (abfd)->e_ident[EI_OSABI] != ELFOSABI_GNU)
+    return i * sizeof (elf_x86_64_legacy_plt2_entry);
+
   while (plt_offset < plt->size)
     {
       bfd_vma reloc_index;
-- 
1.9.3

      reply	other threads:[~2014-07-16 18:18 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-16 18:01 H.J. Lu
2014-07-16 18:18 ` H.J. Lu [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140716181800.GA7834@intel.com \
    --to=hongjiu.lu@intel.com \
    --cc=binutils@sourceware.org \
    --cc=gdb-patches@sourceware.org \
    --cc=hjl.tools@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).