Author: jmolenda
Date: Tue Nov 11 02:26:44 2014
New Revision: 221677
URL: http://llvm.org/viewvc/llvm-project?rev=221677&view=rev
Log:
Add an operator== to the RegisterNumber class; it simplifies
RegisterContextLLDB a bit more in a few places.
Modified:
lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.h
Modified: lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
URL:
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp?rev=221677&r1=221676&r2=221677&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp Tue Nov
11 02:26:44 2014
@@ -1196,8 +1196,8 @@ RegisterContextLLDB::SavedLocationForReg
// If we're fetching the saved pc and this UnwindPlan defines a
ReturnAddress register (e.g. lr on arm),
// look for the return address register number in the UnwindPlan's
row.
- if (pc_regnum.GetAsKind (eRegisterKindLLDB) != LLDB_INVALID_REGNUM
- && pc_regnum.GetAsKind (eRegisterKindLLDB) == regnum.GetAsKind
(eRegisterKindLLDB)
+ if (pc_regnum.IsValid()
+ && pc_regnum == regnum
&& m_full_unwind_plan_sp->GetReturnAddressRegister() !=
LLDB_INVALID_REGNUM)
{
@@ -1211,12 +1211,13 @@ RegisterContextLLDB::SavedLocationForReg
{
if (unwindplan_registerkind == eRegisterKindGeneric)
{
- UnwindLogMsg ("could not convert lldb regnum %s (%d)
into eRegisterKindGeneric reg numbering scheme", regnum.GetName(),
regnum.GetAsKind (eRegisterKindLLDB));
+ UnwindLogMsg ("could not convert lldb regnum %s (%d)
into eRegisterKindGeneric reg numbering scheme",
+ regnum.GetName(), regnum.GetAsKind
(eRegisterKindLLDB));
}
else
{
UnwindLogMsg ("could not convert lldb regnum %s (%d)
into %d RegisterKind reg numbering scheme",
- regnum.GetName(), regnum.GetAsKind
(eRegisterKindLLDB), (int) unwindplan_registerkind);
+ regnum.GetName(), regnum.GetAsKind
(eRegisterKindLLDB), (int) unwindplan_registerkind);
}
return UnwindLLDB::RegisterSearchResult::eRegisterNotFound;
}
@@ -1268,8 +1269,7 @@ RegisterContextLLDB::SavedLocationForReg
RegisterNumber arch_default_ra_regnum (m_thread,
eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA);
if (arch_default_ra_regnum.GetAsKind (unwindplan_registerkind) !=
LLDB_INVALID_REGNUM
- && pc_regnum.GetAsKind (eRegisterKindLLDB) !=
LLDB_INVALID_REGNUM
- && pc_regnum.GetAsKind (eRegisterKindLLDB) == regnum.GetAsKind
(eRegisterKindLLDB)
+ && pc_regnum == regnum
&& unwindplan_regloc.IsInOtherRegister()
&& unwindplan_regloc.GetRegisterNumber() ==
arch_default_ra_regnum.GetAsKind (unwindplan_registerkind)
&& m_full_unwind_plan_sp->GetSourcedFromCompiler() !=
eLazyBoolYes
Modified: lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.h
URL:
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.h?rev=221677&r1=221676&r2=221677&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.h (original)
+++ lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.h Tue Nov 11
02:26:44 2014
@@ -114,6 +114,10 @@ private:
}
}
+ // This constructor plus the init() method below allow for the
placeholder
+ // creation of an invalid object initially, possibly to be filled in.
It
+ // would be more consistent to have three Set* methods to set the three
+ // data that the object needs.
RegisterNumber () :
m_reg_ctx_sp(),
m_regnum (LLDB_INVALID_REGNUM),
@@ -152,7 +156,39 @@ private:
}
bool
- IsValid ()
+ operator == (RegisterNumber &rhs)
+ {
+ if (IsValid() != rhs.IsValid())
+ return false;
+
+ if (m_kind == rhs.m_kind)
+ {
+ if (m_regnum == rhs.m_regnum)
+ return true;
+ else
+ return false;
+ }
+
+ uint32_t rhs_regnum = rhs.GetAsKind (m_kind);
+ if (rhs_regnum != LLDB_INVALID_REGNUM)
+ {
+ if (m_regnum == rhs_regnum)
+ return true;
+ else
+ return false;
+ }
+ uint32_t lhs_regnum = GetAsKind (rhs.m_kind);
+ {
+ if (lhs_regnum == rhs.m_regnum)
+ return true;
+ else
+ return false;
+ }
+ return false;
+ }
+
+ bool
+ IsValid () const
{
return m_regnum != LLDB_INVALID_REGNUM;
}
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits