2016-01-28 23 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))

現在很好用。

相關問題