summaryrefslogtreecommitdiff
path: root/callingconvention.cpp
diff options
context:
space:
mode:
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 0a7d349c..945ba25f 100644
--- a/callingconvention.cpp
+++ b/callingconvention.cpp
@@ -41,6 +41,7 @@ CallingConvention::CallingConvention(Architecture* arch, const string& name)
cc.freeRegisterList = FreeRegisterListCallback;
cc.areArgumentRegistersSharedIndex = AreArgumentRegistersSharedIndexCallback;
cc.isStackReservedForArgumentRegisters = IsStackReservedForArgumentRegistersCallback;
+ cc.isStackAdjustedOnReturn = IsStackAdjustedOnReturnCallback;
cc.getIntegerReturnValueRegister = GetIntegerReturnValueRegisterCallback;
cc.getHighIntegerReturnValueRegister = GetHighIntegerReturnValueRegisterCallback;
cc.getFloatReturnValueRegister = GetFloatReturnValueRegisterCallback;
@@ -120,6 +121,13 @@ bool CallingConvention::IsStackReservedForArgumentRegistersCallback(void* ctxt)
}
+bool CallingConvention::IsStackAdjustedOnReturnCallback(void* ctxt)
+{
+ CallingConvention* cc = (CallingConvention*)ctxt;
+ return cc->IsStackAdjustedOnReturn();
+}
+
+
uint32_t CallingConvention::GetIntegerReturnValueRegisterCallback(void* ctxt)
{
CallingConvention* cc = (CallingConvention*)ctxt;
@@ -226,6 +234,12 @@ bool CallingConvention::IsStackReservedForArgumentRegisters()
}
+bool CallingConvention::IsStackAdjustedOnReturn()
+{
+ return false;
+}
+
+
uint32_t CallingConvention::GetHighIntegerReturnValueRegister()
{
return BN_INVALID_REGISTER;
@@ -312,6 +326,12 @@ bool CoreCallingConvention::IsStackReservedForArgumentRegisters()
}
+bool CoreCallingConvention::IsStackAdjustedOnReturn()
+{
+ return BNIsStackAdjustedOnReturn(m_object);
+}
+
+
uint32_t CoreCallingConvention::GetIntegerReturnValueRegister()
{
return BNGetIntegerReturnValueRegister(m_object);