summaryrefslogtreecommitdiff
path: root/callingconvention.cpp
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2021-01-14 22:07:19 -0500
committerGlenn Smith <glenn@vector35.com>2021-01-21 00:06:22 -0500
commit0245b2c84223be520fdfce4e5afdabbdfbe95ee7 (patch)
treef421696cdbc72ab4a62c2074acc1fc87312203e9 /callingconvention.cpp
parentf8feaa587bcba564ef96955a57121764a0fb0573 (diff)
Let calling conventions opt out of heuristics
Diffstat (limited to 'callingconvention.cpp')
-rw-r--r--callingconvention.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/callingconvention.cpp b/callingconvention.cpp
index 4693b988..b6354381 100644
--- a/callingconvention.cpp
+++ b/callingconvention.cpp
@@ -43,6 +43,7 @@ CallingConvention::CallingConvention(Architecture* arch, const string& name)
cc.areArgumentRegistersSharedIndex = AreArgumentRegistersSharedIndexCallback;
cc.isStackReservedForArgumentRegisters = IsStackReservedForArgumentRegistersCallback;
cc.isStackAdjustedOnReturn = IsStackAdjustedOnReturnCallback;
+ cc.isEligibleForHeuristics = IsEligibleForHeuristicsCallback;
cc.getIntegerReturnValueRegister = GetIntegerReturnValueRegisterCallback;
cc.getHighIntegerReturnValueRegister = GetHighIntegerReturnValueRegisterCallback;
cc.getFloatReturnValueRegister = GetFloatReturnValueRegisterCallback;
@@ -144,6 +145,13 @@ bool CallingConvention::IsStackAdjustedOnReturnCallback(void* ctxt)
}
+bool CallingConvention::IsEligibleForHeuristicsCallback(void* ctxt)
+{
+ CallingConvention* cc = (CallingConvention*)ctxt;
+ return cc->IsEligibleForHeuristics();
+}
+
+
uint32_t CallingConvention::GetIntegerReturnValueRegisterCallback(void* ctxt)
{
CallingConvention* cc = (CallingConvention*)ctxt;
@@ -284,6 +292,12 @@ bool CallingConvention::IsStackAdjustedOnReturn()
}
+bool CallingConvention::IsEligibleForHeuristics()
+{
+ return true;
+}
+
+
uint32_t CallingConvention::GetHighIntegerReturnValueRegister()
{
return BN_INVALID_REGISTER;
@@ -407,6 +421,12 @@ bool CoreCallingConvention::IsStackAdjustedOnReturn()
}
+bool CoreCallingConvention::IsEligibleForHeuristics()
+{
+ return BNIsEligibleForHeuristics(m_object);
+}
+
+
uint32_t CoreCallingConvention::GetIntegerReturnValueRegister()
{
return BNGetIntegerReturnValueRegister(m_object);