From abbae639d8ba182e8b3cf2d5a9844a9b1f9844a1 Mon Sep 17 00:00:00 2001 From: Xusheng Date: Fri, 26 Jul 2024 15:57:14 +0800 Subject: Support setting user global pointer value --- function.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'function.cpp') diff --git a/function.cpp b/function.cpp index 8497ccec..033a8453 100644 --- a/function.cpp +++ b/function.cpp @@ -104,6 +104,55 @@ Variable Variable::FromIdentifier(uint64_t id) RegisterValue::RegisterValue() : state(UndeterminedValue), value(0), offset(0), size(0) {} +bool RegisterValue::operator==(const RegisterValue& a) const +{ + switch (a.state) + { + case EntryValue: + return (state == EntryValue) && (a.value == value); + + case ConstantValue: + return (state == ConstantValue) && (a.value == value); + + case ConstantPointerValue: + return (state == ConstantPointerValue) && (a.value == value); + + case ExternalPointerValue: + return (state == ExternalPointerValue) && (a.value == value) && (a.offset == offset); + + case StackFrameOffset: + return (state == StackFrameOffset) && (a.value == value); + + case UndeterminedValue: + return state == UndeterminedValue; + + case ReturnAddressValue: + return state == ReturnAddressValue; + + case ImportedAddressValue: + return (state == ImportedAddressValue) && (a.value == value); + + case ConstantDataZeroExtendValue: + return (state == ConstantDataZeroExtendValue) && (a.value == value) && (a.size == size); + + case ConstantDataSignExtendValue: + return (state == ConstantDataSignExtendValue) && (a.value == value) && (a.size == size); + + case ConstantDataAggregateValue: + return (state == ConstantDataAggregateValue) && (a.value == value) && (a.size == size); + + default: + return false; + } +} + + +bool RegisterValue::operator!=(const RegisterValue& a) const +{ + return !((*this) == a); +} + + bool RegisterValue::IsConstant() const { return (state == ConstantValue) || (state == ConstantPointerValue); -- cgit v1.3.1