mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00

Kernel test robot reported "call without frame pointer save/setup"
warning in objtool. This will make stack traces unreliable on
CONFIG_UNWINDER_FRAME_POINTER=y, however it works on
CONFIG_UNWINDER_ORC=y. Fix this by creating a stack frame for the
function.
Fixes: 2fb761823e
("bpf, x86: Add x86 JIT support for timed may_goto")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202503071350.QOhsHVaW-lkp@intel.com/
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Link: https://lore.kernel.org/r/20250315013039.1625048-1-memxor@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
56 lines
1014 B
ArmAsm
56 lines
1014 B
ArmAsm
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
|
|
|
|
#include <linux/export.h>
|
|
#include <linux/linkage.h>
|
|
#include <asm/nospec-branch.h>
|
|
|
|
.code64
|
|
.section .text, "ax"
|
|
|
|
SYM_FUNC_START(arch_bpf_timed_may_goto)
|
|
ANNOTATE_NOENDBR
|
|
|
|
/*
|
|
* r10 passes us stack depth, load the pointer to count and timestamp
|
|
* into r10 by adding it to BPF frame pointer.
|
|
*/
|
|
leaq (%rbp, %r10, 1), %r10
|
|
|
|
/* Setup frame. */
|
|
pushq %rbp
|
|
movq %rsp, %rbp
|
|
|
|
/* Save r0-r5. */
|
|
pushq %rax
|
|
pushq %rdi
|
|
pushq %rsi
|
|
pushq %rdx
|
|
pushq %rcx
|
|
pushq %r8
|
|
|
|
/*
|
|
* r10 has the pointer to count and timestamp, pass it as first
|
|
* argument.
|
|
*/
|
|
movq %r10, %rdi
|
|
|
|
/* Emit call depth accounting for call below. */
|
|
CALL_DEPTH_ACCOUNT
|
|
call bpf_check_timed_may_goto
|
|
|
|
/* BPF_REG_AX=r10 will be stored into count, so move return value to it. */
|
|
movq %rax, %r10
|
|
|
|
/* Restore r5-r0. */
|
|
popq %r8
|
|
popq %rcx
|
|
popq %rdx
|
|
popq %rsi
|
|
popq %rdi
|
|
popq %rax
|
|
|
|
leave
|
|
RET
|
|
SYM_FUNC_END(arch_bpf_timed_may_goto)
|