2016-01-28 6 views
2

У меня есть несколько x86 и x64-библиотек, многие из которых являются ассемблерным кодом или не доступны для источника, которые построены для соглашения о статусе __cdecl на x86 и соглашения о назначении Microsoft x64 (RCX, RDX, R8, R9) на amd64. Они были преобразованы из COFF32 в ELF32 и COFF64 в ELF64, а ссылка - с использованием gcc/g ++. Прототипы функций x86 используют __attribute__((cdecl, regparm(0))) и работают отлично. Однако по умолчанию x64 в Linux использует другое соглашение о вызове x64 (RDI, RSI, RDX, RCX, R8, R9). Кажется, я не могу найти, как сообщить gcc/g ++ использовать альтернативное соглашение об использовании x64, которое использует Microsoft? Кажется, существуют только два разных метода вызова x64, и я надеялся, что в gcc/g ++ существует что-то вроде __attribute__((regparm(msx64))). Имеет ли gcc/g ++ возможность поддерживать альтернативный вызов?Имеет ли gcc/g ++ соглашение о вызове для x64-регистров Microsoft?

TIA !!

+3

'__attribute __ ((ms_abi))' может быть? –

+1

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

ответ

4

As Marc Glisee указатель в комментариях. Ответ __attribute__((ms_abi))

Отлично работает.