Я упомянул, что инструментальные средства ARM могут генерировать разные пролог функций. Фактически, я увидел два obj файла (vmlinux) с совершенно разными прологами функций:
Первый случай выглядит так:
push {some registers maybe, fp, lr} (lr ommited in leaf function)
Второй случай выглядит так:
push {some registers maybe, fp, sp, lr, pc} (i can confuse the order)
Так как я вижу, что второй добавляет дополнительно pc и sp. Кроме того, я видел некоторые комментарии в утилите crash (проект kdump), где было указано, что стекный фрейм ядра должен иметь формат {..., fp, sp, lr, pc}, что путают меня больше, потому что я вижу, что в некоторых случаях это не правда.
1.) Как я понял, что некоторые дополнительные gcc-флаги необходимы для толкания дополнительно pc и sp в функции proog? Если да, то каковы они?
2.) Для чего это используется? В принципе, поскольку я понимаю, что могу разматывать стек только с FP и LR, зачем мне эти дополнительные значения?
3.) Если это ничего не болит с флагами компиляции - как я могу заставить генерацию этой расширенной функции пролога и снова в чем цель?
Спасибо.