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 также есть проблемы без информации об отладке.