...

Text file src/syscall/asm_linux_s390x.s

Documentation: syscall

     1// Copyright 2016 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//
     8// System calls for s390x, Linux
     9//
    10
    11// func rawVforkSyscall(trap, a1, a2, a3 uintptr) (r1, err uintptr)
    12TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-48
    13	MOVD	a1+8(FP), R2
    14	MOVD	a2+16(FP), R3
    15	MOVD	a3+24(FP), R4
    16	MOVD	$0, R5
    17	MOVD	$0, R6
    18	MOVD	$0, R7
    19	MOVD	trap+0(FP), R1	// syscall entry
    20	SYSCALL
    21	MOVD	$0xfffffffffffff001, R8
    22	CMPUBLT	R2, R8, ok2
    23	MOVD	$-1, r1+32(FP)
    24	NEG	R2, R2
    25	MOVD	R2, err+40(FP)	// errno
    26	RET
    27ok2:
    28	MOVD	R2, r1+32(FP)
    29	MOVD	$0, err+40(FP)	// errno
    30	RET
    31
    32// func rawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
    33TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
    34	MOVD	a1+8(FP), R2
    35	MOVD	a2+16(FP), R3
    36	MOVD	a3+24(FP), R4
    37	MOVD	$0, R5
    38	MOVD	$0, R6
    39	MOVD	$0, R7
    40	MOVD	trap+0(FP), R1	// syscall entry
    41	SYSCALL
    42	MOVD	R2, r1+32(FP)
    43	MOVD	R3, r2+40(FP)
    44	RET
    45
    46#define SYS_SOCKETCALL 102	/* from zsysnum_linux_s390x.go */
    47
    48// func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
    49// Kernel interface gets call sub-number and pointer to a0.
    50TEXT ·socketcall(SB),NOSPLIT,$0-72
    51	BL	runtime·entersyscall(SB)
    52	MOVD	$SYS_SOCKETCALL, R1	// syscall entry
    53	MOVD	call+0(FP), R2		// socket call number
    54	MOVD	$a0+8(FP), R3		// pointer to call arguments
    55	MOVD	$0, R4
    56	MOVD	$0, R5
    57	MOVD	$0, R6
    58	MOVD	$0, R7
    59	SYSCALL
    60	MOVD	$0xfffffffffffff001, R8
    61	CMPUBLT	R2, R8, oksock
    62	MOVD	$-1, n+56(FP)
    63	NEG	R2, R2
    64	MOVD	R2, err+64(FP)
    65	BL	runtime·exitsyscall(SB)
    66	RET
    67oksock:
    68	MOVD	R2, n+56(FP)
    69	MOVD	$0, err+64(FP)
    70	CALL	runtime·exitsyscall(SB)
    71	RET
    72
    73// func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
    74// Kernel interface gets call sub-number and pointer to a0.
    75TEXT ·rawsocketcall(SB),NOSPLIT,$0-72
    76	MOVD	$SYS_SOCKETCALL, R1	// syscall entry
    77	MOVD	call+0(FP), R2		// socket call number
    78	MOVD	$a0+8(FP), R3		// pointer to call arguments
    79	MOVD	$0, R4
    80	MOVD	$0, R5
    81	MOVD	$0, R6
    82	MOVD	$0, R7
    83	SYSCALL
    84	MOVD	$0xfffffffffffff001, R8
    85	CMPUBLT	R2, R8, oksock1
    86	MOVD	$-1, n+56(FP)
    87	NEG	R2, R2
    88	MOVD	R2, err+64(FP)
    89	RET
    90oksock1:
    91	MOVD	R2, n+56(FP)
    92	MOVD	$0, err+64(FP)
    93	RET

View as plain text