...
Run Format

Text file src/syscall/asm_plan9_386.s

Documentation: syscall

     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 call support for 386, Plan 9
    10	//
    11	
    12	//func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string)
    13	//func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string)
    14	//func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
    15	//func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
    16	
    17	// Trap # in AX, args on stack above caller pc.
    18	TEXT	·Syscall(SB),NOSPLIT,$0-32
    19		CALL	runtime·entersyscall(SB)
    20		MOVL	trap+0(FP), AX	// syscall entry
    21		// slide args down on top of system call number
    22		LEAL	a1+4(FP), SI
    23		LEAL	trap+0(FP), DI
    24		CLD
    25		MOVSL
    26		MOVSL
    27		MOVSL
    28		INT	$64
    29		MOVL	AX, r1+16(FP)
    30		MOVL	$0, r2+20(FP)
    31		CMPL	AX, $-1
    32		JNE	ok3
    33	
    34		SUBL	$8, SP
    35		CALL	runtime·errstr(SB)
    36		MOVL	SP, SI
    37		ADDL	$8, SP
    38		JMP	copyresult3
    39		
    40	ok3:
    41		LEAL	runtime·emptystring(SB), SI	
    42		
    43	copyresult3:
    44		LEAL	err+24(FP), DI
    45	
    46		CLD
    47		MOVSL
    48		MOVSL
    49	
    50		CALL	runtime·exitsyscall(SB)
    51		RET
    52	
    53	TEXT	·Syscall6(SB),NOSPLIT,$0-44
    54		CALL	runtime·entersyscall(SB)
    55		MOVL	trap+0(FP), AX	// syscall entry
    56		// slide args down on top of system call number
    57		LEAL	a1+4(FP), SI
    58		LEAL	trap+0(FP), DI
    59		CLD
    60		MOVSL
    61		MOVSL
    62		MOVSL
    63		MOVSL
    64		MOVSL
    65		MOVSL
    66		INT	$64
    67		MOVL	AX, r1+28(FP)
    68		MOVL	$0, r2+32(FP)
    69		CMPL	AX, $-1
    70		JNE	ok4
    71		
    72		SUBL	$8, SP
    73		CALL	runtime·errstr(SB)
    74		MOVL	SP, SI
    75		ADDL	$8, SP
    76		JMP	copyresult4
    77		
    78	ok4:
    79		LEAL	runtime·emptystring(SB), SI
    80		
    81	copyresult4:
    82		LEAL	err+36(FP), DI
    83	
    84		CLD
    85		MOVSL
    86		MOVSL
    87	
    88		CALL	runtime·exitsyscall(SB)
    89		RET
    90	
    91	TEXT ·RawSyscall(SB),NOSPLIT,$0-28
    92		MOVL	trap+0(FP), AX	// syscall entry
    93		// slide args down on top of system call number
    94		LEAL	a1+4(FP), SI
    95		LEAL	trap+0(FP), DI
    96		CLD
    97		MOVSL
    98		MOVSL
    99		MOVSL
   100		INT	$64
   101		MOVL	AX, r1+16(FP)
   102		MOVL	AX, r2+20(FP)
   103		MOVL	AX, err+24(FP)
   104		RET
   105	
   106	TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
   107		MOVL	trap+0(FP), AX	// syscall entry
   108		// slide args down on top of system call number
   109		LEAL	a1+4(FP), SI
   110		LEAL	trap+0(FP), DI
   111		CLD
   112		MOVSL
   113		MOVSL
   114		MOVSL
   115		MOVSL
   116		MOVSL
   117		MOVSL
   118		INT	$64
   119		MOVL	AX, r1+28(FP)
   120		MOVL	AX, r2+32(FP)
   121		MOVL	AX, err+36(FP)
   122		RET
   123	
   124	#define SYS_SEEK 39	/* from zsysnum_plan9_386.go */
   125	
   126	//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
   127	TEXT ·seek(SB),NOSPLIT,$0-36
   128		LEAL	newoffset+20(FP), AX
   129		MOVL	AX, placeholder+0(FP)
   130		
   131		MOVL	$SYS_SEEK, AX	// syscall entry
   132		INT	$64
   133		
   134		CMPL	AX, $-1
   135		JNE	ok6
   136		MOVL	AX, newoffset_lo+20(FP)
   137		MOVL	AX, newoffset_hi+24(FP)
   138		
   139		SUBL	$8, SP
   140		CALL	syscall·errstr(SB)
   141		MOVL	SP, SI
   142		ADDL	$8, SP	
   143		JMP	copyresult6
   144		
   145	ok6:
   146		LEAL	runtime·emptystring(SB), SI
   147		
   148	copyresult6:
   149		LEAL	err+28(FP), DI
   150	
   151		CLD
   152		MOVSL
   153		MOVSL
   154		RET
   155	
   156	//func exit(code int)
   157	// Import runtime·exit for cleanly exiting.
   158	TEXT ·exit(SB),NOSPLIT,$4-4
   159		NO_LOCAL_POINTERS
   160		MOVL	code+0(FP), AX
   161		MOVL	AX, 0(SP)
   162		CALL	runtime·exit(SB)
   163		RET

View as plain text