Как получить возвращаемое значение, используя __cyg_profile_func_exit? - PullRequest
2 голосов
/ 20 августа 2009

Используя флаг инструментов-функций в gcc, вы можете настроить код для выполнения функций до и после каждого выполнения функции. Этими функциями являются __cyg_profile_func_enter и __cyg_profile_func_exit с двумя параметрами, адресом текущей функции; вторым параметром для ввода является адрес сайта вызова, а для выхода - адрес, с которого он возвращается.

Есть ли способ получить значение, которое фактически было возвращено инструментированной функцией?

1 Ответ

1 голос
/ 20 августа 2009

Насколько я знаю (и ни в коем случае не цитируйте меня об этом), чтобы получить возвращаемое значение, используя __cyg_profile_func_exit, нам нужно установить наш флаг оптимизации на -O0, iirc, он не работает со степенями оптимизация выше этого из-за того, что -O0 сохраняет возвращаемое значение в ebx, а более высокие флаги оптимизации сохраняют возвращаемое значение в eax; после этого звоню. Таким образом, чтобы избежать гибели ebx с помощью инструментария, мы сохраняем его при входе в функцию и восстанавливаем его при отделении.

Надеюсь, это поможет, удачи.

...