162306a36Sopenharmony_ci{
262306a36Sopenharmony_ci	"ld_abs: check calling conv, r1",
362306a36Sopenharmony_ci	.insns = {
462306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
562306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_1, 0),
662306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, -0x200000),
762306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
862306a36Sopenharmony_ci	BPF_EXIT_INSN(),
962306a36Sopenharmony_ci	},
1062306a36Sopenharmony_ci	.errstr = "R1 !read_ok",
1162306a36Sopenharmony_ci	.result = REJECT,
1262306a36Sopenharmony_ci},
1362306a36Sopenharmony_ci{
1462306a36Sopenharmony_ci	"ld_abs: check calling conv, r2",
1562306a36Sopenharmony_ci	.insns = {
1662306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
1762306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_2, 0),
1862306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, -0x200000),
1962306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
2062306a36Sopenharmony_ci	BPF_EXIT_INSN(),
2162306a36Sopenharmony_ci	},
2262306a36Sopenharmony_ci	.errstr = "R2 !read_ok",
2362306a36Sopenharmony_ci	.result = REJECT,
2462306a36Sopenharmony_ci},
2562306a36Sopenharmony_ci{
2662306a36Sopenharmony_ci	"ld_abs: check calling conv, r3",
2762306a36Sopenharmony_ci	.insns = {
2862306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
2962306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_3, 0),
3062306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, -0x200000),
3162306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
3262306a36Sopenharmony_ci	BPF_EXIT_INSN(),
3362306a36Sopenharmony_ci	},
3462306a36Sopenharmony_ci	.errstr = "R3 !read_ok",
3562306a36Sopenharmony_ci	.result = REJECT,
3662306a36Sopenharmony_ci},
3762306a36Sopenharmony_ci{
3862306a36Sopenharmony_ci	"ld_abs: check calling conv, r4",
3962306a36Sopenharmony_ci	.insns = {
4062306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
4162306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_4, 0),
4262306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, -0x200000),
4362306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
4462306a36Sopenharmony_ci	BPF_EXIT_INSN(),
4562306a36Sopenharmony_ci	},
4662306a36Sopenharmony_ci	.errstr = "R4 !read_ok",
4762306a36Sopenharmony_ci	.result = REJECT,
4862306a36Sopenharmony_ci},
4962306a36Sopenharmony_ci{
5062306a36Sopenharmony_ci	"ld_abs: check calling conv, r5",
5162306a36Sopenharmony_ci	.insns = {
5262306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5362306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_5, 0),
5462306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, -0x200000),
5562306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_0, BPF_REG_5),
5662306a36Sopenharmony_ci	BPF_EXIT_INSN(),
5762306a36Sopenharmony_ci	},
5862306a36Sopenharmony_ci	.errstr = "R5 !read_ok",
5962306a36Sopenharmony_ci	.result = REJECT,
6062306a36Sopenharmony_ci},
6162306a36Sopenharmony_ci{
6262306a36Sopenharmony_ci	"ld_abs: check calling conv, r7",
6362306a36Sopenharmony_ci	.insns = {
6462306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
6562306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_7, 0),
6662306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, -0x200000),
6762306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_0, BPF_REG_7),
6862306a36Sopenharmony_ci	BPF_EXIT_INSN(),
6962306a36Sopenharmony_ci	},
7062306a36Sopenharmony_ci	.result = ACCEPT,
7162306a36Sopenharmony_ci},
7262306a36Sopenharmony_ci{
7362306a36Sopenharmony_ci	"ld_abs: tests on r6 and skb data reload helper",
7462306a36Sopenharmony_ci	.insns = {
7562306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
7662306a36Sopenharmony_ci	BPF_LD_ABS(BPF_B, 0),
7762306a36Sopenharmony_ci	BPF_LD_ABS(BPF_H, 0),
7862306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, 0),
7962306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_7, BPF_REG_6),
8062306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_6, 0),
8162306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
8262306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_2, 1),
8362306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_3, 2),
8462306a36Sopenharmony_ci	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_vlan_push),
8562306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_6, BPF_REG_7),
8662306a36Sopenharmony_ci	BPF_LD_ABS(BPF_B, 0),
8762306a36Sopenharmony_ci	BPF_LD_ABS(BPF_H, 0),
8862306a36Sopenharmony_ci	BPF_LD_ABS(BPF_W, 0),
8962306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 42),
9062306a36Sopenharmony_ci	BPF_EXIT_INSN(),
9162306a36Sopenharmony_ci	},
9262306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
9362306a36Sopenharmony_ci	.result = ACCEPT,
9462306a36Sopenharmony_ci	.retval = 42 /* ultimate return value */,
9562306a36Sopenharmony_ci},
9662306a36Sopenharmony_ci{
9762306a36Sopenharmony_ci	"ld_abs: invalid op 1",
9862306a36Sopenharmony_ci	.insns = {
9962306a36Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
10062306a36Sopenharmony_ci		BPF_LD_ABS(BPF_DW, 0),
10162306a36Sopenharmony_ci		BPF_EXIT_INSN(),
10262306a36Sopenharmony_ci	},
10362306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
10462306a36Sopenharmony_ci	.result = REJECT,
10562306a36Sopenharmony_ci	.errstr = "unknown opcode",
10662306a36Sopenharmony_ci},
10762306a36Sopenharmony_ci{
10862306a36Sopenharmony_ci	"ld_abs: invalid op 2",
10962306a36Sopenharmony_ci	.insns = {
11062306a36Sopenharmony_ci		BPF_MOV32_IMM(BPF_REG_0, 256),
11162306a36Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
11262306a36Sopenharmony_ci		BPF_LD_IND(BPF_DW, BPF_REG_0, 0),
11362306a36Sopenharmony_ci		BPF_EXIT_INSN(),
11462306a36Sopenharmony_ci	},
11562306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
11662306a36Sopenharmony_ci	.result = REJECT,
11762306a36Sopenharmony_ci	.errstr = "unknown opcode",
11862306a36Sopenharmony_ci},
11962306a36Sopenharmony_ci{
12062306a36Sopenharmony_ci	"ld_abs: nmap reduced",
12162306a36Sopenharmony_ci	.insns = {
12262306a36Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
12362306a36Sopenharmony_ci		BPF_LD_ABS(BPF_H, 12),
12462306a36Sopenharmony_ci		BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0x806, 28),
12562306a36Sopenharmony_ci		BPF_LD_ABS(BPF_H, 12),
12662306a36Sopenharmony_ci		BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0x806, 26),
12762306a36Sopenharmony_ci		BPF_MOV32_IMM(BPF_REG_0, 18),
12862306a36Sopenharmony_ci		BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -64),
12962306a36Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -64),
13062306a36Sopenharmony_ci		BPF_LD_IND(BPF_W, BPF_REG_7, 14),
13162306a36Sopenharmony_ci		BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -60),
13262306a36Sopenharmony_ci		BPF_MOV32_IMM(BPF_REG_0, 280971478),
13362306a36Sopenharmony_ci		BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -56),
13462306a36Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -56),
13562306a36Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -60),
13662306a36Sopenharmony_ci		BPF_ALU32_REG(BPF_SUB, BPF_REG_0, BPF_REG_7),
13762306a36Sopenharmony_ci		BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 15),
13862306a36Sopenharmony_ci		BPF_LD_ABS(BPF_H, 12),
13962306a36Sopenharmony_ci		BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0x806, 13),
14062306a36Sopenharmony_ci		BPF_MOV32_IMM(BPF_REG_0, 22),
14162306a36Sopenharmony_ci		BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -56),
14262306a36Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -56),
14362306a36Sopenharmony_ci		BPF_LD_IND(BPF_H, BPF_REG_7, 14),
14462306a36Sopenharmony_ci		BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -52),
14562306a36Sopenharmony_ci		BPF_MOV32_IMM(BPF_REG_0, 17366),
14662306a36Sopenharmony_ci		BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -48),
14762306a36Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -48),
14862306a36Sopenharmony_ci		BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -52),
14962306a36Sopenharmony_ci		BPF_ALU32_REG(BPF_SUB, BPF_REG_0, BPF_REG_7),
15062306a36Sopenharmony_ci		BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 2),
15162306a36Sopenharmony_ci		BPF_MOV32_IMM(BPF_REG_0, 256),
15262306a36Sopenharmony_ci		BPF_EXIT_INSN(),
15362306a36Sopenharmony_ci		BPF_MOV32_IMM(BPF_REG_0, 0),
15462306a36Sopenharmony_ci		BPF_EXIT_INSN(),
15562306a36Sopenharmony_ci	},
15662306a36Sopenharmony_ci	.data = {
15762306a36Sopenharmony_ci		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x06, 0,
15862306a36Sopenharmony_ci		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15962306a36Sopenharmony_ci		0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6,
16062306a36Sopenharmony_ci	},
16162306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
16262306a36Sopenharmony_ci	.result = ACCEPT,
16362306a36Sopenharmony_ci	.retval = 256,
16462306a36Sopenharmony_ci},
16562306a36Sopenharmony_ci{
16662306a36Sopenharmony_ci	"ld_abs: div + abs, test 1",
16762306a36Sopenharmony_ci	.insns = {
16862306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
16962306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 3),
17062306a36Sopenharmony_ci		BPF_ALU64_IMM(BPF_MOV, BPF_REG_2, 2),
17162306a36Sopenharmony_ci		BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_2),
17262306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_MOV, BPF_REG_8, BPF_REG_0),
17362306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 4),
17462306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_0),
17562306a36Sopenharmony_ci		BPF_LD_IND(BPF_B, BPF_REG_8, -70),
17662306a36Sopenharmony_ci		BPF_EXIT_INSN(),
17762306a36Sopenharmony_ci	},
17862306a36Sopenharmony_ci	.data = {
17962306a36Sopenharmony_ci		10, 20, 30, 40, 50,
18062306a36Sopenharmony_ci	},
18162306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
18262306a36Sopenharmony_ci	.result = ACCEPT,
18362306a36Sopenharmony_ci	.retval = 10,
18462306a36Sopenharmony_ci},
18562306a36Sopenharmony_ci{
18662306a36Sopenharmony_ci	"ld_abs: div + abs, test 2",
18762306a36Sopenharmony_ci	.insns = {
18862306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
18962306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 3),
19062306a36Sopenharmony_ci		BPF_ALU64_IMM(BPF_MOV, BPF_REG_2, 2),
19162306a36Sopenharmony_ci		BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_2),
19262306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_MOV, BPF_REG_8, BPF_REG_0),
19362306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 128),
19462306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_0),
19562306a36Sopenharmony_ci		BPF_LD_IND(BPF_B, BPF_REG_8, -70),
19662306a36Sopenharmony_ci		BPF_EXIT_INSN(),
19762306a36Sopenharmony_ci	},
19862306a36Sopenharmony_ci	.data = {
19962306a36Sopenharmony_ci		10, 20, 30, 40, 50,
20062306a36Sopenharmony_ci	},
20162306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
20262306a36Sopenharmony_ci	.result = ACCEPT,
20362306a36Sopenharmony_ci	.retval = 0,
20462306a36Sopenharmony_ci},
20562306a36Sopenharmony_ci{
20662306a36Sopenharmony_ci	"ld_abs: div + abs, test 3",
20762306a36Sopenharmony_ci	.insns = {
20862306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
20962306a36Sopenharmony_ci		BPF_ALU64_IMM(BPF_MOV, BPF_REG_7, 0),
21062306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 3),
21162306a36Sopenharmony_ci		BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_7),
21262306a36Sopenharmony_ci		BPF_EXIT_INSN(),
21362306a36Sopenharmony_ci	},
21462306a36Sopenharmony_ci	.data = {
21562306a36Sopenharmony_ci		10, 20, 30, 40, 50,
21662306a36Sopenharmony_ci	},
21762306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
21862306a36Sopenharmony_ci	.result = ACCEPT,
21962306a36Sopenharmony_ci	.retval = 0,
22062306a36Sopenharmony_ci},
22162306a36Sopenharmony_ci{
22262306a36Sopenharmony_ci	"ld_abs: div + abs, test 4",
22362306a36Sopenharmony_ci	.insns = {
22462306a36Sopenharmony_ci		BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
22562306a36Sopenharmony_ci		BPF_ALU64_IMM(BPF_MOV, BPF_REG_7, 0),
22662306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 256),
22762306a36Sopenharmony_ci		BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_7),
22862306a36Sopenharmony_ci		BPF_EXIT_INSN(),
22962306a36Sopenharmony_ci	},
23062306a36Sopenharmony_ci	.data = {
23162306a36Sopenharmony_ci		10, 20, 30, 40, 50,
23262306a36Sopenharmony_ci	},
23362306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
23462306a36Sopenharmony_ci	.result = ACCEPT,
23562306a36Sopenharmony_ci	.retval = 0,
23662306a36Sopenharmony_ci},
23762306a36Sopenharmony_ci{
23862306a36Sopenharmony_ci	"ld_abs: vlan + abs, test 1",
23962306a36Sopenharmony_ci	.insns = { },
24062306a36Sopenharmony_ci	.data = {
24162306a36Sopenharmony_ci		0x34,
24262306a36Sopenharmony_ci	},
24362306a36Sopenharmony_ci	.fill_helper = bpf_fill_ld_abs_vlan_push_pop,
24462306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
24562306a36Sopenharmony_ci	.result = ACCEPT,
24662306a36Sopenharmony_ci	.retval = 0xbef,
24762306a36Sopenharmony_ci},
24862306a36Sopenharmony_ci{
24962306a36Sopenharmony_ci	"ld_abs: vlan + abs, test 2",
25062306a36Sopenharmony_ci	.insns = {
25162306a36Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
25262306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 0),
25362306a36Sopenharmony_ci		BPF_LD_ABS(BPF_H, 0),
25462306a36Sopenharmony_ci		BPF_LD_ABS(BPF_W, 0),
25562306a36Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_7, BPF_REG_6),
25662306a36Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_6, 0),
25762306a36Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
25862306a36Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_2, 1),
25962306a36Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_3, 2),
26062306a36Sopenharmony_ci		BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0,
26162306a36Sopenharmony_ci			     BPF_FUNC_skb_vlan_push),
26262306a36Sopenharmony_ci		BPF_MOV64_REG(BPF_REG_6, BPF_REG_7),
26362306a36Sopenharmony_ci		BPF_LD_ABS(BPF_B, 0),
26462306a36Sopenharmony_ci		BPF_LD_ABS(BPF_H, 0),
26562306a36Sopenharmony_ci		BPF_LD_ABS(BPF_W, 0),
26662306a36Sopenharmony_ci		BPF_MOV64_IMM(BPF_REG_0, 42),
26762306a36Sopenharmony_ci		BPF_EXIT_INSN(),
26862306a36Sopenharmony_ci	},
26962306a36Sopenharmony_ci	.data = {
27062306a36Sopenharmony_ci		0x34,
27162306a36Sopenharmony_ci	},
27262306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
27362306a36Sopenharmony_ci	.result = ACCEPT,
27462306a36Sopenharmony_ci	.retval = 42,
27562306a36Sopenharmony_ci},
27662306a36Sopenharmony_ci{
27762306a36Sopenharmony_ci	"ld_abs: jump around ld_abs",
27862306a36Sopenharmony_ci	.insns = { },
27962306a36Sopenharmony_ci	.data = {
28062306a36Sopenharmony_ci		10, 11,
28162306a36Sopenharmony_ci	},
28262306a36Sopenharmony_ci	.fill_helper = bpf_fill_jump_around_ld_abs,
28362306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
28462306a36Sopenharmony_ci	.result = ACCEPT,
28562306a36Sopenharmony_ci	.retval = 10,
28662306a36Sopenharmony_ci},
287