github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/syscall/asm_plan9_amd64.s (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "textflag.h" 6 #include "funcdata.h" 7 8 // 9 // System call support for Plan 9 10 // 11 12 //func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string) 13 //func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string) 14 //func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) 15 //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) 16 17 #define SYS_ERRSTR 41 /* from zsysnum_plan9.go */ 18 19 TEXT ·Syscall(SB),NOSPLIT,$168-64 20 NO_LOCAL_POINTERS 21 CALL runtime·entersyscall<ABIInternal>(SB) 22 MOVQ trap+0(FP), BP // syscall entry 23 // copy args down 24 LEAQ a1+8(FP), SI 25 LEAQ sysargs-160(SP), DI 26 CLD 27 MOVSQ 28 MOVSQ 29 MOVSQ 30 SYSCALL 31 MOVQ AX, r1+32(FP) 32 MOVQ $0, r2+40(FP) 33 CMPL AX, $-1 34 JNE ok3 35 36 LEAQ errbuf-128(SP), AX 37 MOVQ AX, sysargs-160(SP) 38 MOVQ $128, sysargs1-152(SP) 39 MOVQ $SYS_ERRSTR, BP 40 SYSCALL 41 CALL runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set 42 MOVQ sysargs-160(SP), AX 43 MOVQ AX, errbuf-168(SP) 44 CALL runtime·gostring(SB) 45 LEAQ str-160(SP), SI 46 JMP copyresult3 47 48 ok3: 49 CALL runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set 50 LEAQ ·emptystring(SB), SI 51 52 copyresult3: 53 LEAQ err+48(FP), DI 54 55 CLD 56 MOVSQ 57 MOVSQ 58 59 RET 60 61 TEXT ·Syscall6(SB),NOSPLIT,$168-88 62 NO_LOCAL_POINTERS 63 CALL runtime·entersyscall<ABIInternal>(SB) 64 MOVQ trap+0(FP), BP // syscall entry 65 // copy args down 66 LEAQ a1+8(FP), SI 67 LEAQ sysargs-160(SP), DI 68 CLD 69 MOVSQ 70 MOVSQ 71 MOVSQ 72 MOVSQ 73 MOVSQ 74 MOVSQ 75 SYSCALL 76 MOVQ AX, r1+56(FP) 77 MOVQ $0, r2+64(FP) 78 CMPL AX, $-1 79 JNE ok4 80 81 LEAQ errbuf-128(SP), AX 82 MOVQ AX, sysargs-160(SP) 83 MOVQ $128, sysargs1-152(SP) 84 MOVQ $SYS_ERRSTR, BP 85 SYSCALL 86 CALL runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set 87 MOVQ sysargs-160(SP), AX 88 MOVQ AX, errbuf-168(SP) 89 CALL runtime·gostring(SB) 90 LEAQ str-160(SP), SI 91 JMP copyresult4 92 93 ok4: 94 CALL runtime·exitsyscall(SB) // call via ABI wrapper, ensuring ABIInternal fixed registers are set 95 LEAQ ·emptystring(SB), SI 96 97 copyresult4: 98 LEAQ err+72(FP), DI 99 100 CLD 101 MOVSQ 102 MOVSQ 103 104 RET 105 106 TEXT ·RawSyscall(SB),NOSPLIT,$0-56 107 MOVQ trap+0(FP), BP // syscall entry 108 // slide args down on top of system call number 109 LEAQ a1+8(FP), SI 110 LEAQ trap+0(FP), DI 111 CLD 112 MOVSQ 113 MOVSQ 114 MOVSQ 115 SYSCALL 116 MOVQ AX, r1+32(FP) 117 MOVQ AX, r2+40(FP) 118 MOVQ AX, err+48(FP) 119 RET 120 121 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 122 MOVQ trap+0(FP), BP // syscall entry 123 // slide args down on top of system call number 124 LEAQ a1+8(FP), SI 125 LEAQ trap+0(FP), DI 126 CLD 127 MOVSQ 128 MOVSQ 129 MOVSQ 130 MOVSQ 131 MOVSQ 132 MOVSQ 133 SYSCALL 134 MOVQ AX, r1+56(FP) 135 MOVQ AX, r2+64(FP) 136 MOVQ AX, err+72(FP) 137 RET 138 139 #define SYS_SEEK 39 /* from zsysnum_plan9.go */ 140 141 //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) 142 TEXT ·seek(SB),NOSPLIT,$48-56 143 NO_LOCAL_POINTERS 144 LEAQ newoffset+32(FP), AX 145 MOVQ AX, placeholder+0(FP) 146 147 // copy args down 148 LEAQ placeholder+0(FP), SI 149 LEAQ sysargs-40(SP), DI 150 CLD 151 MOVSQ 152 MOVSQ 153 MOVSQ 154 MOVSQ 155 MOVSQ 156 MOVQ $SYS_SEEK, BP // syscall entry 157 SYSCALL 158 159 CMPL AX, $-1 160 JNE ok6 161 MOVQ AX, newoffset+32(FP) 162 163 CALL syscall·errstr(SB) 164 MOVQ SP, SI 165 JMP copyresult6 166 167 ok6: 168 LEAQ ·emptystring(SB), SI 169 170 copyresult6: 171 LEAQ err+40(FP), DI 172 173 CLD 174 MOVSQ 175 MOVSQ 176 RET