搜索

4.13. 编译器和开发工具

download PDF

新的 glibc 选项,以影响 IBM Z 上优化的日常使用情况

在 IBM Z 构架上,glibc 库根据硬件功能(如 hwcapsstfle 位)选择功能实现。有了此更新,您可以通过设置 glibc.cpu.hwcaps 可调项来指导库所做的选择。

Bugzilla:2169978[1]

改进了 glibc 中基于 Intel® Xeon® v5 硬件的字符串和内存例程性能

在以前的版本中,glibc 用于字符串和内存例程的默认缓存量导致在基于 Intel® Xeon® v5 的系统上性能低于预期。有了此更新,要使用的缓存量已被调整,以提高性能。

Bugzilla:2213907

系统 GCC 编译器更新至版本 11.4.1

GNU Compiler Collection (GCC) 提供用于使用 C、C++ 和 Fortran 编程语言开发应用程序的工具。

系统 GCC 编译器已更新至版本 11.4.1,其中包括上游 GCC 中提供的大量 bug 修复和增强。

有关使用信息,请参阅 RHEL 9 中开发 C 和 C++ 应用程序

Bugzilla:2193180

GCC 现在支持保留寄存器参数

有了此更新,您可以将参数寄存器内容存储到堆栈,并产生合适的 Call Frame Information (CFI),以允许 unwinder 找到它,而不会对性能产生负面影响。

Bugzilla:2168204[1]

64 位 Intel 构架上 GCC 中的一个新的 -mdaz-ftz 选项

64 位 Intel 架构上的 GNU Compiler Collection (GCC)的系统版本现在支持 -mdaz-ftz 选项,来在 MXCSR 控制和状态寄存器中启用 flush-to-zero (FTZ)和 denormals-are-zero (DAZ)标志。

Bugzilla:2208908

新的 GCC Toolset 13

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

GCC 编译器已更新至版本 13.1.1,它提供上游 GCC 中提供的很多 bug 修复和增强。

GCC Toolset 13 提供了以下工具和版本:

工具版本

GCC

13.1.1

GDB

12.1

binutils

2.40

dwz

0.14

annobin

12.20

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

# dnf install gcc-toolset-13

要运行 GCC Toolset 13 中的工具:

$ scl enable gcc-toolset-13 tool

要运行一个 shell 会话,其中 GCC Toolset 13 中的工具版本会覆盖这些工具的系统版本:

$ scl enable gcc-toolset-13 bash

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

Bugzilla:2171919[1], Bugzilla:2171930

GCC Toolset 13:GCC rebase 到版本 13.1.1

在 GCC Toolset 13 中,GNU Compiler Collection (GCC)已更新至版本 13.1.1.。主要变更包括:

常规改进

  • OpenMP:

    • OpenMP 5.0: Fortran 现在支持一些非矩形循环嵌套。GCC 11 中添加了对 C/C++ 的此类支持。
    • 添加了许多 OpenMP 5.1 功能。
    • 添加了对 OpenMP 5.2 功能的初始支持。
  • 现在提供了一个新的调试信息压缩选项值 -gz=zstd
  • -Ofast-ffast-math-funsafe-math-optimizations 选项不再添加启动代码,以在使用 -shared 选项生成一个共享对象时更改浮点环境。
  • GCC 现在可以使用 Static Analysis Results Interchange Format (SARIF)发出其诊断,此格式是一种适合捕获静态分析工具(如 GCC 的 -fanalyzer)结果的基于 JSON 的格式。您还可以使用 SARIF 来捕获机器可读格式的其他 GCC 警告和错误。
  • 实现了链接时优化改进。

新语言和特定语言的改进

C 系列:

  • 新的 -Wxor-used-as-pow 选项会警告用户使用专用或(^)运算符时可能指的是求幂。
  • 为记录是文件描述符的 int 参数添加了三个新的函数属性:

    • attribute((fd_arg(N)))
    • attribute((fd_arg_read(N)))
    • attribute((fd_arg_write(N)))

    -fanalyzer 也使用这些属性来检测文件描述符的滥用。

  • 已为 C++23 可移植假设添加了一个新的语句属性attribute((assume(EXPR)));。属性在 C 或更早的 C++ 中也被支持。
  • GCC 现在可以控制何时将一个结构的尾部数组视为一个灵活的数组成员,以便访问此类数组的元素。默认情况下,聚合中的所有尾部数组都被视为灵活的数组成员。使用新的命令行选项 -fstrict-flex-arrays 控制哪些数组成员被视为灵活的数组。

C:

  • 实现了几个 C23 功能:

    • 引入了 nullptr 常量。
    • 增强了枚举来指定底层类型。
    • 对可变参数列表的要求已经放宽。
    • 引入了 auto 功能,以启用对象定义的类型推断。
    • 为对象定义引入了 constexpr 指定符。
    • 为复合字面引入了存储类指定符。
    • 引入了typeof 对象(以前作为扩展支持)和 typeof_unqual 对象。
    • 添加了新的关键字:alignasalignof ,bool,false,static_assert,thread_localtrue
    • 添加了 [[noreturn]] 属性,以指定函数不向其调用者返回执行。
    • 添加了对空初始化器大括号的支持。
    • 添加了对 STDC_VERSION keyring_H 标头版本宏的支持。
    • 删除了 ATOMIC_VAR_INIT 宏。
    • <stddef.h> 标头添加了 unreachable 宏。
    • 删除了三角图。
    • 删除了非原型函数。
    • 通过 %wN-Wformat 选项和 %wfN 格式长度修饰符添加了 printfscanf 格式检查。
    • 添加了对 Unicode Standard Annex (UAX) 31 的标识符语法的支持。
    • C23 中采用的现有功能已被调整以遵循 C23 要求,且没有使用 -std=c2x -Wpedantic 选项进行诊断。
  • 新的 -Wenum-int-mismatch 选项会警告枚举类型和整数类型之间的不匹配。

C++:

  • 通过 -fexcess-precision 选项实现了超精度支持。它默认在严格的标准模式下启用,如 -std=c++17,其中其默认为 -fexcess-precision=standard。在 GNU 标准模式中,如 -std=gnu++20,它默认为 -fexcess-precision=fast,其恢复之前的行为。

    -fexcess-precision 选项会影响以下构架:

    • 在某些情况下,在使用 x87 数学的 Intel 32 和 64 位的 Motorola 68000 上,其中 floatdouble 表达式以 long double 精度评估。
    • 64 位 IBM Z 系统,其中float表达式以 double 精度评估。
    • 支持 std::float16_tstd::bfloat16_t 类型的几个架构,其中这些类型以float精度评估。
  • 改进了对 C++23 的实验性支持,包括:

    • 添加了对复合语句末尾的标签的支持。
    • 添加了一个类型 trait 来检测绑定到临时对象的引用。
    • 重新引入对易失性复合操作的支持。
    • 添加了对 #warning 指令的支持。
    • 添加了对分隔的转义序列的支持。
    • 添加了对命名的通用字符转义的支持。
    • char8_t 类型添加了兼容性和可移植性修复。
    • 添加了静态 operator() 函数对象。
    • 简化的隐式移动。
    • 在表达式中重写等式现在不再是一个突破性的变化。
    • 删除了不可编码的宽字符量和宽多字符量。
    • 放宽了一些 constexpr 函数限制。
    • 扩展的浮点类型和标准名称。
    • 实现了可移植假设。
    • 添加了对 UTF-8 作为可移植源文件编码标准的支持。
    • 添加了对静态 operator[] 子脚本的支持。
  • 新警告:

    • 当值通过 std::move 移动到其自身时,-Wself-move 会发出警告。
    • 当参考绑定到其生命周期已结束的临时对象时,-Wdangling-reference 会发出警告。
    • -Wpessimizing-move-Wredundant-move 警告已扩展到在更多上下文中进行警告。
  • 新的 -nostdlib++ 选项启用了与 g++ 的链接,而没有 C++ 标准库中的隐式链接。

libstdc++ 运行时库的更改

  • 改进了对 C++20 的实验性支持,包括:

    • 添加了 <format> 标头和 std::format 函数。
    • <chrono>表头中添加了对 std::chrono::utc_clock 时钟、其他时钟、时区和 std::format 函数的支持。
  • 改进了对 C++23 的实验性支持,包括:

    • 添加到 <ranges> 标头:view::zip,views::zip_transform,views::adjacent,views::adjacent_transform,views::pairwise,views::slide,views::chunk,views::chunk_by,views::repeat, views::chunk_by,views::cartesian_product,views::as_rvalue,views::enumerate,views::as_const.
    • 添加到 <algorithm> 标头:ranges::contains,ranges::contains_subrange,ranges::iota,ranges::find_last,ranges::find_last_if,ranges::find_last_if_not,ranges::fold_left,ranges::fold_left_first, ranges::fold_right,ranges::fold_right_last,ranges::fold_left_with_iter,ranges::fold_left_first_with_iter.
    • std::expected 类模板的一元操作的支持。
    • std::bitsetstd::to_charsstd::from_chars 函数中添加了 constexpr 修饰符。
    • 添加了对扩展的浮点类型的库支持。
  • 添加了对 Library Fundamentals Technical Specification (TS)版本 3 中<experimental/scope>标头的支持。
  • 添加了对 Concurrency TS 版本 2 中<experimental/synchronized_value>标头的支持 。
  • 添加了对 freestanding 模式下许多以前不可用功能的支持。例如:

    • std::tuple 类模板现在可用于独立编译。
    • libstdc++ 库向独立子集中添加了组件,如 std::arraystd::string_view
    • libstdc++ 库现在遵循 -ffreestanding 编译器选项,因此它不再需要构建一个 libstdc++ 库的独立安装。使用 -ffreestanding 编译会将可用的功能限制到独立的子集,即使 libstdc++ 库是作为一个完整的托管实现构建。

新目标和特定于目标的改进

64 位 ARM 架构:

  • 添加了对 -march= 选项的 armv9.1-aarmv9.2-aarmv9.3-a 参数的支持。

32 位和 64 位 AMD 以及 Intel 架构:

  • 对于 C 和 C++,在启用了流 SIMD 扩展 2 及更高版本的系统上支持 __bf16 类型。
  • 真正的 __bf16 类型现在用于 AVX512BF16 指令的内在函数。在以前的版本中,使用 __bfloat16,一种 short 的 typedef。在将 GCC 12 升级到 GCC 13 时,调整您的与 AVX512BF16 相关的源代码。
  • 添加了新的指令集架构(ISA)扩展,以支持以下 Intel 指令:

    • AVX-IFMA ,其指令内在函数通过 -mavxifma 编译器开关提供。
    • AVX-VNNI-INT8,其指令内在函数通过 -mavxvnniint8 编译器开关提供。
    • AVX-NE-CONVERT,其指令内在函数通过 -mavxneconvert 编译器开关提供。
    • CMPccXADD,其指令内在函数通过 -mcmpccxadd 编译器开关提供。
    • AMX-FP16 ,其指令内在函数通过 -mamx-fp16 编译器开关提供。
    • PREFETCHI,其指令内在函数通过 -mprefetchi 编译器开关提供。
    • RAO-INT,其指令内在函数通过 -mraoint 编译器开关提供。
    • AMX-COMPLEX,其指令内在函数通过 -mamx-complex 编译器开关提供。
  • GCC 现在通过 -march=znver4 编译器开关支持基于 znver4 核的 AMD CPU。开关使 GCC 在自动向量化时考虑使用 512 位向量。

对静态分析器的改进

  • 静态分析器已得到 20 个新警告:

    • -Wanalyzer-allocation-size
    • -Wanalyzer-deref-before-check
    • -Wanalyzer-exposure-through-uninit-copy
    • -Wanalyzer-imprecise-fp-arithmetic
    • -Wanalyzer-infinite-recursion
    • -Wanalyzer-jump-through-null
    • -Wanalyzer-out-of-bounds
    • -Wanalyzer-putenv-of-auto-var
    • -Wanalyzer-tainted-assertion
    • 与文件描述符滥用相关的 7 个新警告:

      • -Wanalyzer-fd-access-mode-mismatch
      • -Wanalyzer-fd-double-close
      • -Wanalyzer-fd-leak
      • -Wanalyzer-fd-phase-mismatch (例如,在对套接字调用 listen 前调用 accept
      • -Wanalyzer-fd-type-mismatch (例如,对数据报套接字使用流套接字操作)
      • -Wanalyzer-fd-use-after-close
      • -Wanalyzer-fd-use-without-check

        • 另外,还实现了 openclosecreatdupdup2dup3pipepipe2read、和 write 函数的行为的特殊处理。
    • 滥用<stdarg.h> 标头的 4 个新警告:

      • -Wanalyzer-va-list-leak 警告在 va_startva_copy 宏后缺少 va_end 宏。
      • -Wanalyzer-va-list-use-after-va-end 警告对已对其调用了 va_end 宏的 va_list 对象类型使用了 va_argva_copy 宏。
      • -Wanalyzer-va-arg-type-mismatch 类型检查va_arg宏在针对实际传递给 variadic 调用的参数类型的过程间执行路径中的使用情况。
      • -Wanalyzer-va-list-exhausted 警告是否 va_arg 宏在进程间的执行路径中对va_list 对象类型使用了太多次。
  • 很多其他改进。

后向不兼容的更改

对于 C++,全局 iostream 对象的结构,如 std::coutstd::cin,现在是在标准库内完成的,而不是在包含 <iostream> 标头的每个源文件中完成的。这个更改提高了 C++ 程序的启动性能,但这意味着如果在运行时没有使用正确的 libstdc++.so 版本,则使用 GCC 13.1 编译的代码将崩溃。请参阅有关在运行时使用正确的 libstdc++.so文档。将来的 GCC 版本会缓解这个问题,以便程序根本不能使用早期不兼容的 libstdc++.so 运行。

Bugzilla:2172093[1]

GCC Toolset 13: annobin rebase 到版本 12.20

GCC Toolset 13 提供了 annobin 软件包版本 12.20。主要改进包括:

  • 添加了对将 annobin 备注移到单独的调试信息文件中的支持。这导致减小了可执行二进制文件的大小。
  • 添加了对新的较小的备注格式的支持,减少了单独 debuginfo 文件的大小以及创建这些文件所需的时间。

Bugzilla:2171923[1]

GCC Toolset 13:GDB rebase 到版本 12.1

GCC Toolset 13 提供 GDB 版本 12.1。

重要的程序错误修复和增强包括:

  • GDB 现在默认设置源代码和反汇编器的样式。如果样式干扰了 GDB 的自动化或脚本,您可以使用 maint set gnu-source-highlight enabled offmaint set style disassembler enabled off 命令禁用它。
  • GDB 现在每当遇到内部错误时都会显示回溯追踪。如果这会影响脚本或自动化,您可以使用 maint set backtrace-on-fatal-signal off 命令禁用此功能。

C/C++ 改进:

  • GDB 现在像对待功能过载一样对待涉及 C++ 模板的功能或类型。您可以省略参数列表,以在模板功能系列上设置断点,包括类型或由多个模板类型组成的功能。Tab 补全已得到类似的改进。

终端用户界面(TUI):

  • tui layout

    tui focus

    tui refresh

    tui window height
    是旧 layoutfocus,refreshwinheight TUI 命令的新名称。旧名称仍作为这些新命令的别名存在。

  • tui window width

    winwidth

    使用新的 tui window width 命令或 winwidth 别名,来在窗口在水平模式中布局时调整 TUI 窗口的宽度。

  • info win

    这个命令现在在其输出中包含有关 TUI 窗口宽度的信息。

机器接口(MI)更改:

  • MI 解释器的默认版本现在是 4 (-i=mi4)。
  • 没有标志的 -add-inferior 命令现在继承当前下级的连接。这会恢复 GDB 版本 10 之前的行为。
  • -add-inferior 命令现在接受一个 --no-connection 标志,这导致新的下级在没有连接的情况下启动。
  • 断点输出中的 script 字段(其在 MI 3 及更早版本中的语法不正确)已在 MI 4 中成为一个列表。这会影响以下命令和事件:

    • -break-insert
    • -break-info
    • =breakpoint-created
    • =breakpoint-modified

      使用 -fix-breakpoint-script-output 命令启用使用早期 MI 版本的新行为。

新命令:

  • maint set internal-error backtrace [on|off]

    maint show internal-error backtrace

    maint set internal-warning backtrace [on|off]

    maint show internal-warning backtrace

    GDB 现在在遇到内部错误或内部警告时打印其自身的回溯追踪。对于内部错误,这默认是启用的,对于内部警告,默认禁用。

  • exit

    除了现有的 quit 命令外,您还可以使用新的 exit 命令退出 GDB。

  • maint set gnu-source-highlight enabled [on|off]

    maint show gnu-source-highlight enabled
    启用或禁用 GNU Source Highlight 库来向源代码添加样式。禁用时,即使库可用,也不会使用它。当 GNU Source Highlight 库没有使用时,使用 Python Pygments 库。

  • set suppress-cli-notifications [on|off]

    show suppress-cli-notifications

    控制是否禁止为 CLI 打印通知。当您更改所选上下文(如当前的下级、线程或帧)或正在调试的程序停止时(例如:由于遇到断点、完成源步进或中断)时,会发生 CLI 通知。

  • set style disassembler enabled [on|off]

    show style disassembler enabled

    启用后,如果 GDB 是使用支持的 Python 编译的,且有 Python Pygments 软件包可用,则命令会向反编译器输出应用样式。

更改的命令:

  • set logging [on|off]

    弃用,并被 set logging enabled [on|off] 命令替换。

  • print

    使用基数修改格式(如 /x )打印浮点值,已改为以所需基数显示底层值的字节。

  • clone-inferior

    clone-inferior 命令现在确保 TTYCMDARGs 设置从原始下级复制到新的下级。所有使用set environmentunset environment 命令对环境变量的修改也会被复制到新的下级中。

Python API:

  • 新的 gdb.add_history() 函数接受一个 gdb.Value 对象,并将其代表的值添加到 GDB 的历史记录列表中。函数返回一个整数,这是历史记录列表中新项目的索引。
  • 新的 gdb.history_count() 函数返回 GDB 值历史记录中的值数。
  • 新的 gdb.events.gdb_exiting 事件通过 gdb.GdbExitingEvent 对象调用,该对象具有包含 GDB 退出码值的只读属性 exit_code。这个事件会在 GDB 突出前触发,然后 GDB 开始清理其内部状态。
  • 新的 gdb.architecture_names() 函数返回一个包含所有可能的 Architecture.name() 值的列表。每个条目都是一个字符串。
  • 新的 gdb.Architecture.integer_type() 函数返回一个给定大小和符号的整数类型。
  • 新的 gdb.TargetConnection 对象类型表示一个连接(如 info connections 命令显示的那样)。子类 gdb.RemoteTargetConnection 表示 remoteextended-remote 连接。
  • gdb.Inferior 类型现在有一个 connection 属性,它是 gdb.TargetConnection 对象的一个实例,连接被这个下级使用。如果下级没有连接,则这可以是 None
  • 当从 GDB 中删除连接时,新的 gdb.events.connection_removed 事件注册中心会发出一个 gdb.ConnectionEvent 事件。此事件有一个 connection 属性,一个用于要删除的连接的 gdb.TargetConnection 对象。
  • 新的 gdb.connections() 函数返回所有当前活跃连接的列表。
  • 新的 gdb.RemoteTargetConnection.send_packet (PACKET) 方法等同于现有的 maint packet CLI 命令。您可以使用它来向远程目标发送指定的数据包。
  • 新的 gdb.host_charset() 函数返回作为字符串的当前主机字符集的名称。
  • 新的 gdb.set_parameter (NAME,VALUE) 函数将 GDB 参数 NAME 设置为 VALUE
  • 新的 gdb.with_parameter (NAME,VALUE) 函数返回一个上下文管理器,该管理器临时将 GDB 参数 NAME 设置为 VALUE,然后在上下文退出时重置它。
  • gdb.Value.format_string 方法现在接受一个 styling 参数,该参数是一个布尔值。当为 true 时,返回的字符串可以包含转义序列以应用样式。只有在 GDB 上打开样式时,才会显示样式(请参阅 帮助设置样式)。当未指定 styling 参数时,其为默认值false,则不会将样式应用到返回的字符串。
  • 新的只读属性 gdb.InferiorThread.details 是一个包含额外的特定于目标的线程信息的字符串,或者如果没有这样的附加信息,则为 None
  • 新的只读属性 gdb.Type.is_scalar 对于 scalar 类型为 True,对所有其他类型为 False
  • 新的只读属性 gdb.Type.is_signed 仅在 Type.is_scalarTrue 时可读,对于有符号类型将为True,对于所有其他类型将为False。尝试读取 non-scalar 类型的此属性将引发一个 ValueError
  • 现在,您可以添加在 Python 中添加 GDB 和实施的 MI 命令。

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

GDB 中有哪些变化?

Bugzilla:2172096[1]

GCC Toolset 13:bintuils rebase 到版本 2.40

GCC Toolset 13 提供 binutils 软件包版本 2.40。主要改进包括:

链接器:

  • 链接器的新的 -w (--no-warnings)命令行选项压制任何警告或错误消息 产生。如果您需要创建一个已知无法正常工作的二进制文件,则这非常有用。
  • 现在,ELF 链接器会产生一条警告信息,如果:

    • 堆栈为可执行的
    • 它创建一个内存驻留段,设置了所有三个 ReadWriteeXecute 权限集
    • 它创建一个具有 eXecute 权限集的线程本地数据段。

      您可以使用 --no-warn-exec-stack--no-warn-rwx-segments 选项禁用这些警告。

  • 链接器现在可以将任意 JSON 格式的元数据插入到它创建的二进制文件中。

其他工具:

  • 新的 objdump 工具的 --private 选项,用于显示文件标头中的字段,以及 Portable Executable (PE)格式的部分标头。
  • objcopystrip 工具的新的 --strip-section-headers 命令行选项,来从 ELF 文件中删除 ELF 部分标头。
  • objdump 工具的新的 --show-all-symbols 命令行选项,以显示反汇编时与给定地址匹配的所有符号,而不是仅显示与地址匹配的第一个符号的默认功能。
  • nm 工具的新的 -W (--weak)选项,以使其忽略弱符号。
  • objdump 工具现在支持对某些架构的反汇编输出的语法高亮显示。使用 --disassembler-color=MODE 命令行选项,MODE 是以下之一:

    • off
    • color - 所有终端模拟器都支持这个选项。
    • extended-color - 这个选项使用所有终端模拟器都不支持的 8 位颜色。

Bugzilla:2171926[1]

libabigail rebase 到版本 2.3

libabigail 软件包已更新至版本 2.3。主要改进包括:

  • 现在支持 BTF debuginfo 格式。
  • 改进了对 Ada 范围类型的支持。
  • 现在支持压制规范中新的 [allow_type] 指令。
  • [supress_type] 压制规范添加了各种新属性。
  • ABIXML 文件格式已更新至版本 2.2。
  • 库的 SONAME 已更改,以反映自己的 ABI 变化。

libabigail 软件包在 CodeReady Linux Builder (CRB)存储库中提供。请注意,不支持 CodeReady Linux Builder 存储库中包含的软件包。

Bugzilla:2186931

debugedit 中的 find-debuginfo 脚本现在支持 -q (--quiet)标记

有了此更新,您可以使用 debugedit 工具中的 find-debuginfo 脚本的 -q (--quiet)标记来屏蔽脚本中的非错误输出。

Bugzilla:2177302

Valgrind rebase 到版本 3.21.0

Valgrind 已更新至版本 3.21.0。主要改进包括:

  • --vgdb-stop-at=event1,event2,…​ 选项的新 abexit 值在程序异常退出时(如具有非零退出码)通知 gdbserver 工具。
  • 新的 --enable-debuginfod=[yes|no] 选项指示 Valgrind 使用 DEBUGINFOD_URLS 环境变量中列出的 debuginfod 服务器来获取在 Valgrind 下运行的程序缺少的 DWARF debuginfo 信息。此选项的默认值为 yes

    注意

    默认不设置 DEBUGINFOD_URLS 环境变量。

  • Valgrind 现在提供 GDB Python 命令。这些 GDB 前端命令在 GDB 命令行界面中提供更好的集成。这样做的好处是,例如 GDB 自动完成功能,以及特定于命令的帮助,搜索与正则表达式匹配的命令或命令帮助。对于相关的监控命令,GDB 会评估参数以简化监控命令的使用。
  • 使用 --multi 选项调用时,vgdb 工具现在支持扩展的远程协议。此模式下支持 GDB run 命令,因此您可以从单个终端运行 GDB 和 Valgrind。
  • 对于截获 malloc() 调用的工具,您可以使用 --realloc-zero-bytes-frees=[yes|no] 选项更改 realloc() 函数的行为。
  • memcheck 工具现在对大小为零的 realloc () 函数的使用情况进行检查。使用新的 --show-realloc-size-zero=[yes|no] 开关来禁用此功能。
  • 您可以对 helgrind 工具使用新的 --history-backtrace-size=value 选项,来配置要在早期访问的堆栈跟踪中记录的条目的数量。
  • --cache-sim=[yes|no] cachegrind 选项现在默认为 no,因此默认只收集指令缓存读事件。
  • cg_annotatecg_diffcg_merge cachegrind 工具的源代码已被重写,因此工具具有更灵活的命令行选项处理。例如,它们现在支持 --show-percs--no-show-percs 选项以及现有的 --show-percs=yes--show-percs=no 选项。
  • cg_annotate cachegrind 工具现在支持区分(使用 --diff--mod-filename--mod-funcname 选项)和合并(通过传递多个数据文件)。另外,cg_annotate 现在在文件和函数级别提供更多信息。
  • DHAT 工具的新的用户请求允许您覆盖对内存块的访问数直方图的 1024 字节限制。

现在支持以下特定于架构的指令集:

  • 64 位 ARM:

    • v8.2 scalar 和 vector Floating-point Absolute Difference (FABD), Floating-point Absolute Compare Greater than or Equal (FACGE), Floating-point Absolute Compare Greater Than (FACGT)和 Floating-point Add (FADD)指令。
    • v8.2 浮点(FP)比较和条件比较指令。
    • v8.2 浮点(FP)的零变体比较指令。
  • 64-位 IBM Z:

    • 支持各种 miscellaneous-instruction-extensions facility 3vector-enhancements facility 2。这使用 -march=arch13-march=z15 选项编译的程序能够在 Valgrind 下执行。
  • IBM Power:

    • ISA 3.1 支持现已完成。
    • ISA 3.0 现在支持交付一个随机数字(darn)指令。
    • ISA 3.0 现在支持 System Call Vectored(scv)指令。
    • ISA 3.0 现在支持复制、粘贴和 cpabort 指令。

Bugzilla:2124346

SystemTap rebase 到版本 4.9

systemtap 软件包已升级到版本 4.9。主要变更包括:

  • 新的 Language-Server-Protocol (LSP)后端,用于在支持 LSP 的编辑器上更轻松地交互式起草 systemtap 脚本。
  • 访问 Python/Jupyter 交互笔记本前端。
  • 改进了 DWARF 5 位字段的处理。

Bugzilla:2186934

elfutils rebase 到版本 0.189

elfutils 软件包已更新至版本 0.189。主要改进和 bug 修复包括:

libelf
elf_compress 工具现在支持 ELFCOMPRESS_ZSTD ELF 压缩类型。
libdwfl
dwfl_module_return_value_location 函数现在为指向 DW_TAG_unspecified_type 类型标签的 DWARF Information Entries (DIEs) 返回 0(无返回类型)。
eu-elfcompress
-t--type= 选项现在通过zstd参数支持 Zstandard ( zstd )压缩格式。

Bugzilla:2182061

libpfm rebase 到版本 4.13

libpfm 软件包已更新至版本 4.13。有了此更新,libpfm 可以访问以下处理器微架构的性能监控硬件原生事件:

  • AMD Zen 2
  • AMD Zen 3
  • AMD Zen 4
  • ARM Neoverse N1
  • ARM Neoverse N2
  • ARM Neoverse V1
  • ARM Neoverse V2
  • IBM z16
  • 第四代 Intel® Xeon® 可扩展处理器

Bugzilla:2185652, Bugzilla:2047720, Bugzilla:2111940, Bugzilla:2111924, Bugzilla:2111930, Bugzilla:2111933, Bugzilla:2111957, Bugzilla:2111946

papi 支持新的处理器微架构

有了此增强,您可以使用以下处理器微架构上存在的 papi 事件访问性能监控硬件:

  • AMD Zen 2
  • AMD Zen 3
  • ARM Neoverse N1
  • ARM Neoverse N2
  • ARM Neoverse V1
  • ARM Neoverse V2

Bugzilla:2111923[1], Bugzilla:2111947, Bugzilla:2111942

papi 现在支持 64 位 ARM 处理器的快速性能事件数读取操作

在以前的版本中,在 64 位 ARM 处理器上,所有性能事件计数器读取操作都需要使用资源密集型系统调用。已为 64 位 ARM 更新了 papi,以便让使用性能计数器监控其自身的进程使用更快的性能事件计数器的用户空间读取。将 /proc/sys/kernel/perf_user_access 参数设置为 1 ,来将 papi 读取 2个计数器的平均时钟周期数从 724 个周期减少到 29 个周期。

Bugzilla:2186927[1]

LLVM Toolset rebase 到版本 16.0.6

LLVM Toolset 已更新至版本 16.0.6。

主要改进包括:

  • 对优化的改进
  • 对新的 CPU 扩展的支持
  • 改进了对新 C++ 版本的支持。

主要的向后不兼容的更改包括:

  • clang 的默认 C++ 标准现在是 gnu++17 而不是 gnu++14
  • -Wimplicit-function-declaration,-Wimplicit-int-Wincompatible-function-pointer-types 选项现在默认为 C 代码的错误。这可能会影响配置脚本的行为。

默认情况下,Clang 16 使用 GCC Toolset 13 提供的 libstdc++ 库版本 13 和 binutils 2.40

如需更多信息,请参阅 LLVM 发行注记Clang 发行注记

Bugzilla:2178796

Rust Toolset rebase 到版本 1.71.1

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

  • 多个生成者(mpsc),一个消费者(mpsc)渠道的新实现,以提高性能
  • 新的 Cargo sparse 索引协议,以更有效地使用 crates.io 注册中心
  • 用于一次性值初始化的新的 OnceCellOnceLock 类型
  • 新的 C-unwind ABI 字符串,以能够在跨 Foreign Function Interface (FFI)边界使用强制展开

如需了解更多详细信息,请参阅上游发布公告系列:

Bugzilla:2191743

Rust profiler_builtins 运行时组件现在可用

有了此更新,Rust profile_builtins 运行时组件现在可用。此运行时组件启用以下编译器选项:

-C instrument-coverage
启用覆盖率分析
-C profile-generate
启用配置文件引导的优化

Bugzilla:2227082[1]

Go Toolset rebase 到版本 1.20.10

Go Toolset 已更新到版本 1.20.10。

主要改进包括:

  • unsafe 软件包中添加了新功能,以处理片段和字符串,而不依赖于内部表示。
  • 可比较类型现在可以满足可比较约束。
  • 新的 crypto/ecdh 软件包。
  • go buildgo test 命令不再接受 -i 标志。
  • go generatego test 命令现在接受 -skip pattern 选项。
  • go buildgo install 和其它与构建相关的命令现在支持 -pgo-cover 标志。
  • go 命令现在在没有 C 工具链的系统上默认禁用 cgo
  • go version -m 命令现在支持读取更多的 Go 二进制文件类型。
  • go 命令现在在没有 C 工具链的系统上默认禁用 cgo
  • 添加了对从应用程序和集成测试收集代码覆盖配置文件的支持,而不是仅从单元测试收集它们。

Bugzilla:2185259[1]

pcp rebase 到版本 6.0.5

pcp 软件包已更新至版本 6.0.5。主要变更包括:

收集器工具功能

  • pmdaproc

    • 添加了对最近内核中每个 cgroup IRQ PSI 指标的支持
    • 添加了一个新的 proc.smaps.pss_dirty 指标
  • pmdasmart :添加了 NVME 磁盘信息和电源状态指标
  • pmdalinux:

    • 添加了对最近内核中系统范围 IRQ PSI 指标的支持
    • 添加了 NUMA 外部内存碎片指标
    • 添加了新的网络(TCP、ICMP)指标
  • pmdaoverhead :一个测量进程组开销的新的 PMDA
  • pmdahacluster: 已更新,来处理 Pacemaker 2.1.5 crm_mon 输出更改

监控工具功能

  • pmieconf:

    • 添加了对 webhook 操作(事件驱动的 Ansible)的支持
    • 添加了一个新的检查文件描述符限制的 pmie 规则
  • pcp2json: 带有一个选项的扩展的 pcp2json ,以发送 HTTP POSTs
  • pcp-atop: 添加了 cgroup、NUMA 内存和 NUMA CPU 支持
  • pcp-htop: 添加了对新打开的文件描述符 Meter 的支持
  • pcp-ps: 添加了显示多个归档示例的能力

Bugzilla:2175602

PCP 的 pmie 工具现在支持生成 webhook 事件

Performance Co-Pilot (PCP)中的性能指标推理引擎(pmie)工具现在支持生成 webhook 事件。有了此更新,配置的 pmie 规则生成可由 Event-Driven Ansible (EDA)消费的格式的事件。因此,EDA 可以响应 PCP 规则。

要启用此功能,请配置所有本地 pmie 规则,以便在给定的端点(URL)发送到 webhook:

# pmieconf modify global webhook_endpoint https://localhost:443/<endpoint>
# pmieconf modify global webhook_action yes

Bugzilla:2185803

grafana rebase 到版本 9.2.10

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

  • 现在在整个 Grafana 中使用 heatmap 面板。
  • Geomaps 现在可测量距离和区域。
  • Alertmanager 现在基于 Prometheus Alertmanager 版本 0.24。
  • Grafana 警告规则现在在执行错误或超时时默认返回一个 Error 状态。
  • 表达式现在可以用于公共仪表盘。
  • 加入转换现在支持内联。
  • 公共仪表盘现在允许共享 Grafana 仪表盘。
  • 新的 Prometheus streaming 解析器现在作为一个可选功能提供。

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

Bugzilla:2193018

Grafana 不再启用弱加密密码

有了此更新,对于加密安全通信,Grafana 不再启用被视为弱的密码。受影响的密码有:

  • AES128-GCM-SHA256
  • AES128-SHA
  • AECDHE-RSA-AES128-SHA
  • AES256-GCM-SHA384
  • AES256-SHA
  • ECDHE-RSA-AES256-SHA

Bugzilla:2190025[1]

.NET 8.0 可用

Red Hat Enterprise Linux 9.3 与 .NET 版本 8.0 一起分发。主要改进包括:

  • 添加了对 C#12 和 F#8 语言版本的支持。
  • 添加了对直接使用 .NET 软件开发套件构建容器镜像的支持。
  • 许多对垃圾收集器(GC)、Just-In-Time (JIT)编译器和基本库的性能改进。

Jira:RHELPLAN-164399[1]

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.