GCC возвращает адрес вызывающей функции в архитектуре ARM

Мне любопытно, почему __builtin_return_address() не поддерживает другие аргументы, кроме 0 в ARM? Это проблема, почему-то вы не можете вывести адрес вызывающей функции из стека ARM? Или что-то еще?

Спасибо

Ответы

Ответ 1

В соответствии с этим сообщением < http://codingrelic.geekhold.com/2009/05/pre-mortem-backtracing.html > ,

Также на некоторых архитектурах, включая мой любимый MIPS, работает только __builtin_return_address(0). У MIPS нет указателя на фрейм, что затрудняет переход обратно в стек. Кадр 0 может напрямую использовать регистр адреса возврата. Если ARM также не имеет указателя кадра, это объясняет ограничение.

См. также http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html.

Ответ 2

Backtrace на ARM сложно. В наши дни функция Glibc backtrace работает, но вам нужен современный компилятор /glibc, и вам нужно построить все с помощью -funwind-tables. У GDB также есть проблемы без информации об отладке.