有没有人有任何证据表明当前 GCC 以非平凡的方式引导来检测某些功能和架构的错误?或者至少指出一些文档,我可以在其中找到真正的引导技术用于检查 GCC 中的错误?
常规引导程序
- 使用GCC版本(X-1)编译GCC版本(X),调用A
- A是具有缓慢二进制文件的新编译器。
- 使用新的编译器A自行编译并生成乙
- 乙是具有快速二进制的新编译器
- 让乙自行编译并生成C
- 此时如果A没有错误,然后生成的可执行文件的二进制转储乙和C应该是一样的。
GCC 方法也将开发时使用的代码功能保持在最低限度,这样如果引导成功,您就知道至少最小的功能集是没有错误的。 (与 Clang 相反,Clang 使用更多功能只是为了通过简单的引导来增加覆盖范围)。
配置文件引导优化 boostrap
- 使用A使用标志编译自身
-fprofile-generate
并生成乙 - 使用乙编译自身(它将生成配置文件信息)
使用A使用 进行编译
-fprofile-use
并生成乙'使用乙'使用标志编译自身
-fprofile-generate
并生成C- 使用C编译自身(它将生成配置文件信息)
使用乙'使用 进行编译
-fprofile-use
并生成C'此时如果A没有错误,然后生成的可执行文件的二进制转储乙'和C'应该是一样的。
后向和前向引导程序
- 使用GCC版本X编译GCC版本(X-1)并生成A
- 然后启动常规引导程序A
- 使用A编译GCC版本X并生成D
- 定期进行引导D。
题外话:我认为如果有人创建一个 GCC 引导程序图并考虑特殊引导程序(例如跨平台构建),并快速查看引导程序失败的位置,那就太好了