Выравнивание компиляции функции Sparc

Я хочу, чтобы моя программа была такой, чтобы после завершения каждой функции в двоичном файле оставалось место. Так что позже, если требуется какое-то незначительное изменение, изменяется только эта функция, а дополнительное пространство выступает в качестве места для учета незначительного изменения. -falign-function может выполнять работу, но она не даст согласованного пространства. Есть ли способ сделать это? Или лучший способ сделать это?

2 ответа

Если вы используете достаточно новый компилятор, они недавно добавили новую опцию: -fprolog-pad=N а также -fprolog-pad=M,N что означает выпуск M nops перед функцией и n nops после нее.

Вы можете использовать встроенный оператор сборки, чтобы добавить серию nops в начале (или конце) каждой функции. Затем, когда вам понадобится изменить функцию, вы можете удалить некоторые из nops, чтобы сохранить общий размер функции неизменным. Например:

int foo(...) {
   __asm__ __volatile__("nop; nop; nop; nop;" ::);
   ...
}

Или вы могли бы даже зарезервировать большие куски памяти в функции примерно так:

__asm__ __volatile__("ba,a 1f; .skip 1000; 1: ;" ::);

Это резервирует большой кусок памяти и просто разветвляется вокруг него в коде.

Другие вопросы по тегам