Text file src/syscall/asm_linux_arm.s

     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)
    18  TEXT ·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
    37  okseek:
    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)
    45  TEXT ·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
    59  ok:
    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);
    66  TEXT ·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  

View as plain text