18c2ecf20Sopenharmony_ci{
28c2ecf20Sopenharmony_ci	"precise: test 1",
38c2ecf20Sopenharmony_ci	.insns = {
48c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
58c2ecf20Sopenharmony_ci	BPF_LD_MAP_FD(BPF_REG_6, 0),
68c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
78c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP),
88c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
98c2ecf20Sopenharmony_ci	BPF_ST_MEM(BPF_DW, BPF_REG_FP, -8, 0),
108c2ecf20Sopenharmony_ci	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
118c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
128c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_9, BPF_REG_0),
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
178c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP),
188c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
198c2ecf20Sopenharmony_ci	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
208c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
218c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	BPF_ALU64_REG(BPF_SUB, BPF_REG_9, BPF_REG_8), /* map_value_ptr -= map_value_ptr */
268c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_2, BPF_REG_9),
278c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JLT, BPF_REG_2, 8, 1),
288c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1), /* R2=inv(umin=1, umax=8) */
318c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_FP),
328c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),
338c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_3, 0),
348c2ecf20Sopenharmony_ci	BPF_EMIT_CALL(BPF_FUNC_probe_read_kernel),
358c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
368c2ecf20Sopenharmony_ci	},
378c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_TRACEPOINT,
388c2ecf20Sopenharmony_ci	.fixup_map_array_48b = { 1 },
398c2ecf20Sopenharmony_ci	.result = VERBOSE_ACCEPT,
408c2ecf20Sopenharmony_ci	.errstr =
418c2ecf20Sopenharmony_ci	"26: (85) call bpf_probe_read_kernel#113\
428c2ecf20Sopenharmony_ci	last_idx 26 first_idx 20\
438c2ecf20Sopenharmony_ci	regs=4 stack=0 before 25\
448c2ecf20Sopenharmony_ci	regs=4 stack=0 before 24\
458c2ecf20Sopenharmony_ci	regs=4 stack=0 before 23\
468c2ecf20Sopenharmony_ci	regs=4 stack=0 before 22\
478c2ecf20Sopenharmony_ci	regs=4 stack=0 before 20\
488c2ecf20Sopenharmony_ci	parent didn't have regs=4 stack=0 marks\
498c2ecf20Sopenharmony_ci	last_idx 19 first_idx 10\
508c2ecf20Sopenharmony_ci	regs=4 stack=0 before 19\
518c2ecf20Sopenharmony_ci	regs=200 stack=0 before 18\
528c2ecf20Sopenharmony_ci	regs=300 stack=0 before 17\
538c2ecf20Sopenharmony_ci	regs=201 stack=0 before 15\
548c2ecf20Sopenharmony_ci	regs=201 stack=0 before 14\
558c2ecf20Sopenharmony_ci	regs=200 stack=0 before 13\
568c2ecf20Sopenharmony_ci	regs=200 stack=0 before 12\
578c2ecf20Sopenharmony_ci	regs=200 stack=0 before 11\
588c2ecf20Sopenharmony_ci	regs=200 stack=0 before 10\
598c2ecf20Sopenharmony_ci	parent already had regs=0 stack=0 marks",
608c2ecf20Sopenharmony_ci},
618c2ecf20Sopenharmony_ci{
628c2ecf20Sopenharmony_ci	"precise: test 2",
638c2ecf20Sopenharmony_ci	.insns = {
648c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
658c2ecf20Sopenharmony_ci	BPF_LD_MAP_FD(BPF_REG_6, 0),
668c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
678c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP),
688c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
698c2ecf20Sopenharmony_ci	BPF_ST_MEM(BPF_DW, BPF_REG_FP, -8, 0),
708c2ecf20Sopenharmony_ci	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
718c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
728c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_9, BPF_REG_0),
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
778c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP),
788c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
798c2ecf20Sopenharmony_ci	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
808c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
818c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ci	BPF_ALU64_REG(BPF_SUB, BPF_REG_9, BPF_REG_8), /* map_value_ptr -= map_value_ptr */
868c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_2, BPF_REG_9),
878c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JLT, BPF_REG_2, 8, 1),
888c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1), /* R2=inv(umin=1, umax=8) */
918c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_FP),
928c2ecf20Sopenharmony_ci	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),
938c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_3, 0),
948c2ecf20Sopenharmony_ci	BPF_EMIT_CALL(BPF_FUNC_probe_read_kernel),
958c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
968c2ecf20Sopenharmony_ci	},
978c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_TRACEPOINT,
988c2ecf20Sopenharmony_ci	.fixup_map_array_48b = { 1 },
998c2ecf20Sopenharmony_ci	.result = VERBOSE_ACCEPT,
1008c2ecf20Sopenharmony_ci	.flags = BPF_F_TEST_STATE_FREQ,
1018c2ecf20Sopenharmony_ci	.errstr =
1028c2ecf20Sopenharmony_ci	"26: (85) call bpf_probe_read_kernel#113\
1038c2ecf20Sopenharmony_ci	last_idx 26 first_idx 22\
1048c2ecf20Sopenharmony_ci	regs=4 stack=0 before 25\
1058c2ecf20Sopenharmony_ci	regs=4 stack=0 before 24\
1068c2ecf20Sopenharmony_ci	regs=4 stack=0 before 23\
1078c2ecf20Sopenharmony_ci	regs=4 stack=0 before 22\
1088c2ecf20Sopenharmony_ci	parent didn't have regs=4 stack=0 marks\
1098c2ecf20Sopenharmony_ci	last_idx 20 first_idx 20\
1108c2ecf20Sopenharmony_ci	regs=4 stack=0 before 20\
1118c2ecf20Sopenharmony_ci	parent didn't have regs=4 stack=0 marks\
1128c2ecf20Sopenharmony_ci	last_idx 19 first_idx 17\
1138c2ecf20Sopenharmony_ci	regs=4 stack=0 before 19\
1148c2ecf20Sopenharmony_ci	regs=200 stack=0 before 18\
1158c2ecf20Sopenharmony_ci	regs=300 stack=0 before 17\
1168c2ecf20Sopenharmony_ci	parent already had regs=0 stack=0 marks",
1178c2ecf20Sopenharmony_ci},
1188c2ecf20Sopenharmony_ci{
1198c2ecf20Sopenharmony_ci	"precise: cross frame pruning",
1208c2ecf20Sopenharmony_ci	.insns = {
1218c2ecf20Sopenharmony_ci	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
1228c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_8, 0),
1238c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
1248c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_8, 1),
1258c2ecf20Sopenharmony_ci	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
1268c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_9, 0),
1278c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
1288c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_9, 1),
1298c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
1308c2ecf20Sopenharmony_ci	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 4),
1318c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_8, 1, 1),
1328c2ecf20Sopenharmony_ci	BPF_LDX_MEM(BPF_B, BPF_REG_1, BPF_REG_2, 0),
1338c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 0),
1348c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
1358c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 0),
1368c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
1378c2ecf20Sopenharmony_ci	},
1388c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_XDP,
1398c2ecf20Sopenharmony_ci	.flags = BPF_F_TEST_STATE_FREQ,
1408c2ecf20Sopenharmony_ci	.errstr = "!read_ok",
1418c2ecf20Sopenharmony_ci	.result = REJECT,
1428c2ecf20Sopenharmony_ci},
1438c2ecf20Sopenharmony_ci{
1448c2ecf20Sopenharmony_ci	"precise: ST insn causing spi > allocated_stack",
1458c2ecf20Sopenharmony_ci	.insns = {
1468c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_3, BPF_REG_10),
1478c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_3, 123, 0),
1488c2ecf20Sopenharmony_ci	BPF_ST_MEM(BPF_DW, BPF_REG_3, -8, 0),
1498c2ecf20Sopenharmony_ci	BPF_LDX_MEM(BPF_DW, BPF_REG_4, BPF_REG_10, -8),
1508c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, -1),
1518c2ecf20Sopenharmony_ci	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_0, 0),
1528c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
1538c2ecf20Sopenharmony_ci	},
1548c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_XDP,
1558c2ecf20Sopenharmony_ci	.flags = BPF_F_TEST_STATE_FREQ,
1568c2ecf20Sopenharmony_ci	.errstr = "5: (2d) if r4 > r0 goto pc+0\
1578c2ecf20Sopenharmony_ci	last_idx 5 first_idx 5\
1588c2ecf20Sopenharmony_ci	parent didn't have regs=10 stack=0 marks\
1598c2ecf20Sopenharmony_ci	last_idx 4 first_idx 2\
1608c2ecf20Sopenharmony_ci	regs=10 stack=0 before 4\
1618c2ecf20Sopenharmony_ci	regs=10 stack=0 before 3\
1628c2ecf20Sopenharmony_ci	regs=0 stack=1 before 2\
1638c2ecf20Sopenharmony_ci	last_idx 5 first_idx 5\
1648c2ecf20Sopenharmony_ci	parent didn't have regs=1 stack=0 marks",
1658c2ecf20Sopenharmony_ci	.result = VERBOSE_ACCEPT,
1668c2ecf20Sopenharmony_ci	.retval = -1,
1678c2ecf20Sopenharmony_ci},
1688c2ecf20Sopenharmony_ci{
1698c2ecf20Sopenharmony_ci	"precise: STX insn causing spi > allocated_stack",
1708c2ecf20Sopenharmony_ci	.insns = {
1718c2ecf20Sopenharmony_ci	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
1728c2ecf20Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_3, BPF_REG_10),
1738c2ecf20Sopenharmony_ci	BPF_JMP_IMM(BPF_JNE, BPF_REG_3, 123, 0),
1748c2ecf20Sopenharmony_ci	BPF_STX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, -8),
1758c2ecf20Sopenharmony_ci	BPF_LDX_MEM(BPF_DW, BPF_REG_4, BPF_REG_10, -8),
1768c2ecf20Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, -1),
1778c2ecf20Sopenharmony_ci	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_0, 0),
1788c2ecf20Sopenharmony_ci	BPF_EXIT_INSN(),
1798c2ecf20Sopenharmony_ci	},
1808c2ecf20Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_XDP,
1818c2ecf20Sopenharmony_ci	.flags = BPF_F_TEST_STATE_FREQ,
1828c2ecf20Sopenharmony_ci	.errstr = "last_idx 6 first_idx 6\
1838c2ecf20Sopenharmony_ci	parent didn't have regs=10 stack=0 marks\
1848c2ecf20Sopenharmony_ci	last_idx 5 first_idx 3\
1858c2ecf20Sopenharmony_ci	regs=10 stack=0 before 5\
1868c2ecf20Sopenharmony_ci	regs=10 stack=0 before 4\
1878c2ecf20Sopenharmony_ci	regs=0 stack=1 before 3\
1888c2ecf20Sopenharmony_ci	last_idx 6 first_idx 6\
1898c2ecf20Sopenharmony_ci	parent didn't have regs=1 stack=0 marks\
1908c2ecf20Sopenharmony_ci	last_idx 5 first_idx 3\
1918c2ecf20Sopenharmony_ci	regs=1 stack=0 before 5",
1928c2ecf20Sopenharmony_ci	.result = VERBOSE_ACCEPT,
1938c2ecf20Sopenharmony_ci	.retval = -1,
1948c2ecf20Sopenharmony_ci},
195