Home | History | Annotate | Download | only in syscall
      1 // +build netbsd freebsd openbsd
      2 
      3 // Copyright 2009 The Go Authors. All rights reserved.
      4 // Use of this source code is governed by a BSD-style
      5 // license that can be found in the LICENSE file.
      6 
      7 #include "textflag.h"
      8 #include "funcdata.h"
      9 
     10 //
     11 // System call support for some 386 unixes
     12 //
     13 
     14 // func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
     15 // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
     16 // Trap # in AX, args on stack above caller pc.
     17 
     18 TEXT	Syscall(SB),NOSPLIT,$0-28
     19 	CALL	runtimeentersyscall(SB)
     20 	MOVL	trap+0(FP), AX	// syscall entry
     21 	// slide args down on top of system call number
     22 	LEAL		8(SP), SI
     23 	LEAL		4(SP), DI
     24 	CLD
     25 	MOVSL
     26 	MOVSL
     27 	MOVSL
     28 	INT	$0x80
     29 	JAE	ok
     30 	MOVL	$-1, r1+16(FP)	// r1
     31 	MOVL	$-1, r2+20(FP)	// r2
     32 	MOVL	AX, err+24(FP)	// errno
     33 	CALL	runtimeexitsyscall(SB)
     34 	RET
     35 ok:
     36 	MOVL	AX, r1+16(FP)	// r1
     37 	MOVL	DX, r2+20(FP)	// r2
     38 	MOVL	$0, err+24(FP)	// errno
     39 	CALL	runtimeexitsyscall(SB)
     40 	RET
     41 
     42 TEXT	Syscall6(SB),NOSPLIT,$0-40
     43 	CALL	runtimeentersyscall(SB)
     44 	MOVL	trap+0(FP), AX	// syscall entry
     45 	// slide args down on top of system call number
     46 	LEAL		8(SP), SI
     47 	LEAL		4(SP), DI
     48 	CLD
     49 	MOVSL
     50 	MOVSL
     51 	MOVSL
     52 	MOVSL
     53 	MOVSL
     54 	MOVSL
     55 	INT	$0x80
     56 	JAE	ok6
     57 	MOVL	$-1, r1+28(FP)	// r1
     58 	MOVL	$-1, r2+32(FP)	// r2
     59 	MOVL	AX, err+36(FP)	// errno
     60 	CALL	runtimeexitsyscall(SB)
     61 	RET
     62 ok6:
     63 	MOVL	AX, r1+28(FP)	// r1
     64 	MOVL	DX, r2+32(FP)	// r2
     65 	MOVL	$0, err+36(FP)	// errno
     66 	CALL	runtimeexitsyscall(SB)
     67 	RET
     68 
     69 TEXT	Syscall9(SB),NOSPLIT,$0-52
     70 	CALL	runtimeentersyscall(SB)
     71 	MOVL	num+0(FP), AX	// syscall entry
     72 	// slide args down on top of system call number
     73 	LEAL		8(SP), SI
     74 	LEAL		4(SP), DI
     75 	CLD
     76 	MOVSL
     77 	MOVSL
     78 	MOVSL
     79 	MOVSL
     80 	MOVSL
     81 	MOVSL
     82 	MOVSL
     83 	MOVSL
     84 	MOVSL
     85 	INT	$0x80
     86 	JAE	ok9
     87 	MOVL	$-1, r1+40(FP)	// r1
     88 	MOVL	$-1, r2+44(FP)	// r2
     89 	MOVL	AX, err+48(FP)	// errno
     90 	CALL	runtimeexitsyscall(SB)
     91 	RET
     92 ok9:
     93 	MOVL	AX, r1+40(FP)	// r1
     94 	MOVL	DX, r2+44(FP)	// r2
     95 	MOVL	$0, err+48(FP)	// errno
     96 	CALL	runtimeexitsyscall(SB)
     97 	RET
     98 
     99 TEXT RawSyscall(SB),NOSPLIT,$0-28
    100 	MOVL	trap+0(FP), AX	// syscall entry
    101 	// slide args down on top of system call number
    102 	LEAL		8(SP), SI
    103 	LEAL		4(SP), DI
    104 	CLD
    105 	MOVSL
    106 	MOVSL
    107 	MOVSL
    108 	INT	$0x80
    109 	JAE	ok1
    110 	MOVL	$-1, r1+16(FP)	// r1
    111 	MOVL	$-1, r2+20(FP)	// r2
    112 	MOVL	AX, err+24(FP)	// errno
    113 	RET
    114 ok1:
    115 	MOVL	AX, r1+16(FP)	// r1
    116 	MOVL	DX, r2+20(FP)	// r2
    117 	MOVL	$0, err+24(FP)	// errno
    118 	RET
    119 
    120 TEXT	RawSyscall6(SB),NOSPLIT,$0-40
    121 	MOVL	trap+0(FP), AX	// syscall entry
    122 	// slide args down on top of system call number
    123 	LEAL		8(SP), SI
    124 	LEAL		4(SP), DI
    125 	CLD
    126 	MOVSL
    127 	MOVSL
    128 	MOVSL
    129 	MOVSL
    130 	MOVSL
    131 	MOVSL
    132 	INT	$0x80
    133 	JAE	ok2
    134 	MOVL	$-1, r1+28(FP)	// r1
    135 	MOVL	$-1, r2+32(FP)	// r2
    136 	MOVL	AX, err+36(FP)	// errno
    137 	RET
    138 ok2:
    139 	MOVL	AX, r1+28(FP)	// r1
    140 	MOVL	DX, r2+32(FP)	// r2
    141 	MOVL	$0, err+36(FP)	// errno
    142 	RET
    143