From 0732c4d3e9b24382271139c6f796d1639efb1c5d Mon Sep 17 00:00:00 2001 From: Ryan Snyder Date: Fri, 28 May 2021 16:35:34 -0400 Subject: Improve calling convention support for variadic argument resolution --- callingconvention.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'callingconvention.cpp') diff --git a/callingconvention.cpp b/callingconvention.cpp index b6354381..33fe45ff 100644 --- a/callingconvention.cpp +++ b/callingconvention.cpp @@ -41,6 +41,7 @@ CallingConvention::CallingConvention(Architecture* arch, const string& name) cc.getFloatArgumentRegisters = GetFloatArgumentRegistersCallback; cc.freeRegisterList = FreeRegisterListCallback; cc.areArgumentRegistersSharedIndex = AreArgumentRegistersSharedIndexCallback; + cc.areArgumentRegistersUsedForVarArgs = AreArgumentRegistersUsedForVarArgsCallback; cc.isStackReservedForArgumentRegisters = IsStackReservedForArgumentRegistersCallback; cc.isStackAdjustedOnReturn = IsStackAdjustedOnReturnCallback; cc.isEligibleForHeuristics = IsEligibleForHeuristicsCallback; @@ -131,6 +132,13 @@ bool CallingConvention::AreArgumentRegistersSharedIndexCallback(void* ctxt) } +bool CallingConvention::AreArgumentRegistersUsedForVarArgsCallback(void* ctxt) +{ + CallingConvention* cc = (CallingConvention*)ctxt; + return cc->AreArgumentRegistersUsedForVarArgs(); +} + + bool CallingConvention::IsStackReservedForArgumentRegistersCallback(void* ctxt) { CallingConvention* cc = (CallingConvention*)ctxt; @@ -280,6 +288,12 @@ bool CallingConvention::AreArgumentRegistersSharedIndex() } +bool CallingConvention::AreArgumentRegistersUsedForVarArgs() +{ + return true; +} + + bool CallingConvention::IsStackReservedForArgumentRegisters() { return false; @@ -409,6 +423,12 @@ bool CoreCallingConvention::AreArgumentRegistersSharedIndex() } +bool CoreCallingConvention::AreArgumentRegistersUsedForVarArgs() +{ + return BNAreArgumentRegistersUsedForVarArgs(m_object); +} + + bool CoreCallingConvention::IsStackReservedForArgumentRegisters() { return BNIsStackReservedForArgumentRegisters(m_object); -- cgit v1.3.1