GCC возвращает адрес вызывающей функции в архитектуре ARM
Мне любопытно, почему __builtin_return_address() не поддерживает другие аргументы, кроме 0 в ARM?
Это проблема, почему-то вы не можете вывести адрес вызывающей функции из стека ARM?
Или что-то еще?
Также на некоторых архитектурах, включая мой любимый MIPS, работает только __builtin_return_address(0). У MIPS нет указателя на фрейм, что затрудняет переход обратно в стек. Кадр 0 может напрямую использовать регистр адреса возврата. Если ARM также не имеет указателя кадра, это объясняет ограничение.
Backtrace на ARM сложно. В наши дни функция Glibc backtrace работает, но вам нужен современный компилятор /glibc, и вам нужно построить все с помощью -funwind-tables. У GDB также есть проблемы без информации об отладке.