diff options
author | Jason Molenda <jmolenda@apple.com> | 2014-11-13 07:31:45 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2014-11-13 07:31:45 +0000 |
commit | 22975a28ac24e89114a24b20858c32a73cd26a31 (patch) | |
tree | ee0eacd4cb151c27cb9137c7d9a9799bb638aaa7 /lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h | |
parent | c11bd4229cbc5775ecd39e183e6bdc1835706ee9 (diff) | |
download | bcm5719-llvm-22975a28ac24e89114a24b20858c32a73cd26a31.tar.gz bcm5719-llvm-22975a28ac24e89114a24b20858c32a73cd26a31.zip |
A pretty big overhaul of the TryFallbackUnwindPlan method in
RegisterContextLLDB. I have core files of half a dozen tricky
unwind situations on x86/arm and they're all working pretty much
correctly at this point, but we'll need to keep an eye out for
unwinder regressions for a little while; it's tricky to get these
heuristics completely correct in all unwind situations.
<rdar://problem/18937193>
llvm-svn: 221866
Diffstat (limited to 'lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h')
-rw-r--r-- | lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h index cf652da2619..636e9524021 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h @@ -217,6 +217,18 @@ private: return output_regnum; } + uint32_t + GetRegisterNumber () const + { + return m_regnum; + } + + lldb::RegisterKind + GetRegisterKind () const + { + return m_kind; + } + const char * GetName () { @@ -328,11 +340,26 @@ private: bool TryFallbackUnwindPlan (); + //------------------------------------------------------------------ + /// Switch to the fallback unwind plan unconditionally without any safety + /// checks that it is providing better results than the normal unwind plan. + /// + /// The only time it is valid to call this method is if the full unwindplan is + /// found to be fundamentally incorrect/impossible. + /// + /// Returns true if it was able to install the fallback unwind plan. + //------------------------------------------------------------------ + bool + ForceSwitchToFallbackUnwindPlan (); + // Get the contents of a general purpose (address-size) register for this frame // (usually retrieved from the next frame) bool ReadGPRValue (lldb::RegisterKind register_kind, uint32_t regnum, lldb::addr_t &value); + bool + ReadGPRValue (const RegisterNumber ®_num, lldb::addr_t &value); + // Get the CFA register for a given frame. bool ReadCFAValueForRow (lldb::RegisterKind register_kind, const UnwindPlan::RowSP &row, lldb::addr_t &value); |