$OpenBSD: patch-src_syscall_asm_openbsd_arm_s,v 1.3 2021/03/02 17:56:41 jsing Exp $

Index: src/syscall/asm_openbsd_arm.s
--- src/syscall/asm_openbsd_arm.s.orig
+++ src/syscall/asm_openbsd_arm.s
@@ -3,137 +3,30 @@
 // license that can be found in the LICENSE file.
 
 #include "textflag.h"
-#include "funcdata.h"
 
 //
 // System call support for ARM, OpenBSD
 //
 
-// func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
-// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
-// func Syscall9(trap int32, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int32)
-// func RawSyscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
-// func RawSyscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
+// Provide these function names via assembly so they are provided as ABI0,
+// rather than ABIInternal.
 
-// See comment in runtime/sys_openbsd_arm.s re this construction.
-#define NOOP	MOVW    R0, R0
-#define	INVOKE_SYSCALL	\
-	SWI	$0;	\
-	NOOP;		\
-	NOOP
-
+// func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 TEXT	·Syscall(SB),NOSPLIT,$0-28
-	BL runtime·entersyscall(SB)
-	MOVW trap+0(FP), R12		// syscall number
-	MOVW a1+4(FP), R0		// arg 1
-	MOVW a2+8(FP), R1		// arg 2
-	MOVW a3+12(FP), R2		// arg 3
-	INVOKE_SYSCALL
-	MOVW $0, R2
-	BCS error
-	MOVW R0, r1+16(FP)		// ret 1
-	MOVW R1, r2+20(FP)		// ret 2
-	MOVW R2, err+24(FP)		// err
-	BL runtime·exitsyscall(SB)
-	RET
-error:
-	MOVW $-1, R3
-	MOVW R3, r1+16(FP)		// ret 1
-	MOVW R2, r2+20(FP)		// ret 2
-	MOVW R0, err+24(FP)		// err
-	BL runtime·exitsyscall(SB)
-	RET
+	JMP	·syscallInternal(SB)
 
+// func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 TEXT	·Syscall6(SB),NOSPLIT,$0-40
-	BL runtime·entersyscall(SB)
-	MOVW trap+0(FP), R12		// syscall number
-	MOVW a1+4(FP), R0		// arg 1
-	MOVW a2+8(FP), R1		// arg 2
-	MOVW a3+12(FP), R2		// arg 3
-	MOVW a4+16(FP), R3		// arg 4
-	MOVW R13, R4
-	MOVW $a5+20(FP), R13		// arg 5 to arg 6 are passed on stack
-	INVOKE_SYSCALL
-	MOVW R4, R13
-	MOVW $0, R2
-	BCS error6
-	MOVW R0, r1+28(FP)		// ret 1
-	MOVW R1, r2+32(FP)		// ret 2
-	MOVW R2, err+36(FP)		// err
-	BL runtime·exitsyscall(SB)
-	RET
-error6:
-	MOVW $-1, R3
-	MOVW R3, r1+28(FP)		// ret 1
-	MOVW R2, r2+32(FP)		// ret 2
-	MOVW R0, err+36(FP)		// err
-	BL runtime·exitsyscall(SB)
-	RET
+	JMP	·syscall6Internal(SB)
 
-TEXT	·Syscall9(SB),NOSPLIT,$0-52
-	BL runtime·entersyscall(SB)
-	MOVW num+0(FP), R12		// syscall number
-	MOVW a1+4(FP), R0		// arg 1
-	MOVW a2+8(FP), R1		// arg 2
-	MOVW a3+12(FP), R2		// arg 3
-	MOVW a4+16(FP), R3		// arg 4
-	MOVW R13, R4
-	MOVW $a5+20(FP), R13		// arg 5 to arg 9 are passed on stack
-	INVOKE_SYSCALL
-	MOVW R4, R13
-	MOVW $0, R2
-	BCS error9
-	MOVW R0, r1+40(FP)		// ret 1
-	MOVW R1, r2+44(FP)		// ret 2
-	MOVW R2, err+48(FP)		// err
-	BL runtime·exitsyscall(SB)
-	RET
-error9:
-	MOVW $-1, R3
-	MOVW R3, r1+40(FP)		// ret 1
-	MOVW R2, r2+44(FP)		// ret 2
-	MOVW R0, err+48(FP)		// err
-	BL runtime·exitsyscall(SB)
-	RET
-
+// func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 TEXT	·RawSyscall(SB),NOSPLIT,$0-28
-	MOVW trap+0(FP), R12		// syscall number
-	MOVW a1+4(FP), R0		// arg 1
-	MOVW a2+8(FP), R1		// arg 2
-	MOVW a3+12(FP), R2		// arg 3
-	INVOKE_SYSCALL
-	MOVW $0, R2
-	BCS errorr
-	MOVW R0, r1+16(FP)		// ret 1
-	MOVW R1, r2+20(FP)		// ret 2
-	MOVW R2, err+24(FP)		// err
-	RET
-errorr:
-	MOVW $-1, R3
-	MOVW R3, r1+16(FP)		// ret 1
-	MOVW R2, r2+20(FP)		// ret 2
-	MOVW R0, err+24(FP)		// err
-	RET
+	JMP	·rawSyscallInternal(SB)
 
+// func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
-	MOVW trap+0(FP), R12		// syscall number
-	MOVW a1+4(FP), R0		// arg 1
-	MOVW a2+8(FP), R1		// arg 2
-	MOVW a3+12(FP), R2		// arg 3
-	MOVW a4+16(FP), R3		// arg 4
-	MOVW R13, R4
-	MOVW $a5+20(FP), R13		// arg 5 to arg 6 are passed on stack
-	INVOKE_SYSCALL
-	MOVW R4, R13
-	MOVW $0, R2
-	BCS errorr6
-	MOVW R0, r1+28(FP)		// ret 1
-	MOVW R1, r2+32(FP)		// ret 2
-	MOVW R2, err+36(FP)		// err
-	RET
-errorr6:
-	MOVW $-1, R3
-	MOVW R3, r1+28(FP)		// ret 1
-	MOVW R2, r2+32(FP)		// ret 2
-	MOVW R0, err+36(FP)		// err
-	RET
+	JMP	·rawSyscall6Internal(SB)
+
+// func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
+TEXT	·Syscall9(SB),NOSPLIT,$0-52
+	JMP	·syscall9Internal(SB)
