summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2014-11-13 07:31:45 +0000
committerJason Molenda <jmolenda@apple.com>2014-11-13 07:31:45 +0000
commit22975a28ac24e89114a24b20858c32a73cd26a31 (patch)
treeee0eacd4cb151c27cb9137c7d9a9799bb638aaa7 /lldb/source/Plugins/Process/Utility/RegisterContextLLDB.h
parentc11bd4229cbc5775ecd39e183e6bdc1835706ee9 (diff)
downloadbcm5719-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.h27
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 &reg_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);
OpenPOWER on IntegriCloud