4b9a078
From binutils-return-76960-listarch-binutils=sources dot redhat dot com at sourceware dot org Mon Sep 03 12:05:02 2012
4b9a078
Return-Path: <binutils-return-76960-listarch-binutils=sources dot redhat dot com at sourceware dot org>
4b9a078
Delivered-To: listarch-binutils at sources dot redhat dot com
4b9a078
Received: (qmail 24023 invoked by alias); 3 Sep 2012 12:05:00 -0000
4b9a078
Received: (qmail 24010 invoked by uid 22791); 3 Sep 2012 12:05:00 -0000
4b9a078
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
4b9a078
X-Spam-Check-By: sourceware.org
4b9a078
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
4b9a078
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
4b9a078
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
4b9a078
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
4b9a078
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
4b9a078
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
4b9a078
Received: by bart (sSMTP sendmail emulation); Mon, 03 Sep 2012 14:04:39 +0200
4b9a078
From: "Andreas Krebbel" <andreas at de dot ibm dot com>
4b9a078
Date: Mon, 3 Sep 2012 14:04:39 +0200
4b9a078
To: binutils at sourceware dot org
4b9a078
Subject: [Committed] S/390: Handle PLTOFF for IFUNC symbols correctly
4b9a078
Message-ID: <20120903120439.GA10593@bart>
4b9a078
MIME-Version: 1.0
4b9a078
Content-Type: text/plain; charset=us-ascii
4b9a078
Content-Disposition: inline
4b9a078
User-Agent: Mutt/1.5.21 (2010-09-15)
4b9a078
x-cbid: 12090312-0342-0000-0000-000002BC4237
4b9a078
Mailing-List: contact binutils-help at sourceware dot org; run by ezmlm
4b9a078
Precedence: bulk
4b9a078
List-Id: <binutils.sourceware.org>
4b9a078
List-Subscribe: <mailto:binutils-subscribe at sourceware dot org>
4b9a078
List-Archive: <http://sourceware.org/ml/binutils/>
4b9a078
List-Post: <mailto:binutils at sourceware dot org>
4b9a078
List-Help: <mailto:binutils-help at sourceware dot org>, <http://sourceware dot org/ml/#faqs>
4b9a078
Sender: binutils-owner at sourceware dot org
4b9a078
Delivered-To: mailing list binutils at sourceware dot org
4b9a078
4b9a078
Hi,
4b9a078
4b9a078
the s390 IFUNC support so far didn't deal correctly with PLTOFF
4b9a078
relocs.  Fixed with the attached patch.
4b9a078
4b9a078
Committed.
4b9a078
4b9a078
Bye,
4b9a078
4b9a078
-Andreas-
4b9a078
4b9a078
2012-09-03  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
4b9a078
4b9a078
	* elf32-s390.c (elf_s390_relocate_section): Handle PLTOFF for
4b9a078
	local and global ifunc symbols.
4b9a078
	* elf64-s390.c (elf_s390_relocate_section): Likewise.
4b9a078
4b9a078
---
4b9a078
 bfd/elf32-s390.c |    8 ++++++--
4b9a078
 bfd/elf64-s390.c |   11 ++++++++---
4b9a078
 2 files changed, 14 insertions(+), 5 deletions(-)
4b9a078
4b9a078
Index: binutils/bfd/elf32-s390.c
4b9a078
===================================================================
4b9a078
--- binutils.orig/bfd/elf32-s390.c
4b9a078
+++ binutils/bfd/elf32-s390.c
4b9a078
@@ -2349,6 +2349,10 @@ elf_s390_relocate_section (bfd *output_b
4b9a078
 
4b9a078
 	      switch (r_type)
4b9a078
 		{
4b9a078
+		case R_390_PLTOFF16:
4b9a078
+		case R_390_PLTOFF32:
4b9a078
+		  relocation -= htab->elf.sgot->output_section->vma;
4b9a078
+		  break;
4b9a078
 		case R_390_GOTPLT12:
4b9a078
 		case R_390_GOTPLT16:
4b9a078
 		case R_390_GOTPLT20:
4b9a078
@@ -2625,9 +2629,9 @@ elf_s390_relocate_section (bfd *output_b
4b9a078
 
4b9a078
 	  /* For local symbols or if we didn't make a PLT entry for
4b9a078
 	     this symbol resolve the symbol directly.  */
4b9a078
-	  if (   h == NULL
4b9a078
+	  if (h == NULL
4b9a078
 	      || h->plt.offset == (bfd_vma) -1
4b9a078
-	      || htab->elf.splt == NULL)
4b9a078
+	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
4b9a078
 	    {
4b9a078
 	      relocation -= htab->elf.sgot->output_section->vma;
4b9a078
 	      break;
4b9a078
Index: binutils/bfd/elf64-s390.c
4b9a078
===================================================================
4b9a078
--- binutils.orig/bfd/elf64-s390.c
4b9a078
+++ binutils/bfd/elf64-s390.c
4b9a078
@@ -2306,6 +2306,11 @@ elf_s390_relocate_section (bfd *output_b
4b9a078
 
4b9a078
 	      switch (r_type)
4b9a078
 		{
4b9a078
+		case R_390_PLTOFF16:
4b9a078
+		case R_390_PLTOFF32:
4b9a078
+		case R_390_PLTOFF64:
4b9a078
+		  relocation -= htab->elf.sgot->output_section->vma;
4b9a078
+		  break;
4b9a078
 		case R_390_GOTPLT12:
4b9a078
 		case R_390_GOTPLT16:
4b9a078
 		case R_390_GOTPLT20:
4b9a078
@@ -2561,7 +2566,7 @@ elf_s390_relocate_section (bfd *output_b
4b9a078
 	    break;
4b9a078
 
4b9a078
 	  if (h->plt.offset == (bfd_vma) -1
4b9a078
-	      || (htab->elf.splt == NULL && htab->elf.iplt == NULL))
4b9a078
+	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
4b9a078
 	    {
4b9a078
 	      /* We didn't make a PLT entry for this symbol.  This
4b9a078
 		 happens when statically linking PIC code, or when
4b9a078
@@ -2587,9 +2592,9 @@ elf_s390_relocate_section (bfd *output_b
4b9a078
 
4b9a078
 	  /* For local symbols or if we didn't make a PLT entry for
4b9a078
 	     this symbol resolve the symbol directly.  */
4b9a078
-	  if (   h == NULL
4b9a078
+	  if (h == NULL
4b9a078
 	      || h->plt.offset == (bfd_vma) -1
4b9a078
-	      || htab->elf.splt == NULL)
4b9a078
+	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
4b9a078
 	    {
4b9a078
 	      relocation -= htab->elf.sgot->output_section->vma;
4b9a078
 	      break;
4b9a078