github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/runtime/sys_freebsd_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, FreeBSD 6 // /usr/src/sys/kern/syscalls.master for syscall numbers. 7 // 8 9 #include "zasm_GOOS_GOARCH.h" 10 11 TEXT runtime·sys_umtx_op(SB),7,$0 12 MOVQ 8(SP), DI 13 MOVL 16(SP), SI 14 MOVL 20(SP), DX 15 MOVQ 24(SP), R10 16 MOVQ 32(SP), R8 17 MOVL $454, AX 18 SYSCALL 19 RET 20 21 TEXT runtime·thr_new(SB),7,$0 22 MOVQ 8(SP), DI 23 MOVQ 16(SP), SI 24 MOVL $455, AX 25 SYSCALL 26 RET 27 28 TEXT runtime·thr_start(SB),7,$0 29 MOVQ DI, R13 // m 30 31 // set up FS to point at m->tls 32 LEAQ m_tls(R13), DI 33 CALL runtime·settls(SB) // smashes DI 34 35 // set up m, g 36 get_tls(CX) 37 MOVQ R13, m(CX) 38 MOVQ m_g0(R13), DI 39 MOVQ DI, g(CX) 40 41 CALL runtime·stackcheck(SB) 42 CALL runtime·mstart(SB) 43 44 MOVQ 0, AX // crash (not reached) 45 46 // Exit the entire program (like C exit) 47 TEXT runtime·exit(SB),7,$-8 48 MOVL 8(SP), DI // arg 1 exit status 49 MOVL $1, AX 50 SYSCALL 51 MOVL $0xf1, 0xf1 // crash 52 RET 53 54 TEXT runtime·exit1(SB),7,$-8 55 MOVQ 8(SP), DI // arg 1 exit status 56 MOVL $431, AX 57 SYSCALL 58 MOVL $0xf1, 0xf1 // crash 59 RET 60 61 TEXT runtime·open(SB),7,$-8 62 MOVQ 8(SP), DI // arg 1 pathname 63 MOVL 16(SP), SI // arg 2 flags 64 MOVL 20(SP), DX // arg 3 mode 65 MOVL $5, AX 66 SYSCALL 67 RET 68 69 TEXT runtime·close(SB),7,$-8 70 MOVL 8(SP), DI // arg 1 fd 71 MOVL $6, AX 72 SYSCALL 73 RET 74 75 TEXT runtime·read(SB),7,$-8 76 MOVL 8(SP), DI // arg 1 fd 77 MOVQ 16(SP), SI // arg 2 buf 78 MOVL 24(SP), DX // arg 3 count 79 MOVL $3, AX 80 SYSCALL 81 RET 82 83 TEXT runtime·write(SB),7,$-8 84 MOVL 8(SP), DI // arg 1 fd 85 MOVQ 16(SP), SI // arg 2 buf 86 MOVL 24(SP), DX // arg 3 count 87 MOVL $4, AX 88 SYSCALL 89 RET 90 91 TEXT runtime·getrlimit(SB),7,$-8 92 MOVL 8(SP), DI 93 MOVQ 16(SP), SI 94 MOVL $194, AX 95 SYSCALL 96 RET 97 98 TEXT runtime·raise(SB),7,$16 99 // thr_self(&8(SP)) 100 LEAQ 8(SP), DI // arg 1 &8(SP) 101 MOVL $432, AX 102 SYSCALL 103 // thr_kill(self, SIGPIPE) 104 MOVQ 8(SP), DI // arg 1 id 105 MOVL sig+0(FP), SI // arg 2 106 MOVL $433, AX 107 SYSCALL 108 RET 109 110 TEXT runtime·setitimer(SB), 7, $-8 111 MOVL 8(SP), DI 112 MOVQ 16(SP), SI 113 MOVQ 24(SP), DX 114 MOVL $83, AX 115 SYSCALL 116 RET 117 118 // func now() (sec int64, nsec int32) 119 TEXT time·now(SB), 7, $32 120 MOVL $232, AX 121 MOVQ $0, DI 122 LEAQ 8(SP), SI 123 SYSCALL 124 MOVQ 8(SP), AX // sec 125 MOVQ 16(SP), DX // nsec 126 127 // sec is in AX, nsec in DX 128 MOVQ AX, sec+0(FP) 129 MOVL DX, nsec+8(FP) 130 RET 131 132 TEXT runtime·nanotime(SB), 7, $32 133 MOVL $232, AX 134 MOVQ $0, DI 135 LEAQ 8(SP), SI 136 SYSCALL 137 MOVQ 8(SP), AX // sec 138 MOVQ 16(SP), DX // nsec 139 140 // sec is in AX, nsec in DX 141 // return nsec in AX 142 IMULQ $1000000000, AX 143 ADDQ DX, AX 144 RET 145 146 TEXT runtime·sigaction(SB),7,$-8 147 MOVL 8(SP), DI // arg 1 sig 148 MOVQ 16(SP), SI // arg 2 act 149 MOVQ 24(SP), DX // arg 3 oact 150 MOVL $416, AX 151 SYSCALL 152 JCC 2(PC) 153 MOVL $0xf1, 0xf1 // crash 154 RET 155 156 TEXT runtime·sigtramp(SB),7,$64 157 get_tls(BX) 158 159 // check that m exists 160 MOVQ m(BX), BP 161 CMPQ BP, $0 162 JNE 4(PC) 163 MOVQ DI, 0(SP) 164 CALL runtime·badsignal(SB) 165 RET 166 167 // save g 168 MOVQ g(BX), R10 169 MOVQ R10, 40(SP) 170 171 // g = m->signal 172 MOVQ m_gsignal(BP), BP 173 MOVQ BP, g(BX) 174 175 MOVQ DI, 0(SP) 176 MOVQ SI, 8(SP) 177 MOVQ DX, 16(SP) 178 MOVQ R10, 24(SP) 179 180 CALL runtime·sighandler(SB) 181 182 // restore g 183 get_tls(BX) 184 MOVQ 40(SP), R10 185 MOVQ R10, g(BX) 186 RET 187 188 TEXT runtime·mmap(SB),7,$0 189 MOVQ 8(SP), DI // arg 1 addr 190 MOVQ 16(SP), SI // arg 2 len 191 MOVL 24(SP), DX // arg 3 prot 192 MOVL 28(SP), R10 // arg 4 flags 193 MOVL 32(SP), R8 // arg 5 fid 194 MOVL 36(SP), R9 // arg 6 offset 195 MOVL $477, AX 196 SYSCALL 197 RET 198 199 TEXT runtime·munmap(SB),7,$0 200 MOVQ 8(SP), DI // arg 1 addr 201 MOVQ 16(SP), SI // arg 2 len 202 MOVL $73, AX 203 SYSCALL 204 JCC 2(PC) 205 MOVL $0xf1, 0xf1 // crash 206 RET 207 208 TEXT runtime·madvise(SB),7,$0 209 MOVQ 8(SP), DI 210 MOVQ 16(SP), SI 211 MOVQ 24(SP), DX 212 MOVQ $75, AX // madvise 213 SYSCALL 214 // ignore failure - maybe pages are locked 215 RET 216 217 TEXT runtime·sigaltstack(SB),7,$-8 218 MOVQ new+8(SP), DI 219 MOVQ old+16(SP), SI 220 MOVQ $53, AX 221 SYSCALL 222 JCC 2(PC) 223 MOVL $0xf1, 0xf1 // crash 224 RET 225 226 TEXT runtime·usleep(SB),7,$16 227 MOVL $0, DX 228 MOVL usec+0(FP), AX 229 MOVL $1000000, CX 230 DIVL CX 231 MOVQ AX, 0(SP) // tv_sec 232 MOVL $1000, AX 233 MULL DX 234 MOVQ AX, 8(SP) // tv_nsec 235 236 MOVQ SP, DI // arg 1 - rqtp 237 MOVQ $0, SI // arg 2 - rmtp 238 MOVL $240, AX // sys_nanosleep 239 SYSCALL 240 RET 241 242 // set tls base to DI 243 TEXT runtime·settls(SB),7,$8 244 ADDQ $16, DI // adjust for ELF: wants to use -16(FS) and -8(FS) for g and m 245 MOVQ DI, 0(SP) 246 MOVQ SP, SI 247 MOVQ $129, DI // AMD64_SET_FSBASE 248 MOVQ $165, AX // sysarch 249 SYSCALL 250 JCC 2(PC) 251 MOVL $0xf1, 0xf1 // crash 252 RET 253 254 TEXT runtime·sysctl(SB),7,$0 255 MOVQ 8(SP), DI // arg 1 - name 256 MOVL 16(SP), SI // arg 2 - namelen 257 MOVQ 24(SP), DX // arg 3 - oldp 258 MOVQ 32(SP), R10 // arg 4 - oldlenp 259 MOVQ 40(SP), R8 // arg 5 - newp 260 MOVQ 48(SP), R9 // arg 6 - newlen 261 MOVQ $202, AX // sys___sysctl 262 SYSCALL 263 JCC 3(PC) 264 NEGQ AX 265 RET 266 MOVL $0, AX 267 RET 268 269 TEXT runtime·osyield(SB),7,$-4 270 MOVL $331, AX // sys_sched_yield 271 SYSCALL 272 RET 273 274 TEXT runtime·sigprocmask(SB),7,$0 275 MOVL $3, DI // arg 1 - how (SIG_SETMASK) 276 MOVQ 8(SP), SI // arg 2 - set 277 MOVQ 16(SP), DX // arg 3 - oset 278 MOVL $340, AX // sys_sigprocmask 279 SYSCALL 280 JAE 2(PC) 281 MOVL $0xf1, 0xf1 // crash 282 RET