The 1.0.3 release of lang/go makes use of the old __tfork syscall, which was 
recently removed by guenther@. The attached diff makes lang/go use the newer 
version of the __tfork syscall. Additionally, switch to __set_tcb instead of 
using sysarch, which allows for the removal of systrace.filter (well, at 
least the contents - I'll delete the file once the tree allows).

Passes regress on amd64 and i386.

ok?

P.S. Upstream tip already does both of these things and I had been hoping that 
Go 1.1 would be released before guenther@ removed the obsoleted syscall!
-- 

    "Action without study is fatal. Study without action is futile."
        -- Mary Ritter Beard
Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/go/Makefile,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile
--- Makefile	1 Oct 2012 06:20:09 -0000	1.7
+++ Makefile	7 Mar 2013 14:52:11 -0000
@@ -5,6 +5,7 @@ ONLY_FOR_ARCHS =	amd64 i386
 COMMENT =		Go programming language
 
 VERSION =		1.0.3
+REVISION =		0
 EXTRACT_SUFX =		.src.tar.gz
 DISTNAME = 		go${VERSION}
 PKGNAME = 		go-${VERSION}
Index: systrace.filter
===================================================================
RCS file: /cvs/ports/lang/go/systrace.filter,v
retrieving revision 1.2
diff -u -p -r1.2 systrace.filter
--- systrace.filter	4 Jul 2012 15:20:31 -0000	1.2
+++ systrace.filter	7 Mar 2013 14:52:11 -0000
@@ -1,4 +1 @@
 # $OpenBSD: systrace.filter,v 1.2 2012/07/04 15:20:31 sthen Exp $
-# Go programs (including go_bootstrap) currently need sysarch().
-	native-sysarch: permit
-	native-compat_o51___tfork: permit
Index: patches/patch-src_cmd_ld_elf_c
===================================================================
RCS file: /cvs/ports/lang/go/patches/patch-src_cmd_ld_elf_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src_cmd_ld_elf_c
--- patches/patch-src_cmd_ld_elf_c	19 Sep 2012 21:10:38 -0000	1.1
+++ patches/patch-src_cmd_ld_elf_c	7 Mar 2013 14:52:11 -0000
@@ -1,7 +1,7 @@
-$OpenBSD: patch-src_cmd_ld_elf_c,v 1.1 2012/09/19 21:10:38 sthen Exp $
---- src/cmd/ld/elf.c.orig	Thu Jun 14 04:23:38 2012
-+++ src/cmd/ld/elf.c	Mon Sep 17 11:38:32 2012
-@@ -348,20 +348,16 @@ elfwriteinterp(vlong stridx)
+$OpenBSD$
+--- src/cmd/ld/elf.c.orig	Mon Sep 24 05:43:12 2012
++++ src/cmd/ld/elf.c	Sun Nov 18 02:37:55 2012
+@@ -351,20 +351,16 @@ elfwriteinterp(vlong stridx)
  	return sh->size;
  }
  
@@ -29,7 +29,7 @@ $OpenBSD: patch-src_cmd_ld_elf_c,v 1.1 2
  	sh->addr = startva + resoff - n;
  	sh->off = resoff - n;
  	sh->size = n;
-@@ -369,8 +365,9 @@ elfnetbsdsig(ElfShdr *sh, uint64 startva, uint64 resof
+@@ -372,8 +368,9 @@ elfnetbsdsig(ElfShdr *sh, uint64 startva, uint64 resof
  	return n;
  }
  
@@ -41,7 +41,7 @@ $OpenBSD: patch-src_cmd_ld_elf_c,v 1.1 2
  	ElfShdr *sh = nil;
  	int i;
  
-@@ -378,15 +375,79 @@ elfwritenetbsdsig(vlong stridx) {
+@@ -381,15 +378,79 @@ elfwritenetbsdsig(vlong stridx) {
  		if(shdr[i]->name == stridx)
  			sh = shdr[i];
  	if(sh == nil)
Index: patches/patch-src_pkg_runtime_sys_openbsd_386_s
===================================================================
RCS file: /cvs/ports/lang/go/patches/patch-src_pkg_runtime_sys_openbsd_386_s,v
retrieving revision 1.2
diff -u -p -r1.2 patch-src_pkg_runtime_sys_openbsd_386_s
--- patches/patch-src_pkg_runtime_sys_openbsd_386_s	15 Apr 2012 13:37:27 -0000	1.2
+++ patches/patch-src_pkg_runtime_sys_openbsd_386_s	7 Mar 2013 14:52:11 -0000
@@ -1,6 +1,6 @@
-$OpenBSD: patch-src_pkg_runtime_sys_openbsd_386_s,v 1.2 2012/04/15 13:37:27 jsing Exp $
---- src/pkg/runtime/sys_openbsd_386.s.orig	Wed Mar 28 15:49:26 2012
-+++ src/pkg/runtime/sys_openbsd_386.s	Fri Mar  2 02:14:56 2012
+$OpenBSD: patch-src_pkg_runtime_sys_openbsd_386_s,v 1.1.1.1 2012/03/31 12:37:16 jsing Exp $
+--- src/pkg/runtime/sys_openbsd_386.s.orig	Mon Sep 24 05:43:12 2012
++++ src/pkg/runtime/sys_openbsd_386.s	Sun Nov 18 02:56:11 2012
 @@ -12,14 +12,16 @@
  TEXT runtime·exit(SB),7,$-4
  	MOVL	$1, AX
@@ -50,7 +50,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  TEXT runtime·sigtramp(SB),7,$44
  	get_tls(CX)
  
-@@ -174,40 +184,46 @@ TEXT runtime·sigtramp(SB),7,$44
+@@ -174,45 +184,51 @@ TEXT runtime·sigtramp(SB),7,$44
  	MOVL	AX, 4(SP)		// arg 1 - sigcontext
  	MOVL	$103, AX		// sys_sigreturn
  	INT	$0x80
@@ -63,7 +63,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
 -	MOVL	flags+8(SP), AX
 -	MOVL	stack+12(SP), CX
 +// int32 tfork_thread(void *stack, M *m, G *g, void (*fn)(void));
-+TEXT runtime·tfork_thread(SB),7,$20
++TEXT runtime·tfork_thread(SB),7,$24
  
  	// Copy m, g, fn off parent stack for use by child.
 +	MOVL	stack+4(FP), CX
@@ -78,18 +78,22 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
 +	MOVL	fn+16(FP), SI
  	MOVL	SI, 8(CX)
  	MOVL	$1234, 12(CX)
- 	MOVL	CX, SI
+-	MOVL	CX, SI
  
-+	LEAL	8(SP), AX
++	MOVL	mm+8(FP), DX
++	LEAL	m_procid(CX), DX
++
++	LEAL	12(SP), AX
 +	MOVL	$0, 0(AX)		// tf_tcb
-+	MOVL	$0, 4(AX)		// tf_tid
-+	MOVL	$0, 8(AX)		// tf_flags
++	MOVL	DX, 4(AX)		// tf_tid
++	MOVL	CX, 8(AX)		// tf_stack
 +
  	MOVL	$0, 0(SP)		// syscall gap
 -	MOVL	AX, 4(SP)		// arg 1 - flags
 -	MOVL	$251, AX		// sys_rfork
 +	MOVL	AX, 4(SP)		// arg 1 - params
-+	MOVL	$328, AX		// sys___tfork
++	MOVL	$12, 8(SP)		// arg 2 - psize
++	MOVL	$8, AX			// sys___tfork
  	INT	$0x80
  
 -	// Return if rfork syscall failed
@@ -111,9 +115,26 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
 +	MOVL	AX, 0(DX)
  	RET
  
- 	// In child, on new stack.
-@@ -286,7 +302,7 @@ TEXT runtime·settls(SB),7,$16
- 	MOVL	$165, AX		// sys_sysarch
+-	// In child, on new stack.
+-	MOVL    SI, SP
+-
+ 	// Paranoia: check that SP is as we expect.
+ 	MOVL	12(SP), BP
+ 	CMPL	BP, $1234
+@@ -277,16 +293,14 @@ TEXT runtime·setldt(SB),7,$8
+ 
+ TEXT runtime·settls(SB),7,$16
+ 	// adjust for ELF: wants to use -8(GS) and -4(GS) for g and m
+-	MOVL	20(SP), CX
++	MOVL	tlsbase+0(FP), CX
+ 	ADDL	$8, CX
+-	MOVL	CX, 0(CX)
+ 	MOVL	$0, 0(SP)		// syscall gap
+-	MOVL	$9, 4(SP)		// I386_SET_GSBASE (machine/sysarch.h)
+-	MOVL	CX, 8(SP)		// pointer to base
+-	MOVL	$165, AX		// sys_sysarch
++	MOVL	CX, 4(SP)		// arg 1 - pointer to base
++	MOVL	$329, AX		// sys___set_tcb
  	INT	$0x80
  	JCC	2(PC)
 -	MOVL	$0xf1, 0xf1  // crash
@@ -121,7 +142,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	RET
  
  TEXT runtime·osyield(SB),7,$-4
-@@ -295,12 +311,12 @@ TEXT runtime·osyield(SB),7,$-4
+@@ -295,12 +309,12 @@ TEXT runtime·osyield(SB),7,$-4
  	RET
  
  TEXT runtime·thrsleep(SB),7,$-4
Index: patches/patch-src_pkg_runtime_sys_openbsd_amd64_s
===================================================================
RCS file: /cvs/ports/lang/go/patches/patch-src_pkg_runtime_sys_openbsd_amd64_s,v
retrieving revision 1.2
diff -u -p -r1.2 patch-src_pkg_runtime_sys_openbsd_amd64_s
--- patches/patch-src_pkg_runtime_sys_openbsd_amd64_s	15 Apr 2012 13:37:27 -0000	1.2
+++ patches/patch-src_pkg_runtime_sys_openbsd_amd64_s	7 Mar 2013 14:52:11 -0000
@@ -1,7 +1,7 @@
-$OpenBSD: patch-src_pkg_runtime_sys_openbsd_amd64_s,v 1.2 2012/04/15 13:37:27 jsing Exp $
---- src/pkg/runtime/sys_openbsd_amd64.s.orig	Wed Mar 28 15:49:26 2012
-+++ src/pkg/runtime/sys_openbsd_amd64.s	Fri Mar  2 02:03:18 2012
-@@ -8,20 +8,23 @@
+$OpenBSD: patch-src_pkg_runtime_sys_openbsd_amd64_s,v 1.1.1.1 2012/03/31 12:37:16 jsing Exp $
+--- src/pkg/runtime/sys_openbsd_amd64.s.orig	Mon Sep 24 05:43:12 2012
++++ src/pkg/runtime/sys_openbsd_amd64.s	Sun Nov 18 03:23:21 2012
+@@ -8,20 +8,25 @@
  
  #include "zasm_GOOS_GOARCH.h"
  
@@ -23,11 +23,13 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
 +	MOVQ	fn+24(FP), R12
  
 -	MOVL	$251, AX		// sys_rfork
-+	LEAQ	8(SP), DI
-+	MOVQ	$0, 0(DI)		// tf_tcb
-+	MOVQ	$0, 8(DI)		// tf_tid
-+	MOVL	$0, 16(DI)		// tf_flags
-+	MOVL	$328, AX		// sys___tfork
++	LEAQ	m_procid(R8), AX
++	MOVQ	SP, DI			// arg 1 - params
++	MOVQ	$0, 0(DI)		//   tf_tcb
++	MOVQ	AX, 8(DI)		//   tf_tid
++	MOVQ	SI, 16(DI)		//   tf_stack
++	MOVQ	$24, SI			// arg 2 - psize
++	MOVL	$8, AX			// sys___tfork
  	SYSCALL
  
 -	// Return if rfork syscall failed
@@ -35,7 +37,22 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	JCC	3(PC)
  	NEGL	AX
  	RET
-@@ -53,7 +56,8 @@ TEXT runtime·rfork_thread(SB),7,$0
+@@ -31,14 +36,6 @@ TEXT runtime·rfork_thread(SB),7,$0
+ 	JEQ	2(PC)
+ 	RET
+ 
+-	// In child, on new stack.
+-	MOVQ	SI, SP
+-
+-	// Initialize m->procid to thread ID
+-	MOVL	$299, AX		// sys_getthrid
+-	SYSCALL
+-	MOVQ	AX, m_procid(R8)
+-
+ 	// Set FS to point at m->tls.
+ 	LEAQ	m_tls(R8), DI
+ 	CALL	runtime·settls(SB)
+@@ -53,7 +50,8 @@ TEXT runtime·rfork_thread(SB),7,$0
  	CALL	R12
  
  	// It shouldn't return.  If it does, exit
@@ -45,7 +62,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	SYSCALL
  	JMP	-3(PC)			// keep exiting
  
-@@ -67,14 +71,15 @@ TEXT runtime·thrsleep(SB),7,$0
+@@ -67,14 +65,15 @@ TEXT runtime·thrsleep(SB),7,$0
  	MOVL	16(SP), SI		// arg 2 - clock_id
  	MOVQ	24(SP), DX		// arg 3 - tp
  	MOVQ	32(SP), R10		// arg 4 - lock
@@ -63,7 +80,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	SYSCALL
  	RET
  
-@@ -83,13 +88,14 @@ TEXT runtime·exit(SB),7,$-8
+@@ -83,13 +82,14 @@ TEXT runtime·exit(SB),7,$-8
  	MOVL	8(SP), DI		// arg 1 - exit status
  	MOVL	$1, AX			// sys_exit
  	SYSCALL
@@ -81,7 +98,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	RET
  
  TEXT runtime·write(SB),7,$-8
-@@ -140,7 +146,7 @@ TEXT time·now(SB), 7, $32
+@@ -140,7 +140,7 @@ TEXT time·now(SB), 7, $32
  	MOVL	$116, AX		// sys_gettimeofday
  	SYSCALL
  	MOVQ	8(SP), AX		// sec
@@ -90,7 +107,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  
  	// sec is in AX, usec in DX
  	MOVQ	AX, sec+0(FP)
-@@ -154,7 +160,7 @@ TEXT runtime·nanotime(SB),7,$32
+@@ -154,7 +154,7 @@ TEXT runtime·nanotime(SB),7,$32
  	MOVL	$116, AX		// sys_gettimeofday
  	SYSCALL
  	MOVQ	8(SP), AX		// sec
@@ -99,7 +116,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  
  	// sec is in AX, usec in DX
  	// return nsec in AX
-@@ -170,9 +176,19 @@ TEXT runtime·sigaction(SB),7,$-8
+@@ -170,9 +170,19 @@ TEXT runtime·sigaction(SB),7,$-8
  	MOVL	$46, AX
  	SYSCALL
  	JCC	2(PC)
@@ -120,7 +137,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  TEXT runtime·sigtramp(SB),7,$64
  	get_tls(BX)
  	
-@@ -226,7 +242,7 @@ TEXT runtime·munmap(SB),7,$0
+@@ -226,7 +236,7 @@ TEXT runtime·munmap(SB),7,$0
  	MOVL	$73, AX			// sys_munmap
  	SYSCALL
  	JCC	2(PC)
@@ -129,7 +146,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	RET
  
  TEXT runtime·sigaltstack(SB),7,$-8
-@@ -235,7 +251,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
+@@ -235,20 +245,17 @@ TEXT runtime·sigaltstack(SB),7,$-8
  	MOVQ	$288, AX		// sys_sigaltstack
  	SYSCALL
  	JCC	2(PC)
@@ -138,8 +155,15 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	RET
  
  // set tls base to DI
-@@ -248,7 +264,7 @@ TEXT runtime·settls(SB),7,$8
- 	MOVQ	$165, AX		// sys_sysarch
+-TEXT runtime·settls(SB),7,$8
++TEXT runtime·settls(SB),7,$0
+ 	// adjust for ELF: wants to use -16(FS) and -8(FS) for g and m
+ 	ADDQ	$16, DI
+-	MOVQ	DI, 0(SP)
+-	MOVQ	SP, SI
+-	MOVQ	$12, DI			// AMD64_SET_FSBASE (machine/sysarch.h)
+-	MOVQ	$165, AX		// sys_sysarch
++	MOVQ	$329, AX		// sys___settcb
  	SYSCALL
  	JCC	2(PC)
 -	MOVL	$0xf1, 0xf1  // crash
@@ -147,7 +171,7 @@ $OpenBSD: patch-src_pkg_runtime_sys_open
  	RET
  
  TEXT runtime·sysctl(SB),7,$0
-@@ -260,7 +276,7 @@ TEXT runtime·sysctl(SB),7,$0
+@@ -260,7 +267,7 @@ TEXT runtime·sysctl(SB),7,$0
  	MOVQ	48(SP), R9		// arg 6 - newlen
  	MOVQ	$202, AX		// sys___sysctl
  	SYSCALL

Reply via email to