162306a36Sopenharmony_ci{ 262306a36Sopenharmony_ci "jit: lsh, rsh, arsh by 1", 362306a36Sopenharmony_ci .insns = { 462306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 562306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_1, 0xff), 662306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 1), 762306a36Sopenharmony_ci BPF_ALU32_IMM(BPF_LSH, BPF_REG_1, 1), 862306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x3fc, 1), 962306a36Sopenharmony_ci BPF_EXIT_INSN(), 1062306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 1), 1162306a36Sopenharmony_ci BPF_ALU32_IMM(BPF_RSH, BPF_REG_1, 1), 1262306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0xff, 1), 1362306a36Sopenharmony_ci BPF_EXIT_INSN(), 1462306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_ARSH, BPF_REG_1, 1), 1562306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x7f, 1), 1662306a36Sopenharmony_ci BPF_EXIT_INSN(), 1762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 1862306a36Sopenharmony_ci BPF_EXIT_INSN(), 1962306a36Sopenharmony_ci }, 2062306a36Sopenharmony_ci .result = ACCEPT, 2162306a36Sopenharmony_ci .retval = 2, 2262306a36Sopenharmony_ci}, 2362306a36Sopenharmony_ci{ 2462306a36Sopenharmony_ci "jit: lsh, rsh, arsh by reg", 2562306a36Sopenharmony_ci .insns = { 2662306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 2762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_4, 1), 2862306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_1, 0xff), 2962306a36Sopenharmony_ci BPF_ALU64_REG(BPF_LSH, BPF_REG_1, BPF_REG_0), 3062306a36Sopenharmony_ci BPF_ALU32_REG(BPF_LSH, BPF_REG_1, BPF_REG_4), 3162306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x3fc, 1), 3262306a36Sopenharmony_ci BPF_EXIT_INSN(), 3362306a36Sopenharmony_ci BPF_ALU64_REG(BPF_RSH, BPF_REG_1, BPF_REG_4), 3462306a36Sopenharmony_ci BPF_MOV64_REG(BPF_REG_4, BPF_REG_1), 3562306a36Sopenharmony_ci BPF_ALU32_REG(BPF_RSH, BPF_REG_4, BPF_REG_0), 3662306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_4, 0xff, 1), 3762306a36Sopenharmony_ci BPF_EXIT_INSN(), 3862306a36Sopenharmony_ci BPF_ALU64_REG(BPF_ARSH, BPF_REG_4, BPF_REG_4), 3962306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_4, 0, 1), 4062306a36Sopenharmony_ci BPF_EXIT_INSN(), 4162306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 4262306a36Sopenharmony_ci BPF_EXIT_INSN(), 4362306a36Sopenharmony_ci }, 4462306a36Sopenharmony_ci .result = ACCEPT, 4562306a36Sopenharmony_ci .retval = 2, 4662306a36Sopenharmony_ci}, 4762306a36Sopenharmony_ci{ 4862306a36Sopenharmony_ci "jit: mov32 for ldimm64, 1", 4962306a36Sopenharmony_ci .insns = { 5062306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 5162306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0xfeffffffffffffffULL), 5262306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 32), 5362306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0xfeffffffULL), 5462306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1), 5562306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 5662306a36Sopenharmony_ci BPF_EXIT_INSN(), 5762306a36Sopenharmony_ci }, 5862306a36Sopenharmony_ci .result = ACCEPT, 5962306a36Sopenharmony_ci .retval = 2, 6062306a36Sopenharmony_ci}, 6162306a36Sopenharmony_ci{ 6262306a36Sopenharmony_ci "jit: mov32 for ldimm64, 2", 6362306a36Sopenharmony_ci .insns = { 6462306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 6562306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0x1ffffffffULL), 6662306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0xffffffffULL), 6762306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1), 6862306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 6962306a36Sopenharmony_ci BPF_EXIT_INSN(), 7062306a36Sopenharmony_ci }, 7162306a36Sopenharmony_ci .result = ACCEPT, 7262306a36Sopenharmony_ci .retval = 2, 7362306a36Sopenharmony_ci}, 7462306a36Sopenharmony_ci{ 7562306a36Sopenharmony_ci "jit: various mul tests", 7662306a36Sopenharmony_ci .insns = { 7762306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0xeeff0d413122ULL), 7862306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL), 7962306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0xefefefULL), 8062306a36Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, BPF_REG_0, BPF_REG_1), 8162306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 8262306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 8362306a36Sopenharmony_ci BPF_EXIT_INSN(), 8462306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 8562306a36Sopenharmony_ci BPF_ALU64_REG(BPF_MUL, BPF_REG_3, BPF_REG_1), 8662306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 8762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 8862306a36Sopenharmony_ci BPF_EXIT_INSN(), 8962306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 9062306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, 0xefefef), 9162306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 9262306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 9362306a36Sopenharmony_ci BPF_EXIT_INSN(), 9462306a36Sopenharmony_ci BPF_MOV32_REG(BPF_REG_2, BPF_REG_2), 9562306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL), 9662306a36Sopenharmony_ci BPF_ALU32_REG(BPF_MUL, BPF_REG_0, BPF_REG_1), 9762306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 9862306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 9962306a36Sopenharmony_ci BPF_EXIT_INSN(), 10062306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 10162306a36Sopenharmony_ci BPF_ALU32_REG(BPF_MUL, BPF_REG_3, BPF_REG_1), 10262306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 10362306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 10462306a36Sopenharmony_ci BPF_EXIT_INSN(), 10562306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 10662306a36Sopenharmony_ci BPF_ALU32_IMM(BPF_MUL, BPF_REG_3, 0xefefef), 10762306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 10862306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 10962306a36Sopenharmony_ci BPF_EXIT_INSN(), 11062306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL), 11162306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0x2ad4d4aaULL), 11262306a36Sopenharmony_ci BPF_ALU32_IMM(BPF_MUL, BPF_REG_0, 0x2b), 11362306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 11462306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 11562306a36Sopenharmony_ci BPF_EXIT_INSN(), 11662306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_0, 0x952a7bbcULL), 11762306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0xfefefeULL), 11862306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_5, 0xeeff0d413122ULL), 11962306a36Sopenharmony_ci BPF_ALU32_REG(BPF_MUL, BPF_REG_5, BPF_REG_1), 12062306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_5, BPF_REG_0, 2), 12162306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 12262306a36Sopenharmony_ci BPF_EXIT_INSN(), 12362306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 12462306a36Sopenharmony_ci BPF_EXIT_INSN(), 12562306a36Sopenharmony_ci }, 12662306a36Sopenharmony_ci .result = ACCEPT, 12762306a36Sopenharmony_ci .retval = 2, 12862306a36Sopenharmony_ci}, 12962306a36Sopenharmony_ci{ 13062306a36Sopenharmony_ci "jit: various div tests", 13162306a36Sopenharmony_ci .insns = { 13262306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0xefeffeULL), 13362306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_0, 0xeeff0d413122ULL), 13462306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL), 13562306a36Sopenharmony_ci BPF_ALU64_REG(BPF_DIV, BPF_REG_0, BPF_REG_1), 13662306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 13762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 13862306a36Sopenharmony_ci BPF_EXIT_INSN(), 13962306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_3, 0xeeff0d413122ULL), 14062306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_DIV, BPF_REG_3, 0xfefeeeULL), 14162306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 14262306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 14362306a36Sopenharmony_ci BPF_EXIT_INSN(), 14462306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0xaa93ULL), 14562306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_MOD, BPF_REG_1, 0xbeefULL), 14662306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2), 14762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 14862306a36Sopenharmony_ci BPF_EXIT_INSN(), 14962306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL), 15062306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_3, 0xbeefULL), 15162306a36Sopenharmony_ci BPF_ALU64_REG(BPF_MOD, BPF_REG_1, BPF_REG_3), 15262306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2), 15362306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 15462306a36Sopenharmony_ci BPF_EXIT_INSN(), 15562306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0x5ee1dULL), 15662306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL), 15762306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_3, 0x2bULL), 15862306a36Sopenharmony_ci BPF_ALU32_REG(BPF_DIV, BPF_REG_1, BPF_REG_3), 15962306a36Sopenharmony_ci BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2), 16062306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 16162306a36Sopenharmony_ci BPF_EXIT_INSN(), 16262306a36Sopenharmony_ci BPF_ALU32_REG(BPF_DIV, BPF_REG_1, BPF_REG_1), 16362306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 2), 16462306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 16562306a36Sopenharmony_ci BPF_EXIT_INSN(), 16662306a36Sopenharmony_ci BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_2), 16762306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_2, 0, 2), 16862306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 16962306a36Sopenharmony_ci BPF_EXIT_INSN(), 17062306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 17162306a36Sopenharmony_ci BPF_EXIT_INSN(), 17262306a36Sopenharmony_ci }, 17362306a36Sopenharmony_ci .result = ACCEPT, 17462306a36Sopenharmony_ci .retval = 2, 17562306a36Sopenharmony_ci}, 17662306a36Sopenharmony_ci{ 17762306a36Sopenharmony_ci "jit: jsgt, jslt", 17862306a36Sopenharmony_ci .insns = { 17962306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_1, 0x80000000ULL), 18062306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_2, 0x0ULL), 18162306a36Sopenharmony_ci BPF_JMP_REG(BPF_JSGT, BPF_REG_1, BPF_REG_2, 2), 18262306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 18362306a36Sopenharmony_ci BPF_EXIT_INSN(), 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci BPF_JMP_REG(BPF_JSLT, BPF_REG_2, BPF_REG_1, 2), 18662306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 18762306a36Sopenharmony_ci BPF_EXIT_INSN(), 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 19062306a36Sopenharmony_ci BPF_EXIT_INSN(), 19162306a36Sopenharmony_ci }, 19262306a36Sopenharmony_ci .result = ACCEPT, 19362306a36Sopenharmony_ci .retval = 2, 19462306a36Sopenharmony_ci}, 19562306a36Sopenharmony_ci{ 19662306a36Sopenharmony_ci "jit: torturous jumps, imm8 nop jmp and pure jump padding", 19762306a36Sopenharmony_ci .insns = { }, 19862306a36Sopenharmony_ci .fill_helper = bpf_fill_torturous_jumps, 19962306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 20062306a36Sopenharmony_ci .result = ACCEPT, 20162306a36Sopenharmony_ci .retval = 1, 20262306a36Sopenharmony_ci}, 20362306a36Sopenharmony_ci{ 20462306a36Sopenharmony_ci "jit: torturous jumps, imm32 nop jmp and jmp_cond padding", 20562306a36Sopenharmony_ci .insns = { }, 20662306a36Sopenharmony_ci .fill_helper = bpf_fill_torturous_jumps, 20762306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 20862306a36Sopenharmony_ci .result = ACCEPT, 20962306a36Sopenharmony_ci .retval = 2, 21062306a36Sopenharmony_ci}, 21162306a36Sopenharmony_ci{ 21262306a36Sopenharmony_ci "jit: torturous jumps in subprog", 21362306a36Sopenharmony_ci .insns = { }, 21462306a36Sopenharmony_ci .fill_helper = bpf_fill_torturous_jumps, 21562306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 21662306a36Sopenharmony_ci .result = ACCEPT, 21762306a36Sopenharmony_ci .retval = 3, 21862306a36Sopenharmony_ci}, 219