On Thu, 17 Jun 2021 12:46:19 -0700 Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote: > On Thu, Jun 17, 2021 at 12:26 PM Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote: > > > > On Thu, Jun 17, 2021 at 11:31:03AM -0700, Andrii Nakryiko wrote: > > > On Thu, Jun 17, 2021 at 11:22 AM Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote: > > > > > > > > On Thu, Jun 17, 2021 at 10:45:41AM -0700, Andrii Nakryiko wrote: > > > > > > > > > I know I suggested this patch, but I believe it would only be useful in > > > > > > > > > combination with the use of UNWIND_HINT_REGS in SAVE_REGS_STRING. But I > > > > > > > > > think that would be tricky to pull off correctly. Instead, we have > > > > > > > > > UNWIND_HINT_FUNC, which is working fine. > > > > > > > > > > > > > > > > > > So I'd suggest dropping this patch, as the unwinder isn't actually > > > > > > > > > reading regs->ip after all. > > > > > > > > > > > > > > > > ... and I guess this means patches 6-8 are no longer necessary. > > > > > > > > > > > > > > OK, I also confirmed that dropping those patche does not make any change > > > > > > > on the stacktrace. > > > > > > > Let me update the series without those. > > > > > > > > > > > > Oops, Andrii, can you also test the kernel without this patch? > > > > > > (you don't need to drop patch 6-8) > > > > > > > > > > Hi Masami, > > > > > > > > > > Dropping this patch and leaving all the other in place breaks stack > > > > > traces from kretprobes for BPF. I double checked with and without this > > > > > patch. Without this patch we are back to having broken stack traces. I > > > > > see either > > > > > > > > > > kretprobe_trampoline+0x0 > > > > > > > > > > or > > > > > > > > > > ftrace_trampoline+0xc8 > > > > > kretprobe_trampoline+0x0 > > > > Do the stack traces end there? Or do they continue normally after that? > > That's the entire stack trace. So, there are 2 cases of the stacktrace from inside the kretprobe handler. 1) Call stack_trace_save() in the handler. This will unwind stack from the handler's context. This is the case of the ftrace dynamic events. 2) Call stack_trace_save_regs(regs) in the handler with the pt_regs passed by the kretprobe. This is the case of ebpf. For the case 1, these patches can be dropped because ORC can unwind the stack with UNWIND_HINT_FUNC. For the case 2, regs->ip must be set to the correct (return) address so that ORC can find the correct entry from that ip. Thank you, -- Masami Hiramatsu <mhiramat@xxxxxxxxxx>