2016-01-28 22 views
2

我有几个x86和x64库,其中许多是汇编代码或没有可用的源代码,它们是针对x86上的__cdecl堆栈约定和amd64上的Microsoft x64调用约定(RCX,RDX,R8,R9)而构建的。它们从COFF32转换为ELF32和COFF64转换为ELF64,并使用gcc/g ++很好地链接。 x86函数原型使用__attribute__((cdecl, regparm(0)))并完美工作。但是,默认情况下,Linux上的x64使用不同的x64调用约定(RDI,RSI,RDX,RCX,R8,R9)。我似乎无法找到如何告诉gcc/g ++使用Microsoft使用的备用x64调用约定?似乎只有两种不同的x64调用方法,我希望在gcc/g ++中存在类似__attribute__((regparm(msx64)))的东西。 gcc/g ++是否有能力支持替代调用约定?gcc/g ++是否有x64微软寄存器的调用约定?

TIA !!

+3

'__attribute __((ms_abi))''也许? –

+1

https://gcc.gnu.org/onlinedocs/gcc/x86-Function-Attributes.html –

回答

4

正如Marc Glisee在评论中指出的那样。答案是__attribute__((ms_abi))

现在很好用。

相关问题