$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 @@
 
 #include "zasm_GOOS_GOARCH.h"
 
-// int64 rfork_thread(int32 flags, void *stack, M *m, G *g, void (*fn)(void));
-TEXT runtime·rfork_thread(SB),7,$0
-	MOVL	flags+8(SP), DI
-	MOVQ	stack+16(SP), SI
+// int64 tfork_thread(void *stack, M *m, G *g, void (*fn)(void));
+TEXT runtime·tfork_thread(SB),7,$32
 
-	// Copy m, g, fn off parent stack for use by child.
-	MOVQ	mm+24(SP), R8
-	MOVQ	gg+32(SP), R9
-	MOVQ	fn+40(SP), R12
+	// Copy stack, m, g, fn off parent stack for use by child.
+	MOVQ	stack+0(FP), SI
+	MOVQ	mm+8(FP), R8
+	MOVQ	gg+16(FP), R9
+	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
 	SYSCALL
 
-	// Return if rfork syscall failed
+	// Return if tfork syscall failed
 	JCC	3(PC)
 	NEGL	AX
 	RET
@@ -53,7 +56,8 @@ TEXT runtime·rfork_thread(SB),7,$0
 	CALL	R12
 
 	// It shouldn't return.  If it does, exit
-	MOVL	$302, AX		// sys_threxit
+	MOVQ	$0, DI			// arg 1 - notdead
+	MOVL	$302, AX		// sys___threxit
 	SYSCALL
 	JMP	-3(PC)			// keep exiting
 
@@ -67,14 +71,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
-	MOVL	$300, AX		// sys_thrsleep
+	MOVQ	40(SP), R8		// arg 5 - abort
+	MOVL	$300, AX		// sys___thrsleep
 	SYSCALL
 	RET
 
 TEXT runtime·thrwakeup(SB),7,$0
 	MOVQ	8(SP), DI		// arg 1 - ident
 	MOVL	16(SP), SI		// arg 2 - n
-	MOVL	$301, AX		// sys_thrwakeup
+	MOVL	$301, AX		// sys___thrwakeup
 	SYSCALL
 	RET
 
@@ -83,13 +88,14 @@ TEXT runtime·exit(SB),7,$-8
 	MOVL	8(SP), DI		// arg 1 - exit status
 	MOVL	$1, AX			// sys_exit
 	SYSCALL
-	MOVL	$0xf1, 0xf1  // crash
+	MOVL	$0xf1, 0xf1		// crash
 	RET
 
 TEXT runtime·exit1(SB),7,$-8
-	MOVL	$302, AX		// sys_threxit
+	MOVQ	$0, DI			// arg 1 - notdead
+	MOVL	$302, AX		// sys___threxit
 	SYSCALL
-	MOVL	$0xf1, 0xf1  // crash
+	MOVL	$0xf1, 0xf1		// crash
 	RET
 
 TEXT runtime·write(SB),7,$-8
@@ -140,7 +146,7 @@ TEXT time·now(SB), 7, $32
 	MOVL	$116, AX		// sys_gettimeofday
 	SYSCALL
 	MOVQ	8(SP), AX		// sec
-	MOVL	16(SP), DX	// usec
+	MOVL	16(SP), DX		// usec
 
 	// sec is in AX, usec in DX
 	MOVQ	AX, sec+0(FP)
@@ -154,7 +160,7 @@ TEXT runtime·nanotime(SB),7,$32
 	MOVL	$116, AX		// sys_gettimeofday
 	SYSCALL
 	MOVQ	8(SP), AX		// sec
-	MOVL	16(SP), DX	// usec
+	MOVL	16(SP), DX		// usec
 
 	// sec is in AX, usec in DX
 	// return nsec in AX
@@ -170,9 +176,19 @@ TEXT runtime·sigaction(SB),7,$-8
 	MOVL	$46, AX
 	SYSCALL
 	JCC	2(PC)
-	MOVL	$0xf1, 0xf1  // crash
+	MOVL	$0xf1, 0xf1		// crash
 	RET
 
+TEXT runtime·sigprocmask(SB),7,$0
+	MOVL	8(SP), DI		// arg 1 - how
+	MOVL	12(SP), SI		// arg 2 - set
+	MOVL	$48, AX			// sys_sigprocmask
+	SYSCALL
+	JCC	2(PC)
+	MOVL	$0xf1, 0xf1		// crash
+	MOVL	AX, oset+0(FP)		// Return oset
+	RET
+
 TEXT runtime·sigtramp(SB),7,$64
 	get_tls(BX)
 	
@@ -226,7 +242,7 @@ TEXT runtime·munmap(SB),7,$0
 	MOVL	$73, AX			// sys_munmap
 	SYSCALL
 	JCC	2(PC)
-	MOVL	$0xf1, 0xf1  // crash
+	MOVL	$0xf1, 0xf1		// crash
 	RET
 
 TEXT runtime·sigaltstack(SB),7,$-8
@@ -235,7 +251,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
 	MOVQ	$288, AX		// sys_sigaltstack
 	SYSCALL
 	JCC	2(PC)
-	MOVL	$0xf1, 0xf1  // crash
+	MOVL	$0xf1, 0xf1		// crash
 	RET
 
 // set tls base to DI
@@ -248,7 +264,7 @@ TEXT runtime·settls(SB),7,$8
 	MOVQ	$165, AX		// sys_sysarch
 	SYSCALL
 	JCC	2(PC)
-	MOVL	$0xf1, 0xf1  // crash
+	MOVL	$0xf1, 0xf1		// crash
 	RET
 
 TEXT runtime·sysctl(SB),7,$0
@@ -260,7 +276,7 @@ TEXT runtime·sysctl(SB),7,$0
 	MOVQ	48(SP), R9		// arg 6 - newlen
 	MOVQ	$202, AX		// sys___sysctl
 	SYSCALL
-	JCC 3(PC)
+	JCC	3(PC)
 	NEGL	AX
 	RET
 	MOVL	$0, AX
