NetBSD Problem Report #50777

From ryo_on@yk.rim.or.jp  Sun Feb  7 06:33:36 2016
Return-Path: <ryo_on@yk.rim.or.jp>
Received: from mail.netbsd.org (mail.NetBSD.org [199.233.217.200])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
	(Client CN "mail.netbsd.org", Issuer "Postmaster NetBSD.org" (verified OK))
	by mollari.NetBSD.org (Postfix) with ESMTPS id B10207ABDD
	for <gnats-bugs@gnats.NetBSD.org>; Sun,  7 Feb 2016 06:33:36 +0000 (UTC)
Message-Id: <20160207063330.66F3330004F36@mail.SiriusCloud.jp>
Date: Sun, 07 Feb 2016 15:33:35 +0900
From: ryoon@NetBSD.org
Reply-To: ryoon@NetBSD.org
To: gnats-bugs@gnats.NetBSD.org
Subject: Please support lang/go14 with new amd64 and i386 binutils of NetBSD current
X-Send-Pr-Version: 3.95

>Number:         50777
>Notify-List:    coypu@sdf.org, carsten.kunze@arcor.de
>Category:       pkg
>Synopsis:       Please support lang/go14 with new amd64 and i386 binutils of NetBSD current
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bsiegert
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Feb 07 06:35:00 +0000 2016
>Closed-Date:    Mon Sep 12 16:07:55 +0000 2016
>Last-Modified:  Mon Sep 12 16:07:55 +0000 2016
>Originator:     Ryo ONODERA
>Release:        NetBSD 7.99.26
>Organization:

>Environment:


System: NetBSD brownie 7.99.26 NetBSD 7.99.26 (DTRACE7) #0: Sat Feb 6 13:11:00 JST 2016 ryo_on@brownie:/usr/world/7.99/amd64/obj/sys/arch/amd64/compile/DTRACE7 amd64
Architecture: x86_64
Machine: amd64
>Description:
make in lang/go14 under NetBSD/amd64 current fails as follows:
# cmd/pprof
/usr/tmp/pkgsrc/lang/go14/work/go/pkg/netbsd_amd64/runtime/cgo.a(_all.o): unknow
n relocation type 42; compiled without -fpic?
/usr/tmp/pkgsrc/lang/go14/work/go/pkg/netbsd_amd64/runtime/cgo.a(_all.o): unknow
n relocation type 42; compiled without -fpic?
runtime/cgo(.text): unexpected relocation type 298
runtime/cgo(.text): unexpected relocation type 298

Please backport
https://github.com/golang/go/commit/914db9f060b1fd3eb1f74d48f3bd46a73d4ae9c7#diff-365d07f1d25de322fc80f8376480dd71L82
to lang/go14.

>How-To-Repeat:
$ cd /usr/pkgsrc/lang/go14
$ make

>Fix:

My idea is here:

Index: distinfo
===================================================================
RCS file: /cvsroot/pkgsrc/lang/go14/distinfo,v
retrieving revision 1.5
diff -u -r1.5 distinfo
--- distinfo	21 Dec 2015 20:20:02 -0000	1.5
+++ distinfo	7 Feb 2016 06:26:43 -0000
@@ -10,12 +10,14 @@
 SHA1 (patch-misc_cgo_testso_cgoso__unix.go) = 58e221e1ce123428a3fe6ecededf0590cbfb81ca
 SHA1 (patch-src_cmd_5l_asm.c) = fd78203b7c92b9bbd057077671d649bac2d121ee
 SHA1 (patch-src_cmd_6c_txt.c) = 7ccddadedceb13b6a7c2f29cdfca501a85888488
-SHA1 (patch-src_cmd_6l_asm.c) = 1f244d7c760e738057b1649ed486206a6ec3812b
+SHA1 (patch-src_cmd_6l_asm.c) = e15ece4886c459c500b91b3b0c6a4ccbe111bfc0
 SHA1 (patch-src_cmd_8l_asm.c) = e5233a3d9b08f2ef8d809756ef7d6fc4b03303b9
 SHA1 (patch-src_cmd_go_build.go) = f7705aa955241d3add353a144a676a58a0a1617e
 SHA1 (patch-src_cmd_go_pkg.go) = e70441f3fdf312eb389e4dd5408c207a4d4b8350
 SHA1 (patch-src_cmd_ld_data.c) = 96181bac03333f7bc5293ab9ddbd68bb9174ed47
 SHA1 (patch-src_cmd_ld_doc.go) = 000447f5a5862358a85a7510dc92195494972e26
+SHA1 (patch-src_cmd_ld_elf.h) = 757c614dffc77843cb28b8a699a82e4a42dc3dba
+SHA1 (patch-src_cmd_ld_ldelf.c) = 61ff04d2cb6748b0832fd930b42fff189b6f9800
 SHA1 (patch-src_cmd_ld_lib.h) = e6aa8b9520e1b75f435e179e5ea4f0ef738621f4
 SHA1 (patch-src_cmd_ld_pobj.c) = eaf67d6bc4f9ba835893f9d8c2d36941ff84933d
 SHA1 (patch-src_crypto_x509_root__unix.go) = c933f334da1c8de48a06d23abd12da01f73776e6
Index: patches/patch-src_cmd_6l_asm.c
===================================================================
RCS file: /cvsroot/pkgsrc/lang/go14/patches/patch-src_cmd_6l_asm.c,v
retrieving revision 1.1
diff -u -r1.1 patch-src_cmd_6l_asm.c
--- patches/patch-src_cmd_6l_asm.c	31 Jul 2015 14:46:25 -0000	1.1
+++ patches/patch-src_cmd_6l_asm.c	7 Feb 2016 06:26:43 -0000
@@ -2,9 +2,18 @@

 Support cgo on illumos.

---- src/cmd/6l/asm.c.orig	2014-12-11 01:18:10.000000000 +0000
+--- src/cmd/6l/asm.c.orig	2015-09-23 04:37:36.000000000 +0000
 +++ src/cmd/6l/asm.c
-@@ -209,12 +209,23 @@ adddynrel(LSym *s, Reloc *r)
+@@ -118,6 +118,8 @@ adddynrel(LSym *s, Reloc *r)
+ 		return;
+ 	
+ 	case 256 + R_X86_64_GOTPCREL:
++	case 256 + R_X86_64_GOTPCRELX:
++	case 256 + R_X86_64_REX_GOTPCRELX:
+ 		if(targ->type != SDYNIMPORT) {
+ 			// have symbol
+ 			if(r->off >= 2 && s->p[r->off-2] == 0x8b) {
+@@ -209,12 +211,23 @@ adddynrel(LSym *s, Reloc *r)

  	case R_ADDR:
  		if(s->type == STEXT && iself) {
@@ -34,7 +43,7 @@
  			return;
  		}
  		if(s->type != SDATA)
-@@ -539,28 +550,9 @@ adddynsym(Link *ctxt, LSym *s)
+@@ -539,28 +552,9 @@ adddynsym(Link *ctxt, LSym *s)

  		/* reserved */
  		adduint8(ctxt, d, 0);
Index: patches/patch-src_cmd_8l_asm.c
===================================================================
RCS file: /cvsroot/pkgsrc/lang/go14/patches/patch-src_cmd_8l_asm.c,v
retrieving revision 1.1
diff -u -r1.1 patch-src_cmd_8l_asm.c
--- patches/patch-src_cmd_8l_asm.c	31 Jul 2015 14:46:25 -0000	1.1
+++ patches/patch-src_cmd_8l_asm.c	7 Feb 2016 06:26:43 -0000
@@ -2,9 +2,17 @@

 Support cgo on illumos.

---- src/cmd/8l/asm.c.orig	2014-12-11 01:18:10.000000000 +0000
+--- src/cmd/8l/asm.c.orig	2015-09-23 04:37:36.000000000 +0000
 +++ src/cmd/8l/asm.c
-@@ -508,27 +508,8 @@ adddynsym(Link *ctxt, LSym *s)
+@@ -115,6 +115,7 @@ adddynrel(LSym *s, Reloc *r)
+ 		return;		
+ 	
+ 	case 256 + R_386_GOT32:
++	case 256 + R_386_GOT32X:
+ 		if(targ->type != SDYNIMPORT) {
+ 			// have symbol
+ 			if(r->off >= 2 && s->p[r->off-2] == 0x8b) {
+@@ -508,27 +509,8 @@ adddynsym(Link *ctxt, LSym *s)
  		adduint8(ctxt, d, t);
  		adduint8(ctxt, d, 0);

Index: patches/patch-src_cmd_ld_elf.h
===================================================================
RCS file: patches/patch-src_cmd_ld_elf.h
diff -N patches/patch-src_cmd_ld_elf.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_cmd_ld_elf.h	7 Feb 2016 06:26:43 -0000
@@ -0,0 +1,154 @@
+$NetBSD$
+
+--- src/cmd/ld/elf.h.orig	2015-09-23 04:37:36.000000000 +0000
++++ src/cmd/ld/elf.h
+@@ -478,32 +478,47 @@ typedef struct {
+  * Relocation types.
+  */
+ 
+-#define	R_X86_64_NONE	0	/* No relocation. */
+-#define	R_X86_64_64	1	/* Add 64 bit symbol value. */
+-#define	R_X86_64_PC32	2	/* PC-relative 32 bit signed sym value. */
+-#define	R_X86_64_GOT32	3	/* PC-relative 32 bit GOT offset. */
+-#define	R_X86_64_PLT32	4	/* PC-relative 32 bit PLT offset. */
+-#define	R_X86_64_COPY	5	/* Copy data from shared object. */
+-#define	R_X86_64_GLOB_DAT 6	/* Set GOT entry to data address. */
+-#define	R_X86_64_JMP_SLOT 7	/* Set GOT entry to code address. */
+-#define	R_X86_64_RELATIVE 8	/* Add load address of shared object. */
+-#define	R_X86_64_GOTPCREL 9	/* Add 32 bit signed pcrel offset to GOT. */
+-#define	R_X86_64_32	10	/* Add 32 bit zero extended symbol value */
+-#define	R_X86_64_32S	11	/* Add 32 bit sign extended symbol value */
+-#define	R_X86_64_16	12	/* Add 16 bit zero extended symbol value */
+-#define	R_X86_64_PC16	13	/* Add 16 bit signed extended pc relative symbol value */
+-#define	R_X86_64_8	14	/* Add 8 bit zero extended symbol value */
+-#define	R_X86_64_PC8	15	/* Add 8 bit signed extended pc relative symbol value */
+-#define	R_X86_64_DTPMOD64 16	/* ID of module containing symbol */
+-#define	R_X86_64_DTPOFF64 17	/* Offset in TLS block */
+-#define	R_X86_64_TPOFF64 18	/* Offset in static TLS block */
+-#define	R_X86_64_TLSGD	19	/* PC relative offset to GD GOT entry */
+-#define	R_X86_64_TLSLD	20	/* PC relative offset to LD GOT entry */
+-#define	R_X86_64_DTPOFF32 21	/* Offset in TLS block */
+-#define	R_X86_64_GOTTPOFF 22	/* PC relative offset to IE GOT entry */
+-#define	R_X86_64_TPOFF32 23	/* Offset in static TLS block */
+-
+-#define	R_X86_64_COUNT	24	/* Count of defined relocation types. */
++#define	R_X86_64_NONE           0
++#define	R_X86_64_64             1
++#define	R_X86_64_PC32           2
++#define	R_X86_64_GOT32          3
++#define	R_X86_64_PLT32          4
++#define	R_X86_64_COPY           5
++#define	R_X86_64_GLOB_DAT       6
++#define	R_X86_64_JMP_SLOT       7
++#define	R_X86_64_RELATIVE       8
++#define	R_X86_64_GOTPCREL       9
++#define	R_X86_64_32             10
++#define	R_X86_64_32S            11
++#define	R_X86_64_16             12
++#define	R_X86_64_PC16           13
++#define	R_X86_64_8              14
++#define	R_X86_64_PC8            15
++#define	R_X86_64_DTPMOD64       16
++#define	R_X86_64_DTPOFF64       17
++#define	R_X86_64_TPOFF64        18
++#define	R_X86_64_TLSGD          19
++#define	R_X86_64_TLSLD          20
++#define	R_X86_64_DTPOFF32       21
++#define	R_X86_64_GOTTPOFF       22
++#define	R_X86_64_TPOFF32        23
++#define	R_X86_64_PC64           24
++#define	R_X86_64_GOTOFF64       25
++#define	R_X86_64_GOTPC32        26
++#define	R_X86_64_GOT64          27
++#define	R_X86_64_GOTPCREL64     28
++#define	R_X86_64_GOTPC64        29
++#define	R_X86_64_GOTPLT64       30
++#define	R_X86_64_PLTOFF64       31
++#define	R_X86_64_SIZE32         32
++#define	R_X86_64_SIZE64         33
++#define	R_X86_64_GOTPC32_TLSDEC 34
++#define	R_X86_64_TLSDESC_CALL   35
++#define	R_X86_64_TLSDESC        36
++#define	R_X86_64_IRELATIVE      37
++#define	R_X86_64_PC32_BND       40
++#define	R_X86_64_GOTPCRELX      41
++#define	R_X86_64_REX_GOTPCRELX  42
+ 
+ 
+ #define	R_ALPHA_NONE		0	/* No reloc */
+@@ -581,39 +596,42 @@ typedef struct {
+ #define	R_ARM_COUNT		38	/* Count of defined relocation types. */
+ 
+ 
+-#define	R_386_NONE	0	/* No relocation. */
+-#define	R_386_32	1	/* Add symbol value. */
+-#define	R_386_PC32	2	/* Add PC-relative symbol value. */
+-#define	R_386_GOT32	3	/* Add PC-relative GOT offset. */
+-#define	R_386_PLT32	4	/* Add PC-relative PLT offset. */
+-#define	R_386_COPY	5	/* Copy data from shared object. */
+-#define	R_386_GLOB_DAT	6	/* Set GOT entry to data address. */
+-#define	R_386_JMP_SLOT	7	/* Set GOT entry to code address. */
+-#define	R_386_RELATIVE	8	/* Add load address of shared object. */
+-#define	R_386_GOTOFF	9	/* Add GOT-relative symbol address. */
+-#define	R_386_GOTPC	10	/* Add PC-relative GOT table address. */
+-#define	R_386_TLS_TPOFF	14	/* Negative offset in static TLS block */
+-#define	R_386_TLS_IE	15	/* Absolute address of GOT for -ve static TLS */
+-#define	R_386_TLS_GOTIE	16	/* GOT entry for negative static TLS block */
+-#define	R_386_TLS_LE	17	/* Negative offset relative to static TLS */
+-#define	R_386_TLS_GD	18	/* 32 bit offset to GOT (index,off) pair */
+-#define	R_386_TLS_LDM	19	/* 32 bit offset to GOT (index,zero) pair */
+-#define	R_386_TLS_GD_32	24	/* 32 bit offset to GOT (index,off) pair */
+-#define	R_386_TLS_GD_PUSH 25	/* pushl instruction for Sun ABI GD sequence */
+-#define	R_386_TLS_GD_CALL 26	/* call instruction for Sun ABI GD sequence */
+-#define	R_386_TLS_GD_POP 27	/* popl instruction for Sun ABI GD sequence */
+-#define	R_386_TLS_LDM_32 28	/* 32 bit offset to GOT (index,zero) pair */
+-#define	R_386_TLS_LDM_PUSH 29	/* pushl instruction for Sun ABI LD sequence */
+-#define	R_386_TLS_LDM_CALL 30	/* call instruction for Sun ABI LD sequence */
+-#define	R_386_TLS_LDM_POP 31	/* popl instruction for Sun ABI LD sequence */
+-#define	R_386_TLS_LDO_32 32	/* 32 bit offset from start of TLS block */
+-#define	R_386_TLS_IE_32	33	/* 32 bit offset to GOT static TLS offset entry */
+-#define	R_386_TLS_LE_32	34	/* 32 bit offset within static TLS block */
+-#define	R_386_TLS_DTPMOD32 35	/* GOT entry containing TLS index */
+-#define	R_386_TLS_DTPOFF32 36	/* GOT entry containing TLS offset */
+-#define	R_386_TLS_TPOFF32 37	/* GOT entry of -ve static TLS offset */
+-
+-#define	R_386_COUNT	38	/* Count of defined relocation types. */
++#define	R_386_NONE          0
++#define	R_386_32            1
++#define	R_386_PC32          2
++#define	R_386_GOT32         3
++#define	R_386_PLT32         4
++#define	R_386_COPY          5
++#define	R_386_GLOB_DAT      6
++#define	R_386_JMP_SLOT      7
++#define	R_386_RELATIVE      8
++#define	R_386_GOTOFF        9
++#define	R_386_GOTPC         10
++#define	R_386_TLS_TPOFF     14
++#define	R_386_TLS_IE        15
++#define	R_386_TLS_GOTIE     16
++#define	R_386_TLS_LE        17
++#define	R_386_TLS_GD        18
++#define	R_386_TLS_LDM       19
++#define	R_386_TLS_GD_32     24
++#define	R_386_TLS_GD_PUSH   25
++#define	R_386_TLS_GD_CALL   26
++#define	R_386_TLS_GD_POP    27
++#define	R_386_TLS_LDM_32    28
++#define	R_386_TLS_LDM_PUSH  29
++#define	R_386_TLS_LDM_CALL  30
++#define	R_386_TLS_LDM_POP   31
++#define	R_386_TLS_LDO_32    32
++#define	R_386_TLS_IE_32     33
++#define	R_386_TLS_LE_32     34
++#define	R_386_TLS_DTPMOD32  35
++#define	R_386_TLS_DTPOFF32  36
++#define	R_386_TLS_TPOFF32   37
++#define	R_386_TLS_GOTDESC   39
++#define	R_386_TLS_DESC_CALL 40
++#define	R_386_TLS_DESC      41
++#define	R_386_IRELATIVE     42
++#define	R_386_GOT32X        43
+ 
+ #define	R_PPC_NONE		0	/* No relocation. */
+ #define	R_PPC_ADDR32		1
Index: patches/patch-src_cmd_ld_ldelf.c
===================================================================
RCS file: patches/patch-src_cmd_ld_ldelf.c
diff -N patches/patch-src_cmd_ld_ldelf.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_cmd_ld_ldelf.c	7 Feb 2016 06:26:43 -0000
@@ -0,0 +1,20 @@
+$NetBSD$
+
+--- src/cmd/ld/ldelf.c.orig	2015-09-23 04:37:36.000000000 +0000
++++ src/cmd/ld/ldelf.c
+@@ -888,12 +888,15 @@ reltype(char *pn, int elftype, uchar *si
+ 	case R('6', R_X86_64_PC32):
+ 	case R('6', R_X86_64_PLT32):
+ 	case R('6', R_X86_64_GOTPCREL):
++	case R('6', R_X86_64_GOTPCRELX):
++	case R('6', R_X86_64_REX_GOTPCRELX):
+ 	case R('8', R_386_32):
+ 	case R('8', R_386_PC32):
+ 	case R('8', R_386_GOT32):
+ 	case R('8', R_386_PLT32):
+ 	case R('8', R_386_GOTOFF):
+ 	case R('8', R_386_GOTPC):
++	case R('8', R_386_GOT32X):
+ 		*siz = 4;
+ 		break;
+ 	case R('6', R_X86_64_64):

>Release-Note:

>Audit-Trail:

Responsible-Changed-From-To: pkg-manager->bsiegert
Responsible-Changed-By: wiz@NetBSD.org
Responsible-Changed-When: Sun, 07 Feb 2016 07:23:04 +0000
Responsible-Changed-Why:
Over to maintainer


From: "Benny Siegert" <bsiegert@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/50777 CVS commit: pkgsrc/lang/go14
Date: Sun, 21 Feb 2016 14:32:25 +0000

 Module Name:	pkgsrc
 Committed By:	bsiegert
 Date:		Sun Feb 21 14:32:25 UTC 2016

 Modified Files:
 	pkgsrc/lang/go14: Makefile distinfo
 	pkgsrc/lang/go14/patches: patch-src_cmd_6l_asm.c patch-src_cmd_8l_asm.c
 Added Files:
 	pkgsrc/lang/go14/patches: patch-src_cmd_ld_elf.h
 	    patch-src_cmd_ld_ldelf.c

 Log Message:
 Backport fix for new binutils to make go14 compile under NetBSD-current.
 Patch from Ryo Onodera in PR pkg/50777.

 The upstream bug report is https://github.com/golang/go/issues/13114.

 Bump PKGREVISION.


 To generate a diff of this commit:
 cvs rdiff -u -r1.6 -r1.7 pkgsrc/lang/go14/Makefile
 cvs rdiff -u -r1.5 -r1.6 pkgsrc/lang/go14/distinfo
 cvs rdiff -u -r1.1 -r1.2 pkgsrc/lang/go14/patches/patch-src_cmd_6l_asm.c \
     pkgsrc/lang/go14/patches/patch-src_cmd_8l_asm.c
 cvs rdiff -u -r0 -r1.1 pkgsrc/lang/go14/patches/patch-src_cmd_ld_elf.h \
     pkgsrc/lang/go14/patches/patch-src_cmd_ld_ldelf.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: open->feedback
State-Changed-By: bsiegert@NetBSD.org
State-Changed-When: Sun, 21 Feb 2016 14:36:53 +0000
State-Changed-Why:
I don't have a system to test this on. Does this fix the issue?


State-Changed-From-To: feedback->closed
State-Changed-By: maya@NetBSD.org
State-Changed-When: Mon, 12 Sep 2016 16:07:55 +0000
State-Changed-Why:
I can build it fine on amd64, build hangs on i386.
I will open a new bug for the i386 problem, which
may be a toolchain issue.


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2014 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.