bpf, tests: Add load store test case for tail call
Add test case to enusre that the caller and callee's fp offsets are correct during tail call (mainly asserting for arm64 JIT). Tested on both big-endian and little-endian arm64 qemu, result: test_bpf: Summary: 1026 PASSED, 0 FAILED, [1014/1014 JIT'ed] test_bpf: test_tail_calls: Summary: 10 PASSED, 0 FAILED, [10/10 JIT'ed] test_bpf: test_skb_segment: Summary: 2 PASSED, 0 FAILED Signed-off-by: Xu Kuohai <xukuohai@huawei.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20220321152852.2334294-6-xukuohai@huawei.com
This commit is contained in:
parent
f516420f68
commit
38608ee7b6
|
@ -14950,6 +14950,36 @@ static struct tail_call_test tail_call_tests[] = {
|
|||
},
|
||||
.result = 10,
|
||||
},
|
||||
{
|
||||
"Tail call load/store leaf",
|
||||
.insns = {
|
||||
BPF_ALU64_IMM(BPF_MOV, R1, 1),
|
||||
BPF_ALU64_IMM(BPF_MOV, R2, 2),
|
||||
BPF_ALU64_REG(BPF_MOV, R3, BPF_REG_FP),
|
||||
BPF_STX_MEM(BPF_DW, R3, R1, -8),
|
||||
BPF_STX_MEM(BPF_DW, R3, R2, -16),
|
||||
BPF_LDX_MEM(BPF_DW, R0, BPF_REG_FP, -8),
|
||||
BPF_JMP_REG(BPF_JNE, R0, R1, 3),
|
||||
BPF_LDX_MEM(BPF_DW, R0, BPF_REG_FP, -16),
|
||||
BPF_JMP_REG(BPF_JNE, R0, R2, 1),
|
||||
BPF_ALU64_IMM(BPF_MOV, R0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = 0,
|
||||
.stack_depth = 32,
|
||||
},
|
||||
{
|
||||
"Tail call load/store",
|
||||
.insns = {
|
||||
BPF_ALU64_IMM(BPF_MOV, R0, 3),
|
||||
BPF_STX_MEM(BPF_DW, BPF_REG_FP, R0, -8),
|
||||
TAIL_CALL(-1),
|
||||
BPF_ALU64_IMM(BPF_MOV, R0, -1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = 0,
|
||||
.stack_depth = 16,
|
||||
},
|
||||
{
|
||||
"Tail call error path, max count reached",
|
||||
.insns = {
|
||||
|
|
Loading…
Reference in New Issue