...

Text file src/syscall/asm_unix_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//go:build freebsd || netbsd
     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
    18TEXT	·Syscall(SB),NOSPLIT,$0-28
    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	$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	runtime·exitsyscall(SB)
    34	RET
    35ok:
    36	MOVL	AX, r1+16(FP)	// r1
    37	MOVL	DX, r2+20(FP)	// r2
    38	MOVL	$0, err+24(FP)	// errno
    39	CALL	runtime·exitsyscall(SB)
    40	RET
    41
    42TEXT	·Syscall6(SB),NOSPLIT,$0-40
    43	CALL	runtime·entersyscall(SB)
    44	MOVL	trap+0(FP), AX	// syscall entry
    45	// slide args down on top of system call number
    46	LEAL		a1+4(FP), SI
    47	LEAL		trap+0(FP), 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	runtime·exitsyscall(SB)
    61	RET
    62ok6:
    63	MOVL	AX, r1+28(FP)	// r1
    64	MOVL	DX, r2+32(FP)	// r2
    65	MOVL	$0, err+36(FP)	// errno
    66	CALL	runtime·exitsyscall(SB)
    67	RET
    68
    69TEXT	·Syscall9(SB),NOSPLIT,$0-52
    70	CALL	runtime·entersyscall(SB)
    71	MOVL	num+0(FP), AX	// syscall entry
    72	// slide args down on top of system call number
    73	LEAL		a1+4(FP), SI
    74	LEAL		num+0(FP), 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	runtime·exitsyscall(SB)
    91	RET
    92ok9:
    93	MOVL	AX, r1+40(FP)	// r1
    94	MOVL	DX, r2+44(FP)	// r2
    95	MOVL	$0, err+48(FP)	// errno
    96	CALL	runtime·exitsyscall(SB)
    97	RET
    98
    99TEXT ·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		a1+4(FP), SI
   103	LEAL		trap+0(FP), 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
   114ok1:
   115	MOVL	AX, r1+16(FP)	// r1
   116	MOVL	DX, r2+20(FP)	// r2
   117	MOVL	$0, err+24(FP)	// errno
   118	RET
   119
   120TEXT	·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		a1+4(FP), SI
   124	LEAL		trap+0(FP), 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
   138ok2:
   139	MOVL	AX, r1+28(FP)	// r1
   140	MOVL	DX, r2+32(FP)	// r2
   141	MOVL	$0, err+36(FP)	// errno
   142	RET

View as plain text