Как отключить оптимизацию регистра указателя кадра RBP в GCC при использовании -O*?

Когда я использую gcc -O2 для оптимизации своей программы, gcc изменяет значение регистра RBP. Но я хочу сохранить его как FRAME BASE REGISTER, как это сделать?

Не тот же вопрос, что и: GCC: запретить использование некоторых регистров


person easy good bye    schedule 27.11.2014    source источник
comment
запретить использование RSP невозможно. И это не сильно связано с распределением регистров, потому что RSP и RBP не являются регистрами общего назначения.   -  person phuclv    schedule 27.11.2014
comment
Если вам действительно не нужен %rbp для какой-то другой цели, это мало что даст. С x86-64 давление регистров меньше.   -  person Brett Hale    schedule 27.11.2014
comment
Спасибо за ваши ответы, мне жаль, что я не ясно описал свой вопрос. Как сказал @Lưu Vĩnh Phúc: ключевыми словами являются трассировка кадра стека. :)   -  person easy good bye    schedule 28.11.2014


Ответы (1)


-fomit-frame-pointer включен по умолчанию на уровнях оптимизации -O, -O2, - О3, -Ос

Вам нужно использовать -fno-omit-frame-pointer

Однако причин для сохранения указателя кадра не так много, если только вы не занимаетесь отладкой и вам не нужно отслеживать кадр стека. В этом случае используйте вместо этого -Og

person phuclv    schedule 27.11.2014
comment
Спасибо, я решил свою проблему, используя -fno-omit-frame-pointer! :) Я хочу отслеживать фрейм стека в реальном времени и сохранять его в журналы, но не отлаживать, поэтому я думаю, что использование -fno-omit-frame-pointer - хороший способ. :) - person easy good bye; 28.11.2014
comment
eli.thegreenplace.net/2011/09 /06/stack-frame-layout-on-x86-64 имеет очень хорошее объяснение с цифрами. - person wcy; 29.11.2014
comment
Для perf может быть полезно использовать эффективную трассировку стека указателя кадра вместо необходимости .eh_frame раскручивать метаданные. - person Peter Cordes; 26.11.2019