Re: [RFC PATCH v1 12/16] unwind_user/backchain: Introduce back chain user space unwinding
From: Josh Poimboeuf <jpoimboe@kernel.org>
Date: 2025-07-17 02:06:06
Also in:
bpf, lkml
From: Josh Poimboeuf <jpoimboe@kernel.org>
Date: 2025-07-17 02:06:06
Also in:
bpf, lkml
On Thu, Jul 10, 2025 at 06:35:18PM +0200, Jens Remus wrote:
@@ -66,12 +73,20 @@ static int unwind_user_next(struct unwind_user_state *state) /* sframe expects the frame to be local storage */ frame = &_frame; if (sframe_find(state->ip, frame, topmost)) { - if (!IS_ENABLED(CONFIG_HAVE_UNWIND_USER_FP)) - goto done; - frame = &fp_frame; + if (IS_ENABLED(CONFIG_HAVE_UNWIND_USER_FP)) { + frame = &fp_frame; + } else if (IS_ENABLED(CONFIG_HAVE_UNWIND_USER_BACKCHAIN)) { + if (unwind_user_backchain_next(state)) + goto done; + goto done_backchain; + } } } else if (fp_state(state)) { frame = &fp_frame; + } else if (backchain_state(state)) { + if (unwind_user_backchain_next(state)) + goto done; + goto done_backchain; } else { goto done; }@@ -153,6 +168,7 @@ static int unwind_user_next(struct unwind_user_state *state) arch_unwind_user_next(state); +done_backchain: state->topmost = false; return 0;
This feels very grafted on, is there not some way to make it more generic, i.e., to just work with CONFIG_HAVE_UNWIND_USER_FP? Also, if distros aren't even compiling with -mbackchain, I wonder if we can just not do this altogether :-) -- Josh