bpf, arm64: Call build_prologue() first in first JIT pass
[ Upstream commit 68e4f238b0e9d3670a1612ad900a6e98b2b3f7dd ]
BPF line info needs ctx->offset to be the instruction offset in the whole JITed
image instead of the body itself, so also call build_prologue() first in first
JIT pass.
Fixes: 37ab566c17
("bpf: arm64: Enable arm64 jit to provide bpf_line_info")
Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20220226121906.5709-2-houtao1@huawei.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
06a0001366
commit
694398af5f
@@ -1040,15 +1040,18 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
|
|||||||
goto out_off;
|
goto out_off;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 1. Initial fake pass to compute ctx->idx. */
|
/*
|
||||||
|
* 1. Initial fake pass to compute ctx->idx and ctx->offset.
|
||||||
/* Fake pass to fill in ctx->offset. */
|
*
|
||||||
if (build_body(&ctx, extra_pass)) {
|
* BPF line info needs ctx->offset[i] to be the offset of
|
||||||
|
* instruction[i] in jited image, so build prologue first.
|
||||||
|
*/
|
||||||
|
if (build_prologue(&ctx, was_classic)) {
|
||||||
prog = orig_prog;
|
prog = orig_prog;
|
||||||
goto out_off;
|
goto out_off;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (build_prologue(&ctx, was_classic)) {
|
if (build_body(&ctx, extra_pass)) {
|
||||||
prog = orig_prog;
|
prog = orig_prog;
|
||||||
goto out_off;
|
goto out_off;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user