1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// 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);
TEXT ·Syscall(SB),NOSPLIT,$0-28
BL runtime·entersyscall(SB)
MOVW syscall+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
SWI $0
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
TEXT ·Syscall6(SB),NOSPLIT,$0-40
BL runtime·entersyscall(SB)
MOVW syscall+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
SWI $0
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
TEXT ·Syscall9(SB),NOSPLIT,$0-52
BL runtime·entersyscall(SB)
MOVW syscall+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
SWI $0
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
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVW syscall+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
SWI $0
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
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVW syscall+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
SWI $0
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
|