Commit 38608ee7 authored by Xu Kuohai's avatar Xu Kuohai Committed by Daniel Borkmann
Browse files

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: default avatarXu Kuohai <xukuohai@huawei.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20220321152852.2334294-6-xukuohai@huawei.com
parent f516420f
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -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 = {