1 | // SPDX-License-Identifier: GPL-2.0 |
2 | |
3 | #include <linux/bpf.h> |
4 | #include <bpf/bpf_helpers.h> |
5 | #include "bpf_misc.h" |
6 | |
7 | #if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \ |
8 | (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || \ |
9 | defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \ |
10 | defined(__TARGET_ARCH_loongarch)) && \ |
11 | __clang_major__ >= 18 |
12 | |
13 | SEC("socket" ) |
14 | __description("SDIV32, non-zero imm divisor, check 1" ) |
15 | __success __success_unpriv __retval(-20) |
16 | __naked void sdiv32_non_zero_imm_1(void) |
17 | { |
18 | asm volatile (" \ |
19 | w0 = -41; \ |
20 | w0 s/= 2; \ |
21 | exit; \ |
22 | " ::: __clobber_all); |
23 | } |
24 | |
25 | SEC("socket" ) |
26 | __description("SDIV32, non-zero imm divisor, check 2" ) |
27 | __success __success_unpriv __retval(-20) |
28 | __naked void sdiv32_non_zero_imm_2(void) |
29 | { |
30 | asm volatile (" \ |
31 | w0 = 41; \ |
32 | w0 s/= -2; \ |
33 | exit; \ |
34 | " ::: __clobber_all); |
35 | } |
36 | |
37 | SEC("socket" ) |
38 | __description("SDIV32, non-zero imm divisor, check 3" ) |
39 | __success __success_unpriv __retval(20) |
40 | __naked void sdiv32_non_zero_imm_3(void) |
41 | { |
42 | asm volatile (" \ |
43 | w0 = -41; \ |
44 | w0 s/= -2; \ |
45 | exit; \ |
46 | " ::: __clobber_all); |
47 | } |
48 | |
49 | SEC("socket" ) |
50 | __description("SDIV32, non-zero imm divisor, check 4" ) |
51 | __success __success_unpriv __retval(-21) |
52 | __naked void sdiv32_non_zero_imm_4(void) |
53 | { |
54 | asm volatile (" \ |
55 | w0 = -42; \ |
56 | w0 s/= 2; \ |
57 | exit; \ |
58 | " ::: __clobber_all); |
59 | } |
60 | |
61 | SEC("socket" ) |
62 | __description("SDIV32, non-zero imm divisor, check 5" ) |
63 | __success __success_unpriv __retval(-21) |
64 | __naked void sdiv32_non_zero_imm_5(void) |
65 | { |
66 | asm volatile (" \ |
67 | w0 = 42; \ |
68 | w0 s/= -2; \ |
69 | exit; \ |
70 | " ::: __clobber_all); |
71 | } |
72 | |
73 | SEC("socket" ) |
74 | __description("SDIV32, non-zero imm divisor, check 6" ) |
75 | __success __success_unpriv __retval(21) |
76 | __naked void sdiv32_non_zero_imm_6(void) |
77 | { |
78 | asm volatile (" \ |
79 | w0 = -42; \ |
80 | w0 s/= -2; \ |
81 | exit; \ |
82 | " ::: __clobber_all); |
83 | } |
84 | |
85 | SEC("socket" ) |
86 | __description("SDIV32, non-zero imm divisor, check 7" ) |
87 | __success __success_unpriv __retval(21) |
88 | __naked void sdiv32_non_zero_imm_7(void) |
89 | { |
90 | asm volatile (" \ |
91 | w0 = 42; \ |
92 | w0 s/= 2; \ |
93 | exit; \ |
94 | " ::: __clobber_all); |
95 | } |
96 | |
97 | SEC("socket" ) |
98 | __description("SDIV32, non-zero imm divisor, check 8" ) |
99 | __success __success_unpriv __retval(20) |
100 | __naked void sdiv32_non_zero_imm_8(void) |
101 | { |
102 | asm volatile (" \ |
103 | w0 = 41; \ |
104 | w0 s/= 2; \ |
105 | exit; \ |
106 | " ::: __clobber_all); |
107 | } |
108 | |
109 | SEC("socket" ) |
110 | __description("SDIV32, non-zero reg divisor, check 1" ) |
111 | __success __success_unpriv __retval(-20) |
112 | __naked void sdiv32_non_zero_reg_1(void) |
113 | { |
114 | asm volatile (" \ |
115 | w0 = -41; \ |
116 | w1 = 2; \ |
117 | w0 s/= w1; \ |
118 | exit; \ |
119 | " ::: __clobber_all); |
120 | } |
121 | |
122 | SEC("socket" ) |
123 | __description("SDIV32, non-zero reg divisor, check 2" ) |
124 | __success __success_unpriv __retval(-20) |
125 | __naked void sdiv32_non_zero_reg_2(void) |
126 | { |
127 | asm volatile (" \ |
128 | w0 = 41; \ |
129 | w1 = -2; \ |
130 | w0 s/= w1; \ |
131 | exit; \ |
132 | " ::: __clobber_all); |
133 | } |
134 | |
135 | SEC("socket" ) |
136 | __description("SDIV32, non-zero reg divisor, check 3" ) |
137 | __success __success_unpriv __retval(20) |
138 | __naked void sdiv32_non_zero_reg_3(void) |
139 | { |
140 | asm volatile (" \ |
141 | w0 = -41; \ |
142 | w1 = -2; \ |
143 | w0 s/= w1; \ |
144 | exit; \ |
145 | " ::: __clobber_all); |
146 | } |
147 | |
148 | SEC("socket" ) |
149 | __description("SDIV32, non-zero reg divisor, check 4" ) |
150 | __success __success_unpriv __retval(-21) |
151 | __naked void sdiv32_non_zero_reg_4(void) |
152 | { |
153 | asm volatile (" \ |
154 | w0 = -42; \ |
155 | w1 = 2; \ |
156 | w0 s/= w1; \ |
157 | exit; \ |
158 | " ::: __clobber_all); |
159 | } |
160 | |
161 | SEC("socket" ) |
162 | __description("SDIV32, non-zero reg divisor, check 5" ) |
163 | __success __success_unpriv __retval(-21) |
164 | __naked void sdiv32_non_zero_reg_5(void) |
165 | { |
166 | asm volatile (" \ |
167 | w0 = 42; \ |
168 | w1 = -2; \ |
169 | w0 s/= w1; \ |
170 | exit; \ |
171 | " ::: __clobber_all); |
172 | } |
173 | |
174 | SEC("socket" ) |
175 | __description("SDIV32, non-zero reg divisor, check 6" ) |
176 | __success __success_unpriv __retval(21) |
177 | __naked void sdiv32_non_zero_reg_6(void) |
178 | { |
179 | asm volatile (" \ |
180 | w0 = -42; \ |
181 | w1 = -2; \ |
182 | w0 s/= w1; \ |
183 | exit; \ |
184 | " ::: __clobber_all); |
185 | } |
186 | |
187 | SEC("socket" ) |
188 | __description("SDIV32, non-zero reg divisor, check 7" ) |
189 | __success __success_unpriv __retval(21) |
190 | __naked void sdiv32_non_zero_reg_7(void) |
191 | { |
192 | asm volatile (" \ |
193 | w0 = 42; \ |
194 | w1 = 2; \ |
195 | w0 s/= w1; \ |
196 | exit; \ |
197 | " ::: __clobber_all); |
198 | } |
199 | |
200 | SEC("socket" ) |
201 | __description("SDIV32, non-zero reg divisor, check 8" ) |
202 | __success __success_unpriv __retval(20) |
203 | __naked void sdiv32_non_zero_reg_8(void) |
204 | { |
205 | asm volatile (" \ |
206 | w0 = 41; \ |
207 | w1 = 2; \ |
208 | w0 s/= w1; \ |
209 | exit; \ |
210 | " ::: __clobber_all); |
211 | } |
212 | |
213 | SEC("socket" ) |
214 | __description("SDIV64, non-zero imm divisor, check 1" ) |
215 | __success __success_unpriv __retval(-20) |
216 | __naked void sdiv64_non_zero_imm_1(void) |
217 | { |
218 | asm volatile (" \ |
219 | r0 = -41; \ |
220 | r0 s/= 2; \ |
221 | exit; \ |
222 | " ::: __clobber_all); |
223 | } |
224 | |
225 | SEC("socket" ) |
226 | __description("SDIV64, non-zero imm divisor, check 2" ) |
227 | __success __success_unpriv __retval(-20) |
228 | __naked void sdiv64_non_zero_imm_2(void) |
229 | { |
230 | asm volatile (" \ |
231 | r0 = 41; \ |
232 | r0 s/= -2; \ |
233 | exit; \ |
234 | " ::: __clobber_all); |
235 | } |
236 | |
237 | SEC("socket" ) |
238 | __description("SDIV64, non-zero imm divisor, check 3" ) |
239 | __success __success_unpriv __retval(20) |
240 | __naked void sdiv64_non_zero_imm_3(void) |
241 | { |
242 | asm volatile (" \ |
243 | r0 = -41; \ |
244 | r0 s/= -2; \ |
245 | exit; \ |
246 | " ::: __clobber_all); |
247 | } |
248 | |
249 | SEC("socket" ) |
250 | __description("SDIV64, non-zero imm divisor, check 4" ) |
251 | __success __success_unpriv __retval(-21) |
252 | __naked void sdiv64_non_zero_imm_4(void) |
253 | { |
254 | asm volatile (" \ |
255 | r0 = -42; \ |
256 | r0 s/= 2; \ |
257 | exit; \ |
258 | " ::: __clobber_all); |
259 | } |
260 | |
261 | SEC("socket" ) |
262 | __description("SDIV64, non-zero imm divisor, check 5" ) |
263 | __success __success_unpriv __retval(-21) |
264 | __naked void sdiv64_non_zero_imm_5(void) |
265 | { |
266 | asm volatile (" \ |
267 | r0 = 42; \ |
268 | r0 s/= -2; \ |
269 | exit; \ |
270 | " ::: __clobber_all); |
271 | } |
272 | |
273 | SEC("socket" ) |
274 | __description("SDIV64, non-zero imm divisor, check 6" ) |
275 | __success __success_unpriv __retval(21) |
276 | __naked void sdiv64_non_zero_imm_6(void) |
277 | { |
278 | asm volatile (" \ |
279 | r0 = -42; \ |
280 | r0 s/= -2; \ |
281 | exit; \ |
282 | " ::: __clobber_all); |
283 | } |
284 | |
285 | SEC("socket" ) |
286 | __description("SDIV64, non-zero reg divisor, check 1" ) |
287 | __success __success_unpriv __retval(-20) |
288 | __naked void sdiv64_non_zero_reg_1(void) |
289 | { |
290 | asm volatile (" \ |
291 | r0 = -41; \ |
292 | r1 = 2; \ |
293 | r0 s/= r1; \ |
294 | exit; \ |
295 | " ::: __clobber_all); |
296 | } |
297 | |
298 | SEC("socket" ) |
299 | __description("SDIV64, non-zero reg divisor, check 2" ) |
300 | __success __success_unpriv __retval(-20) |
301 | __naked void sdiv64_non_zero_reg_2(void) |
302 | { |
303 | asm volatile (" \ |
304 | r0 = 41; \ |
305 | r1 = -2; \ |
306 | r0 s/= r1; \ |
307 | exit; \ |
308 | " ::: __clobber_all); |
309 | } |
310 | |
311 | SEC("socket" ) |
312 | __description("SDIV64, non-zero reg divisor, check 3" ) |
313 | __success __success_unpriv __retval(20) |
314 | __naked void sdiv64_non_zero_reg_3(void) |
315 | { |
316 | asm volatile (" \ |
317 | r0 = -41; \ |
318 | r1 = -2; \ |
319 | r0 s/= r1; \ |
320 | exit; \ |
321 | " ::: __clobber_all); |
322 | } |
323 | |
324 | SEC("socket" ) |
325 | __description("SDIV64, non-zero reg divisor, check 4" ) |
326 | __success __success_unpriv __retval(-21) |
327 | __naked void sdiv64_non_zero_reg_4(void) |
328 | { |
329 | asm volatile (" \ |
330 | r0 = -42; \ |
331 | r1 = 2; \ |
332 | r0 s/= r1; \ |
333 | exit; \ |
334 | " ::: __clobber_all); |
335 | } |
336 | |
337 | SEC("socket" ) |
338 | __description("SDIV64, non-zero reg divisor, check 5" ) |
339 | __success __success_unpriv __retval(-21) |
340 | __naked void sdiv64_non_zero_reg_5(void) |
341 | { |
342 | asm volatile (" \ |
343 | r0 = 42; \ |
344 | r1 = -2; \ |
345 | r0 s/= r1; \ |
346 | exit; \ |
347 | " ::: __clobber_all); |
348 | } |
349 | |
350 | SEC("socket" ) |
351 | __description("SDIV64, non-zero reg divisor, check 6" ) |
352 | __success __success_unpriv __retval(21) |
353 | __naked void sdiv64_non_zero_reg_6(void) |
354 | { |
355 | asm volatile (" \ |
356 | r0 = -42; \ |
357 | r1 = -2; \ |
358 | r0 s/= r1; \ |
359 | exit; \ |
360 | " ::: __clobber_all); |
361 | } |
362 | |
363 | SEC("socket" ) |
364 | __description("SMOD32, non-zero imm divisor, check 1" ) |
365 | __success __success_unpriv __retval(-1) |
366 | __naked void smod32_non_zero_imm_1(void) |
367 | { |
368 | asm volatile (" \ |
369 | w0 = -41; \ |
370 | w0 s%%= 2; \ |
371 | exit; \ |
372 | " ::: __clobber_all); |
373 | } |
374 | |
375 | SEC("socket" ) |
376 | __description("SMOD32, non-zero imm divisor, check 2" ) |
377 | __success __success_unpriv __retval(1) |
378 | __naked void smod32_non_zero_imm_2(void) |
379 | { |
380 | asm volatile (" \ |
381 | w0 = 41; \ |
382 | w0 s%%= -2; \ |
383 | exit; \ |
384 | " ::: __clobber_all); |
385 | } |
386 | |
387 | SEC("socket" ) |
388 | __description("SMOD32, non-zero imm divisor, check 3" ) |
389 | __success __success_unpriv __retval(-1) |
390 | __naked void smod32_non_zero_imm_3(void) |
391 | { |
392 | asm volatile (" \ |
393 | w0 = -41; \ |
394 | w0 s%%= -2; \ |
395 | exit; \ |
396 | " ::: __clobber_all); |
397 | } |
398 | |
399 | SEC("socket" ) |
400 | __description("SMOD32, non-zero imm divisor, check 4" ) |
401 | __success __success_unpriv __retval(0) |
402 | __naked void smod32_non_zero_imm_4(void) |
403 | { |
404 | asm volatile (" \ |
405 | w0 = -42; \ |
406 | w0 s%%= 2; \ |
407 | exit; \ |
408 | " ::: __clobber_all); |
409 | } |
410 | |
411 | SEC("socket" ) |
412 | __description("SMOD32, non-zero imm divisor, check 5" ) |
413 | __success __success_unpriv __retval(0) |
414 | __naked void smod32_non_zero_imm_5(void) |
415 | { |
416 | asm volatile (" \ |
417 | w0 = 42; \ |
418 | w0 s%%= -2; \ |
419 | exit; \ |
420 | " ::: __clobber_all); |
421 | } |
422 | |
423 | SEC("socket" ) |
424 | __description("SMOD32, non-zero imm divisor, check 6" ) |
425 | __success __success_unpriv __retval(0) |
426 | __naked void smod32_non_zero_imm_6(void) |
427 | { |
428 | asm volatile (" \ |
429 | w0 = -42; \ |
430 | w0 s%%= -2; \ |
431 | exit; \ |
432 | " ::: __clobber_all); |
433 | } |
434 | |
435 | SEC("socket" ) |
436 | __description("SMOD32, non-zero reg divisor, check 1" ) |
437 | __success __success_unpriv __retval(-1) |
438 | __naked void smod32_non_zero_reg_1(void) |
439 | { |
440 | asm volatile (" \ |
441 | w0 = -41; \ |
442 | w1 = 2; \ |
443 | w0 s%%= w1; \ |
444 | exit; \ |
445 | " ::: __clobber_all); |
446 | } |
447 | |
448 | SEC("socket" ) |
449 | __description("SMOD32, non-zero reg divisor, check 2" ) |
450 | __success __success_unpriv __retval(1) |
451 | __naked void smod32_non_zero_reg_2(void) |
452 | { |
453 | asm volatile (" \ |
454 | w0 = 41; \ |
455 | w1 = -2; \ |
456 | w0 s%%= w1; \ |
457 | exit; \ |
458 | " ::: __clobber_all); |
459 | } |
460 | |
461 | SEC("socket" ) |
462 | __description("SMOD32, non-zero reg divisor, check 3" ) |
463 | __success __success_unpriv __retval(-1) |
464 | __naked void smod32_non_zero_reg_3(void) |
465 | { |
466 | asm volatile (" \ |
467 | w0 = -41; \ |
468 | w1 = -2; \ |
469 | w0 s%%= w1; \ |
470 | exit; \ |
471 | " ::: __clobber_all); |
472 | } |
473 | |
474 | SEC("socket" ) |
475 | __description("SMOD32, non-zero reg divisor, check 4" ) |
476 | __success __success_unpriv __retval(0) |
477 | __naked void smod32_non_zero_reg_4(void) |
478 | { |
479 | asm volatile (" \ |
480 | w0 = -42; \ |
481 | w1 = 2; \ |
482 | w0 s%%= w1; \ |
483 | exit; \ |
484 | " ::: __clobber_all); |
485 | } |
486 | |
487 | SEC("socket" ) |
488 | __description("SMOD32, non-zero reg divisor, check 5" ) |
489 | __success __success_unpriv __retval(0) |
490 | __naked void smod32_non_zero_reg_5(void) |
491 | { |
492 | asm volatile (" \ |
493 | w0 = 42; \ |
494 | w1 = -2; \ |
495 | w0 s%%= w1; \ |
496 | exit; \ |
497 | " ::: __clobber_all); |
498 | } |
499 | |
500 | SEC("socket" ) |
501 | __description("SMOD32, non-zero reg divisor, check 6" ) |
502 | __success __success_unpriv __retval(0) |
503 | __naked void smod32_non_zero_reg_6(void) |
504 | { |
505 | asm volatile (" \ |
506 | w0 = -42; \ |
507 | w1 = -2; \ |
508 | w0 s%%= w1; \ |
509 | exit; \ |
510 | " ::: __clobber_all); |
511 | } |
512 | |
513 | SEC("socket" ) |
514 | __description("SMOD64, non-zero imm divisor, check 1" ) |
515 | __success __success_unpriv __retval(-1) |
516 | __naked void smod64_non_zero_imm_1(void) |
517 | { |
518 | asm volatile (" \ |
519 | r0 = -41; \ |
520 | r0 s%%= 2; \ |
521 | exit; \ |
522 | " ::: __clobber_all); |
523 | } |
524 | |
525 | SEC("socket" ) |
526 | __description("SMOD64, non-zero imm divisor, check 2" ) |
527 | __success __success_unpriv __retval(1) |
528 | __naked void smod64_non_zero_imm_2(void) |
529 | { |
530 | asm volatile (" \ |
531 | r0 = 41; \ |
532 | r0 s%%= -2; \ |
533 | exit; \ |
534 | " ::: __clobber_all); |
535 | } |
536 | |
537 | SEC("socket" ) |
538 | __description("SMOD64, non-zero imm divisor, check 3" ) |
539 | __success __success_unpriv __retval(-1) |
540 | __naked void smod64_non_zero_imm_3(void) |
541 | { |
542 | asm volatile (" \ |
543 | r0 = -41; \ |
544 | r0 s%%= -2; \ |
545 | exit; \ |
546 | " ::: __clobber_all); |
547 | } |
548 | |
549 | SEC("socket" ) |
550 | __description("SMOD64, non-zero imm divisor, check 4" ) |
551 | __success __success_unpriv __retval(0) |
552 | __naked void smod64_non_zero_imm_4(void) |
553 | { |
554 | asm volatile (" \ |
555 | r0 = -42; \ |
556 | r0 s%%= 2; \ |
557 | exit; \ |
558 | " ::: __clobber_all); |
559 | } |
560 | |
561 | SEC("socket" ) |
562 | __description("SMOD64, non-zero imm divisor, check 5" ) |
563 | __success __success_unpriv __retval(-0) |
564 | __naked void smod64_non_zero_imm_5(void) |
565 | { |
566 | asm volatile (" \ |
567 | r0 = 42; \ |
568 | r0 s%%= -2; \ |
569 | exit; \ |
570 | " ::: __clobber_all); |
571 | } |
572 | |
573 | SEC("socket" ) |
574 | __description("SMOD64, non-zero imm divisor, check 6" ) |
575 | __success __success_unpriv __retval(0) |
576 | __naked void smod64_non_zero_imm_6(void) |
577 | { |
578 | asm volatile (" \ |
579 | r0 = -42; \ |
580 | r0 s%%= -2; \ |
581 | exit; \ |
582 | " ::: __clobber_all); |
583 | } |
584 | |
585 | SEC("socket" ) |
586 | __description("SMOD64, non-zero imm divisor, check 7" ) |
587 | __success __success_unpriv __retval(0) |
588 | __naked void smod64_non_zero_imm_7(void) |
589 | { |
590 | asm volatile (" \ |
591 | r0 = 42; \ |
592 | r0 s%%= 2; \ |
593 | exit; \ |
594 | " ::: __clobber_all); |
595 | } |
596 | |
597 | SEC("socket" ) |
598 | __description("SMOD64, non-zero imm divisor, check 8" ) |
599 | __success __success_unpriv __retval(1) |
600 | __naked void smod64_non_zero_imm_8(void) |
601 | { |
602 | asm volatile (" \ |
603 | r0 = 41; \ |
604 | r0 s%%= 2; \ |
605 | exit; \ |
606 | " ::: __clobber_all); |
607 | } |
608 | |
609 | SEC("socket" ) |
610 | __description("SMOD64, non-zero reg divisor, check 1" ) |
611 | __success __success_unpriv __retval(-1) |
612 | __naked void smod64_non_zero_reg_1(void) |
613 | { |
614 | asm volatile (" \ |
615 | r0 = -41; \ |
616 | r1 = 2; \ |
617 | r0 s%%= r1; \ |
618 | exit; \ |
619 | " ::: __clobber_all); |
620 | } |
621 | |
622 | SEC("socket" ) |
623 | __description("SMOD64, non-zero reg divisor, check 2" ) |
624 | __success __success_unpriv __retval(1) |
625 | __naked void smod64_non_zero_reg_2(void) |
626 | { |
627 | asm volatile (" \ |
628 | r0 = 41; \ |
629 | r1 = -2; \ |
630 | r0 s%%= r1; \ |
631 | exit; \ |
632 | " ::: __clobber_all); |
633 | } |
634 | |
635 | SEC("socket" ) |
636 | __description("SMOD64, non-zero reg divisor, check 3" ) |
637 | __success __success_unpriv __retval(-1) |
638 | __naked void smod64_non_zero_reg_3(void) |
639 | { |
640 | asm volatile (" \ |
641 | r0 = -41; \ |
642 | r1 = -2; \ |
643 | r0 s%%= r1; \ |
644 | exit; \ |
645 | " ::: __clobber_all); |
646 | } |
647 | |
648 | SEC("socket" ) |
649 | __description("SMOD64, non-zero reg divisor, check 4" ) |
650 | __success __success_unpriv __retval(0) |
651 | __naked void smod64_non_zero_reg_4(void) |
652 | { |
653 | asm volatile (" \ |
654 | r0 = -42; \ |
655 | r1 = 2; \ |
656 | r0 s%%= r1; \ |
657 | exit; \ |
658 | " ::: __clobber_all); |
659 | } |
660 | |
661 | SEC("socket" ) |
662 | __description("SMOD64, non-zero reg divisor, check 5" ) |
663 | __success __success_unpriv __retval(0) |
664 | __naked void smod64_non_zero_reg_5(void) |
665 | { |
666 | asm volatile (" \ |
667 | r0 = 42; \ |
668 | r1 = -2; \ |
669 | r0 s%%= r1; \ |
670 | exit; \ |
671 | " ::: __clobber_all); |
672 | } |
673 | |
674 | SEC("socket" ) |
675 | __description("SMOD64, non-zero reg divisor, check 6" ) |
676 | __success __success_unpriv __retval(0) |
677 | __naked void smod64_non_zero_reg_6(void) |
678 | { |
679 | asm volatile (" \ |
680 | r0 = -42; \ |
681 | r1 = -2; \ |
682 | r0 s%%= r1; \ |
683 | exit; \ |
684 | " ::: __clobber_all); |
685 | } |
686 | |
687 | SEC("socket" ) |
688 | __description("SMOD64, non-zero reg divisor, check 7" ) |
689 | __success __success_unpriv __retval(0) |
690 | __naked void smod64_non_zero_reg_7(void) |
691 | { |
692 | asm volatile (" \ |
693 | r0 = 42; \ |
694 | r1 = 2; \ |
695 | r0 s%%= r1; \ |
696 | exit; \ |
697 | " ::: __clobber_all); |
698 | } |
699 | |
700 | SEC("socket" ) |
701 | __description("SMOD64, non-zero reg divisor, check 8" ) |
702 | __success __success_unpriv __retval(1) |
703 | __naked void smod64_non_zero_reg_8(void) |
704 | { |
705 | asm volatile (" \ |
706 | r0 = 41; \ |
707 | r1 = 2; \ |
708 | r0 s%%= r1; \ |
709 | exit; \ |
710 | " ::: __clobber_all); |
711 | } |
712 | |
713 | SEC("socket" ) |
714 | __description("SDIV32, zero divisor" ) |
715 | __success __success_unpriv __retval(0) |
716 | __naked void sdiv32_zero_divisor(void) |
717 | { |
718 | asm volatile (" \ |
719 | w0 = 42; \ |
720 | w1 = 0; \ |
721 | w2 = -1; \ |
722 | w2 s/= w1; \ |
723 | w0 = w2; \ |
724 | exit; \ |
725 | " ::: __clobber_all); |
726 | } |
727 | |
728 | SEC("socket" ) |
729 | __description("SDIV64, zero divisor" ) |
730 | __success __success_unpriv __retval(0) |
731 | __naked void sdiv64_zero_divisor(void) |
732 | { |
733 | asm volatile (" \ |
734 | r0 = 42; \ |
735 | r1 = 0; \ |
736 | r2 = -1; \ |
737 | r2 s/= r1; \ |
738 | r0 = r2; \ |
739 | exit; \ |
740 | " ::: __clobber_all); |
741 | } |
742 | |
743 | SEC("socket" ) |
744 | __description("SMOD32, zero divisor" ) |
745 | __success __success_unpriv __retval(-1) |
746 | __naked void smod32_zero_divisor(void) |
747 | { |
748 | asm volatile (" \ |
749 | w0 = 42; \ |
750 | w1 = 0; \ |
751 | w2 = -1; \ |
752 | w2 s%%= w1; \ |
753 | w0 = w2; \ |
754 | exit; \ |
755 | " ::: __clobber_all); |
756 | } |
757 | |
758 | SEC("socket" ) |
759 | __description("SMOD64, zero divisor" ) |
760 | __success __success_unpriv __retval(-1) |
761 | __naked void smod64_zero_divisor(void) |
762 | { |
763 | asm volatile (" \ |
764 | r0 = 42; \ |
765 | r1 = 0; \ |
766 | r2 = -1; \ |
767 | r2 s%%= r1; \ |
768 | r0 = r2; \ |
769 | exit; \ |
770 | " ::: __clobber_all); |
771 | } |
772 | |
773 | #else |
774 | |
775 | SEC("socket" ) |
776 | __description("cpuv4 is not supported by compiler or jit, use a dummy test" ) |
777 | __success |
778 | int dummy_test(void) |
779 | { |
780 | return 0; |
781 | } |
782 | |
783 | #endif |
784 | |
785 | char _license[] SEC("license" ) = "GPL" ; |
786 | |