authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-04 04:52:13+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-04 04:52:50+02:00
log6e738b86c82c4536084c3296911673f5de878501
treebcf3372fff33e11067dca655eb2d2f9868f6b183
parent7f87e864df7a45f0df7ba41fbebd7eaf3fb2ee7c
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux.riscv(32,64): declare all vector registers as syscall clobbers

The kernel intentionally clobbers vector registers (by setting them to all 1s).

2 files changed, 546 insertions(+), 14 deletions(-)

lib/std/os/linux/riscv32.zig+273-7
......@@ -10,7 +10,45 @@ pub fn syscall0(
1010 return asm volatile ("ecall"
1111 : [ret] "={x10}" (-> u32),
1212 : [number] "{x17}" (@backingInt(number)),
13 : .{ .memory = true });
13 : .{
14 .memory = true,
15 .v0 = true,
16 .v1 = true,
17 .v2 = true,
18 .v3 = true,
19 .v4 = true,
20 .v5 = true,
21 .v6 = true,
22 .v7 = true,
23 .v8 = true,
24 .v9 = true,
25 .v10 = true,
26 .v11 = true,
27 .v12 = true,
28 .v13 = true,
29 .v14 = true,
30 .v15 = true,
31 .v16 = true,
32 .v17 = true,
33 .v18 = true,
34 .v19 = true,
35 .v20 = true,
36 .v21 = true,
37 .v22 = true,
38 .v23 = true,
39 .v24 = true,
40 .v25 = true,
41 .v26 = true,
42 .v27 = true,
43 .v28 = true,
44 .v29 = true,
45 .v30 = true,
46 .v31 = true,
47 .vtype = true,
48 .vl = true,
49 .vxsat = true,
50 .vxrm = true,
51 });
1452}
1553
1654pub fn syscall1(
......@@ -21,7 +59,45 @@ pub fn syscall1(
2159 : [ret] "={x10}" (-> u32),
2260 : [number] "{x17}" (@backingInt(number)),
2361 [arg1] "{x10}" (arg1),
24 : .{ .memory = true });
62 : .{
63 .memory = true,
64 .v0 = true,
65 .v1 = true,
66 .v2 = true,
67 .v3 = true,
68 .v4 = true,
69 .v5 = true,
70 .v6 = true,
71 .v7 = true,
72 .v8 = true,
73 .v9 = true,
74 .v10 = true,
75 .v11 = true,
76 .v12 = true,
77 .v13 = true,
78 .v14 = true,
79 .v15 = true,
80 .v16 = true,
81 .v17 = true,
82 .v18 = true,
83 .v19 = true,
84 .v20 = true,
85 .v21 = true,
86 .v22 = true,
87 .v23 = true,
88 .v24 = true,
89 .v25 = true,
90 .v26 = true,
91 .v27 = true,
92 .v28 = true,
93 .v29 = true,
94 .v30 = true,
95 .v31 = true,
96 .vtype = true,
97 .vl = true,
98 .vxsat = true,
99 .vxrm = true,
100 });
25101}
26102
27103pub fn syscall2(
......@@ -34,7 +110,45 @@ pub fn syscall2(
34110 : [number] "{x17}" (@backingInt(number)),
35111 [arg1] "{x10}" (arg1),
36112 [arg2] "{x11}" (arg2),
37 : .{ .memory = true });
113 : .{
114 .memory = true,
115 .v0 = true,
116 .v1 = true,
117 .v2 = true,
118 .v3 = true,
119 .v4 = true,
120 .v5 = true,
121 .v6 = true,
122 .v7 = true,
123 .v8 = true,
124 .v9 = true,
125 .v10 = true,
126 .v11 = true,
127 .v12 = true,
128 .v13 = true,
129 .v14 = true,
130 .v15 = true,
131 .v16 = true,
132 .v17 = true,
133 .v18 = true,
134 .v19 = true,
135 .v20 = true,
136 .v21 = true,
137 .v22 = true,
138 .v23 = true,
139 .v24 = true,
140 .v25 = true,
141 .v26 = true,
142 .v27 = true,
143 .v28 = true,
144 .v29 = true,
145 .v30 = true,
146 .v31 = true,
147 .vtype = true,
148 .vl = true,
149 .vxsat = true,
150 .vxrm = true,
151 });
38152}
39153
40154pub fn syscall3(
......@@ -49,7 +163,45 @@ pub fn syscall3(
49163 [arg1] "{x10}" (arg1),
50164 [arg2] "{x11}" (arg2),
51165 [arg3] "{x12}" (arg3),
52 : .{ .memory = true });
166 : .{
167 .memory = true,
168 .v0 = true,
169 .v1 = true,
170 .v2 = true,
171 .v3 = true,
172 .v4 = true,
173 .v5 = true,
174 .v6 = true,
175 .v7 = true,
176 .v8 = true,
177 .v9 = true,
178 .v10 = true,
179 .v11 = true,
180 .v12 = true,
181 .v13 = true,
182 .v14 = true,
183 .v15 = true,
184 .v16 = true,
185 .v17 = true,
186 .v18 = true,
187 .v19 = true,
188 .v20 = true,
189 .v21 = true,
190 .v22 = true,
191 .v23 = true,
192 .v24 = true,
193 .v25 = true,
194 .v26 = true,
195 .v27 = true,
196 .v28 = true,
197 .v29 = true,
198 .v30 = true,
199 .v31 = true,
200 .vtype = true,
201 .vl = true,
202 .vxsat = true,
203 .vxrm = true,
204 });
53205}
54206
55207pub fn syscall4(
......@@ -66,7 +218,45 @@ pub fn syscall4(
66218 [arg2] "{x11}" (arg2),
67219 [arg3] "{x12}" (arg3),
68220 [arg4] "{x13}" (arg4),
69 : .{ .memory = true });
221 : .{
222 .memory = true,
223 .v0 = true,
224 .v1 = true,
225 .v2 = true,
226 .v3 = true,
227 .v4 = true,
228 .v5 = true,
229 .v6 = true,
230 .v7 = true,
231 .v8 = true,
232 .v9 = true,
233 .v10 = true,
234 .v11 = true,
235 .v12 = true,
236 .v13 = true,
237 .v14 = true,
238 .v15 = true,
239 .v16 = true,
240 .v17 = true,
241 .v18 = true,
242 .v19 = true,
243 .v20 = true,
244 .v21 = true,
245 .v22 = true,
246 .v23 = true,
247 .v24 = true,
248 .v25 = true,
249 .v26 = true,
250 .v27 = true,
251 .v28 = true,
252 .v29 = true,
253 .v30 = true,
254 .v31 = true,
255 .vtype = true,
256 .vl = true,
257 .vxsat = true,
258 .vxrm = true,
259 });
70260}
71261
72262pub fn syscall5(
......@@ -85,7 +275,45 @@ pub fn syscall5(
85275 [arg3] "{x12}" (arg3),
86276 [arg4] "{x13}" (arg4),
87277 [arg5] "{x14}" (arg5),
88 : .{ .memory = true });
278 : .{
279 .memory = true,
280 .v0 = true,
281 .v1 = true,
282 .v2 = true,
283 .v3 = true,
284 .v4 = true,
285 .v5 = true,
286 .v6 = true,
287 .v7 = true,
288 .v8 = true,
289 .v9 = true,
290 .v10 = true,
291 .v11 = true,
292 .v12 = true,
293 .v13 = true,
294 .v14 = true,
295 .v15 = true,
296 .v16 = true,
297 .v17 = true,
298 .v18 = true,
299 .v19 = true,
300 .v20 = true,
301 .v21 = true,
302 .v22 = true,
303 .v23 = true,
304 .v24 = true,
305 .v25 = true,
306 .v26 = true,
307 .v27 = true,
308 .v28 = true,
309 .v29 = true,
310 .v30 = true,
311 .v31 = true,
312 .vtype = true,
313 .vl = true,
314 .vxsat = true,
315 .vxrm = true,
316 });
89317}
90318
91319pub fn syscall6(
......@@ -106,7 +334,45 @@ pub fn syscall6(
106334 [arg4] "{x13}" (arg4),
107335 [arg5] "{x14}" (arg5),
108336 [arg6] "{x15}" (arg6),
109 : .{ .memory = true });
337 : .{
338 .memory = true,
339 .v0 = true,
340 .v1 = true,
341 .v2 = true,
342 .v3 = true,
343 .v4 = true,
344 .v5 = true,
345 .v6 = true,
346 .v7 = true,
347 .v8 = true,
348 .v9 = true,
349 .v10 = true,
350 .v11 = true,
351 .v12 = true,
352 .v13 = true,
353 .v14 = true,
354 .v15 = true,
355 .v16 = true,
356 .v17 = true,
357 .v18 = true,
358 .v19 = true,
359 .v20 = true,
360 .v21 = true,
361 .v22 = true,
362 .v23 = true,
363 .v24 = true,
364 .v25 = true,
365 .v26 = true,
366 .v27 = true,
367 .v28 = true,
368 .v29 = true,
369 .v30 = true,
370 .v31 = true,
371 .vtype = true,
372 .vl = true,
373 .vxsat = true,
374 .vxrm = true,
375 });
110376}
111377
112378pub fn clone() callconv(.naked) u32 {
lib/std/os/linux/riscv64.zig+273-7
......@@ -10,7 +10,45 @@ pub fn syscall0(
1010 return asm volatile ("ecall"
1111 : [ret] "={x10}" (-> u64),
1212 : [number] "{x17}" (@backingInt(number)),
13 : .{ .memory = true });
13 : .{
14 .memory = true,
15 .v0 = true,
16 .v1 = true,
17 .v2 = true,
18 .v3 = true,
19 .v4 = true,
20 .v5 = true,
21 .v6 = true,
22 .v7 = true,
23 .v8 = true,
24 .v9 = true,
25 .v10 = true,
26 .v11 = true,
27 .v12 = true,
28 .v13 = true,
29 .v14 = true,
30 .v15 = true,
31 .v16 = true,
32 .v17 = true,
33 .v18 = true,
34 .v19 = true,
35 .v20 = true,
36 .v21 = true,
37 .v22 = true,
38 .v23 = true,
39 .v24 = true,
40 .v25 = true,
41 .v26 = true,
42 .v27 = true,
43 .v28 = true,
44 .v29 = true,
45 .v30 = true,
46 .v31 = true,
47 .vtype = true,
48 .vl = true,
49 .vxsat = true,
50 .vxrm = true,
51 });
1452}
1553
1654pub fn syscall1(
......@@ -21,7 +59,45 @@ pub fn syscall1(
2159 : [ret] "={x10}" (-> u64),
2260 : [number] "{x17}" (@backingInt(number)),
2361 [arg1] "{x10}" (arg1),
24 : .{ .memory = true });
62 : .{
63 .memory = true,
64 .v0 = true,
65 .v1 = true,
66 .v2 = true,
67 .v3 = true,
68 .v4 = true,
69 .v5 = true,
70 .v6 = true,
71 .v7 = true,
72 .v8 = true,
73 .v9 = true,
74 .v10 = true,
75 .v11 = true,
76 .v12 = true,
77 .v13 = true,
78 .v14 = true,
79 .v15 = true,
80 .v16 = true,
81 .v17 = true,
82 .v18 = true,
83 .v19 = true,
84 .v20 = true,
85 .v21 = true,
86 .v22 = true,
87 .v23 = true,
88 .v24 = true,
89 .v25 = true,
90 .v26 = true,
91 .v27 = true,
92 .v28 = true,
93 .v29 = true,
94 .v30 = true,
95 .v31 = true,
96 .vtype = true,
97 .vl = true,
98 .vxsat = true,
99 .vxrm = true,
100 });
25101}
26102
27103pub fn syscall2(
......@@ -34,7 +110,45 @@ pub fn syscall2(
34110 : [number] "{x17}" (@backingInt(number)),
35111 [arg1] "{x10}" (arg1),
36112 [arg2] "{x11}" (arg2),
37 : .{ .memory = true });
113 : .{
114 .memory = true,
115 .v0 = true,
116 .v1 = true,
117 .v2 = true,
118 .v3 = true,
119 .v4 = true,
120 .v5 = true,
121 .v6 = true,
122 .v7 = true,
123 .v8 = true,
124 .v9 = true,
125 .v10 = true,
126 .v11 = true,
127 .v12 = true,
128 .v13 = true,
129 .v14 = true,
130 .v15 = true,
131 .v16 = true,
132 .v17 = true,
133 .v18 = true,
134 .v19 = true,
135 .v20 = true,
136 .v21 = true,
137 .v22 = true,
138 .v23 = true,
139 .v24 = true,
140 .v25 = true,
141 .v26 = true,
142 .v27 = true,
143 .v28 = true,
144 .v29 = true,
145 .v30 = true,
146 .v31 = true,
147 .vtype = true,
148 .vl = true,
149 .vxsat = true,
150 .vxrm = true,
151 });
38152}
39153
40154pub fn syscall3(
......@@ -49,7 +163,45 @@ pub fn syscall3(
49163 [arg1] "{x10}" (arg1),
50164 [arg2] "{x11}" (arg2),
51165 [arg3] "{x12}" (arg3),
52 : .{ .memory = true });
166 : .{
167 .memory = true,
168 .v0 = true,
169 .v1 = true,
170 .v2 = true,
171 .v3 = true,
172 .v4 = true,
173 .v5 = true,
174 .v6 = true,
175 .v7 = true,
176 .v8 = true,
177 .v9 = true,
178 .v10 = true,
179 .v11 = true,
180 .v12 = true,
181 .v13 = true,
182 .v14 = true,
183 .v15 = true,
184 .v16 = true,
185 .v17 = true,
186 .v18 = true,
187 .v19 = true,
188 .v20 = true,
189 .v21 = true,
190 .v22 = true,
191 .v23 = true,
192 .v24 = true,
193 .v25 = true,
194 .v26 = true,
195 .v27 = true,
196 .v28 = true,
197 .v29 = true,
198 .v30 = true,
199 .v31 = true,
200 .vtype = true,
201 .vl = true,
202 .vxsat = true,
203 .vxrm = true,
204 });
53205}
54206
55207pub fn syscall4(
......@@ -66,7 +218,45 @@ pub fn syscall4(
66218 [arg2] "{x11}" (arg2),
67219 [arg3] "{x12}" (arg3),
68220 [arg4] "{x13}" (arg4),
69 : .{ .memory = true });
221 : .{
222 .memory = true,
223 .v0 = true,
224 .v1 = true,
225 .v2 = true,
226 .v3 = true,
227 .v4 = true,
228 .v5 = true,
229 .v6 = true,
230 .v7 = true,
231 .v8 = true,
232 .v9 = true,
233 .v10 = true,
234 .v11 = true,
235 .v12 = true,
236 .v13 = true,
237 .v14 = true,
238 .v15 = true,
239 .v16 = true,
240 .v17 = true,
241 .v18 = true,
242 .v19 = true,
243 .v20 = true,
244 .v21 = true,
245 .v22 = true,
246 .v23 = true,
247 .v24 = true,
248 .v25 = true,
249 .v26 = true,
250 .v27 = true,
251 .v28 = true,
252 .v29 = true,
253 .v30 = true,
254 .v31 = true,
255 .vtype = true,
256 .vl = true,
257 .vxsat = true,
258 .vxrm = true,
259 });
70260}
71261
72262pub fn syscall5(
......@@ -85,7 +275,45 @@ pub fn syscall5(
85275 [arg3] "{x12}" (arg3),
86276 [arg4] "{x13}" (arg4),
87277 [arg5] "{x14}" (arg5),
88 : .{ .memory = true });
278 : .{
279 .memory = true,
280 .v0 = true,
281 .v1 = true,
282 .v2 = true,
283 .v3 = true,
284 .v4 = true,
285 .v5 = true,
286 .v6 = true,
287 .v7 = true,
288 .v8 = true,
289 .v9 = true,
290 .v10 = true,
291 .v11 = true,
292 .v12 = true,
293 .v13 = true,
294 .v14 = true,
295 .v15 = true,
296 .v16 = true,
297 .v17 = true,
298 .v18 = true,
299 .v19 = true,
300 .v20 = true,
301 .v21 = true,
302 .v22 = true,
303 .v23 = true,
304 .v24 = true,
305 .v25 = true,
306 .v26 = true,
307 .v27 = true,
308 .v28 = true,
309 .v29 = true,
310 .v30 = true,
311 .v31 = true,
312 .vtype = true,
313 .vl = true,
314 .vxsat = true,
315 .vxrm = true,
316 });
89317}
90318
91319pub fn syscall6(
......@@ -106,7 +334,45 @@ pub fn syscall6(
106334 [arg4] "{x13}" (arg4),
107335 [arg5] "{x14}" (arg5),
108336 [arg6] "{x15}" (arg6),
109 : .{ .memory = true });
337 : .{
338 .memory = true,
339 .v0 = true,
340 .v1 = true,
341 .v2 = true,
342 .v3 = true,
343 .v4 = true,
344 .v5 = true,
345 .v6 = true,
346 .v7 = true,
347 .v8 = true,
348 .v9 = true,
349 .v10 = true,
350 .v11 = true,
351 .v12 = true,
352 .v13 = true,
353 .v14 = true,
354 .v15 = true,
355 .v16 = true,
356 .v17 = true,
357 .v18 = true,
358 .v19 = true,
359 .v20 = true,
360 .v21 = true,
361 .v22 = true,
362 .v23 = true,
363 .v24 = true,
364 .v25 = true,
365 .v26 = true,
366 .v27 = true,
367 .v28 = true,
368 .v29 = true,
369 .v30 = true,
370 .v31 = true,
371 .vtype = true,
372 .vl = true,
373 .vxsat = true,
374 .vxrm = true,
375 });
110376}
111377
112378pub fn clone() callconv(.naked) u64 {