On Fri, May 21, 2021 at 02:41:56PM -0500, Madhavan T. Venkataraman wrote:
quoted
Or is frame->reliable supposed to be checked after all? Looking at the
code again, I'm not sure.
Either way it would be good to document the interface more clearly in a
comment above the function.
So, arch_stack_walk_reliable() would do this:
start_backtrace(frame);
while (...) {
if (!frame->reliable)
return error;
consume_entry(...);
ret = unwind_frame(...);
if (ret)
break;
}
if (ret == -ENOENT)
return success;
return error;
Something like that.
I see. So basically there are six possible combinations of return
states:
1) No error frame->reliable
2) No error !frame->reliable
3) -ENOENT frame->reliable
5) -ENOENT !frame->reliable (doesn't happen in practice)
4) Other error frame->reliable (doesn't happen in practice)
6) Other error !frame->reliable
On x86 we have fewer combinations:
1) No error state->error
2) No error !state->error
3) Error state->error
4) Error !state->error (doesn't happen in practice)
I think the x86 interface seems more robust, because it's more narrow
and has fewer edge cases. Also it doesn't have to distinguish between
error enums, which can get hairy if a downstream callee happens to
return -ENOENT for a different reason.
--
Josh