From: Alexei Starovoitov clang inlines emit_unwind_ret_addr() and emit_patch() into do_jit() and folds 'bpf_unwind_target - X86_PATCH_SIZE' into one relocation. It points to a nop in the padding in front of the function, and objtool complains: vmlinux.o: warning: objtool: do_jit+0x1330: relocation to !ENDBR: .text+0xc7fab It's only used to compute rel32 of a direct call, so nothing is wrong at run time. emit_rsb_call() does call depth accounting too and hides func from the optimizer. Use it instead of open coding. Fixes: cff94a3d78d8 ("bpf, x86: Support unwind_goto and unwind_exit") Reported-by: Nathan Chancellor Closes: https://lore.kernel.org/bpf/20261021201456.GA3197963@ax162/ Signed-off-by: Alexei Starovoitov --- arch/x86/net/bpf_jit_comp.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 6a2fe3d0039d..71f7200dba00 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -2564,9 +2564,7 @@ static int emit_unwind_ret_addr(u8 **pprog, u8 *ip) EMIT2(0x50, 0x56); /* push rax; push rsi */ EMIT4(0x48, 0x8B, 0x7D, 0x08); /* mov rdi, [rbp + 8] */ - ip += prog - start; - ip += x86_call_depth_emit_accounting(&prog, bpf_unwind_target, ip); - if (emit_call(&prog, bpf_unwind_target, ip)) + if (emit_rsb_call(&prog, bpf_unwind_target, ip + (prog - start))) return -EINVAL; EMIT4(0x48, 0x89, 0x45, 0x08); /* mov [rbp + 8], rax */ EMIT2(0x5E, 0x58); /* pop rsi; pop rax */ base-commit: b116ac6087541d3d98031e786adbe9c733cd6df3 -- 2.55.0