Мне любопытно, почему __builtin_return_address() не поддерживает другие аргументы, кроме 0 в ARM?Проблема в том, что как-то не получается вывести адрес вызывающей функции из стека ARM?Или что-то еще?
__builtin_return_address()
Спасибо
Согласно этому посту <<a href="http://codingrelic.geekhold.com/2009/05/pre-mortem-backtracing.html" rel="noreferrer">http://codingrelic.geekhold.com/2009/05/pre-mortem-backtracing.html>,
Также на некоторых архитектурах, включая мои любимые MIPS, работает только __builtin_return_address(0).MIPS не имеет указателя кадра, что затрудняет возвращение в стек.Кадр 0 может напрямую использовать регистр обратного адреса.Если ARM также не имеет указателя кадра, это объясняет ограничение.
__builtin_return_address(0)
См. Также http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html.
Backtrace на ARM - это hard.Функция Glibc backtrace работает в наши дни, но вам нужен обновленный компилятор / glibc, и вам нужно собрать все с -funwind-tables.GDB также имеет проблемы без отладочной информации.
backtrace