From 217b4a3361cbf62020658f12efb47b8fabb6a24d Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 23 Jan 2026 18:36:13 -0500 Subject: Initial support for Go and Pascal calling conventions --- binaryninjaapi.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'binaryninjaapi.h') diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 1029d33b..70c6552f 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -17991,6 +17991,7 @@ namespace BinaryNinja { static bool IsArgumentTypeRegisterCompatibleCallback(void* ctxt, BNBinaryView* view, BNType* type); static bool IsNonRegisterArgumentIndirectCallback(void* ctxt, BNBinaryView* view, BNType* type); static bool AreStackArgumentsNaturallyAlignedCallback(void* ctxt); + static bool AreStackArgumentsPushedLeftToRightCallback(void* ctxt); static void GetCallLayoutCallback(void* ctxt, BNBinaryView* view, BNReturnValue* returnValue, BNFunctionParameter* params, size_t paramCount, bool hasPermittedRegs, uint32_t* permittedRegs, @@ -18003,6 +18004,9 @@ namespace BinaryNinja { BNValueLocation* returnValue, BNFunctionParameter* params, size_t paramCount, bool hasPermittedRegs, uint32_t* permittedRegs, size_t permittedRegCount, size_t* outLocationCount); static void FreeParameterLocationsCallback(void* ctxt, BNValueLocation* locations, size_t count); + static BNVariable* GetParameterOrderingForVariablesCallback( + void* ctxt, BNBinaryView* view, BNVariable* vars, BNType** types, size_t paramCount, size_t* outCount); + static void FreeVariableListCallback(void* ctxt, BNVariable* vars, size_t count); static int64_t GetStackAdjustmentForLocationsCallback(void* ctxt, BNBinaryView* view, BNValueLocation* returnValue, BNValueLocation* locations, BNType** types, size_t paramCount); static size_t GetRegisterStackAdjustmentsCallback(void* ctxt, BNBinaryView* view, BNValueLocation* returnValue, @@ -18061,6 +18065,7 @@ namespace BinaryNinja { bool DefaultIsArgumentTypeRegisterCompatible(Type* type); virtual bool IsNonRegisterArgumentIndirect(BinaryView* view, Type* type); virtual bool AreStackArgumentsNaturallyAligned(); + virtual bool AreStackArgumentsPushedLeftToRight(); virtual CallLayout GetCallLayout(BinaryView* view, const ReturnValue& returnValue, const std::vector& params, @@ -18069,6 +18074,8 @@ namespace BinaryNinja { virtual std::vector GetParameterLocations(BinaryView* view, const std::optional& returnValue, const std::vector& params, const std::optional>& permittedRegs = std::nullopt); + virtual std::vector GetParameterOrderingForVariables( + BinaryView* view, const std::map>& params); virtual int64_t GetStackAdjustmentForLocations(BinaryView* view, const std::optional& returnValue, const std::vector& locations, const std::vector>& types); @@ -18082,6 +18089,7 @@ namespace BinaryNinja { std::vector GetDefaultParameterLocations(BinaryView* view, const std::optional& returnValue, const std::vector& params, const std::optional>& permittedRegs = std::nullopt); + std::vector GetDefaultParameterOrderingForVariables(const std::map>& params); int64_t GetDefaultStackAdjustmentForLocations(const std::optional& returnValue, const std::vector& locations, const std::vector>& types); std::map GetDefaultRegisterStackAdjustments( @@ -18128,6 +18136,7 @@ namespace BinaryNinja { virtual bool IsArgumentTypeRegisterCompatible(BinaryView* view, Type* type) override; virtual bool IsNonRegisterArgumentIndirect(BinaryView* view, Type* type) override; virtual bool AreStackArgumentsNaturallyAligned() override; + virtual bool AreStackArgumentsPushedLeftToRight() override; virtual CallLayout GetCallLayout(BinaryView* view, const ReturnValue& returnValue, const std::vector& params, @@ -18136,6 +18145,8 @@ namespace BinaryNinja { virtual std::vector GetParameterLocations(BinaryView* view, const std::optional& returnValue, const std::vector& params, const std::optional>& permittedRegs = std::nullopt) override; + virtual std::vector GetParameterOrderingForVariables( + BinaryView* view, const std::map>& params) override; virtual int64_t GetStackAdjustmentForLocations(BinaryView* view, const std::optional& returnValue, const std::vector& locations, const std::vector>& types) override; -- cgit v1.3.1