В процессе программирования модулей ядра Linux нередко приходится прибегать к помощи ассемблера. Традиционно разработчики ядра используют встроенный ассемблер GCC (который по сути является шлюзом в GAS), но у этого подхода есть куча недостатков, что вызывает желание использовать посторонний ассемблер и раздельную трансляцию. Кстати, знаменитый Свен
(
Read more... )
Comments 5
extern int CDECL madd(int, int);
Reply
Компилятор выдаёт предупреждение (не ошибку), что ему неизвестен символ перед madd (при этом не уточняет, какой именно) и он использует дефолтный int в прототипе, ну а дальше компилирует с передачей чисел через регистры((((
Reply
CDECL поддерживается только в x86_32 (gcc -m32).
В x64 под Линуксом gcc поддерживает только System V AMD64 ABI.
Аттрибут ms_abi игнорируется.
https://gcc.gnu.org/onlinedocs/gcc/x86-Function-Attributes.html#x86-Function-Attributes
https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI
Reply
Может дело в синтаксисе атрибутов?
Я просто ранее никогда их не использовал и несколько "плаваю".
Через Вашу первую ссылку заглянул на
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes
и там почему то атрибуты пишутся после аргументов функции.
И попробовать пока не могу - на работе под виндой сижу)))
Reply
Leave a comment