$OpenBSD: patch-src_runtime_sys_openbsd_arm64_s,v 1.1 2020/02/04 17:22:42 jsing Exp $

Index: src/runtime/sys_openbsd_arm64.s
--- src/runtime/sys_openbsd_arm64.s.orig
+++ src/runtime/sys_openbsd_arm64.s
@@ -13,11 +13,15 @@
 #define CLOCK_REALTIME	$0
 #define	CLOCK_MONOTONIC	$3
 
+#define NOOP	WORD $0xd503201f
+
 // Exit the entire program (like C exit)
 TEXT runtime·exit(SB),NOSPLIT|NOFRAME,$0
 	MOVW	code+0(FP), R0		// arg 1 - status
 	MOVD	$1, R8			// sys_exit
 	SVC
+	NOOP
+	NOOP
 	BCC	3(PC)
 	MOVD	$0, R0			// crash on syscall failure
 	MOVD	R0, (R0)
@@ -28,6 +32,8 @@ TEXT runtime·exitThread(SB),NOSPLIT,$0
 	MOVD	wait+0(FP), R0		// arg 1 - notdead
 	MOVD	$302, R8		// sys___threxit
 	SVC
+	NOOP
+	NOOP
 	MOVD	$0, R0			// crash on syscall failure
 	MOVD	R0, (R0)
 	JMP	0(PC)
@@ -38,6 +44,8 @@ TEXT runtime·open(SB),NOSPLIT|NOFRAME,$0
 	MOVW	perm+12(FP), R2		// arg 3 - perm
 	MOVD	$5, R8			// sys_open
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	MOVW	$-1, R0
 	MOVW	R0, ret+16(FP)
@@ -47,6 +55,8 @@ TEXT runtime·closefd(SB),NOSPLIT|NOFRAME,$0
 	MOVW	fd+0(FP), R0		// arg 1 - fd
 	MOVD	$6, R8			// sys_close
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	MOVW	$-1, R0
 	MOVW	R0, ret+8(FP)
@@ -58,6 +68,8 @@ TEXT runtime·read(SB),NOSPLIT|NOFRAME,$0
 	MOVW	n+16(FP), R2		// arg 3 - nbyte
 	MOVD	$3, R8			// sys_read
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	MOVW	$-1, R0
 	MOVW	R0, ret+24(FP)
@@ -69,6 +81,8 @@ TEXT runtime·write(SB),NOSPLIT|NOFRAME,$0
 	MOVW	n+16(FP), R2		// arg 3 - nbyte
 	MOVD	$4, R8			// sys_write
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	MOVW	$-1, R0
 	MOVW	R0, ret+24(FP)
@@ -90,25 +104,35 @@ TEXT runtime·usleep(SB),NOSPLIT,$24-4
 	MOVD	$0, R1			// arg 2 - rmtp
 	MOVD	$91, R8			// sys_nanosleep
 	SVC
+	NOOP
+	NOOP
 	RET
 
 TEXT runtime·raise(SB),NOSPLIT,$0
 	MOVD	$299, R8		// sys_getthrid
 	SVC
+	NOOP
+	NOOP
 					// arg 1 - tid, already in R0
 	MOVW	sig+0(FP), R1		// arg 2 - signum
 	MOVW	$0, R2			// arg 3 - tcb
 	MOVD	$119, R8		// sys_thrkill
 	SVC
+	NOOP
+	NOOP
 	RET
 
 TEXT runtime·raiseproc(SB),NOSPLIT,$0
 	MOVD	$20, R8			// sys_getpid
 	SVC
+	NOOP
+	NOOP
 					// arg 1 - pid, already in R0
 	MOVW	sig+0(FP), R1		// arg 2 - signum
 	MOVD	$122, R8		// sys_kill
 	SVC
+	NOOP
+	NOOP
 	RET
 
 TEXT runtime·mmap(SB),NOSPLIT,$0
@@ -121,6 +145,8 @@ TEXT runtime·mmap(SB),NOSPLIT,$0
 	MOVW	off+28(FP), R6		// arg 7 - offset
 	MOVD	$197, R8		// sys_mmap
 	SVC
+	NOOP
+	NOOP
 	MOVD	$0, R1
 	BCC	3(PC)
 	MOVD	R0, R1			// if error, move to R1
@@ -134,6 +160,8 @@ TEXT runtime·munmap(SB),NOSPLIT,$0
 	MOVD	n+8(FP), R1		// arg 2 - len
 	MOVD	$73, R8			// sys_munmap
 	SVC
+	NOOP
+	NOOP
 	BCC	3(PC)
 	MOVD	$0, R0			// crash on syscall failure
 	MOVD	R0, (R0)
@@ -145,6 +173,8 @@ TEXT runtime·madvise(SB),NOSPLIT,$0
 	MOVW	flags+16(FP), R2	// arg 2 - flags
 	MOVD	$75, R8			// sys_madvise
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	MOVW	$-1, R0
 	MOVW	R0, ret+24(FP)
@@ -156,6 +186,8 @@ TEXT runtime·setitimer(SB),NOSPLIT,$0
 	MOVD	old+16(FP), R2		// arg 3 - old value
 	MOVD	$69, R8			// sys_setitimer
 	SVC
+	NOOP
+	NOOP
 	RET
 
 // func walltime() (sec int64, nsec int32)
@@ -164,6 +196,8 @@ TEXT runtime·walltime(SB), NOSPLIT, $32
 	MOVD	$8(RSP), R1		// arg 2 - tp
 	MOVD	$87, R8			// sys_clock_gettime
 	SVC
+	NOOP
+	NOOP
 
 	MOVD	8(RSP), R0		// sec
 	MOVD	16(RSP), R1		// nsec
@@ -179,6 +213,8 @@ TEXT runtime·nanotime(SB),NOSPLIT,$32
 	MOVD	$8(RSP), R1		// arg 2 - tp
 	MOVD	$87, R8			// sys_clock_gettime
 	SVC
+	NOOP
+	NOOP
 
 	MOVW	8(RSP), R3		// sec
 	MOVW	16(RSP), R5		// nsec
@@ -195,6 +231,8 @@ TEXT runtime·sigaction(SB),NOSPLIT,$0
 	MOVD	old+16(FP), R2		// arg 3 - old sigaction
 	MOVD	$46, R8			// sys_sigaction
 	SVC
+	NOOP
+	NOOP
 	BCC	3(PC)
 	MOVD	$3, R0			// crash on syscall failure
 	MOVD	R0, (R0)
@@ -205,6 +243,8 @@ TEXT runtime·obsdsigprocmask(SB),NOSPLIT,$0
 	MOVW	new+4(FP), R1		// arg 2 - new
 	MOVD	$48, R8			// sys_sigprocmask
 	SVC
+	NOOP
+	NOOP
 	BCC	3(PC)
 	MOVD	$3, R8			// crash on syscall failure
 	MOVD	R8, (R8)
@@ -289,6 +329,8 @@ TEXT runtime·tfork(SB),NOSPLIT,$0
 	MOVD	psize+8(FP), R1		// arg 2 - psize
 	MOVD	$8, R8			// sys___tfork
 	SVC
+	NOOP
+	NOOP
 
 	// Return if syscall failed.
 	BCC	4(PC)
@@ -319,6 +361,8 @@ TEXT runtime·sigaltstack(SB),NOSPLIT,$0
 	MOVD	old+8(FP), R1		// arg 2 - old sigaltstack
 	MOVD	$288, R8		// sys_sigaltstack
 	SVC
+	NOOP
+	NOOP
 	BCC	3(PC)
 	MOVD	$0, R8			// crash on syscall failure
 	MOVD	R8, (R8)
@@ -327,6 +371,8 @@ TEXT runtime·sigaltstack(SB),NOSPLIT,$0
 TEXT runtime·osyield(SB),NOSPLIT,$0
 	MOVD	$298, R8		// sys_sched_yield
 	SVC
+	NOOP
+	NOOP
 	RET
 
 TEXT runtime·thrsleep(SB),NOSPLIT,$0
@@ -337,6 +383,8 @@ TEXT runtime·thrsleep(SB),NOSPLIT,$0
 	MOVD	abort+32(FP), R4	// arg 5 - abort
 	MOVD	$94, R8			// sys___thrsleep
 	SVC
+	NOOP
+	NOOP
 	MOVW	R0, ret+40(FP)
 	RET
 
@@ -345,6 +393,8 @@ TEXT runtime·thrwakeup(SB),NOSPLIT,$0
 	MOVW	n+8(FP), R1		// arg 2 - n
 	MOVD	$301, R8		// sys___thrwakeup
 	SVC
+	NOOP
+	NOOP
 	MOVW	R0, ret+16(FP)
 	RET
 
@@ -357,6 +407,8 @@ TEXT runtime·sysctl(SB),NOSPLIT,$0
 	MOVD	ndst+40(FP), R5		// arg 6 - newlen
 	MOVD	$202, R8		// sys___sysctl
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	NEG	R0, R0
 	MOVW	R0, ret+48(FP)
@@ -366,6 +418,8 @@ TEXT runtime·sysctl(SB),NOSPLIT,$0
 TEXT runtime·kqueue(SB),NOSPLIT,$0
 	MOVD	$269, R8		// sys_kqueue
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	NEG	R0, R0
 	MOVW	R0, ret+0(FP)
@@ -381,6 +435,8 @@ TEXT runtime·kevent(SB),NOSPLIT,$0
 	MOVD	ts+40(FP), R5		// arg 6 - timeout
 	MOVD	$72, R8			// sys_kevent
 	SVC
+	NOOP
+	NOOP
 	BCC	2(PC)
 	NEG	R0, R0
 	MOVW	R0, ret+48(FP)
@@ -393,4 +449,6 @@ TEXT runtime·closeonexec(SB),NOSPLIT,$0
 	MOVD	$1, R2			// arg 3 - arg (FD_CLOEXEC)
 	MOVD	$92, R8			// sys_fcntl
 	SVC
+	NOOP
+	NOOP
 	RET
