23113b3
From binutils-return-76960-listarch-binutils=sources dot redhat dot com at sourceware dot org Mon Sep 03 12:05:02 2012
23113b3
Return-Path: <binutils-return-76960-listarch-binutils=sources dot redhat dot com at sourceware dot org>
23113b3
Delivered-To: listarch-binutils at sources dot redhat dot com
23113b3
Received: (qmail 24023 invoked by alias); 3 Sep 2012 12:05:00 -0000
23113b3
Received: (qmail 24010 invoked by uid 22791); 3 Sep 2012 12:05:00 -0000
23113b3
X-SWARE-Spam-Status: No, hits=-3.6 required=5.0	tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD
23113b3
X-Spam-Check-By: sourceware.org
23113b3
Received: from e06smtp15.uk.ibm.com (HELO e06smtp15.uk.ibm.com) (195.75.94.111)    by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 03 Sep 2012 12:04:46 +0000
23113b3
Received: from /spool/local	by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted	for <binutils@sourceware.org> from <andreas@de.ibm.com>;	Mon, 3 Sep 2012 13:04:44 +0100
23113b3
Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198)	by e06smtp15.uk.ibm.com (192.168.101.145) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted;	Mon, 3 Sep 2012 13:04:41 +0100
23113b3
Received: from d06av09.portsmouth.uk.ibm.com (d06av09.portsmouth.uk.ibm.com [9.149.37.250])	by b06cxnps4076.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q83C4YZx40435740	for <binutils@sourceware.org>; Mon, 3 Sep 2012 12:04:34 GMT
23113b3
Received: from d06av09.portsmouth.uk.ibm.com (loopback [127.0.0.1])	by d06av09.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q83C4eFA012810	for <binutils@sourceware.org>; Mon, 3 Sep 2012 06:04:40 -0600
23113b3
Received: from bart (dyn-9-152-212-238.boeblingen.de.ibm.com [9.152.212.238])	by d06av09.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with SMTP id q83C4dDC012768	for <binutils@sourceware.org>; Mon, 3 Sep 2012 06:04:39 -0600
23113b3
Received: by bart (sSMTP sendmail emulation); Mon, 03 Sep 2012 14:04:39 +0200
23113b3
From: "Andreas Krebbel" <andreas at de dot ibm dot com>
23113b3
Date: Mon, 3 Sep 2012 14:04:39 +0200
23113b3
To: binutils at sourceware dot org
23113b3
Subject: [Committed] S/390: Handle PLTOFF for IFUNC symbols correctly
23113b3
Message-ID: <20120903120439.GA10593@bart>
23113b3
MIME-Version: 1.0
23113b3
Content-Type: text/plain; charset=us-ascii
23113b3
Content-Disposition: inline
23113b3
User-Agent: Mutt/1.5.21 (2010-09-15)
23113b3
x-cbid: 12090312-0342-0000-0000-000002BC4237
23113b3
Mailing-List: contact binutils-help at sourceware dot org; run by ezmlm
23113b3
Precedence: bulk
23113b3
List-Id: <binutils.sourceware.org>
23113b3
List-Subscribe: <mailto:binutils-subscribe at sourceware dot org>
23113b3
List-Archive: <http://sourceware.org/ml/binutils/>
23113b3
List-Post: <mailto:binutils at sourceware dot org>
23113b3
List-Help: <mailto:binutils-help at sourceware dot org>, <http://sourceware dot org/ml/#faqs>
23113b3
Sender: binutils-owner at sourceware dot org
23113b3
Delivered-To: mailing list binutils at sourceware dot org
23113b3
23113b3
Hi,
23113b3
23113b3
the s390 IFUNC support so far didn't deal correctly with PLTOFF
23113b3
relocs.  Fixed with the attached patch.
23113b3
23113b3
Committed.
23113b3
23113b3
Bye,
23113b3
23113b3
-Andreas-
23113b3
23113b3
2012-09-03  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
23113b3
23113b3
	* elf32-s390.c (elf_s390_relocate_section): Handle PLTOFF for
23113b3
	local and global ifunc symbols.
23113b3
	* elf64-s390.c (elf_s390_relocate_section): Likewise.
23113b3
23113b3
---
23113b3
 bfd/elf32-s390.c |    8 ++++++--
23113b3
 bfd/elf64-s390.c |   11 ++++++++---
23113b3
 2 files changed, 14 insertions(+), 5 deletions(-)
23113b3
23113b3
Index: binutils/bfd/elf32-s390.c
23113b3
===================================================================
23113b3
--- binutils.orig/bfd/elf32-s390.c
23113b3
+++ binutils/bfd/elf32-s390.c
23113b3
@@ -2349,6 +2349,10 @@ elf_s390_relocate_section (bfd *output_b
23113b3
 
23113b3
 	      switch (r_type)
23113b3
 		{
23113b3
+		case R_390_PLTOFF16:
23113b3
+		case R_390_PLTOFF32:
23113b3
+		  relocation -= htab->elf.sgot->output_section->vma;
23113b3
+		  break;
23113b3
 		case R_390_GOTPLT12:
23113b3
 		case R_390_GOTPLT16:
23113b3
 		case R_390_GOTPLT20:
23113b3
@@ -2625,9 +2629,9 @@ elf_s390_relocate_section (bfd *output_b
23113b3
 
23113b3
 	  /* For local symbols or if we didn't make a PLT entry for
23113b3
 	     this symbol resolve the symbol directly.  */
23113b3
-	  if (   h == NULL
23113b3
+	  if (h == NULL
23113b3
 	      || h->plt.offset == (bfd_vma) -1
23113b3
-	      || htab->elf.splt == NULL)
23113b3
+	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
23113b3
 	    {
23113b3
 	      relocation -= htab->elf.sgot->output_section->vma;
23113b3
 	      break;
23113b3
Index: binutils/bfd/elf64-s390.c
23113b3
===================================================================
23113b3
--- binutils.orig/bfd/elf64-s390.c
23113b3
+++ binutils/bfd/elf64-s390.c
23113b3
@@ -2306,6 +2306,11 @@ elf_s390_relocate_section (bfd *output_b
23113b3
 
23113b3
 	      switch (r_type)
23113b3
 		{
23113b3
+		case R_390_PLTOFF16:
23113b3
+		case R_390_PLTOFF32:
23113b3
+		case R_390_PLTOFF64:
23113b3
+		  relocation -= htab->elf.sgot->output_section->vma;
23113b3
+		  break;
23113b3
 		case R_390_GOTPLT12:
23113b3
 		case R_390_GOTPLT16:
23113b3
 		case R_390_GOTPLT20:
23113b3
@@ -2561,7 +2566,7 @@ elf_s390_relocate_section (bfd *output_b
23113b3
 	    break;
23113b3
 
23113b3
 	  if (h->plt.offset == (bfd_vma) -1
23113b3
-	      || (htab->elf.splt == NULL && htab->elf.iplt == NULL))
23113b3
+	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
23113b3
 	    {
23113b3
 	      /* We didn't make a PLT entry for this symbol.  This
23113b3
 		 happens when statically linking PIC code, or when
23113b3
@@ -2587,9 +2592,9 @@ elf_s390_relocate_section (bfd *output_b
23113b3
 
23113b3
 	  /* For local symbols or if we didn't make a PLT entry for
23113b3
 	     this symbol resolve the symbol directly.  */
23113b3
-	  if (   h == NULL
23113b3
+	  if (h == NULL
23113b3
 	      || h->plt.offset == (bfd_vma) -1
23113b3
-	      || htab->elf.splt == NULL)
23113b3
+	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
23113b3
 	    {
23113b3
 	      relocation -= htab->elf.sgot->output_section->vma;
23113b3
 	      break;
23113b3