我有几个x86和x64库,其中许多是汇编代码或没有可用的源代码,这些代码是为x86上的__cdecl
堆栈约定和Microsoft的x64调用约定(RCX,RDX,R8, R9)在amd64上。它们从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 ++是否有能力支持备用调用约定?
TIA !!
答案 0 :(得分:5)
正如Marc Glisee在评论中指出的那样。答案是__attribute__((ms_abi))
现在很棒。