Menu Close

4.12. 编译器和开发工具

Go Toolset rebase 到版本 1.16.7

Go Toolset 已升级至 1.16.7 版本。主要变更包括:

  • 现在,GO111MODULE 环境变量默认设置为 on。要恢复此设置,请将 GO111MODULE 更改为 auto
  • Go linker 现在使用较少的资源,提高了代码的稳健性和可维护性。这适用于所有支持的体系结构和操作系统。
  • 使用新的 嵌入 软件包,您可以在编译程序的同时访问嵌入的文件。
  • io/ioutil 软件包的所有功能都已移到 io and os 软件包中。虽然您仍然可以使用 io/ioutil,但 io and os 软件包提供更好的定义。
  • Delve 调试器已被 rebase 到 1.6.0,现在支持 Go 1.16.7 Toolset。

如需更多信息,请参阅 使用 Go Toolset

(BZ#1938071)

Rust Toolset rebase 到版本 1.54.0

Rust Toolset 已更新至 1.54.0 版本。主要变更包括:

  • Rust 标准库现在可用于 is m32-unknown-unknown 目标。在这个版本中,您可以生成 WebAssembly 二进制文件,包括新稳定的内部。
  • Rust 现在包括数组的 IntoIterator 实施。在这个版本中,您可以使用 IntoIterator 特征按值迭代数组并将数组传递给方法。但是,array.into_iter() 仍会通过引用来迭代值,直到 2021 版 Rust。
  • 或 模式的语法现在允许在 模式 中的任何位置嵌套。例如:Pattern(1|2) 而不是 Pattern(1)|Pattern(2)
  • Unicode 标识符现在可以包含 Unicode 标准 #31 中定义的所有有效标识符字符。
  • 方法和特征实施已经稳定。
  • 默认重新启用增量编译。

如需更多信息,请参阅使用 Rust Toolset

(BZ#1945805)

LLVM Toolset rebase 到版本 12.0.1

LLVM Toolset 已升级到 12.0.1 版本。主要变更包括:

  • 添加了新编译器标志 -march=x86-64-v[234]
  • Clang 编译器的编译器标志 -fasynchronous-unwind-tables 现在是 Linux AArch64/PowerPC 中的默认设置。
  • Clang 编译器现在支持 C++20 可能属性 [[类似]] 和 [[notlikely]]。
  • 添加了新函数属性 tune-cpu。它允许独立于 target-cpu 属性或 TargetMachine CPU 应用微架构优化。
  • 新的 sanitizer -fsanitize=unsigned-shift-base 已添加到整数 sanitizer -fsanitize=integer 以提高 安全性。
  • PowerPC 目标上的代码生成已被优化。
  • WebAssembly 后端现在在 LLVM 中启用。在这个版本中,您可以使用 LLVM 和 Clang 生成 WebAsembly 二进制文件。

如需更多信息,请参阅使用 LLVM Toolset

(BZ#1927937)

CMake rebase 到版本 3.20.2

CMake 从 3.18.2 改为 3.20.2。要在需要 3.20.2 或更少版本的项目上使用 CMake,请使用命令 cmake_minimum_required(版本 3.20.2)。

主要变更包括:

  • C++23 编译器模式现在可以使用目标属性 CXX_STANDARDCUDA_STANDARDOBJCXX_STANDARD 或使用编译功能中的 cxx_std_23 元功能来指定。
  • CUDA 语言支持现在允许 NVIDIA CUDA 编译器成为符号链接。
  • 现在,Intel 1API NextGen LLVM 编译器被 IntelLLVM 编译器 ID 支持。
  • CMake 现在通过与 Android NDK 的工具链文件合并,促进 Android 的交叉编译。
  • 当运行 cmake(1) 以生成项目构建系统时,未知的命令行参数以连字符开头现在将被拒绝。

有关新功能和已弃用功能的更多信息,请参阅 CMake 发行注记

(BZ#1957947)

新的 GCC 工具集 11

GCC 工具集 11 是提供开发工具最新版本的编译器工具集。它以 AppStream 存储库中的 Software Collection 的形式作为 Application Stream 提供。

从 GCC Toolset 10 开始,以下组件被 rebase:

  • GCC 到版本 11.2
  • GDB 到版本 10.2
  • Valgrind 到版本 3.17.0
  • SystemTap 到版本 4.5
  • Binutils 到 2.36 版本
  • elfutils 到版本 0.185
  • dwz 到版本 0.14
  • annobin 到版本 9.85

有关组件的完整列表,请参阅 GCC Toolset 11

要安装 GCC Toolset 11,以 root 用户身份运行以下命令:

# yum install gcc-toolset-11

要从 GCC Toolset 11 运行工具:

$ scl enable gcc-toolset-11 tool

要运行 shell 会话,GCC Toolset 11 的工具版本会覆盖这些工具的系统版本:

$ scl enable gcc-toolset-11 bash

如需更多信息,请参阅 使用 GCC Toolset

GCC Toolset 11 组件也可以在两个容器镜像中找到:

  • rhel8/gcc-toolset-11-toolchain,其中包括 GCC 编译器、GDB 调试器和 make 自动化工具。
  • rhel8/gcc-toolset-11-perftools,其中包括性能监控工具,如 SystemTap 和 Valgrind。

要拉取容器镜像,以 root 身份运行以下命令:

# podman pull registry.redhat.io/<image_name>

请注意,现在只支持 GCC Toolset 11 容器镜像。之前 GCC Toolset 版本的容器镜像已弃用。

(BZ#1953094)

.NET 更新至 6.0 版本

Red Hat Enterprise Linux 8.5 带有 .NET 版本 6.0。主要改进包括:

  • 支持 64 位 Arm(aarch64)
  • 支持 IBM Z 和 LinuxONE(s390x)

如需更多信息,请参阅 .NET 6.0 RPM 软件包 的发行说明和 .NET 6.0 容器 的发行注记。

(BZ#2022794)

GCC Toolset 11:GCC rebase 到版本 11.2

在 GCC Toolset 11 中,GCC 软件包已更新至版本 11.2。重要的程序错误修复和增强包括:

常规改进

  • GCC 现在默认为 DWARF Version 5 调试格式。
  • 诊断中显示的列号默认代表实际列号,并遵循多列字符。
  • 直线代码向量化时会考虑整个函数。
  • 如果匹配同一变量的系列条件表达式各自包含比较表达式,则可以转换为 switch 语句。
  • 流程优化改进:

    • 新的 IPA-modref 直通由 -fipa-modref 选项控制,可跟踪函数调用的副作用,并提高点分析的准确性。
    • 相同的代码折叠通过由 -fipa-icf 选项控制,极大改进,以增加统一功能的数量并减少编译时间内存使用。
  • 链接时间优化改进:

    • 改进了链接期间的内存分配,以减少峰值内存使用。
  • 通过使用 IDE 中的新 GCC_EXTRA_DIAGNOSTIC_OUTPUT 环境变量,您可以在不调整构建标志的情况下请求机器可读的"fix-it hints"。
  • 静态分析器通过 -fanalyzer 选项运行,提供的很多程序错误修复和增强功能得到了显著改进。

特定于语言的改进

c 系列

  • C 和 C++ 编译器支持 OpenMP 结构中的非循环嵌套以及 OpenMP 5.0 规范的分配器例程。
  • 属性:

    • 新的 no_stack_protector 属性标记不应通过堆栈保护来检测的功能(-fstack-protector)。
    • 改进后的 malloc 属性可用于识别分配器和经销商 API 对。
  • 新警告:

    • -Wsizeof-array-div-Wall 选项启用,当第一个 运算符应用到数组时,会警告对两个大小 运算符的划分,并且 devisor 不等于数组元素的大小。
    • -Wstringop-overread (默认启用)会警告对字符串函数的调用,这些函数试图读过作为参数传递给它们的阵列的末尾。
  • 增强的警告:

    • -Wfree-nonheap-object 使用从动态内存分配功能返回的指针检测更多调用功能实例。
    • -Wmaybe-uninitialized 将指针的传递和引用未初始化内存的传递诊断为采用 const-qualified 参数的功能。
    • -Wuninitialized 检测来自未初始化动态分配的内存的读取。

C

  • 通过 -std=c2x 和 -std=c2x 和 -std=gnu2x 选项支持即将推出的 ISO C2 X 标准中的几个新功能。例如:

    • 标准属性被支持。
    • 支持 __has_c_attribute 预处理器运算符。
    • 标签可能会在声明之前和复合语句的末尾出现。

C++

  • 默认模式更改为 -std=gnu++17
  • C++ 库 libstdc++ 现在改进了 C++17 支持。
  • 实施了几个新的 C++20 功能。请注意,C++20 支持是实验性的。

    有关功能的更多信息,请参阅 C++20 语言功能

  • C++ 前端对即将到来的 C++23 草案功能具有实验性支持。
  • 新警告:

    • -Wctad-maybe-unsupported, 默认禁用,警告在类型上执行类模板参数,且无滥用指南。
    • 当基于范围的 for 循环创建不必要的和资源低效副本时,由 -Wall 启用的 - Wrange-loop-construct 将发出警告。
    • -Wmismatched-new-delete-Wall 启用,警告有关使用从不匹配运算符的新形式的返回或从其他不匹配分配功能返回的调用 operator 删除的指针。
    • -Wvexing-parse 默认启用,警告大多数 vexing 解析规则:当声明看起来类似于变量定义时,但 C++ 语言要求将它解释为函数声明。

特定于架构的改进

64 位 ARM 架构

  • Armv8-R 架构通过 -march=armv8-r 选项受到支持
  • GCC 可在复杂数字上自动执行添加、减法、乘法和累积变量和减去变体。

AMD 和 Intel 64 位构架

  • 支持以下 Intel CPU:sapphire 快速、Alder Lake 和 Rocket Lake.
  • 添加了 Intel AVX-VNNI 的新 ISA 扩展支持。-mavxvnni 编译器交换机控制 AVX-VNNI 内部。
  • 新的 -march=znver3 选项支持基于 znver3 核心的 AMD CPU。
  • x86-64 psABI 补充 中定义的三个微架构级别受全新 -march=x86-64-v2、- march=x86-64-v3-march=x86-64-v4 选项的支持。

(BZ#1946782)

GCC Toolset 11: dwz 现在支持 DWARF 5

在 GCC Toolset 11 中,sdwz 工具现在支持 DWARF 版本 5 调试格式。

(BZ#1948709)

GCC Toolset 11:GCC 现在支持 AIA 用户中断

在 GCC Toolset 11 中,GCC 现在支持加速器交互架构(AIA)用户中断。

(BZ#1927516)

GCC Toolset 11:改进了通用 SVE 调整默认值

在 GCC Toolset 11 中,在 64 位 ARM 架构中改进了通用 SVE 调优默认值。

(BZ#1979715)

SystemTap rebase 到版本 4.5

SystemTap 软件包已更新至版本 4.5。重要的程序错误修复和增强包括:

  • 32 位浮点变量自动转换为双变量,因此可作为 $context 变量直接访问。
  • 数值 可以作为 $context 变量访问。
  • BPF uconversions tapset 已扩展,包含更多 tapset 功能来访问用户空间中的值,如 user_long_error( )。
  • 并发控制得到了显著改进,以在大型服务器上提供稳定的操作。

如需更多信息,请参阅上游 SystemTap 4.5 发行注记

(BZ#1933889)

elfutils rebase 到版本 0.185

The elfutils 软件包已更新至版本 0.185。重要的程序错误修复和增强包括:

  • The eu-elflint and eu-readelf 工具现在识别和显示 ELF 部分上的 SHF_GNU _RETAIN 和 SHT_X86_64_UNWIND 标志。
  • DEBUGINFOD_SONAME 宏已添加到 debuginfod.h。此宏可与 dlopen 功能一起使用,以从应用程序动态加载 libdebuginfod.so 库。
  • debuginfod -client 库中添加了新的功能 debuginfod _set_verbose_fd。此功能通过将详细输出重定向到单独的文件来增强 debuginfod_find_* 查询功能。
  • 设置 DEBUGINFOD_VERBOSE 环境变量现在显示有关 调试信息客户端 连接到哪些服务器以及这些服务器的 HTTP 响应的更多信息。
  • debuginfod 服务器提供了一个新的 thread-busy 指标和更详细的错误指标,以便更轻松地检查 debuginfod 服务器上运行的进程。
  • libdw 库现在透明地处理 DW_FORM_indirect 位置值,以便 dwarf_whatform 函数返回属性的实际 FORM。
  • 为减少网络流量,debug infod-client 库在缓存中存储负结果,客户端对象可以重复使用现有连接。

(BZ#1933890)

Valgrind 被 rebase 到版本 3.17.0

Valgrind 软件包已更新至版本 3.17.0。重要的程序错误修复和增强包括:

  • Valgrind 可以读取 DWARF 版本 5 调试格式。
  • Valgrind 支持对 debuginfod 服务器的调试查询。
  • ARMv8.2 处理器说明受到部分支持。
  • POWER10 处理器上的 Power ISA v.3.1 指令被部分支持。
  • 支持 IBM z14 处理器说明。
  • 大多数 IBM z15 指令都受到支持。Valgrind 工具套件支持用于 IBM z15 处理器的多路结构工具 3 和向量增强功能 2。因此,Valgrind 运行使用 GCC -march=z15 编译的程序,并改进性能和调试体验。
  • --track-fds=yes 选项练习 -q (--quiet),并且默认忽略标准文件描述符 stdinstdout stderr。要跟踪标准文件描述符,请使用 --track-fds=all 选项。
  • DHAT 工具有两种新的操作模式:-- mode=copy--mode=ad-hoc

(BZ#1933891)

Dyninst rebase 到版本 11.0.0

Dyninst 软件包已更新至版本 11.0.0。重要的程序错误修复和增强包括:

  • 支持 debuginfod 服务器以及获取单独的 debuginfo 文件。
  • 改进了对过程表(PLT)存根的间接调用的检测。
  • 改进了 C++ 名称解译.
  • 修复了代码发送过程中内存泄漏的问题。

(BZ#1933893)

IBM POWER10 上的 GDB 改进了 DAWR 功能

在这个版本中,为 IBM POWER10 处理器中的 GDB 启用新的硬件监视器功能。例如,添加了一组新的 DAWR/DAWRX 寄存器。

(BZ#1854784)

GCC Toolset 11:GDB rebase 到版本 10.2

在 GCC Toolset 11 中,GDB 软件包已更新至版本 10.2。重要的程序错误修复和增强包括:

新特性

  • 在支持此功能的架构上默认启用多线程符号加载。这一更改为带有许多符号的程序提供更好的性能。
  • 文本用户界面(TUI)窗口可以水平排列。
  • GDB 支持同时调试多个目标连接,但这种支持是实验性的且有限的。例如,您可以将每个低端连接到另一台计算机上运行的不同远程服务器,也可以使用一个低端调试本地原生进程、核心转储或某些其他进程。

新的改进的命令

  • new tui new-layout name 窗口权重 [窗口 weight…] 命令 创建一个新的文本用户界面(TUI)布局,您也可以指定布局名称和显示窗口。
  • 改进的 别名 [-a] [--] alias = command [default-args] 命令可以在创建新别名时指定默认参数。
  • set exec-file-mismatchshow exec-file-mismatch 命令集,并显示新的 exec-file-mismatch 选项。当 GDB 附加到正在运行的进程时,此选项控制 GDB 如何响应 GDB 检测到当前由 GDB 加载的可执行文件和用于启动该进程的可执行文件不匹配的情况。

Python API

  • gdb.register_window_type 功能在 Python 中实施新的 TUI 窗口。
  • 现在,您可以查询动态类型。gdb.Type 类的实例可以具有新的布尔值属性 动态gdb.Type.sizeof 属性的值则可为动态类型提供 None。如果 Type.fields() 返回动态类型字段,则其 bitpos 属性的值可以是 None
  • 新的 gdb.COMMAND_TUI 常量注册 Python 命令作为 TUI 帮助类命令的成员。
  • 新的 gdb.PendingFrame.architecture() 方法检索待处理帧的架构。
  • 新的 gdb.Architecture.registers 方法返回 gdb.RegisterDescriptorIterator 对象,后者是返回 gdb.RegisterDescriptor 对象的迭代 器。此类对象不提供寄存器的值,但可帮助了解哪些寄存器可用于某一架构。
  • 新的 gdb.Architecture.register_groups 方法返回 gdb.RegisterGroupIterator 对象,这是返回 gdb.RegisterGroup 对象的迭代 器。此类对象有助于了解哪些寄存器组可用于某一架构。

(BZ#1954332)

GCC Toolset 11:SystemTap rebase 到版本 4.5

在 GCC Toolset 11 中,SystemTap 软件包已更新至版本 4.5。重要的程序错误修复和增强包括:

  • 32 位浮点变量现在自动转换为双变量,因此可以作为 $context 变量直接访问。
  • 现在可以作为 $context 变量访问 枚举 值。
  • BPF uconversions tapset 已扩展,现在包括更多 tapset 功能来访问用户空间中的值,如 user_long_error( )。
  • 并发控制得到了显著改进,以在大型服务器上提供稳定的操作。

如需更多信息,请参阅上游 SystemTap 4.5 发行注记

(BZ#1957944)

GCC Toolset 11: elfutils rebase 到版本 0.185

在 GCC Toolset 11 中,elfutils 软件包已更新至版本 0.185。重要的程序错误修复和增强包括:

  • The eu-elflint and eu-readelf 工具现在识别和显示 ELF 部分上的 SHF_GNU _RETAIN 和 SHT_X86_64_UNWIND 标志。
  • DEBUGINFOD_SONAME 宏已添加到 debuginfod.h。此宏可与 dlopen 功能一起使用,以从应用程序动态加载 libdebuginfod.so 库。
  • debuginfod -client 库中添加了新的功能 debuginfod _set_verbose_fd。此功能通过将详细输出重定向到单独的文件来增强 debuginfod_find_* 查询功能。
  • 设置 DEBUGINFOD_VERBOSE 环境变量现在显示有关 调试信息客户端 连接到哪些服务器以及这些服务器的 HTTP 响应的更多信息。
  • debuginfod 服务器提供了一个新的 thread-busy 指标和更详细的错误指标,以便更轻松地检查 debuginfod 服务器上运行的进程。
  • libdw 库现在透明地处理 DW_FORM_indirect 位置值,以便 dwarf_whatform 函数返回属性的实际 FORM。
  • debuginfod-client 库现在在缓存中存储负结果,客户端对象可以重复使用现有连接。这样,在使用库时不必要的网络流量会被阻止。

(BZ#1957225)

GCC Toolset 11:Valgrind 被 rebase 到版本 3.17.0

在 GCC Toolset 11 中,Valgrind 软件包已更新至 3.17.0 版本。重要的程序错误修复和增强包括:

  • Valgrind 现在可读取 DWARF Version 5 调试格式。
  • Valgrind 现在支持对 debuginfod 服务器的调试查询。
  • Valgrind 现在部分支持 ARMv8.2 处理器指令。
  • Valgrind 现在支持 IBM z14 处理器指令。
  • Valgrind 现在部分支持 POWER10 处理器上的 Power ISA v.3.1 指令。
  • --track-fds=yes 选项 现在遵循 -q (--quiet),并默认忽略标准文件描述符 stdinstdout stderr。要跟踪标准文件描述符,请使用 --track-fds=all 选项。
  • DHAT 工具现在有两种新的操作模式:-- mode=copy--mode=ad-hoc

(BZ#1957226)

GCC Toolset 11:Dyninst rebase 到版本 11.0.0

在 GCC Toolset 11 中,Dyninst 软件包已更新至版本 11.0.0。重要的程序错误修复和增强包括:

  • 支持 debuginfod 服务器以及获取单独的 debuginfo 文件。
  • 改进了对过程表(PLT)存根的间接调用的检测。
  • 改进了 C++ 名称解译.
  • 修复了代码发送过程中内存泄漏的问题。

(BZ#1957942)

添加了对 Fujitsu A64FX 的 PAPI 库支持

添加了对 Fujitsu A64FX 的 PAPI 库支持。通过此功能,开发人员可以收集硬件统计信息。

(BZ#1908126)

PCP 软件包被 rebase 到 5.3.1

Performance Co-Pilot(PCP)软件包已更新至版本 5.3.1。此发行版本包括程序错误修正、增强功能和新功能。主要变更包括:

  • 可扩展性改进,现在支持为数百台主机(pmlogger 场)集中记录性能指标,并使用性能规则(pmie 场)自动监控。
  • 解决了 pmproxy 服务和 libpcp_web API 库中的内存泄漏,并为 pmproxy 添加了工具和新指标
  • 新的 pcp-ss 工具,用于历史套接字统计信息。
  • pcp-htop 工具的改进.
  • 扩展到 over-wire PCP 协议,现在支持更高的分辨率时间戳。

(BZ#1922040)

The grafana 软件包被 rebase 到版本 7.5.9

The grafana 软件包已更新至 7.5.9 版本。主要变更包括:

  • 新时间序列面板(beta)
  • 新饼图面板(beta)
  • 警报支持 Loki
  • 多个新的查询转换

如需更多信息,请参阅 Grafana v7.4 中的新功能,Grafana v7.5 中的新功能

(BZ#1921191)

The grafana-pcp 软件包被 rebase 到 3.1.0

The grafana-pcp 软件包已 rebase 到版本 3.1.0。主要变更包括:

  • Performance Co-Pilot(PCP)Vector Checklist 仪表板使用新的时间序列面板,以图形显示单位并包含更新的帮助文本。
  • pmproxy URL 和 hostspec 变量添加到 PCP Vector Host Overview 和 PCP Checklist 仪表板.
  • 所有控制面板都显示数据源选择。
  • 将所有包含的仪表板标记为只读。
  • 添加与 Grafana 8 的兼容性。

(BZ#1921190)

grafana-container rebase 到版本 7.5.9

rhel8/grafana 容器镜像提供 Grafana。主要变更包括:

  • The grafana 软件包现在更新至 7.5.9 版本。
  • The grafana-pcp 软件包现在更新至 3.1.0 版本。
  • 容器现在支持 GF_INSTALL_PLUGINS 环境变量在容器启动时安装自定义 Grafana 插件

rebase 更新 Red Hat Container Registry 中的 rhel8/grafana 镜像。

要拉取此容器镜像,请执行以下命令:

# podman pull registry.redhat.io/rhel8/grafana

(BZ#1971557)

pcp-container rebase 到版本 5.3.1

rhel8/pcp 容器镜像提供 Performance Co-Pilot。pcp-container 软件包已升级到 5.3.1 版本。主要变更包括:

  • pcp 软件包现在更新至版本 5.3.1。

rebase 更新 Red Hat Container Registry 中的 rhel8/pcp 镜像。

要拉取此容器镜像,请执行以下命令:

# podman pull registry.redhat.io/rhel8/pcp

(BZ#1974912)

新的 pcp-ss PCP 工具现在可用

pcp-ss PCP 实用程序报告由 pmdasockets(1) PMDA 收集的套接字统计信息。命令与许多 ss 命令行选项和报告格式兼容。它还提供了实时模式和历史重播中本地或远程监控的优势,以及之前记录的 PCP 存档的优势。

(BZ#1879350)

PCP 中现在提供了功耗指标

新的 pmda-denki 性能指标域代理(PMDA)报告与功耗相关的指标。具体来说,它会报告:

  • 基于运行平均电源限制(RAPL)读数的消耗指标,可在最新的 Intel CPU 上使用
  • 基于电池的消费指标,可在有电池的系统上使用

(BZ#1629455)