...

Text file src/runtime/internal/syscall/asm_linux_amd64.s

Documentation: runtime/internal/syscall

     1// Copyright 2022 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
     7// func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr)
     8//
     9// We need to convert to the syscall ABI.
    10//
    11// arg | ABIInternal | Syscall
    12// ---------------------------
    13// num | AX          | AX
    14// a1  | BX          | DI
    15// a2  | CX          | SI
    16// a3  | DI          | DX
    17// a4  | SI          | R10
    18// a5  | R8          | R8
    19// a6  | R9          | R9
    20//
    21// r1  | AX          | AX
    22// r2  | BX          | DX
    23// err | CX          | part of AX
    24//
    25// Note that this differs from "standard" ABI convention, which would pass 4th
    26// arg in CX, not R10.
    27TEXT ·Syscall6<ABIInternal>(SB),NOSPLIT,$0
    28	// a6 already in R9.
    29	// a5 already in R8.
    30	MOVQ	SI, R10 // a4
    31	MOVQ	DI, DX  // a3
    32	MOVQ	CX, SI  // a2
    33	MOVQ	BX, DI  // a1
    34	// num already in AX.
    35	SYSCALL
    36	CMPQ	AX, $0xfffffffffffff001
    37	JLS	ok
    38	NEGQ	AX
    39	MOVQ	AX, CX  // errno
    40	MOVQ	$-1, AX // r1
    41	MOVQ	$0, BX  // r2
    42	RET
    43ok:
    44	// r1 already in AX.
    45	MOVQ	DX, BX // r2
    46	MOVQ	$0, CX // errno
    47	RET

View as plain text