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 calls for arm, Linux 10// 11 12#define SYS__LLSEEK 140 /* from zsysnum_linux_arm.go */ 13// func seek(fd int, offset int64, whence int) (newoffset int64, errno int) 14// Implemented in assembly to avoid allocation when 15// taking the address of the return value newoffset. 16// Underlying system call is 17// llseek(int fd, int offhi, int offlo, int64 *result, int whence) 18TEXT ·seek(SB),NOSPLIT,$0-28 19 BL runtime·entersyscall(SB) 20 MOVW $SYS__LLSEEK, R7 // syscall entry 21 MOVW fd+0(FP), R0 22 MOVW offset_hi+8(FP), R1 23 MOVW offset_lo+4(FP), R2 24 MOVW $newoffset_lo+16(FP), R3 25 MOVW whence+12(FP), R4 26 SWI $0 27 MOVW $0xfffff001, R6 28 CMP R6, R0 29 BLS okseek 30 MOVW $0, R1 31 MOVW R1, newoffset_lo+16(FP) 32 MOVW R1, newoffset_hi+20(FP) 33 RSB $0, R0, R0 34 MOVW R0, err+24(FP) 35 BL runtime·exitsyscall(SB) 36 RET 37okseek: 38 // system call filled in newoffset already 39 MOVW $0, R0 40 MOVW R0, err+24(FP) 41 BL runtime·exitsyscall(SB) 42 RET 43 44// func rawVforkSyscall(trap, a1, a2, a3 uintptr) (r1, err uintptr) 45TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-24 46 MOVW trap+0(FP), R7 // syscall entry 47 MOVW a1+4(FP), R0 48 MOVW a2+8(FP), R1 49 MOVW a3+12(FP), R2 50 SWI $0 51 MOVW $0xfffff001, R1 52 CMP R1, R0 53 BLS ok 54 MOVW $-1, R1 55 MOVW R1, r1+16(FP) 56 RSB $0, R0, R0 57 MOVW R0, err+20(FP) 58 RET 59ok: 60 MOVW R0, r1+16(FP) 61 MOVW $0, R0 62 MOVW R0, err+20(FP) 63 RET 64 65// func rawSyscallNoError(trap uintptr, a1, a2, a3 uintptr) (r1, r2 uintptr); 66TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-24 67 MOVW trap+0(FP), R7 // syscall entry 68 MOVW a1+4(FP), R0 69 MOVW a2+8(FP), R1 70 MOVW a3+12(FP), R2 71 SWI $0 72 MOVW R0, r1+16(FP) 73 MOVW $0, R0 74 MOVW R0, r2+20(FP) 75 RET 76