Какое соглашение о вызовах это в Linux? - PullRequest
0 голосов
/ 07 января 2012

У меня есть функция в программе, вызываемой этой сборкой:

push xxx
push xxx
call xxx
add esp, xxx

Из того, что я знаю, эта функция имеет cdecl соглашение о вызовах.В GCC я использую __attribute__((cdecl)), чтобы заставить другую функцию действовать так же, как и вышеупомянутая функция.

Но когда я отлаживал ее, эта сборка была показана:

push xxx
push xxx
call xxx

нет add esp, xxx!

Какое соглашение о вызовах следует использовать для создания одной и той же сборки?

1 Ответ

4 голосов
/ 07 января 2012

Я сомневаюсь, что это как-то связано с соглашениями о вызовах, и, скорее всего, это связано с оптимизацией компилятора, такой как «defer-pop» (где компилятор будет ждать, пока не извлечет стек позже)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...