Выравнивание компиляции функции 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: ;" ::);
Это резервирует большой кусок памяти и просто разветвляется вокруг него в коде.