Что это означает в PowerPC?

stwu      r1, -32(r1) // 32 bytes of space for this function

mflr      r0     

stw       r0, 36(r1)   //stores link register

stw       r30, 24(r1)   // ??

stw       r31, 28(r1)   // Probably makes space for r31?

mr        r31, r1       // r31 = stack pointer

Это начало этой функции, в коде выше она хранит r30 где-то в памяти, и каждая функция начинается так. Но ни r31, ни r30 не содержат никакого значения в регистрах. Какой смысл его хранить?


person user3287975    schedule 06.11.2015    source источник
comment
Возможно, установка фрейма стека. r30 и r31 могут быть возвращаемыми параметрами.   -  person Chet    schedule 06.11.2015
comment
@Chet r30 и r31 не являются возвращаемыми параметрами. r31 обычно используется, как в примере, для установки фрейма стека. Я не знаю, почему r31 получает указатель стека. Что касается r30, то он, безусловно, используется как локальная переменная позже в функции. @user3287975 user3287975 Вам следует искать информацию, связанную с ключевым словом prolog.   -  person amigadev    schedule 09.11.2015


Ответы (1)


В PowerPC ELF ABI регистры r14-r31 определены как энергонезависимые — они должны сохраняться при вызове функции. Таким образом, если функция может перезаписать содержимое любого из этих регистров, она должна сохранить их значения в прологе функции и восстановить их перед возвратом к вызывающей программе.

Таким образом, даже если ваша дизассемблированная функция еще не использовала r30 и r31, она должна сохранить их в стеке, чтобы не испортить энергонезависимое состояние вызывающей функции. Вы, вероятно, увидите использование r30 и r31 позже в функции и восстановление (из тех же мест в стеке) перед возвратом функции.

Я предполагаю, что ваша программа соответствует Power ELF ABI, так как это определяет, как используются ваши регистры.

Для получения дополнительной информации Power ELF ABI находится по адресу http://openpowerfoundation.org/technical/technical-resources/technical-specifications/ или https://www.power.org/technology-introduction/standards-specifications/ для 32-разрядных версий.

person Jeremy Kerr    schedule 09.11.2015