Skip to content

Commit 7d69d98

Browse files
dustin-wardgopherbot
authored andcommitted
unix: extend support for z/OS
This change syncs the IBM internal version of sys/unix with the public repository. There are a variety of new syscalls and const definitions that have been accumulated over the past few years to support developers using Go on the platform. Old simulations of calls like 'epoll' and 'fstatfs' have been replaced with their real counterparts. The zos/s390x syscalls also have extensive trampolining to handle zos systems that might not have support for some of these new system calls. Closes golang/go#67071 Change-Id: I973d9e0abca2b05365308cf2b890438e50ae5957 Reviewed-on: https://go-review.googlesource.com/c/sys/+/582035 Reviewed-by: David Chase <[email protected]> Reviewed-by: Bill O'Farrell <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> Auto-Submit: Ian Lance Taylor <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 7758090 commit 7d69d98

24 files changed

+12605
-4537
lines changed

unix/asm_zos_s390x.s

+312-353
Large diffs are not rendered by default.

unix/bpxsvc_zos.go

+657
Large diffs are not rendered by default.

unix/bpxsvc_zos.s

+192
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
// Copyright 2024 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 "go_asm.h"
6+
#include "textflag.h"
7+
8+
// function to call USS assembly language services
9+
//
10+
// doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bit64env.htm
11+
//
12+
// arg1 unsafe.Pointer array that ressembles an OS PLIST
13+
//
14+
// arg2 function offset as in
15+
// doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bpx2cr_List_of_offsets.htm
16+
//
17+
// func bpxcall(plist []unsafe.Pointer, bpx_offset int64)
18+
19+
TEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0
20+
MOVD plist_base+0(FP), R1 // r1 points to plist
21+
MOVD bpx_offset+24(FP), R2 // r2 offset to BPX vector table
22+
MOVD R14, R7 // save r14
23+
MOVD R15, R8 // save r15
24+
MOVWZ 16(R0), R9
25+
MOVWZ 544(R9), R9
26+
MOVWZ 24(R9), R9 // call vector in r9
27+
ADD R2, R9 // add offset to vector table
28+
MOVWZ (R9), R9 // r9 points to entry point
29+
BYTE $0x0D // BL R14,R9 --> basr r14,r9
30+
BYTE $0xE9 // clobbers 0,1,14,15
31+
MOVD R8, R15 // restore 15
32+
JMP R7 // return via saved return address
33+
34+
// func A2e(arr [] byte)
35+
// code page conversion from 819 to 1047
36+
TEXT ·A2e(SB), NOSPLIT|NOFRAME, $0
37+
MOVD arg_base+0(FP), R2 // pointer to arry of characters
38+
MOVD arg_len+8(FP), R3 // count
39+
XOR R0, R0
40+
XOR R1, R1
41+
BYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2))
42+
43+
// ASCII -> EBCDIC conversion table:
44+
BYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03
45+
BYTE $0x37; BYTE $0x2d; BYTE $0x2e; BYTE $0x2f
46+
BYTE $0x16; BYTE $0x05; BYTE $0x15; BYTE $0x0b
47+
BYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f
48+
BYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13
49+
BYTE $0x3c; BYTE $0x3d; BYTE $0x32; BYTE $0x26
50+
BYTE $0x18; BYTE $0x19; BYTE $0x3f; BYTE $0x27
51+
BYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f
52+
BYTE $0x40; BYTE $0x5a; BYTE $0x7f; BYTE $0x7b
53+
BYTE $0x5b; BYTE $0x6c; BYTE $0x50; BYTE $0x7d
54+
BYTE $0x4d; BYTE $0x5d; BYTE $0x5c; BYTE $0x4e
55+
BYTE $0x6b; BYTE $0x60; BYTE $0x4b; BYTE $0x61
56+
BYTE $0xf0; BYTE $0xf1; BYTE $0xf2; BYTE $0xf3
57+
BYTE $0xf4; BYTE $0xf5; BYTE $0xf6; BYTE $0xf7
58+
BYTE $0xf8; BYTE $0xf9; BYTE $0x7a; BYTE $0x5e
59+
BYTE $0x4c; BYTE $0x7e; BYTE $0x6e; BYTE $0x6f
60+
BYTE $0x7c; BYTE $0xc1; BYTE $0xc2; BYTE $0xc3
61+
BYTE $0xc4; BYTE $0xc5; BYTE $0xc6; BYTE $0xc7
62+
BYTE $0xc8; BYTE $0xc9; BYTE $0xd1; BYTE $0xd2
63+
BYTE $0xd3; BYTE $0xd4; BYTE $0xd5; BYTE $0xd6
64+
BYTE $0xd7; BYTE $0xd8; BYTE $0xd9; BYTE $0xe2
65+
BYTE $0xe3; BYTE $0xe4; BYTE $0xe5; BYTE $0xe6
66+
BYTE $0xe7; BYTE $0xe8; BYTE $0xe9; BYTE $0xad
67+
BYTE $0xe0; BYTE $0xbd; BYTE $0x5f; BYTE $0x6d
68+
BYTE $0x79; BYTE $0x81; BYTE $0x82; BYTE $0x83
69+
BYTE $0x84; BYTE $0x85; BYTE $0x86; BYTE $0x87
70+
BYTE $0x88; BYTE $0x89; BYTE $0x91; BYTE $0x92
71+
BYTE $0x93; BYTE $0x94; BYTE $0x95; BYTE $0x96
72+
BYTE $0x97; BYTE $0x98; BYTE $0x99; BYTE $0xa2
73+
BYTE $0xa3; BYTE $0xa4; BYTE $0xa5; BYTE $0xa6
74+
BYTE $0xa7; BYTE $0xa8; BYTE $0xa9; BYTE $0xc0
75+
BYTE $0x4f; BYTE $0xd0; BYTE $0xa1; BYTE $0x07
76+
BYTE $0x20; BYTE $0x21; BYTE $0x22; BYTE $0x23
77+
BYTE $0x24; BYTE $0x25; BYTE $0x06; BYTE $0x17
78+
BYTE $0x28; BYTE $0x29; BYTE $0x2a; BYTE $0x2b
79+
BYTE $0x2c; BYTE $0x09; BYTE $0x0a; BYTE $0x1b
80+
BYTE $0x30; BYTE $0x31; BYTE $0x1a; BYTE $0x33
81+
BYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x08
82+
BYTE $0x38; BYTE $0x39; BYTE $0x3a; BYTE $0x3b
83+
BYTE $0x04; BYTE $0x14; BYTE $0x3e; BYTE $0xff
84+
BYTE $0x41; BYTE $0xaa; BYTE $0x4a; BYTE $0xb1
85+
BYTE $0x9f; BYTE $0xb2; BYTE $0x6a; BYTE $0xb5
86+
BYTE $0xbb; BYTE $0xb4; BYTE $0x9a; BYTE $0x8a
87+
BYTE $0xb0; BYTE $0xca; BYTE $0xaf; BYTE $0xbc
88+
BYTE $0x90; BYTE $0x8f; BYTE $0xea; BYTE $0xfa
89+
BYTE $0xbe; BYTE $0xa0; BYTE $0xb6; BYTE $0xb3
90+
BYTE $0x9d; BYTE $0xda; BYTE $0x9b; BYTE $0x8b
91+
BYTE $0xb7; BYTE $0xb8; BYTE $0xb9; BYTE $0xab
92+
BYTE $0x64; BYTE $0x65; BYTE $0x62; BYTE $0x66
93+
BYTE $0x63; BYTE $0x67; BYTE $0x9e; BYTE $0x68
94+
BYTE $0x74; BYTE $0x71; BYTE $0x72; BYTE $0x73
95+
BYTE $0x78; BYTE $0x75; BYTE $0x76; BYTE $0x77
96+
BYTE $0xac; BYTE $0x69; BYTE $0xed; BYTE $0xee
97+
BYTE $0xeb; BYTE $0xef; BYTE $0xec; BYTE $0xbf
98+
BYTE $0x80; BYTE $0xfd; BYTE $0xfe; BYTE $0xfb
99+
BYTE $0xfc; BYTE $0xba; BYTE $0xae; BYTE $0x59
100+
BYTE $0x44; BYTE $0x45; BYTE $0x42; BYTE $0x46
101+
BYTE $0x43; BYTE $0x47; BYTE $0x9c; BYTE $0x48
102+
BYTE $0x54; BYTE $0x51; BYTE $0x52; BYTE $0x53
103+
BYTE $0x58; BYTE $0x55; BYTE $0x56; BYTE $0x57
104+
BYTE $0x8c; BYTE $0x49; BYTE $0xcd; BYTE $0xce
105+
BYTE $0xcb; BYTE $0xcf; BYTE $0xcc; BYTE $0xe1
106+
BYTE $0x70; BYTE $0xdd; BYTE $0xde; BYTE $0xdb
107+
BYTE $0xdc; BYTE $0x8d; BYTE $0x8e; BYTE $0xdf
108+
109+
retry:
110+
WORD $0xB9931022 // TROO 2,2,b'0001'
111+
BVS retry
112+
RET
113+
114+
// func e2a(arr [] byte)
115+
// code page conversion from 1047 to 819
116+
TEXT ·E2a(SB), NOSPLIT|NOFRAME, $0
117+
MOVD arg_base+0(FP), R2 // pointer to arry of characters
118+
MOVD arg_len+8(FP), R3 // count
119+
XOR R0, R0
120+
XOR R1, R1
121+
BYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2))
122+
123+
// EBCDIC -> ASCII conversion table:
124+
BYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03
125+
BYTE $0x9c; BYTE $0x09; BYTE $0x86; BYTE $0x7f
126+
BYTE $0x97; BYTE $0x8d; BYTE $0x8e; BYTE $0x0b
127+
BYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f
128+
BYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13
129+
BYTE $0x9d; BYTE $0x0a; BYTE $0x08; BYTE $0x87
130+
BYTE $0x18; BYTE $0x19; BYTE $0x92; BYTE $0x8f
131+
BYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f
132+
BYTE $0x80; BYTE $0x81; BYTE $0x82; BYTE $0x83
133+
BYTE $0x84; BYTE $0x85; BYTE $0x17; BYTE $0x1b
134+
BYTE $0x88; BYTE $0x89; BYTE $0x8a; BYTE $0x8b
135+
BYTE $0x8c; BYTE $0x05; BYTE $0x06; BYTE $0x07
136+
BYTE $0x90; BYTE $0x91; BYTE $0x16; BYTE $0x93
137+
BYTE $0x94; BYTE $0x95; BYTE $0x96; BYTE $0x04
138+
BYTE $0x98; BYTE $0x99; BYTE $0x9a; BYTE $0x9b
139+
BYTE $0x14; BYTE $0x15; BYTE $0x9e; BYTE $0x1a
140+
BYTE $0x20; BYTE $0xa0; BYTE $0xe2; BYTE $0xe4
141+
BYTE $0xe0; BYTE $0xe1; BYTE $0xe3; BYTE $0xe5
142+
BYTE $0xe7; BYTE $0xf1; BYTE $0xa2; BYTE $0x2e
143+
BYTE $0x3c; BYTE $0x28; BYTE $0x2b; BYTE $0x7c
144+
BYTE $0x26; BYTE $0xe9; BYTE $0xea; BYTE $0xeb
145+
BYTE $0xe8; BYTE $0xed; BYTE $0xee; BYTE $0xef
146+
BYTE $0xec; BYTE $0xdf; BYTE $0x21; BYTE $0x24
147+
BYTE $0x2a; BYTE $0x29; BYTE $0x3b; BYTE $0x5e
148+
BYTE $0x2d; BYTE $0x2f; BYTE $0xc2; BYTE $0xc4
149+
BYTE $0xc0; BYTE $0xc1; BYTE $0xc3; BYTE $0xc5
150+
BYTE $0xc7; BYTE $0xd1; BYTE $0xa6; BYTE $0x2c
151+
BYTE $0x25; BYTE $0x5f; BYTE $0x3e; BYTE $0x3f
152+
BYTE $0xf8; BYTE $0xc9; BYTE $0xca; BYTE $0xcb
153+
BYTE $0xc8; BYTE $0xcd; BYTE $0xce; BYTE $0xcf
154+
BYTE $0xcc; BYTE $0x60; BYTE $0x3a; BYTE $0x23
155+
BYTE $0x40; BYTE $0x27; BYTE $0x3d; BYTE $0x22
156+
BYTE $0xd8; BYTE $0x61; BYTE $0x62; BYTE $0x63
157+
BYTE $0x64; BYTE $0x65; BYTE $0x66; BYTE $0x67
158+
BYTE $0x68; BYTE $0x69; BYTE $0xab; BYTE $0xbb
159+
BYTE $0xf0; BYTE $0xfd; BYTE $0xfe; BYTE $0xb1
160+
BYTE $0xb0; BYTE $0x6a; BYTE $0x6b; BYTE $0x6c
161+
BYTE $0x6d; BYTE $0x6e; BYTE $0x6f; BYTE $0x70
162+
BYTE $0x71; BYTE $0x72; BYTE $0xaa; BYTE $0xba
163+
BYTE $0xe6; BYTE $0xb8; BYTE $0xc6; BYTE $0xa4
164+
BYTE $0xb5; BYTE $0x7e; BYTE $0x73; BYTE $0x74
165+
BYTE $0x75; BYTE $0x76; BYTE $0x77; BYTE $0x78
166+
BYTE $0x79; BYTE $0x7a; BYTE $0xa1; BYTE $0xbf
167+
BYTE $0xd0; BYTE $0x5b; BYTE $0xde; BYTE $0xae
168+
BYTE $0xac; BYTE $0xa3; BYTE $0xa5; BYTE $0xb7
169+
BYTE $0xa9; BYTE $0xa7; BYTE $0xb6; BYTE $0xbc
170+
BYTE $0xbd; BYTE $0xbe; BYTE $0xdd; BYTE $0xa8
171+
BYTE $0xaf; BYTE $0x5d; BYTE $0xb4; BYTE $0xd7
172+
BYTE $0x7b; BYTE $0x41; BYTE $0x42; BYTE $0x43
173+
BYTE $0x44; BYTE $0x45; BYTE $0x46; BYTE $0x47
174+
BYTE $0x48; BYTE $0x49; BYTE $0xad; BYTE $0xf4
175+
BYTE $0xf6; BYTE $0xf2; BYTE $0xf3; BYTE $0xf5
176+
BYTE $0x7d; BYTE $0x4a; BYTE $0x4b; BYTE $0x4c
177+
BYTE $0x4d; BYTE $0x4e; BYTE $0x4f; BYTE $0x50
178+
BYTE $0x51; BYTE $0x52; BYTE $0xb9; BYTE $0xfb
179+
BYTE $0xfc; BYTE $0xf9; BYTE $0xfa; BYTE $0xff
180+
BYTE $0x5c; BYTE $0xf7; BYTE $0x53; BYTE $0x54
181+
BYTE $0x55; BYTE $0x56; BYTE $0x57; BYTE $0x58
182+
BYTE $0x59; BYTE $0x5a; BYTE $0xb2; BYTE $0xd4
183+
BYTE $0xd6; BYTE $0xd2; BYTE $0xd3; BYTE $0xd5
184+
BYTE $0x30; BYTE $0x31; BYTE $0x32; BYTE $0x33
185+
BYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x37
186+
BYTE $0x38; BYTE $0x39; BYTE $0xb3; BYTE $0xdb
187+
BYTE $0xdc; BYTE $0xd9; BYTE $0xda; BYTE $0x9f
188+
189+
retry:
190+
WORD $0xB9931022 // TROO 2,2,b'0001'
191+
BVS retry
192+
RET

0 commit comments

Comments
 (0)