From c78a98cc9c9eab178518282de917273763a4c3b8 Mon Sep 17 00:00:00 2001 From: Zaggy1024 Date: Mon, 2 Mar 2026 13:46:13 -0600 Subject: [PATCH] AK: Remove error passthrough from StackUnwinder This isn't useful in Ladybird, we don't want to worry about fallible allocations. --- AK/StackUnwinder.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/AK/StackUnwinder.h b/AK/StackUnwinder.h index d03d8e5c9a..647e3b02cd 100644 --- a/AK/StackUnwinder.h +++ b/AK/StackUnwinder.h @@ -19,7 +19,7 @@ struct StackFrame { // This function only returns errors if on_stack_frame returns an error. // It doesn't return an error on failed memory reads, since the last frame record sometimes contains invalid addresses when using frame pointer-based unwinding. -ErrorOr unwind_stack_from_frame_pointer(FlatPtr frame_pointer, CallableAs, FlatPtr> auto read_memory, CallableAs, StackFrame> auto on_stack_frame) +void unwind_stack_from_frame_pointer(FlatPtr frame_pointer, CallableAs, FlatPtr> auto read_memory, CallableAs auto on_stack_frame) { // aarch64/x86_64 frame record layout: // fp/rbp+8: return address @@ -36,7 +36,7 @@ ErrorOr unwind_stack_from_frame_pointer(FlatPtr frame_pointer, CallableAs< static constexpr ptrdiff_t FRAME_POINTER_RETURN_ADDRESS_OFFSET = -8; static constexpr ptrdiff_t FRAME_POINTER_PREVIOUS_FRAME_POINTER_OFFSET = -16; #else -# error Unknown architecture + return; #endif FlatPtr current_frame_pointer = frame_pointer; @@ -45,25 +45,23 @@ ErrorOr unwind_stack_from_frame_pointer(FlatPtr frame_pointer, CallableAs< StackFrame stack_frame; auto maybe_return_address = read_memory(current_frame_pointer + FRAME_POINTER_RETURN_ADDRESS_OFFSET); - if (maybe_return_address.is_error()) - return {}; + if (!maybe_return_address.has_value()) + return; stack_frame.return_address = maybe_return_address.value(); if (stack_frame.return_address == 0) - return {}; + return; auto maybe_previous_frame_pointer = read_memory(current_frame_pointer + FRAME_POINTER_PREVIOUS_FRAME_POINTER_OFFSET); - if (maybe_previous_frame_pointer.is_error()) - return {}; + if (!maybe_previous_frame_pointer.has_value()) + return; stack_frame.previous_frame_pointer = maybe_previous_frame_pointer.value(); - if (TRY(on_stack_frame(stack_frame)) == IterationDecision::Break) - return {}; + if (on_stack_frame(stack_frame) == IterationDecision::Break) + return; current_frame_pointer = maybe_previous_frame_pointer.value(); } - - return {}; } }