summaryrefslogtreecommitdiff
path: root/callingconvention.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2017-08-23 01:04:47 -0400
committerRusty Wagner <rusty@vector35.com>2017-08-23 17:01:33 -0400
commit0d88336e22cf85a917729fe0f814c1e63736fca0 (patch)
tree246a7cf34d3f3919770cfbb2cf5f357adb1771e1 /callingconvention.cpp
parent7f3efa01f053e19549c480a770728085900c2131 (diff)
Added APIs for clobbered registers, global pointers, and function exit data flow info
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);