github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/runtime/sys_netbsd_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 // System calls and other sys.stuff for AMD64, NetBSD 6 // /usr/src/sys/kern/syscalls.master for syscall numbers. 7 // 8 9 #include "zasm_GOOS_GOARCH.h" 10 11 // int32 lwp_create(void *context, uintptr flags, void *lwpid) 12 TEXT runtime·lwp_create(SB),7,$0 13 MOVQ context+0(FP), DI 14 MOVQ flags+8(FP), SI 15 MOVQ lwpid+16(FP), DX 16 MOVL $309, AX // sys__lwp_create 17 SYSCALL 18 JCC 2(PC) 19 NEGQ AX 20 RET 21 22 TEXT runtime·lwp_tramp(SB),7,$0 23 24 // Set FS to point at m->tls. 25 LEAQ m_tls(R8), DI 26 CALL runtime·settls(SB) 27 28 // Set up new stack. 29 get_tls(CX) 30 MOVQ R8, m(CX) 31 MOVQ R9, g(CX) 32 CALL runtime·stackcheck(SB) 33 34 // Call fn 35 CALL R12 36 37 // It shouldn't return. If it does, exit. 38 MOVL $310, AX // sys__lwp_exit 39 SYSCALL 40 JMP -3(PC) // keep exiting 41 42 TEXT runtime·osyield(SB),7,$0 43 MOVL $350, AX // sys_sched_yield 44 SYSCALL 45 RET 46 47 TEXT runtime·lwp_park(SB),7,$0 48 MOVQ 8(SP), DI // arg 1 - abstime 49 MOVL 16(SP), SI // arg 2 - unpark 50 MOVQ 24(SP), DX // arg 3 - hint 51 MOVQ 32(SP), R10 // arg 4 - unparkhint 52 MOVL $434, AX // sys__lwp_park 53 SYSCALL 54 RET 55 56 TEXT runtime·lwp_unpark(SB),7,$0 57 MOVQ 8(SP), DI // arg 1 - lwp 58 MOVL 16(SP), SI // arg 2 - hint 59 MOVL $321, AX // sys__lwp_unpark 60 SYSCALL 61 RET 62 63 TEXT runtime·lwp_self(SB),7,$0 64 MOVL $311, AX // sys__lwp_self 65 SYSCALL 66 RET 67 68 // Exit the entire program (like C exit) 69 TEXT runtime·exit(SB),7,$-8 70 MOVL 8(SP), DI // arg 1 - exit status 71 MOVL $1, AX // sys_exit 72 SYSCALL 73 MOVL $0xf1, 0xf1 // crash 74 RET 75 76 TEXT runtime·exit1(SB),7,$-8 77 MOVL $310, AX // sys__lwp_exit 78 SYSCALL 79 MOVL $0xf1, 0xf1 // crash 80 RET 81 82 TEXT runtime·open(SB),7,$-8 83 MOVQ 8(SP), DI // arg 1 pathname 84 MOVL 16(SP), SI // arg 2 flags 85 MOVL 20(SP), DX // arg 3 mode 86 MOVL $5, AX 87 SYSCALL 88 RET 89 90 TEXT runtime·close(SB),7,$-8 91 MOVL 8(SP), DI // arg 1 fd 92 MOVL $6, AX 93 SYSCALL 94 RET 95 96 TEXT runtime·read(SB),7,$-8 97 MOVL 8(SP), DI // arg 1 fd 98 MOVQ 16(SP), SI // arg 2 buf 99 MOVL 24(SP), DX // arg 3 count 100 MOVL $3, AX 101 SYSCALL 102 RET 103 104 TEXT runtime·write(SB),7,$-8 105 MOVL 8(SP), DI // arg 1 - fd 106 MOVQ 16(SP), SI // arg 2 - buf 107 MOVL 24(SP), DX // arg 3 - nbyte 108 MOVL $4, AX // sys_write 109 SYSCALL 110 RET 111 112 TEXT runtime·usleep(SB),7,$16 113 MOVL $0, DX 114 MOVL usec+0(FP), AX 115 MOVL $1000000, CX 116 DIVL CX 117 MOVQ AX, 0(SP) // tv_sec 118 MOVL $1000, AX 119 MULL DX 120 MOVQ AX, 8(SP) // tv_nsec 121 122 MOVQ SP, DI // arg 1 - rqtp 123 MOVQ $0, SI // arg 2 - rmtp 124 MOVL $430, AX // sys_nanosleep 125 SYSCALL 126 RET 127 128 TEXT runtime·raise(SB),7,$16 129 MOVL $311, AX // sys__lwp_self 130 SYSCALL 131 MOVQ AX, DI // arg 1 - target 132 MOVL sig+0(FP), SI // arg 2 - signo 133 MOVL $318, AX // sys__lwp_kill 134 SYSCALL 135 RET 136 137 TEXT runtime·setitimer(SB),7,$-8 138 MOVL 8(SP), DI // arg 1 - which 139 MOVQ 16(SP), SI // arg 2 - itv 140 MOVQ 24(SP), DX // arg 3 - oitv 141 MOVL $425, AX // sys_setitimer 142 SYSCALL 143 RET 144 145 // func now() (sec int64, nsec int32) 146 TEXT time·now(SB), 7, $32 147 MOVQ $0, DI // arg 1 - clock_id 148 LEAQ 8(SP), SI // arg 2 - tp 149 MOVL $427, AX // sys_clock_gettime 150 SYSCALL 151 MOVQ 8(SP), AX // sec 152 MOVL 16(SP), DX // nsec 153 154 // sec is in AX, nsec in DX 155 MOVQ AX, sec+0(FP) 156 MOVL DX, nsec+8(FP) 157 RET 158 159 TEXT runtime·nanotime(SB),7,$32 160 MOVQ $0, DI // arg 1 - clock_id 161 LEAQ 8(SP), SI // arg 2 - tp 162 MOVL $427, AX // sys_clock_gettime 163 SYSCALL 164 MOVQ 8(SP), AX // sec 165 MOVL 16(SP), DX // nsec 166 167 // sec is in AX, nsec in DX 168 // return nsec in AX 169 IMULQ $1000000000, AX 170 ADDQ DX, AX 171 RET 172 173 TEXT runtime·getcontext(SB),7,$-8 174 MOVQ 8(SP), DI // arg 1 - context 175 MOVL $307, AX // sys_getcontext 176 SYSCALL 177 JCC 2(PC) 178 MOVL $0xf1, 0xf1 // crash 179 RET 180 181 TEXT runtime·sigprocmask(SB),7,$0 182 MOVL 8(SP), DI // arg 1 - how 183 MOVQ 16(SP), SI // arg 2 - set 184 MOVQ 24(SP), DX // arg 3 - oset 185 MOVL $293, AX // sys_sigprocmask 186 SYSCALL 187 JCC 2(PC) 188 MOVL $0xf1, 0xf1 // crash 189 RET 190 191 TEXT runtime·sigreturn_tramp(SB),7,$-8 192 MOVQ R15, DI // Load address of ucontext 193 MOVQ $308, AX // sys_setcontext 194 SYSCALL 195 MOVQ $-1, DI // Something failed... 196 MOVL $1, AX // sys_exit 197 SYSCALL 198 199 TEXT runtime·sigaction(SB),7,$-8 200 MOVL 8(SP), DI // arg 1 - signum 201 MOVQ 16(SP), SI // arg 2 - nsa 202 MOVQ 24(SP), DX // arg 3 - osa 203 // arg 4 - tramp 204 LEAQ runtime·sigreturn_tramp(SB), R10 205 MOVQ $2, R8 // arg 5 - vers 206 MOVL $340, AX // sys___sigaction_sigtramp 207 SYSCALL 208 JCC 2(PC) 209 MOVL $0xf1, 0xf1 // crash 210 RET 211 212 TEXT runtime·sigtramp(SB),7,$64 213 get_tls(BX) 214 215 // check that m exists 216 MOVQ m(BX), BP 217 CMPQ BP, $0 218 JNE 4(PC) 219 MOVQ DI, 0(SP) 220 CALL runtime·badsignal(SB) 221 RET 222 223 // save g 224 MOVQ g(BX), R10 225 MOVQ R10, 40(SP) 226 227 // g = m->signal 228 MOVQ m_gsignal(BP), BP 229 MOVQ BP, g(BX) 230 231 MOVQ DI, 0(SP) 232 MOVQ SI, 8(SP) 233 MOVQ DX, 16(SP) 234 MOVQ R10, 24(SP) 235 236 CALL runtime·sighandler(SB) 237 238 // restore g 239 get_tls(BX) 240 MOVQ 40(SP), R10 241 MOVQ R10, g(BX) 242 RET 243 244 TEXT runtime·mmap(SB),7,$0 245 MOVQ 8(SP), DI // arg 1 - addr 246 MOVQ 16(SP), SI // arg 2 - len 247 MOVL 24(SP), DX // arg 3 - prot 248 MOVL 28(SP), R10 // arg 4 - flags 249 MOVL 32(SP), R8 // arg 5 - fd 250 MOVQ 36(SP), R9 251 SUBQ $16, SP 252 MOVQ R9, 8(SP) // arg 7 - offset (passed on stack) 253 MOVQ $0, R9 // arg 6 - pad 254 MOVL $197, AX // sys_mmap 255 SYSCALL 256 ADDQ $16, SP 257 RET 258 259 TEXT runtime·munmap(SB),7,$0 260 MOVQ 8(SP), DI // arg 1 - addr 261 MOVQ 16(SP), SI // arg 2 - len 262 MOVL $73, AX // sys_munmap 263 SYSCALL 264 JCC 2(PC) 265 MOVL $0xf1, 0xf1 // crash 266 RET 267 268 269 TEXT runtime·madvise(SB),7,$0 270 MOVQ addr+0(FP), DI // arg 1 - addr 271 MOVQ len+8(FP), SI // arg 2 - len 272 MOVQ behav+16(FP), DX // arg 3 - behav 273 MOVQ $75, AX // sys_madvise 274 SYSCALL 275 // ignore failure - maybe pages are locked 276 RET 277 278 TEXT runtime·sigaltstack(SB),7,$-8 279 MOVQ new+8(SP), DI // arg 1 - nss 280 MOVQ old+16(SP), SI // arg 2 - oss 281 MOVQ $281, AX // sys___sigaltstack14 282 SYSCALL 283 JCC 2(PC) 284 MOVL $0xf1, 0xf1 // crash 285 RET 286 287 // set tls base to DI 288 TEXT runtime·settls(SB),7,$8 289 // adjust for ELF: wants to use -16(FS) and -8(FS) for g and m 290 ADDQ $16, DI // arg 1 - ptr 291 MOVQ $317, AX // sys__lwp_setprivate 292 SYSCALL 293 JCC 2(PC) 294 MOVL $0xf1, 0xf1 // crash 295 RET 296 297 TEXT runtime·sysctl(SB),7,$0 298 MOVQ 8(SP), DI // arg 1 - name 299 MOVL 16(SP), SI // arg 2 - namelen 300 MOVQ 24(SP), DX // arg 3 - oldp 301 MOVQ 32(SP), R10 // arg 4 - oldlenp 302 MOVQ 40(SP), R8 // arg 5 - newp 303 MOVQ 48(SP), R9 // arg 6 - newlen 304 MOVQ $202, AX // sys___sysctl 305 SYSCALL 306 JCC 3(PC) 307 NEGQ AX 308 RET 309 MOVL $0, AX 310 RET 311