Exit unwinding early when at the top of the stack and additional info won't be found.
Summary:
This patch follows libgcc's lead: When the return-address register is
zero, there won't be additional stack frames to examine, or gather
information about. Exit before spending time looking for something
known not to be found.
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D77099
GitOrigin-RevId: 71fbd6e40632f437049215904c28ad9d63cff4bc
diff --git a/src/UnwindCursor.hpp b/src/UnwindCursor.hpp
index e7fb70c..32d71c2 100644
--- a/src/UnwindCursor.hpp
+++ b/src/UnwindCursor.hpp
@@ -1848,6 +1848,12 @@
pc &= (pint_t)~0x1;
#endif
+ // Exit early if at the top of the stack.
+ if (pc == 0) {
+ _unwindInfoMissing = true;
+ return;
+ }
+
// If the last line of a function is a "throw" the compiler sometimes
// emits no instructions after the call to __cxa_throw. This means
// the return address is actually the start of the next function.