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