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 94