gcc -Q --help=optimizers
このコマンドで、どんなオプティマイズオプションがあるか、どれが有効になっているか を確認できる
$ gcc -Q --help=optimizers The following options control optimizations: -O<number> -Ofast -Og -Os -Oz -faggressive-loop-optimizations [enabled] -falign-functions [disabled] -falign-functions= -falign-jumps [disabled] (後略)
-fno-omit-frame-pointer
レジスタEBPを汎用レジスタに使わせないように指示するオプション。
レジスタEBPは本来はスタック用のポインタだけど、-O2とかの最適化オプションを指定すると勝手に使いまわされちゃって、死んだときcore見てもうまくバックトレースできないことがあって嫌なので、それを抑止する
なにも指定しないとdisabled
$ gcc -Q --help=optimizers | grep omit -fomit-frame-pointer [disabled]
-O2をつけると自動でenabledになる
$ gcc -Q --help=optimizers -O2 | grep omit -fomit-frame-pointer [enabled]
-fno-omit-frame-pointer でdisabledにおさえつける
$ gcc -Q --help=optimizers -O2 -fno-omit-frame-pointer | grep omit -fomit-frame-pointer [disabled]