| // Copyright 2009 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | #include "textflag.h" | 
 | #include "funcdata.h" | 
 |  | 
 | // | 
 | // System call support for Plan 9 | 
 | // | 
 |  | 
 | //func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string) | 
 | //func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string) | 
 | //func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) | 
 | //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) | 
 |  | 
 | #define SYS_ERRSTR 41	/* from zsysnum_plan9.go */ | 
 |  | 
 | TEXT	·Syscall(SB),NOSPLIT,$168-64 | 
 | 	NO_LOCAL_POINTERS | 
 | 	CALL	runtime·entersyscall(SB) | 
 | 	MOVQ	trap+0(FP), BP	// syscall entry | 
 | 	// copy args down | 
 | 	LEAQ	a1+8(FP), SI | 
 | 	LEAQ	sysargs-160(SP), DI | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	SYSCALL | 
 | 	MOVQ	AX, r1+32(FP) | 
 | 	MOVQ	$0, r2+40(FP) | 
 | 	CMPL	AX, $-1 | 
 | 	JNE	ok3 | 
 |  | 
 | 	LEAQ	errbuf-128(SP), AX | 
 | 	MOVQ	AX, sysargs-160(SP) | 
 | 	MOVQ	$128, sysargs1-152(SP) | 
 | 	MOVQ	$SYS_ERRSTR, BP | 
 | 	SYSCALL | 
 | 	CALL	runtime·exitsyscall(SB) | 
 | 	MOVQ	sysargs-160(SP), AX | 
 | 	MOVQ	AX, errbuf-168(SP) | 
 | 	CALL	runtime·gostring(SB) | 
 | 	LEAQ	str-160(SP), SI | 
 | 	JMP	copyresult3 | 
 |  | 
 | ok3: | 
 | 	CALL	runtime·exitsyscall(SB) | 
 | 	LEAQ	·emptystring(SB), SI | 
 |  | 
 | copyresult3: | 
 | 	LEAQ	err+48(FP), DI | 
 |  | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 |  | 
 | 	RET | 
 |  | 
 | TEXT	·Syscall6(SB),NOSPLIT,$168-88 | 
 | 	NO_LOCAL_POINTERS | 
 | 	CALL	runtime·entersyscall(SB) | 
 | 	MOVQ	trap+0(FP), BP	// syscall entry | 
 | 	// copy args down | 
 | 	LEAQ	a1+8(FP), SI | 
 | 	LEAQ	sysargs-160(SP), DI | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	SYSCALL | 
 | 	MOVQ	AX, r1+56(FP) | 
 | 	MOVQ	$0, r2+64(FP) | 
 | 	CMPL	AX, $-1 | 
 | 	JNE	ok4 | 
 |  | 
 | 	LEAQ	errbuf-128(SP), AX | 
 | 	MOVQ	AX, sysargs-160(SP) | 
 | 	MOVQ	$128, sysargs1-152(SP) | 
 | 	MOVQ	$SYS_ERRSTR, BP | 
 | 	SYSCALL | 
 | 	CALL	runtime·exitsyscall(SB) | 
 | 	MOVQ	sysargs-160(SP), AX | 
 | 	MOVQ	AX, errbuf-168(SP) | 
 | 	CALL	runtime·gostring(SB) | 
 | 	LEAQ	str-160(SP), SI | 
 | 	JMP	copyresult4 | 
 |  | 
 | ok4: | 
 | 	CALL	runtime·exitsyscall(SB) | 
 | 	LEAQ	·emptystring(SB), SI | 
 |  | 
 | copyresult4: | 
 | 	LEAQ	err+72(FP), DI | 
 |  | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 |  | 
 | 	RET | 
 |  | 
 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56 | 
 | 	MOVQ	trap+0(FP), BP	// syscall entry | 
 | 	// slide args down on top of system call number | 
 | 	LEAQ	a1+8(FP), SI | 
 | 	LEAQ	trap+0(FP), DI | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	SYSCALL | 
 | 	MOVQ	AX, r1+32(FP) | 
 | 	MOVQ	AX, r2+40(FP) | 
 | 	MOVQ	AX, err+48(FP) | 
 | 	RET | 
 |  | 
 | TEXT	·RawSyscall6(SB),NOSPLIT,$0-80 | 
 | 	MOVQ	trap+0(FP), BP	// syscall entry | 
 | 	// slide args down on top of system call number | 
 | 	LEAQ	a1+8(FP), SI | 
 | 	LEAQ	trap+0(FP), DI | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	SYSCALL | 
 | 	MOVQ	AX, r1+56(FP) | 
 | 	MOVQ	AX, r2+64(FP) | 
 | 	MOVQ	AX, err+72(FP) | 
 | 	RET | 
 |  | 
 | #define SYS_SEEK 39	/* from zsysnum_plan9.go */ | 
 |  | 
 | //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) | 
 | TEXT ·seek(SB),NOSPLIT,$48-56 | 
 | 	NO_LOCAL_POINTERS | 
 | 	LEAQ	newoffset+32(FP), AX | 
 | 	MOVQ	AX, placeholder+0(FP) | 
 |  | 
 | 	// copy args down | 
 | 	LEAQ	placeholder+0(FP), SI | 
 | 	LEAQ	sysargs-40(SP), DI | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	MOVQ	$SYS_SEEK, BP	// syscall entry | 
 | 	SYSCALL | 
 |  | 
 | 	CMPL	AX, $-1 | 
 | 	JNE	ok6 | 
 | 	MOVQ	AX, newoffset+32(FP) | 
 |  | 
 | 	CALL	syscall·errstr(SB) | 
 | 	MOVQ	SP, SI | 
 | 	JMP	copyresult6 | 
 |  | 
 | ok6: | 
 | 	LEAQ	·emptystring(SB), SI | 
 |  | 
 | copyresult6: | 
 | 	LEAQ	err+40(FP), DI | 
 |  | 
 | 	CLD | 
 | 	MOVSQ | 
 | 	MOVSQ | 
 | 	RET |