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