4.9. 编译器和开发工具


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

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

Bugzilla:2180462

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

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

Bugzilla:2168205[1]

新的 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 用户身份运行以下命令:

# yum install gcc-toolset-13

要从 GCC Toolset 13 运行工具:

$ scl enable gcc-toolset-13 tool

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

$ scl enable gcc-toolset-13 bash

如需更多信息,请参阅https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/developing_c_and_cpp_applications_in_rhel_8/additional-toolsets-for-development_developing-applications#gcc-toolset-13_assembly_additional-toolsets-for-development[GCC Toolset 13] 和 使用 GCC Toolset

Bugzilla:2171898[1], Bugzilla:2171928, Bugzilla:2188490

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 功能的初始支持。
  • 现在提供了一个新的 debug 信息压缩选项值 -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 指定符。
    • 为复合字面引入了 storage-class 指定符。
    • 引入了 typeof 对象(以前作为扩展支持)和 typeof_unqual 对象。
    • 添加了新的关键字:alignas,alignofbool,false,static_assert,thread_localtrue
    • 添加了 [[noreturn]] 属性,来指定不会向其调用者返回执行的函数。
    • 添加了对空初始化器大括号的支持。
    • 添加了对 STDC_VERSION keyring_H 标头版本宏的支持。
    • 删除了 ATOMIC_VAR_INIT 宏。
    • <stddef.h> 标头添加了 unreachable 宏。
    • 删除了三角图。
    • 删除了非原型函数。
    • 通过 -Wformat 选项为 %wN%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 math 的 Intel 32 和 64 位,某些情况下的 Motorola 68000 ,其中 floatdouble 表达式以 long double 评估。
    • double 精度评估 float 表达式的 64 位 IBM Z 系统。
    • 支持 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 类模板的 monadic 操作。
    • 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++ 库向 freestanding 子集添加了组件,如 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。开关在自动向量化时考虑使用 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> 标头的四个新警告:

      • -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 类型检查针对实际传递 variadic 调用的参数类型的过程间执行路径中的 va_arg 宏的使用情况。
      • -Wanalyzer-va-list-exhausted 警告 va_arg 宏是否在过程间执行路径中对 va_list 对象类型使用了太多次。
  • 很多其他改进。

后向不兼容更改

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

Bugzilla:2172091[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 命令现在继承当前下级的连接。这将恢复版本 10 之前的 GDB 的行为。
  • -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:2172095[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 (--no-weak)选项使其忽略弱符号。
  • objdump 工具现在支持对某些架构的反汇编输出的语法高亮显示。使用 --disassembler-color=MODE 命令行选项,MODE 是以下之一:

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

Bugzilla:2171924[1]

GCC Toolset 13: annobin rebase 到版本 12.20

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

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

Bugzilla:2171921[1]

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 环境变量。

  • 使用 --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:2124345

SystemTap rebase 到版本 4.9

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

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

Bugzilla:2186932

elfutils rebase 到版本 0.189

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

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

Bugzilla:2182060

libpfm rebase 到版本 4.13

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

  • AMD Zen 4
  • ARM Neoverse N1
  • ARM Neoverse N2
  • ARM Neoverse V1
  • ARM Neoverse V2
  • 第四代 Intel® Xeon® Scalable Processors
  • IBM z16

Bugzilla:2185653, Bugzilla:2111987, Bugzilla:2111966, Bugzilla:2111973, Bugzilla:2109907, Bugzilla:2111981, Bugzilla:2047725

papi 支持新的处理器微架构

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

  • ARM Neoverse N1
  • ARM Neoverse N2
  • ARM Neoverse V1
  • ARM Neoverse V2

Bugzilla:2111982[1], Bugzilla:2111988

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

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

Bugzilla:2161146[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 使用 libstdc++ 库版本 13 和 GCC Toolset 13 提供的 binutils 2.40

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

Bugzilla:2178806

Rust Toolset rebase 到版本 1.71.1

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

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

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

Bugzilla:2191740

Rust profiler_builtins 运行时组件现在可用

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

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

Bugzilla:2213875[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:2185260[1]

grafana rebase 到版本 9.2.10

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

  • 时间序列面板现在是默认的视觉化选项,代替了图形面板。
  • Grafana 提供了一个新的 Prometheus 和 Loki 查询构建器。
  • Grafana 现在包括多个 UI/UX 和性能改进。
  • 许可证已从 Apache 2.0 变为 GNU Affero General Public License (AGPL)。
  • heatmap 面板现在在整个 Grafana 中使用。
  • Geomaps 现在可以测量距离和区域。
  • Alertmanager 现在基于 Prometheus Alertmanager 版本 0.24。
  • Grafana Alerting 规则现在在执行错误或超时时默认返回一个 Error 状态。
  • 表达式现在可以用在公共仪表盘上。
  • 合并转换现在支持内部合并。
  • 公共仪表盘现在允许共享 Grafana 仪表盘。
  • 新的 Prometheus 流解析器现在作为一个可选功能提供。

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

Bugzilla:2193250

grafana-pcp rebase 到版本 5.1.1

提供 Performance Co-Pilot Grafana 插件的 grafana-pcp 软件包已更新至版本 5.1.1。主要变更包括:

  • 查询编辑器:添加了用于禁用速率对话和时间利用率对话的按钮
  • Redis 数据源:

    • 删除了已弃用的 label_values (metric, label) 函数
    • 修复了具有许多系列的指标的网络错误(需要 Performance Co-Pilot 版本 6 及更高版本)
  • pmproxy API 超时设置为 1 分钟

Bugzilla:2193270

.NET 8.0 可用

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

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

Jira:RHELPLAN-164398[1]

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.