Enable the cpu v4 tests for LoongArch. Currently, we don't have BPF trampoline in LoongArch JIT, so the fentry test `test_ptr_struct_arg` still failed, will followup. Test result attached below: # ./test_progs -t verifier_sdiv,verifier_movsx,verifier_ldsx,verifier_gotol,verifier_bswap #316/1 verifier_bswap/BSWAP, 16:OK #316/2 verifier_bswap/BSWAP, 16 @unpriv:OK #316/3 verifier_bswap/BSWAP, 32:OK #316/4 verifier_bswap/BSWAP, 32 @unpriv:OK #316/5 verifier_bswap/BSWAP, 64:OK #316/6 verifier_bswap/BSWAP, 64 @unpriv:OK #316 verifier_bswap:OK #330/1 verifier_gotol/gotol, small_imm:OK #330/2 verifier_gotol/gotol, small_imm @unpriv:OK #330 verifier_gotol:OK #338/1 verifier_ldsx/LDSX, S8:OK #338/2 verifier_ldsx/LDSX, S8 @unpriv:OK #338/3 verifier_ldsx/LDSX, S16:OK #338/4 verifier_ldsx/LDSX, S16 @unpriv:OK #338/5 verifier_ldsx/LDSX, S32:OK #338/6 verifier_ldsx/LDSX, S32 @unpriv:OK #338/7 verifier_ldsx/LDSX, S8 range checking, privileged:OK #338/8 verifier_ldsx/LDSX, S16 range checking:OK #338/9 verifier_ldsx/LDSX, S16 range checking @unpriv:OK #338/10 verifier_ldsx/LDSX, S32 range checking:OK #338/11 verifier_ldsx/LDSX, S32 range checking @unpriv:OK #338 verifier_ldsx:OK #349/1 verifier_movsx/MOV32SX, S8:OK #349/2 verifier_movsx/MOV32SX, S8 @unpriv:OK #349/3 verifier_movsx/MOV32SX, S16:OK #349/4 verifier_movsx/MOV32SX, S16 @unpriv:OK #349/5 verifier_movsx/MOV64SX, S8:OK #349/6 verifier_movsx/MOV64SX, S8 @unpriv:OK #349/7 verifier_movsx/MOV64SX, S16:OK #349/8 verifier_movsx/MOV64SX, S16 @unpriv:OK #349/9 verifier_movsx/MOV64SX, S32:OK #349/10 verifier_movsx/MOV64SX, S32 @unpriv:OK #349/11 verifier_movsx/MOV32SX, S8, range_check:OK #349/12 verifier_movsx/MOV32SX, S8, range_check @unpriv:OK #349/13 verifier_movsx/MOV32SX, S16, range_check:OK #349/14 verifier_movsx/MOV32SX, S16, range_check @unpriv:OK #349/15 verifier_movsx/MOV32SX, S16, range_check 2:OK #349/16 verifier_movsx/MOV32SX, S16, range_check 2 @unpriv:OK #349/17 verifier_movsx/MOV64SX, S8, range_check:OK #349/18 verifier_movsx/MOV64SX, S8, range_check @unpriv:OK #349/19 verifier_movsx/MOV64SX, S16, range_check:OK #349/20 verifier_movsx/MOV64SX, S16, range_check @unpriv:OK #349/21 verifier_movsx/MOV64SX, S32, range_check:OK #349/22 verifier_movsx/MOV64SX, S32, range_check @unpriv:OK #349/23 verifier_movsx/MOV64SX, S16, R10 Sign Extension:OK #349/24 verifier_movsx/MOV64SX, S16, R10 Sign Extension @unpriv:OK #349 verifier_movsx:OK #361/1 verifier_sdiv/SDIV32, non-zero imm divisor, check 1:OK #361/2 verifier_sdiv/SDIV32, non-zero imm divisor, check 1 @unpriv:OK #361/3 verifier_sdiv/SDIV32, non-zero imm divisor, check 2:OK #361/4 verifier_sdiv/SDIV32, non-zero imm divisor, check 2 @unpriv:OK #361/5 verifier_sdiv/SDIV32, non-zero imm divisor, check 3:OK #361/6 verifier_sdiv/SDIV32, non-zero imm divisor, check 3 @unpriv:OK #361/7 verifier_sdiv/SDIV32, non-zero imm divisor, check 4:OK #361/8 verifier_sdiv/SDIV32, non-zero imm divisor, check 4 @unpriv:OK #361/9 verifier_sdiv/SDIV32, non-zero imm divisor, check 5:OK #361/10 verifier_sdiv/SDIV32, non-zero imm divisor, check 5 @unpriv:OK #361/11 verifier_sdiv/SDIV32, non-zero imm divisor, check 6:OK #361/12 verifier_sdiv/SDIV32, non-zero imm divisor, check 6 @unpriv:OK #361/13 verifier_sdiv/SDIV32, non-zero imm divisor, check 7:OK #361/14 verifier_sdiv/SDIV32, non-zero imm divisor, check 7 @unpriv:OK #361/15 verifier_sdiv/SDIV32, non-zero imm divisor, check 8:OK #361/16 verifier_sdiv/SDIV32, non-zero imm divisor, check 8 @unpriv:OK #361/17 verifier_sdiv/SDIV32, non-zero reg divisor, check 1:OK #361/18 verifier_sdiv/SDIV32, non-zero reg divisor, check 1 @unpriv:OK #361/19 verifier_sdiv/SDIV32, non-zero reg divisor, check 2:OK #361/20 verifier_sdiv/SDIV32, non-zero reg divisor, check 2 @unpriv:OK #361/21 verifier_sdiv/SDIV32, non-zero reg divisor, check 3:OK #361/22 verifier_sdiv/SDIV32, non-zero reg divisor, check 3 @unpriv:OK #361/23 verifier_sdiv/SDIV32, non-zero reg divisor, check 4:OK #361/24 verifier_sdiv/SDIV32, non-zero reg divisor, check 4 @unpriv:OK #361/25 verifier_sdiv/SDIV32, non-zero reg divisor, check 5:OK #361/26 verifier_sdiv/SDIV32, non-zero reg divisor, check 5 @unpriv:OK #361/27 verifier_sdiv/SDIV32, non-zero reg divisor, check 6:OK #361/28 verifier_sdiv/SDIV32, non-zero reg divisor, check 6 @unpriv:OK #361/29 verifier_sdiv/SDIV32, non-zero reg divisor, check 7:OK #361/30 verifier_sdiv/SDIV32, non-zero reg divisor, check 7 @unpriv:OK #361/31 verifier_sdiv/SDIV32, non-zero reg divisor, check 8:OK #361/32 verifier_sdiv/SDIV32, non-zero reg divisor, check 8 @unpriv:OK #361/33 verifier_sdiv/SDIV64, non-zero imm divisor, check 1:OK #361/34 verifier_sdiv/SDIV64, non-zero imm divisor, check 1 @unpriv:OK #361/35 verifier_sdiv/SDIV64, non-zero imm divisor, check 2:OK #361/36 verifier_sdiv/SDIV64, non-zero imm divisor, check 2 @unpriv:OK #361/37 verifier_sdiv/SDIV64, non-zero imm divisor, check 3:OK #361/38 verifier_sdiv/SDIV64, non-zero imm divisor, check 3 @unpriv:OK #361/39 verifier_sdiv/SDIV64, non-zero imm divisor, check 4:OK #361/40 verifier_sdiv/SDIV64, non-zero imm divisor, check 4 @unpriv:OK #361/41 verifier_sdiv/SDIV64, non-zero imm divisor, check 5:OK #361/42 verifier_sdiv/SDIV64, non-zero imm divisor, check 5 @unpriv:OK #361/43 verifier_sdiv/SDIV64, non-zero imm divisor, check 6:OK #361/44 verifier_sdiv/SDIV64, non-zero imm divisor, check 6 @unpriv:OK #361/45 verifier_sdiv/SDIV64, non-zero reg divisor, check 1:OK #361/46 verifier_sdiv/SDIV64, non-zero reg divisor, check 1 @unpriv:OK #361/47 verifier_sdiv/SDIV64, non-zero reg divisor, check 2:OK #361/48 verifier_sdiv/SDIV64, non-zero reg divisor, check 2 @unpriv:OK #361/49 verifier_sdiv/SDIV64, non-zero reg divisor, check 3:OK #361/50 verifier_sdiv/SDIV64, non-zero reg divisor, check 3 @unpriv:OK #361/51 verifier_sdiv/SDIV64, non-zero reg divisor, check 4:OK #361/52 verifier_sdiv/SDIV64, non-zero reg divisor, check 4 @unpriv:OK #361/53 verifier_sdiv/SDIV64, non-zero reg divisor, check 5:OK #361/54 verifier_sdiv/SDIV64, non-zero reg divisor, check 5 @unpriv:OK #361/55 verifier_sdiv/SDIV64, non-zero reg divisor, check 6:OK #361/56 verifier_sdiv/SDIV64, non-zero reg divisor, check 6 @unpriv:OK #361/57 verifier_sdiv/SMOD32, non-zero imm divisor, check 1:OK #361/58 verifier_sdiv/SMOD32, non-zero imm divisor, check 1 @unpriv:OK #361/59 verifier_sdiv/SMOD32, non-zero imm divisor, check 2:OK #361/60 verifier_sdiv/SMOD32, non-zero imm divisor, check 2 @unpriv:OK #361/61 verifier_sdiv/SMOD32, non-zero imm divisor, check 3:OK #361/62 verifier_sdiv/SMOD32, non-zero imm divisor, check 3 @unpriv:OK #361/63 verifier_sdiv/SMOD32, non-zero imm divisor, check 4:OK #361/64 verifier_sdiv/SMOD32, non-zero imm divisor, check 4 @unpriv:OK #361/65 verifier_sdiv/SMOD32, non-zero imm divisor, check 5:OK #361/66 verifier_sdiv/SMOD32, non-zero imm divisor, check 5 @unpriv:OK #361/67 verifier_sdiv/SMOD32, non-zero imm divisor, check 6:OK #361/68 verifier_sdiv/SMOD32, non-zero imm divisor, check 6 @unpriv:OK #361/69 verifier_sdiv/SMOD32, non-zero reg divisor, check 1:OK #361/70 verifier_sdiv/SMOD32, non-zero reg divisor, check 1 @unpriv:OK #361/71 verifier_sdiv/SMOD32, non-zero reg divisor, check 2:OK #361/72 verifier_sdiv/SMOD32, non-zero reg divisor, check 2 @unpriv:OK #361/73 verifier_sdiv/SMOD32, non-zero reg divisor, check 3:OK #361/74 verifier_sdiv/SMOD32, non-zero reg divisor, check 3 @unpriv:OK #361/75 verifier_sdiv/SMOD32, non-zero reg divisor, check 4:OK #361/76 verifier_sdiv/SMOD32, non-zero reg divisor, check 4 @unpriv:OK #361/77 verifier_sdiv/SMOD32, non-zero reg divisor, check 5:OK #361/78 verifier_sdiv/SMOD32, non-zero reg divisor, check 5 @unpriv:OK #361/79 verifier_sdiv/SMOD32, non-zero reg divisor, check 6:OK #361/80 verifier_sdiv/SMOD32, non-zero reg divisor, check 6 @unpriv:OK #361/81 verifier_sdiv/SMOD64, non-zero imm divisor, check 1:OK #361/82 verifier_sdiv/SMOD64, non-zero imm divisor, check 1 @unpriv:OK #361/83 verifier_sdiv/SMOD64, non-zero imm divisor, check 2:OK #361/84 verifier_sdiv/SMOD64, non-zero imm divisor, check 2 @unpriv:OK #361/85 verifier_sdiv/SMOD64, non-zero imm divisor, check 3:OK #361/86 verifier_sdiv/SMOD64, non-zero imm divisor, check 3 @unpriv:OK #361/87 verifier_sdiv/SMOD64, non-zero imm divisor, check 4:OK #361/88 verifier_sdiv/SMOD64, non-zero imm divisor, check 4 @unpriv:OK #361/89 verifier_sdiv/SMOD64, non-zero imm divisor, check 5:OK #361/90 verifier_sdiv/SMOD64, non-zero imm divisor, check 5 @unpriv:OK #361/91 verifier_sdiv/SMOD64, non-zero imm divisor, check 6:OK #361/92 verifier_sdiv/SMOD64, non-zero imm divisor, check 6 @unpriv:OK #361/93 verifier_sdiv/SMOD64, non-zero imm divisor, check 7:OK #361/94 verifier_sdiv/SMOD64, non-zero imm divisor, check 7 @unpriv:OK #361/95 verifier_sdiv/SMOD64, non-zero imm divisor, check 8:OK #361/96 verifier_sdiv/SMOD64, non-zero imm divisor, check 8 @unpriv:OK #361/97 verifier_sdiv/SMOD64, non-zero reg divisor, check 1:OK #361/98 verifier_sdiv/SMOD64, non-zero reg divisor, check 1 @unpriv:OK #361/99 verifier_sdiv/SMOD64, non-zero reg divisor, check 2:OK #361/100 verifier_sdiv/SMOD64, non-zero reg divisor, check 2 @unpriv:OK #361/101 verifier_sdiv/SMOD64, non-zero reg divisor, check 3:OK #361/102 verifier_sdiv/SMOD64, non-zero reg divisor, check 3 @unpriv:OK #361/103 verifier_sdiv/SMOD64, non-zero reg divisor, check 4:OK #361/104 verifier_sdiv/SMOD64, non-zero reg divisor, check 4 @unpriv:OK #361/105 verifier_sdiv/SMOD64, non-zero reg divisor, check 5:OK #361/106 verifier_sdiv/SMOD64, non-zero reg divisor, check 5 @unpriv:OK #361/107 verifier_sdiv/SMOD64, non-zero reg divisor, check 6:OK #361/108 verifier_sdiv/SMOD64, non-zero reg divisor, check 6 @unpriv:OK #361/109 verifier_sdiv/SMOD64, non-zero reg divisor, check 7:OK #361/110 verifier_sdiv/SMOD64, non-zero reg divisor, check 7 @unpriv:OK #361/111 verifier_sdiv/SMOD64, non-zero reg divisor, check 8:OK #361/112 verifier_sdiv/SMOD64, non-zero reg divisor, check 8 @unpriv:OK #361/113 verifier_sdiv/SDIV32, zero divisor:OK #361/114 verifier_sdiv/SDIV32, zero divisor @unpriv:OK #361/115 verifier_sdiv/SDIV64, zero divisor:OK #361/116 verifier_sdiv/SDIV64, zero divisor @unpriv:OK #361/117 verifier_sdiv/SMOD32, zero divisor:OK #361/118 verifier_sdiv/SMOD32, zero divisor @unpriv:OK #361/119 verifier_sdiv/SMOD64, zero divisor:OK #361/120 verifier_sdiv/SMOD64, zero divisor @unpriv:OK #361 verifier_sdiv:OK Summary: 5/163 PASSED, 0 SKIPPED, 0 FAILED # ./test_progs -t ldsx_insn test_map_val_and_probed_memory:PASS:test_ldsx_insn__open 0 nsec test_map_val_and_probed_memory:PASS:test_ldsx_insn__load 0 nsec libbpf: prog 'test_ptr_struct_arg': failed to attach: ERROR: strerror_r(-524)=22 libbpf: prog 'test_ptr_struct_arg': failed to auto-attach: -524 test_map_val_and_probed_memory:FAIL:test_ldsx_insn__attach unexpected error: -524 (errno 524) #116/1 ldsx_insn/map_val and probed_memory:FAIL #116/2 ldsx_insn/ctx_member_sign_ext:OK #116/3 ldsx_insn/ctx_member_narrow_sign_ext:OK #116 ldsx_insn:FAIL All error logs: test_map_val_and_probed_memory:PASS:test_ldsx_insn__open 0 nsec test_map_val_and_probed_memory:PASS:test_ldsx_insn__load 0 nsec libbpf: prog 'test_ptr_struct_arg': failed to attach: ERROR: strerror_r(-524)=22 libbpf: prog 'test_ptr_struct_arg': failed to auto-attach: -524 test_map_val_and_probed_memory:FAIL:test_ldsx_insn__attach unexpected error: -524 (errno 524) #116/1 ldsx_insn/map_val and probed_memory:FAIL #116 ldsx_insn:FAIL Summary: 0/2 PASSED, 0 SKIPPED, 1 FAILED Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
786 lines
16 KiB
C
786 lines
16 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#include <linux/bpf.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
#include "bpf_misc.h"
|
|
|
|
#if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \
|
|
(defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || \
|
|
defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \
|
|
defined(__TARGET_ARCH_loongarch)) && \
|
|
__clang_major__ >= 18
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 1")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv32_non_zero_imm_1(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w0 s/= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 2")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv32_non_zero_imm_2(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 41; \
|
|
w0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 3")
|
|
__success __success_unpriv __retval(20)
|
|
__naked void sdiv32_non_zero_imm_3(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 4")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv32_non_zero_imm_4(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w0 s/= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 5")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv32_non_zero_imm_5(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 6")
|
|
__success __success_unpriv __retval(21)
|
|
__naked void sdiv32_non_zero_imm_6(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 7")
|
|
__success __success_unpriv __retval(21)
|
|
__naked void sdiv32_non_zero_imm_7(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w0 s/= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero imm divisor, check 8")
|
|
__success __success_unpriv __retval(20)
|
|
__naked void sdiv32_non_zero_imm_8(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 41; \
|
|
w0 s/= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 1")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv32_non_zero_reg_1(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w1 = 2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 2")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv32_non_zero_reg_2(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 41; \
|
|
w1 = -2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 3")
|
|
__success __success_unpriv __retval(20)
|
|
__naked void sdiv32_non_zero_reg_3(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w1 = -2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 4")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv32_non_zero_reg_4(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w1 = 2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 5")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv32_non_zero_reg_5(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w1 = -2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 6")
|
|
__success __success_unpriv __retval(21)
|
|
__naked void sdiv32_non_zero_reg_6(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w1 = -2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 7")
|
|
__success __success_unpriv __retval(21)
|
|
__naked void sdiv32_non_zero_reg_7(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w1 = 2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, non-zero reg divisor, check 8")
|
|
__success __success_unpriv __retval(20)
|
|
__naked void sdiv32_non_zero_reg_8(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 41; \
|
|
w1 = 2; \
|
|
w0 s/= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero imm divisor, check 1")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv64_non_zero_imm_1(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r0 s/= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero imm divisor, check 2")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv64_non_zero_imm_2(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 41; \
|
|
r0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero imm divisor, check 3")
|
|
__success __success_unpriv __retval(20)
|
|
__naked void sdiv64_non_zero_imm_3(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero imm divisor, check 4")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv64_non_zero_imm_4(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r0 s/= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero imm divisor, check 5")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv64_non_zero_imm_5(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero imm divisor, check 6")
|
|
__success __success_unpriv __retval(21)
|
|
__naked void sdiv64_non_zero_imm_6(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r0 s/= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero reg divisor, check 1")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv64_non_zero_reg_1(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r1 = 2; \
|
|
r0 s/= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero reg divisor, check 2")
|
|
__success __success_unpriv __retval(-20)
|
|
__naked void sdiv64_non_zero_reg_2(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 41; \
|
|
r1 = -2; \
|
|
r0 s/= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero reg divisor, check 3")
|
|
__success __success_unpriv __retval(20)
|
|
__naked void sdiv64_non_zero_reg_3(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r1 = -2; \
|
|
r0 s/= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero reg divisor, check 4")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv64_non_zero_reg_4(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r1 = 2; \
|
|
r0 s/= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero reg divisor, check 5")
|
|
__success __success_unpriv __retval(-21)
|
|
__naked void sdiv64_non_zero_reg_5(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r1 = -2; \
|
|
r0 s/= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, non-zero reg divisor, check 6")
|
|
__success __success_unpriv __retval(21)
|
|
__naked void sdiv64_non_zero_reg_6(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r1 = -2; \
|
|
r0 s/= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero imm divisor, check 1")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod32_non_zero_imm_1(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w0 s%%= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero imm divisor, check 2")
|
|
__success __success_unpriv __retval(1)
|
|
__naked void smod32_non_zero_imm_2(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 41; \
|
|
w0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero imm divisor, check 3")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod32_non_zero_imm_3(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero imm divisor, check 4")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod32_non_zero_imm_4(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w0 s%%= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero imm divisor, check 5")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod32_non_zero_imm_5(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero imm divisor, check 6")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod32_non_zero_imm_6(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero reg divisor, check 1")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod32_non_zero_reg_1(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w1 = 2; \
|
|
w0 s%%= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero reg divisor, check 2")
|
|
__success __success_unpriv __retval(1)
|
|
__naked void smod32_non_zero_reg_2(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 41; \
|
|
w1 = -2; \
|
|
w0 s%%= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero reg divisor, check 3")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod32_non_zero_reg_3(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -41; \
|
|
w1 = -2; \
|
|
w0 s%%= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero reg divisor, check 4")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod32_non_zero_reg_4(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w1 = 2; \
|
|
w0 s%%= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero reg divisor, check 5")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod32_non_zero_reg_5(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w1 = -2; \
|
|
w0 s%%= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, non-zero reg divisor, check 6")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod32_non_zero_reg_6(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = -42; \
|
|
w1 = -2; \
|
|
w0 s%%= w1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 1")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod64_non_zero_imm_1(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r0 s%%= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 2")
|
|
__success __success_unpriv __retval(1)
|
|
__naked void smod64_non_zero_imm_2(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 41; \
|
|
r0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 3")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod64_non_zero_imm_3(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 4")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod64_non_zero_imm_4(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r0 s%%= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 5")
|
|
__success __success_unpriv __retval(-0)
|
|
__naked void smod64_non_zero_imm_5(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 6")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod64_non_zero_imm_6(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r0 s%%= -2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 7")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod64_non_zero_imm_7(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r0 s%%= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero imm divisor, check 8")
|
|
__success __success_unpriv __retval(1)
|
|
__naked void smod64_non_zero_imm_8(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 41; \
|
|
r0 s%%= 2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 1")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod64_non_zero_reg_1(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r1 = 2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 2")
|
|
__success __success_unpriv __retval(1)
|
|
__naked void smod64_non_zero_reg_2(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 41; \
|
|
r1 = -2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 3")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod64_non_zero_reg_3(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -41; \
|
|
r1 = -2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 4")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod64_non_zero_reg_4(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r1 = 2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 5")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod64_non_zero_reg_5(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r1 = -2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 6")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod64_non_zero_reg_6(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = -42; \
|
|
r1 = -2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 7")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void smod64_non_zero_reg_7(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r1 = 2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, non-zero reg divisor, check 8")
|
|
__success __success_unpriv __retval(1)
|
|
__naked void smod64_non_zero_reg_8(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 41; \
|
|
r1 = 2; \
|
|
r0 s%%= r1; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV32, zero divisor")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void sdiv32_zero_divisor(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w1 = 0; \
|
|
w2 = -1; \
|
|
w2 s/= w1; \
|
|
w0 = w2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SDIV64, zero divisor")
|
|
__success __success_unpriv __retval(0)
|
|
__naked void sdiv64_zero_divisor(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r1 = 0; \
|
|
r2 = -1; \
|
|
r2 s/= r1; \
|
|
r0 = r2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD32, zero divisor")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod32_zero_divisor(void)
|
|
{
|
|
asm volatile (" \
|
|
w0 = 42; \
|
|
w1 = 0; \
|
|
w2 = -1; \
|
|
w2 s%%= w1; \
|
|
w0 = w2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
SEC("socket")
|
|
__description("SMOD64, zero divisor")
|
|
__success __success_unpriv __retval(-1)
|
|
__naked void smod64_zero_divisor(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 42; \
|
|
r1 = 0; \
|
|
r2 = -1; \
|
|
r2 s%%= r1; \
|
|
r0 = r2; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
#else
|
|
|
|
SEC("socket")
|
|
__description("cpuv4 is not supported by compiler or jit, use a dummy test")
|
|
__success
|
|
int dummy_test(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#endif
|
|
|
|
char _license[] SEC("license") = "GPL";
|