Linux x86/x86_64 内核的编译要求最低编译器版本为 GCC 8,而 Linux 6.16 也对所有其他架构都提出了同样的要求。所有 Linux 内核架构的 GCC 8 和 GNU Binutils 2.30 基准现在允许从代码库中删除一些旧的变通方法。
Linus Torvalds 今天合并了这一变更,强制要求编译 Linux 内核所需的 GNU 编译器集合版本至少使用 GCC 8。GCC 8 最低版本取代了之前的 GCC 5 最低版本要求。GNU Binutils 基准版本从 v2.25 升级到 v2.30。LLVM Clang 13 及更新版本仍然是编译 Linux 内核的 GCC 替代方案。
Arnd Bergmann 在Git 合并 中阐述了提高 GCC 基准的理由:
需要 gcc-8 和 binutils-2.30x86 已使用 gcc-8 作为最低版本,这将使所有其他体系结构更改为同一版本。Debian 10 和 Red Hat Enterprise Linux 8 使用 gcc-8,这两个系统仍然受支持,binutils 2.30 是它们对应的最旧版本。Ubuntu Pro 18.04 和 SUSE Linux Enterprise Server 15 都使用 gcc-7 作为系统编译器,但还包含仍然受支持的工具链。
使用新的最低工具链版本,可以放弃许多针对旧版本的解决方法,尤其是在 x86_64 和 arm64 上。重要的是,更新的编译器版本允许删除剩余的五个 gcc 插件中的两个,因为现代编译器版本已经包含对 sancov 和 structleak 特性的支持。
我尝试收集基于新工具链版本可能出现的已知更改,但预计还会进行更多清理。
与此变化合并后,内核中已经删除了 600 多行代码,从而能够消除 GCC8 之前的旧解决方法。