Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Dec 2016 02:52:13 +0000 (UTC)
From:      Jason Unovitch <junovitch@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org
Subject:   svn commit: r428028 - in branches/2016Q4/devel/binutils: . files
Message-ID:  <201612070252.uB72qD39018486@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: junovitch
Date: Wed Dec  7 02:52:13 2016
New Revision: 428028
URL: https://svnweb.freebsd.org/changeset/ports/428028

Log:
  MFH: r427378
  
  Fix booting the arm64 kernel when built with clang 3.9.0
  
  Clang 3.9.0 changes how weak extern is handled. They now use the got to
  handle them. This is a problem as ld.bfd doesn't fill out any default value
  in the got so pointers become NULL. This caused the kernel to fail to boot
  as we use this in linker sets.
  
  This fixes the issue by setting a default value in the got. The kernel
  still loads data through it, but because we always load it at a fixed
  virtual address the address it finds is valid.
  
  Requested by:	andrew
  Approved by:	ports-secteam (with hat), bapt
  Differential Revision:	https://reviews.freebsd.org/D8622

Added:
  branches/2016Q4/devel/binutils/files/patch-bfd_elfnn-aarch64.c
     - copied unchanged from r427378, head/devel/binutils/files/patch-bfd_elfnn-aarch64.c
Modified:
  branches/2016Q4/devel/binutils/Makefile
Directory Properties:
  branches/2016Q4/   (props changed)

Modified: branches/2016Q4/devel/binutils/Makefile
==============================================================================
--- branches/2016Q4/devel/binutils/Makefile	Wed Dec  7 02:35:13 2016	(r428027)
+++ branches/2016Q4/devel/binutils/Makefile	Wed Dec  7 02:52:13 2016	(r428028)
@@ -3,7 +3,7 @@
 
 PORTNAME=	binutils
 PORTVERSION=	2.27
-PORTREVISION=	4
+PORTREVISION=	5
 PORTEPOCH?=	1
 CATEGORIES?=	devel
 MASTER_SITES=	SOURCEWARE/binutils/releases

Copied: branches/2016Q4/devel/binutils/files/patch-bfd_elfnn-aarch64.c (from r427378, head/devel/binutils/files/patch-bfd_elfnn-aarch64.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2016Q4/devel/binutils/files/patch-bfd_elfnn-aarch64.c	Wed Dec  7 02:52:13 2016	(r428028, copy of r427378, head/devel/binutils/files/patch-bfd_elfnn-aarch64.c)
@@ -0,0 +1,28 @@
+--- bfd/elfnn-aarch64.c.orig	2016-11-20 12:04:44.613621000 +0000
++++ bfd/elfnn-aarch64.c	2016-11-20 12:05:01.143334000 +0000
+@@ -4369,7 +4369,9 @@
+       off = h->got.offset;
+       BFD_ASSERT (off != (bfd_vma) - 1);
+       if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
+-	  || (bfd_link_pic (info)
++	  || ((bfd_link_pic (info)
++	      || (!bfd_link_relocatable (info)
++		  && (info->export_dynamic || info->dynamic)))
+ 	      && SYMBOL_REFERENCES_LOCAL (info, h))
+ 	  || (ELF_ST_VISIBILITY (h->other)
+ 	      && h->root.type == bfd_link_hash_undefweak))
+@@ -8891,6 +8893,14 @@
+ 			   + h->root.u.def.section->output_section->vma
+ 			   + h->root.u.def.section->output_offset);
+ 	}
++      else if (!bfd_link_relocatable (info)
++	    && (info->export_dynamic || info->dynamic)
++	    && SYMBOL_REFERENCES_LOCAL (info, h))
++	{
++	  BFD_ASSERT ((h->got.offset & 1) != 0);
++	  rela.r_info = ELFNN_R_INFO (h->dynindx, AARCH64_R (GLOB_DAT));
++	  rela.r_addend = 0;
++	}
+       else
+ 	{
+ do_glob_dat:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612070252.uB72qD39018486>