Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSterling Augustine <saugustine@google.com>2020-03-31 01:20:26 +0300
committerSterling Augustine <saugustine@google.com>2020-04-02 20:52:25 +0300
commit71fbd6e40632f437049215904c28ad9d63cff4bc (patch)
tree6ee77fe00c2c3add59f4a472ab0990357b190004 /libunwind/src/UnwindCursor.hpp
parentf4448063ccf1c2eda518ad326018276baff870d2 (diff)
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
Diffstat (limited to 'libunwind/src/UnwindCursor.hpp')
-rw-r--r--libunwind/src/UnwindCursor.hpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/libunwind/src/UnwindCursor.hpp b/libunwind/src/UnwindCursor.hpp
index e7fb70cc5718..32d71c2c1ed3 100644
--- a/libunwind/src/UnwindCursor.hpp
+++ b/libunwind/src/UnwindCursor.hpp
@@ -1848,6 +1848,12 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {
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.