Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 1 | // Copyright 2019 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 | // |
| 6 | // System calls and other sys.stuff for arm64, NetBSD |
| 7 | // |
| 8 | |
| 9 | #include "go_asm.h" |
| 10 | #include "go_tls.h" |
| 11 | #include "textflag.h" |
| 12 | |
Maya Rashish | d1f43cc | 2019-04-22 10:01:22 +0000 | [diff] [blame] | 13 | #define CLOCK_REALTIME 0 |
| 14 | #define CLOCK_MONOTONIC 3 |
| 15 | #define FD_CLOEXEC 1 |
| 16 | #define F_SETFD 2 |
Ian Lance Taylor | 3b0aa54 | 2019-04-03 16:31:13 -0700 | [diff] [blame] | 17 | #define F_GETFL 3 |
| 18 | #define F_SETFL 4 |
| 19 | #define O_NONBLOCK 4 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 20 | |
Maya Rashish | d1f43cc | 2019-04-22 10:01:22 +0000 | [diff] [blame] | 21 | #define SYS_exit 1 |
| 22 | #define SYS_read 3 |
| 23 | #define SYS_write 4 |
| 24 | #define SYS_open 5 |
| 25 | #define SYS_close 6 |
| 26 | #define SYS_getpid 20 |
| 27 | #define SYS_kill 37 |
| 28 | #define SYS_munmap 73 |
| 29 | #define SYS_madvise 75 |
| 30 | #define SYS_fcntl 92 |
| 31 | #define SYS_mmap 197 |
| 32 | #define SYS___sysctl 202 |
| 33 | #define SYS___sigaltstack14 281 |
| 34 | #define SYS___sigprocmask14 293 |
| 35 | #define SYS_getcontext 307 |
| 36 | #define SYS_setcontext 308 |
| 37 | #define SYS__lwp_create 309 |
| 38 | #define SYS__lwp_exit 310 |
| 39 | #define SYS__lwp_self 311 |
| 40 | #define SYS__lwp_kill 318 |
| 41 | #define SYS__lwp_unpark 321 |
| 42 | #define SYS___sigaction_sigtramp 340 |
| 43 | #define SYS_kqueue 344 |
| 44 | #define SYS_sched_yield 350 |
| 45 | #define SYS___setitimer50 425 |
| 46 | #define SYS___clock_gettime50 427 |
| 47 | #define SYS___nanosleep50 430 |
| 48 | #define SYS___kevent50 435 |
Ian Lance Taylor | 3b0aa54 | 2019-04-03 16:31:13 -0700 | [diff] [blame] | 49 | #define SYS_pipe2 453 |
Maya Rashish | d1f43cc | 2019-04-22 10:01:22 +0000 | [diff] [blame] | 50 | #define SYS_openat 468 |
| 51 | #define SYS____lwp_park60 478 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 52 | |
| 53 | // int32 lwp_create(void *context, uintptr flags, void *lwpid) |
| 54 | TEXT runtime·lwp_create(SB),NOSPLIT,$0 |
| 55 | MOVD ctxt+0(FP), R0 |
| 56 | MOVD flags+8(FP), R1 |
| 57 | MOVD lwpid+16(FP), R2 |
| 58 | SVC $SYS__lwp_create |
| 59 | BCC ok |
| 60 | NEG R0, R0 |
| 61 | ok: |
| 62 | MOVW R0, ret+24(FP) |
| 63 | RET |
| 64 | |
| 65 | TEXT runtime·lwp_tramp(SB),NOSPLIT,$0 |
| 66 | CMP $0, R1 |
| 67 | BEQ nog |
| 68 | CMP $0, R2 |
| 69 | BEQ nog |
| 70 | |
| 71 | MOVD R0, g_m(R1) |
| 72 | MOVD R1, g |
| 73 | nog: |
| 74 | CALL (R2) |
| 75 | |
| 76 | MOVD $0, R0 // crash (not reached) |
| 77 | MOVD R0, (R8) |
| 78 | |
| 79 | TEXT runtime·osyield(SB),NOSPLIT,$0 |
| 80 | SVC $SYS_sched_yield |
| 81 | RET |
| 82 | |
| 83 | TEXT runtime·lwp_park(SB),NOSPLIT,$0 |
| 84 | MOVW clockid+0(FP), R0 // arg 1 - clockid |
| 85 | MOVW flags+4(FP), R1 // arg 2 - flags |
| 86 | MOVD ts+8(FP), R2 // arg 3 - ts |
| 87 | MOVW unpark+16(FP), R3 // arg 4 - unpark |
| 88 | MOVD hint+24(FP), R4 // arg 5 - hint |
| 89 | MOVD unparkhint+32(FP), R5 // arg 6 - unparkhint |
| 90 | SVC $SYS____lwp_park60 |
| 91 | MOVW R0, ret+40(FP) |
| 92 | RET |
| 93 | |
| 94 | TEXT runtime·lwp_unpark(SB),NOSPLIT,$0 |
| 95 | MOVW lwp+0(FP), R0 // arg 1 - lwp |
| 96 | MOVD hint+8(FP), R1 // arg 2 - hint |
| 97 | SVC $SYS__lwp_unpark |
| 98 | MOVW R0, ret+16(FP) |
| 99 | RET |
| 100 | |
| 101 | TEXT runtime·lwp_self(SB),NOSPLIT,$0 |
| 102 | SVC $SYS__lwp_self |
| 103 | MOVW R0, ret+0(FP) |
| 104 | RET |
| 105 | |
| 106 | // Exit the entire program (like C exit) |
| 107 | TEXT runtime·exit(SB),NOSPLIT,$-8 |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 108 | MOVW code+0(FP), R0 // arg 1 - exit status |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 109 | SVC $SYS_exit |
| 110 | MOVD $0, R0 // If we're still running, |
| 111 | MOVD R0, (R0) // crash |
| 112 | |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 113 | // func exitThread(wait *uint32) |
| 114 | TEXT runtime·exitThread(SB),NOSPLIT,$0-8 |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 115 | MOVD wait+0(FP), R0 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 116 | // We're done using the stack. |
| 117 | MOVW $0, R1 |
| 118 | STLRW R1, (R0) |
| 119 | SVC $SYS__lwp_exit |
| 120 | JMP 0(PC) |
| 121 | |
| 122 | TEXT runtime·open(SB),NOSPLIT|NOFRAME,$-8 |
| 123 | MOVD name+0(FP), R0 // arg 1 - pathname |
| 124 | MOVW mode+8(FP), R1 // arg 2 - flags |
| 125 | MOVW perm+12(FP), R2 // arg 3 - mode |
| 126 | SVC $SYS_open |
| 127 | BCC ok |
| 128 | MOVW $-1, R0 |
| 129 | ok: |
| 130 | MOVW R0, ret+16(FP) |
| 131 | RET |
| 132 | |
| 133 | TEXT runtime·closefd(SB),NOSPLIT,$-8 |
| 134 | MOVW fd+0(FP), R0 // arg 1 - fd |
| 135 | SVC $SYS_close |
| 136 | BCC ok |
| 137 | MOVW $-1, R0 |
| 138 | ok: |
| 139 | MOVW R0, ret+8(FP) |
| 140 | RET |
| 141 | |
| 142 | TEXT runtime·read(SB),NOSPLIT|NOFRAME,$0 |
| 143 | MOVW fd+0(FP), R0 // arg 1 - fd |
| 144 | MOVD p+8(FP), R1 // arg 2 - buf |
| 145 | MOVW n+16(FP), R2 // arg 3 - count |
| 146 | SVC $SYS_read |
| 147 | BCC ok |
Ian Lance Taylor | b653c87 | 2019-04-05 11:42:37 -0700 | [diff] [blame] | 148 | NEG R0, R0 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 149 | ok: |
| 150 | MOVW R0, ret+24(FP) |
| 151 | RET |
| 152 | |
Ian Lance Taylor | 3b0aa54 | 2019-04-03 16:31:13 -0700 | [diff] [blame] | 153 | // func pipe() (r, w int32, errno int32) |
| 154 | TEXT runtime·pipe(SB),NOSPLIT|NOFRAME,$0-12 |
| 155 | MOVW $0, R0 |
| 156 | SVC $SYS_pipe2 |
| 157 | BCC pipeok |
| 158 | MOVW $-1,R1 |
| 159 | MOVW R1, r+0(FP) |
| 160 | MOVW R1, w+4(FP) |
| 161 | NEG R0, R0 |
| 162 | MOVW R0, errno+8(FP) |
| 163 | RET |
| 164 | pipeok: |
| 165 | MOVW R0, r+0(FP) |
| 166 | MOVW R1, w+4(FP) |
| 167 | MOVW ZR, errno+8(FP) |
| 168 | RET |
| 169 | |
| 170 | // func pipe2(flags int32) (r, w int32, errno int32) |
| 171 | TEXT runtime·pipe2(SB),NOSPLIT|NOFRAME,$0-20 |
Benny Siegert | 8ab020a | 2020-09-26 19:40:17 +0000 | [diff] [blame^] | 172 | ADD $16, RSP, R0 |
Ian Lance Taylor | 3b0aa54 | 2019-04-03 16:31:13 -0700 | [diff] [blame] | 173 | MOVW flags+0(FP), R1 |
| 174 | SVC $SYS_pipe2 |
Benny Siegert | 8ab020a | 2020-09-26 19:40:17 +0000 | [diff] [blame^] | 175 | BCC pipe2ok |
Ian Lance Taylor | 3b0aa54 | 2019-04-03 16:31:13 -0700 | [diff] [blame] | 176 | NEG R0, R0 |
Benny Siegert | 8ab020a | 2020-09-26 19:40:17 +0000 | [diff] [blame^] | 177 | pipe2ok: |
Ian Lance Taylor | 3b0aa54 | 2019-04-03 16:31:13 -0700 | [diff] [blame] | 178 | MOVW R0, errno+16(FP) |
| 179 | RET |
| 180 | |
Austin Clements | 4af3c17 | 2019-09-01 10:37:44 -0400 | [diff] [blame] | 181 | TEXT runtime·write1(SB),NOSPLIT,$-8 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 182 | MOVD fd+0(FP), R0 // arg 1 - fd |
| 183 | MOVD p+8(FP), R1 // arg 2 - buf |
| 184 | MOVW n+16(FP), R2 // arg 3 - nbyte |
| 185 | SVC $SYS_write |
| 186 | BCC ok |
Ian Lance Taylor | b653c87 | 2019-04-05 11:42:37 -0700 | [diff] [blame] | 187 | NEG R0, R0 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 188 | ok: |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 189 | MOVW R0, ret+24(FP) |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 190 | RET |
| 191 | |
| 192 | TEXT runtime·usleep(SB),NOSPLIT,$24-4 |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 193 | MOVWU usec+0(FP), R3 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 194 | MOVD R3, R5 |
| 195 | MOVW $1000000, R4 |
| 196 | UDIV R4, R3 |
| 197 | MOVD R3, 8(RSP) // sec |
| 198 | MUL R3, R4 |
| 199 | SUB R4, R5 |
| 200 | MOVW $1000, R4 |
| 201 | MUL R4, R5 |
| 202 | MOVD R5, 16(RSP) // nsec |
| 203 | |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 204 | MOVD $8(RSP), R0 // arg 1 - rqtp |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 205 | MOVD $0, R1 // arg 2 - rmtp |
| 206 | SVC $SYS___nanosleep50 |
| 207 | RET |
| 208 | |
Austin Clements | 8714e39 | 2019-10-14 17:05:56 -0400 | [diff] [blame] | 209 | TEXT runtime·lwp_kill(SB),NOSPLIT,$0-16 |
| 210 | MOVW tid+0(FP), R0 // arg 1 - target |
| 211 | MOVD sig+8(FP), R1 // arg 2 - signo |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 212 | SVC $SYS__lwp_kill |
| 213 | RET |
| 214 | |
| 215 | TEXT runtime·raiseproc(SB),NOSPLIT,$16 |
| 216 | SVC $SYS_getpid |
| 217 | // arg 1 - pid (from getpid) |
| 218 | MOVD sig+0(FP), R1 // arg 2 - signo |
| 219 | SVC $SYS_kill |
| 220 | RET |
| 221 | |
| 222 | TEXT runtime·setitimer(SB),NOSPLIT,$-8 |
| 223 | MOVW mode+0(FP), R0 // arg 1 - which |
| 224 | MOVD new+8(FP), R1 // arg 2 - itv |
| 225 | MOVD old+16(FP), R2 // arg 3 - oitv |
| 226 | SVC $SYS___setitimer50 |
| 227 | RET |
| 228 | |
Austin Clements | 4af3c17 | 2019-09-01 10:37:44 -0400 | [diff] [blame] | 229 | // func walltime1() (sec int64, nsec int32) |
| 230 | TEXT runtime·walltime1(SB), NOSPLIT, $32 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 231 | MOVW $CLOCK_REALTIME, R0 // arg 1 - clock_id |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 232 | MOVD $8(RSP), R1 // arg 2 - tp |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 233 | SVC $SYS___clock_gettime50 |
| 234 | |
| 235 | MOVD 8(RSP), R0 // sec |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 236 | MOVD 16(RSP), R1 // nsec |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 237 | |
| 238 | // sec is in R0, nsec in R1 |
| 239 | MOVD R0, sec+0(FP) |
| 240 | MOVW R1, nsec+8(FP) |
| 241 | RET |
| 242 | |
Austin Clements | 4af3c17 | 2019-09-01 10:37:44 -0400 | [diff] [blame] | 243 | // int64 nanotime1(void) so really |
| 244 | // void nanotime1(int64 *nsec) |
| 245 | TEXT runtime·nanotime1(SB), NOSPLIT, $32 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 246 | MOVD $CLOCK_MONOTONIC, R0 // arg 1 - clock_id |
| 247 | MOVD $8(RSP), R1 // arg 2 - tp |
| 248 | SVC $SYS___clock_gettime50 |
| 249 | MOVD 8(RSP), R0 // sec |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 250 | MOVD 16(RSP), R2 // nsec |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 251 | |
| 252 | // sec is in R0, nsec in R2 |
| 253 | // return nsec in R2 |
| 254 | MOVD $1000000000, R3 |
| 255 | MUL R3, R0 |
| 256 | ADD R2, R0 |
| 257 | |
| 258 | MOVD R0, ret+0(FP) |
| 259 | RET |
| 260 | |
| 261 | TEXT runtime·getcontext(SB),NOSPLIT,$-8 |
| 262 | MOVD ctxt+0(FP), R0 // arg 1 - context |
| 263 | SVC $SYS_getcontext |
| 264 | BCS fail |
| 265 | RET |
| 266 | fail: |
| 267 | MOVD $0, R0 |
| 268 | MOVD R0, (R0) // crash |
| 269 | |
| 270 | TEXT runtime·sigprocmask(SB),NOSPLIT,$0 |
| 271 | MOVW how+0(FP), R0 // arg 1 - how |
| 272 | MOVD new+8(FP), R1 // arg 2 - set |
| 273 | MOVD old+16(FP), R2 // arg 3 - oset |
| 274 | SVC $SYS___sigprocmask14 |
| 275 | BCS fail |
| 276 | RET |
| 277 | fail: |
| 278 | MOVD $0, R0 |
| 279 | MOVD R0, (R0) // crash |
| 280 | |
Russ Cox | 924c161 | 2019-05-08 15:30:33 -0400 | [diff] [blame] | 281 | TEXT sigreturn_tramp<>(SB),NOSPLIT,$-8 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 282 | MOVD g, R0 |
| 283 | SVC $SYS_setcontext |
| 284 | MOVD $0x4242, R0 // Something failed, return magic number |
| 285 | SVC $SYS_exit |
| 286 | |
| 287 | TEXT runtime·sigaction(SB),NOSPLIT,$-8 |
| 288 | MOVW sig+0(FP), R0 // arg 1 - signum |
| 289 | MOVD new+8(FP), R1 // arg 2 - nsa |
| 290 | MOVD old+16(FP), R2 // arg 3 - osa |
| 291 | // arg 4 - tramp |
Russ Cox | 924c161 | 2019-05-08 15:30:33 -0400 | [diff] [blame] | 292 | MOVD $sigreturn_tramp<>(SB), R3 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 293 | MOVW $2, R4 // arg 5 - vers |
| 294 | SVC $SYS___sigaction_sigtramp |
| 295 | BCS fail |
| 296 | RET |
| 297 | fail: |
| 298 | MOVD $0, R0 |
| 299 | MOVD R0, (R0) // crash |
| 300 | |
| 301 | // XXX ??? |
| 302 | TEXT runtime·sigfwd(SB),NOSPLIT,$0-32 |
| 303 | MOVW sig+8(FP), R0 |
| 304 | MOVD info+16(FP), R1 |
| 305 | MOVD ctx+24(FP), R2 |
| 306 | MOVD fn+0(FP), R11 |
| 307 | BL (R11) |
| 308 | RET |
| 309 | |
Ben Shi | cbdf9ad | 2019-05-15 02:12:10 +0000 | [diff] [blame] | 310 | TEXT runtime·sigtramp(SB),NOSPLIT,$192 |
| 311 | // Save callee-save registers in the case of signal forwarding. |
| 312 | // Please refer to https://golang.org/issue/31827 . |
| 313 | MOVD R19, 8*4(RSP) |
| 314 | MOVD R20, 8*5(RSP) |
| 315 | MOVD R21, 8*6(RSP) |
| 316 | MOVD R22, 8*7(RSP) |
| 317 | MOVD R23, 8*8(RSP) |
| 318 | MOVD R24, 8*9(RSP) |
| 319 | MOVD R25, 8*10(RSP) |
| 320 | MOVD R26, 8*11(RSP) |
| 321 | MOVD R27, 8*12(RSP) |
| 322 | MOVD g, 8*13(RSP) |
Benny Siegert | 8ab020a | 2020-09-26 19:40:17 +0000 | [diff] [blame^] | 323 | // Unclobber g for now (kernel uses it as ucontext ptr) |
| 324 | // See https://github.com/golang/go/issues/30824#issuecomment-492772426 |
| 325 | // This is only correct in the non-cgo case. |
| 326 | // XXX should use lwp_getprivate as suggested. |
| 327 | // 8*36 is ucontext.uc_mcontext.__gregs[_REG_X28] |
| 328 | MOVD 8*36(g), g |
Ben Shi | cbdf9ad | 2019-05-15 02:12:10 +0000 | [diff] [blame] | 329 | MOVD R29, 8*14(RSP) |
| 330 | FMOVD F8, 8*15(RSP) |
| 331 | FMOVD F9, 8*16(RSP) |
| 332 | FMOVD F10, 8*17(RSP) |
| 333 | FMOVD F11, 8*18(RSP) |
| 334 | FMOVD F12, 8*19(RSP) |
| 335 | FMOVD F13, 8*20(RSP) |
| 336 | FMOVD F14, 8*21(RSP) |
| 337 | FMOVD F15, 8*22(RSP) |
| 338 | |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 339 | // this might be called in external code context, |
| 340 | // where g is not set. |
| 341 | // first save R0, because runtime·load_g will clobber it |
| 342 | MOVD R0, 8(RSP) // signum |
| 343 | MOVB runtime·iscgo(SB), R0 |
| 344 | CMP $0, R0 |
| 345 | // XXX branch destination |
| 346 | BEQ 2(PC) |
| 347 | BL runtime·load_g(SB) |
| 348 | |
| 349 | MOVD R1, 16(RSP) |
| 350 | MOVD R2, 24(RSP) |
| 351 | BL runtime·sigtrampgo(SB) |
Ben Shi | cbdf9ad | 2019-05-15 02:12:10 +0000 | [diff] [blame] | 352 | |
| 353 | // Restore callee-save registers. |
| 354 | MOVD 8*4(RSP), R19 |
| 355 | MOVD 8*5(RSP), R20 |
| 356 | MOVD 8*6(RSP), R21 |
| 357 | MOVD 8*7(RSP), R22 |
| 358 | MOVD 8*8(RSP), R23 |
| 359 | MOVD 8*9(RSP), R24 |
| 360 | MOVD 8*10(RSP), R25 |
| 361 | MOVD 8*11(RSP), R26 |
| 362 | MOVD 8*12(RSP), R27 |
| 363 | MOVD 8*13(RSP), g |
| 364 | MOVD 8*14(RSP), R29 |
| 365 | FMOVD 8*15(RSP), F8 |
| 366 | FMOVD 8*16(RSP), F9 |
| 367 | FMOVD 8*17(RSP), F10 |
| 368 | FMOVD 8*18(RSP), F11 |
| 369 | FMOVD 8*19(RSP), F12 |
| 370 | FMOVD 8*20(RSP), F13 |
| 371 | FMOVD 8*21(RSP), F14 |
| 372 | FMOVD 8*22(RSP), F15 |
| 373 | |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 374 | RET |
| 375 | |
| 376 | TEXT runtime·mmap(SB),NOSPLIT,$0 |
| 377 | MOVD addr+0(FP), R0 // arg 1 - addr |
| 378 | MOVD n+8(FP), R1 // arg 2 - len |
| 379 | MOVW prot+16(FP), R2 // arg 3 - prot |
| 380 | MOVW flags+20(FP), R3 // arg 4 - flags |
| 381 | MOVW fd+24(FP), R4 // arg 5 - fd |
| 382 | MOVW $0, R5 // arg 6 - pad |
| 383 | MOVD off+28(FP), R6 // arg 7 - offset |
| 384 | SVC $SYS_mmap |
| 385 | BCS fail |
| 386 | MOVD R0, p+32(FP) |
| 387 | MOVD $0, err+40(FP) |
| 388 | RET |
| 389 | fail: |
| 390 | MOVD $0, p+32(FP) |
| 391 | MOVD R0, err+40(FP) |
| 392 | RET |
| 393 | |
| 394 | TEXT runtime·munmap(SB),NOSPLIT,$0 |
| 395 | MOVD addr+0(FP), R0 // arg 1 - addr |
| 396 | MOVD n+8(FP), R1 // arg 2 - len |
| 397 | SVC $SYS_munmap |
| 398 | BCS fail |
| 399 | RET |
| 400 | fail: |
| 401 | MOVD $0, R0 |
| 402 | MOVD R0, (R0) // crash |
| 403 | |
| 404 | TEXT runtime·madvise(SB),NOSPLIT,$0 |
| 405 | MOVD addr+0(FP), R0 // arg 1 - addr |
| 406 | MOVD n+8(FP), R1 // arg 2 - len |
| 407 | MOVW flags+16(FP), R2 // arg 3 - behav |
| 408 | SVC $SYS_madvise |
| 409 | BCC ok |
| 410 | MOVD $-1, R0 |
| 411 | ok: |
| 412 | MOVD R0, ret+24(FP) |
| 413 | RET |
| 414 | |
Joel Sing | 37133b5 | 2019-05-15 04:19:26 +1000 | [diff] [blame] | 415 | TEXT runtime·sigaltstack(SB),NOSPLIT,$0 |
Maya Rashish | d23cba6 | 2019-04-20 14:39:33 +0000 | [diff] [blame] | 416 | MOVD new+0(FP), R0 // arg 1 - nss |
| 417 | MOVD old+8(FP), R1 // arg 2 - oss |
| 418 | SVC $SYS___sigaltstack14 |
| 419 | BCS fail |
| 420 | RET |
| 421 | fail: |
| 422 | MOVD $0, R0 |
| 423 | MOVD R0, (R0) // crash |
| 424 | |
| 425 | TEXT runtime·sysctl(SB),NOSPLIT,$0 |
| 426 | MOVD mib+0(FP), R0 // arg 1 - name |
| 427 | MOVW miblen+8(FP), R1 // arg 2 - namelen |
| 428 | MOVD out+16(FP), R2 // arg 3 - oldp |
| 429 | MOVD size+24(FP), R3 // arg 4 - oldlenp |
| 430 | MOVD dst+32(FP), R4 // arg 5 - newp |
| 431 | MOVD ndst+40(FP), R5 // arg 6 - newlen |
| 432 | SVC $SYS___sysctl |
| 433 | BCC ok |
| 434 | NEG R0, R0 |
| 435 | ok: |
| 436 | MOVW R0, ret+48(FP) |
| 437 | RET |
| 438 | |
| 439 | // int32 runtime·kqueue(void) |
| 440 | TEXT runtime·kqueue(SB),NOSPLIT,$0 |
| 441 | MOVD $0, R0 |
| 442 | SVC $SYS_kqueue |
| 443 | BCC ok |
| 444 | NEG R0, R0 |
| 445 | ok: |
| 446 | MOVW R0, ret+0(FP) |
| 447 | RET |
| 448 | |
| 449 | // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout) |
| 450 | TEXT runtime·kevent(SB),NOSPLIT,$0 |
| 451 | MOVW kq+0(FP), R0 // arg 1 - kq |
| 452 | MOVD ch+8(FP), R1 // arg 2 - changelist |
| 453 | MOVW nch+16(FP), R2 // arg 3 - nchanges |
| 454 | MOVD ev+24(FP), R3 // arg 4 - eventlist |
| 455 | MOVW nev+32(FP), R4 // arg 5 - nevents |
| 456 | MOVD ts+40(FP), R5 // arg 6 - timeout |
| 457 | SVC $SYS___kevent50 |
| 458 | BCC ok |
| 459 | NEG R0, R0 |
| 460 | ok: |
| 461 | MOVW R0, ret+48(FP) |
| 462 | RET |
| 463 | |
| 464 | // void runtime·closeonexec(int32 fd) |
| 465 | TEXT runtime·closeonexec(SB),NOSPLIT,$0 |
| 466 | MOVW fd+0(FP), R0 // arg 1 - fd |
| 467 | MOVW $F_SETFD, R1 |
| 468 | MOVW $FD_CLOEXEC, R2 |
| 469 | SVC $SYS_fcntl |
| 470 | RET |
Ian Lance Taylor | 3b0aa54 | 2019-04-03 16:31:13 -0700 | [diff] [blame] | 471 | |
| 472 | // func runtime·setNonblock(int32 fd) |
| 473 | TEXT runtime·setNonblock(SB),NOSPLIT|NOFRAME,$0-4 |
| 474 | MOVW fd+0(FP), R0 // arg 1 - fd |
| 475 | MOVD $F_GETFL, R1 // arg 2 - cmd |
| 476 | MOVD $0, R2 // arg 3 |
| 477 | SVC $SYS_fcntl |
| 478 | MOVD $O_NONBLOCK, R2 |
| 479 | EOR R0, R2 // arg 3 - flags |
| 480 | MOVW fd+0(FP), R0 // arg 1 - fd |
| 481 | MOVD $F_SETFL, R1 // arg 2 - cmd |
| 482 | SVC $SYS_fcntl |
| 483 | RET |