diff options
| author | Ryan Snyder <ryan@vector35.com> | 2021-05-28 16:35:34 -0400 |
|---|---|---|
| committer | Ryan Snyder <ryan@vector35.com> | 2021-05-28 18:01:44 -0400 |
| commit | 0732c4d3e9b24382271139c6f796d1639efb1c5d (patch) | |
| tree | 70bc863d4e1321fd2d1a5a8a1e819a00b1c6b5b7 /callingconvention.cpp | |
| parent | 4c8f4c3ddb307bfd3168cf5bd573e1dffda9629b (diff) | |
Improve calling convention support for variadic argument resolution
Diffstat (limited to 'callingconvention.cpp')
| -rw-r--r-- | callingconvention.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
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); |
