GCCはなぜビルド時の絶対パスをバイナリから消してしまうのか
Paths in Pieces
Linuxディストリビューションやパッケージマネージャは、ビルドしたバイナリにビルドマシンの絶対パスが残っていないか検査する。しかしGCCは文字列定数を16〜64バイトの断片に分割してxmm/ymmレジスタ経由でコピーするため、grepやstringsではパスが見つからない。断片は重複排除され、ときに元とは異なるパスに見えることもある。この最適化は性能面の利点がほとんどなく、バイナリの可読性やConda/Spackのパッチ処理を損なう。
GCCは文字列定数を16バイトの重なり合う2つの断片に分割し、xmmレジスタに収まるようにしてベクトル化された移動命令でstd::stringのバッファにコピーする。