The following commit d15d356887e7 ("perf/x86: Make perf callchains work without CONFIG_FRAME_POINTER") was a step in the right direction, but it triggered some BPF selftest failures. That commit exposed the fact that we currently can't unwind through BPF code. - Patch 1 (originally from Song Liu) fixes a bug in the above commit (regs->ip getting skipped in the stack trace). - Patch 2 fixes non-JIT BPF for the ORC unwinder. - Patches 3-5 are preparatory improvements for patch 6. - Patch 6 fixes JIT BPF for the FP unwinder. - Patch 7 fixes JIT BPF for the ORC unwinder (building on patch 6). - Patches 8-9 are some readability cleanups. Josh Poimboeuf (8): objtool: Fix ORC unwinding in non-JIT BPF generated code x86/bpf: Move epilogue generation to a dedicated function x86/bpf: Simplify prologue generation x86/bpf: Support SIB byte generation x86/bpf: Fix JIT frame pointer usage x86/unwind/orc: Fall back to using frame pointers for generated code x86/bpf: Convert asm comments to AT&T syntax x86/bpf: Convert MOV function/macro argument ordering to AT&T syntax Song Liu (1): perf/x86: Always store regs->ip in perf_callchain_kernel() arch/x86/events/core.c | 10 +- arch/x86/kernel/unwind_orc.c | 26 ++- arch/x86/net/bpf_jit_comp.c | 355 ++++++++++++++++++++--------------- kernel/bpf/core.c | 5 +- tools/objtool/check.c | 16 +- 5 files changed, 246 insertions(+), 166 deletions(-) -- 2.20.1