6.14. 编译器和开发工具


RHEL 10 引入了 GCC 14.2

RHEL 10 与 GNU Compiler Collection (GCC)版本 14.2 一起发布。

自 GCC 13 以来的显著变化包括:

  • 优化和诊断改进
  • 新的 -fhardened umbrella 选项,其启用一组强化标记
  • 新的 -fharden-control-flow-redundancy 选项,来检测将控制转换到函数中间的攻击
  • 新的 strub 类型属性,来控制函数和变量的堆栈清理属性
  • 新的 -finline-stringops 选项,来强制某些 mem* 函数的内联扩展
  • 支持新的 OpenMP 5.1、5.2 和 6.0 功能
  • 几个新的 C23 功能
  • 多个新的 C++23 和 C++26 功能
  • 几个已解决的 C++ 缺陷报告
  • 对 C++ 库中 C++20、C++23 和 C++26 的新的和改进了的实验性支持
  • 支持 64 位 ARM 架构中的新 CPU
  • 64 位 Intel 架构中的多个新指令集架构(ISA)扩展,例如:AVX10.1、AVX-VNNI-INT16、SHA512 和 SM4
  • GCC 的静态分析器中的新警告
  • 某些警告变为错误; 详情请参阅 移植到 GCC 14
  • 各种 bug 修复

有关 GCC 14 中更改的更多信息,请参阅 上游 GCC 发行注记

Jira:RHEL-45041

GCC 14 默认为 x86-64-v3

RHEL 10 中的 GCC 14 默认为 x86-64-v3 微架构级别。这个级别默认启用某些功能,如 AVX 和 AVX2 指令集,以及融合的 multiply-add(FMA)指令集。详情请查看相关 文章

Jira:RHEL-33254

GCC 默认为在 IBM Power 系统上使用 IEEE128 浮点格式

在 RHEL10 中,GCC 默认在 IBM Power 系统上对所有长双精度浮动点数使用 IEEE128 浮点格式,而不是早期的仅用于软件的 IBM-DOUBLE-DOUBLE 代码。因此,您可以注意到使用长双精度浮点数执行操作的 C 或 C++ 代码中的性能改进。

请注意,这个 128 位长双精度浮点 ABI 与 RHEL 8 及更早版本中使用的浮点 ABI 不兼容。从 IBM POWER9 开始,支持执行 IEEE128 操作的硬件指令。

Jira:RHEL-24760[1]

GCC 14 支持 FUJITSU-MONAKA CPU

从 RHEL 10.0 开始,GNU Compiler Collection (GCC)支持 FUJITSU-MONAKA。因此,您可以使用 -mcpu=fujitsu-monaka 命令行选项为这个平台创建代码。

Jira:RHEL-65765[1]

GCC 14 支持 POWER 11 架构

从 RHEL 10.0 开始,GNU Compiler Collection (GCC)支持 POWER 11 架构。因此,您可以使用 -mcpu=power11 命令行选项为 POWER 11 创建代码。

Jira:RHEL-24762[1]

RHEL 10 包括 annobin 版本 12.55

RHEL 10 与 annobin 版本 12.55 一起分发。与之前可用的版本 12.32 相比,显著的变化包括:

  • 更新了工具,以构建并使用 GCC 、Clang、LLVM 和 Go 编译器的较新版本
  • 对使用 GCC 命令行选项 -Wimplicit-int-Wimplicit-function-declaration 的记录和测试
  • 改进了对 LLVM 的支持
  • 新测试
  • 一个识别是否使用已弃用的 OpenSSL Engine 代码的新的检查
  • 现在支持多个 --debug-rpm 选项
  • 各种 bug 修复

Jira:RHEL-526[1]

RHEL 10 包括 binutils 版本 2.41

RHEL 10 与 binutils 版本 2.41 一起发布。与之前可用的 2.40 版本相比,显著的变化包括:

  • binutils 工具支持 64 位 Intel 和 ARM 架构中的架构扩展。
  • 链接器现在接受 --remap-inputs <PATTERN>=<FILE> 命令行选项,来使用 <FILE> 代替与 <PATTERN> 匹配的任何输入文件。另外,您可以使用 --remap-inputs-file=<FILE> 选项指定一个包含任意数量的这些重新映射指令的文件。
  • 对于 ELF 目标,您可以使用链接器命令行选项 --print-map-locals ,来在链接器映射中包含本地符号。
  • 对于大多数基于 ELF 的目标,您可以使用 --enable-linker-version 选项,将链接器的版本作为字符串插入到 .comment 部分中。
  • 链接器脚本语法有一个用于输出部分的新命令 ASCIZ "<string>",其在当前位置插入一个零终止的字符串。
  • 您可以使用新的 -z nosectionheader 链接器命令行选项省略 ELF 部分标头。

Jira:RHELDOCS-18761[1]

GCC 可以为 Power 10 或更高版本生成 ROP 保护指令

IBM Power 10 及之后的平台针对面向返回编程(ROP)(其是利用程序中漏洞的一种常见原语)进行了保护。有了此增强,您可以使用 {{-mrop-protect}} 标志,GCC 会为这些平台创建 ROP 保护指令。请注意,由于没有运行时支持,因此生成的指令目前没有效果,并且 CPU 将它们视为无操作(NOP)指令。但是,开发人员可以使用 {{-mrop-protect}} 标志来整合 ROP 保护机制,当为这些平台启用了 ROP 保护时,应用程序将更加安全。

Jira:RHEL-36791[1]

binutils 现在支持 IBM Z 指令集的 arch15 扩展

有了此增强,binutils 支持 IBM Z 平台上 CPU 的 arch15 扩展。开发人员现在可以在汇编源文件中使用 arch15 扩展提供的新功能,或者当更新的编译器可用时,也可以在编译的程序中使用 arch15 扩展。这可能导致更小、更快速的程序。

Jira:RHEL-56896[1]

binutilsld 链接器支持 --section-ordering-file 选项

现在,您可以将新的 --section-ordering-file 命令行选项与 ld.bfd(默认的系统链接器)一起使用, 来对可以从彼此接近中获益的代码或数据部分进行分组。

此功能通过减少缓存未命中提高了程序的性能。您可以使用分析工具来分析一段时间以来程序代码的使用,然后改进可执行文件中的代码分组。因此,您可以更好地控制程序在内存中的布局。

--section-ordering-file 选项还增强了与 goldlld 链接器的兼容性,其已提供了此功能。

详情请查看博客文章 对链接器部分排序的实用指南

Jira:RHEL-36305

glibc 现在支持启用了 Intel APX 的函数的动态链接

不兼容的动态链接器 trampoline 被识别为 Intel Advanced Performance Extensions (APX)应用程序的潜在不兼容的源。作为临时解决方案,可以使用 BIND_NOW 可执行文件,或者只使用标准调用约定。有了此更新,glibc 的动态链接器保留了与 APX 相关的寄存器。

注意

由于这个变化,在堆栈的顶部之外需要额外的空间。严格限制此空间的用户可能需要调整或评估堆栈限制。

Jira:RHEL-25045

RHEL 10 提供了 glibc 版本 2.39

RHEL 10 引入了 GNU C 库(glibc)版本 2.39。

Jira:RHEL-25850

glibc 中 AMD Zen 3 和 Zen 4 性能的优化

在以前的版本中,AMD Zen 3 和 Zen 4 处理器有时使用 memcpymemmove 库例程的 Enhanced Repeat Move String (ERMS)(ERMS)版本,无论最优选择是什么。使用这个对 glibc 的更新,AMD Zen 3 和 Zen 4 处理器使用 memcpymemmove 的最优版本。

Jira:RHEL-25530

RHEL 10 提供了 GDB 版本 14.2

GDB 已更新至版本 14.2。以下段落列出了自 GDB 12.1 以来的显著变化。

概述:

  • info breakpoints 命令现在将禁用的断点的启用的断点位置显示为 y- 状态。
  • 添加了对使用 ELF 的 Zstandard (ELFCOMPRESS_ZSTD)压缩的 debug 部分的支持。
  • 默认情况下,文本用户界面(TUI)不再为当前位置指示器突出显示的源代码和汇编代码设置样式。要重新启用样式,请使用新命令 set style tui-current-position
  • 新的 $_inferior_thread_count 方便变量包含当前 下级中活跃线程的数量。
  • 对于具有多个代码位置的断点,GDB 现在使用 <breakpoint_number>.<location_number> 语法打印代码位置。
  • 当命中断点时,GDB 现在将 $_hit_bpnum$_hit_locno 方便变量设置为命中断点数和代码位置号。现在,您可以使用 disable $_hit_bpnum 命令禁用最后命中的断点,或使用 disable $_hit_bpnum.$_hit_locno 命令禁用特定的断点代码位置。
  • 添加了对 NO_COLOR 环境变量的支持。
  • 添加了对大于 64 位的整数类型的支持。
  • 您可以使用多目标功能配置的新命令来配置远程目标功能集(请参阅命令中的 set remote <name>-packetshow remote <name>-packet)。
  • 添加了对 Debugger Adapter 协议的支持。
  • 现在,您可以使用新的 inferior 关键字使断点特定于下级(请参阅命令中的 breakwatch )。
  • 现在,您可以使用新的 $_shell() 便捷函数在表达式评估期间运行 shell 命令。

对现有命令的更改:

  • break,watch

    • 现在,在 breakwatch 命令中多次使用 threadtask 关键字会导致错误,而不是使用关键字的最后一个实例的线程或任务 ID。
    • 现在在同一 breakwatch 命令中使用多个 threadtaskinferior 关键字无效。
  • printf,dprintf

    • printfdprintf 命令现在接受 %V 输出格式,它与 print 命令格式化表达式的方式相同。您还可以通过在命令后使用方括号 […​] 中的附加打印选项来修改输出格式,例如:printf "%V[-array-indexes on]", <array>
  • list

    • 您现在可以使用 . 参数打印当前帧内执行点附近的位置,或者,如果 inferior 尚未启动,则打印 main() 函数开头附近的位置。
    • 尝试列出文件中比可用的更多的源行,现在会发出一个警告,让用户参考 . 参数。
  • 记录用户定义的

    • 现在,可以记录用户定义的别名。

新命令:

  • set print nibbles [on|off] (默认值: off), show print nibbles - 控制 print/t 命令是否以四位组(nibbles)的形式显示二进制值。
  • set debug infcall [on|off] (默认值: off),show debug infcall - 显示关于 inferior 功能调用的额外的调试信息。
  • set debug solib [on|off] (默认值: off), show debug solib - 打印有关共享的库处理的额外的调试信息。
  • set print characters <LIMIT> show print charactersprint -characters <LIMIT> - 控制可打印一个字符串的多少个字符。
  • set debug breakpoint [on|off] (默认值: off), show debug breakpoint - 打印有关断点插入和删除的额外的调试信息。
  • maintenance print record-instruction [ N - 打印给定指令的记录信息。
  • maintenance info frame-unwinders - 以优先级顺序(第一个最高)列出当前有效的帧 unwinders。
  • maintenance wait-for-index-cache - 等待所有等待对索引缓存的写完成。
  • info main - 打印有关主符号的信息,以识别程序的入口点。
  • set tui mouse-events [on|off](默认值:on ),show tui mouse-events - 控制鼠标点击事件是否被发送到 TUI 和 Python 扩展( 当为 on时)或终端(当为 off 时)。

机器接口(MI)更改:

  • MI 版本 1 已被删除。
  • MI 现在在反向执行历史记录耗尽时报告 no-history
  • -break-insert 命令的输出中,threadtask 断点字段不再被报告两次。
  • 不再对不存在的线程 ID 创建特定于线程的断点。
  • -stack-list-arguments-stack-list-locals-stack-list-variables-var-list-children 命令中的 --simple-values 参数现在将引用类型视为 simple(如果目标是 simple)。
  • -break-insert 命令现在接受一个新的 -g thread-group-id 选项,来创建特定于 inferior 的断点。
  • 断点创建的通知和 -break-insert 命令的输出现在可以包括一个可选的用于主断点和每个断点位置的 inferior 字段。
  • 说明 breakpoint-hit 停止原因的异步记录现在包含一个可选字段 locno,在多位置断点时提供代码位置号。

GDB Python API 中的更改:

  • 事件

    • 一个新的 gdb.ThreadExitedEvent 事件。
    • 一个新的 gdb.executable_changed 事件注册表,它发出具有 progspacereload 属性的 ExecutableChangedEvent 对象。
    • 新的 gdb.events.new_progspacegdb.events.free_progspace 事件注册表,它发出 NewProgpspaceEventFreeProgspaceEvent 事件类型。这两个事件类型都有一个属性 progspace,来指定添加到 GDB 中,或从 GDB 删除的 gdb.Progspace 程序空间。
  • gdb.unwinder.Unwinder

    • name 属性现在是只读的。
    • __init__ 函数的 name 参数必须是 str 类型,否则会引发一个 TypeError
    • enabled 属性现在只接受 bool 类型。
  • gdb.PendingFrame

    • 新方法:name,is_valid,pc,language,find_sal,blockfunction,它们镜像 gdb.Frame 类的类似方法。
    • create_unwind_info 函数的 frame-id 参数现在可以是一个整数,也可以是 pcspspecial 属性的 gdb.Value 对象。
  • 一个新的 gdb.unwinder.FrameId 类,它可以传递给 gdb.PendingFrame.create_unwind_info 函数。
  • gdb.disassembler.DisassemblerResult 类不能再细分。
  • gdb.disassembler 模块现在包含样式支持。
  • 一个新的 gdb.execute_mi (COMMAND, [ARG]…​) 函数,它调用 GDB/MI 命令,并将结果返回为一个 Python 字典。
  • 一个新的 gdb.block_signals() 函数,它返回一个阻止 GDB 需要处理的任何信号的上下文管理器。
  • threading.Thread 类的一个新 gdb.Thread 子类,它在 start 方法中调用 gdb.block_signals 函数。
  • gdb.parse_and_eval 函数有一个新的 global_context 参数,来限制对全局符号的解析。
  • gdb.Inferior

    • 一个新 arguments 属性,其保留 inferior 的命令行参数(如果已知)。
    • 一个新的 main_name 属性,它包含 inferior 的 main 函数的名称(如果已知)。
    • 新的 clear_envset_envunset_env 方法,它们可在启动前修改 inferior 的环境。
  • gdb.Value

    • 一个分配对象值的新的 assign 方法。
    • 一个将类数组值转换为数组的新的 to_array 方法。
  • gdb.Progspace

    • 一个新的 objfile_for_address 方法,它返回涵盖给定地址的 gdb.Objfile 对象(如果存在)。
    • 一个新的 symbol_file 属性,保存对应于 Progspace.filename 变量的 gdb.Objfile 对象(或 None ,如果文件名为 None)。
    • 一个新的 executable_filename 属性,其保存具有由 exec-filefile 命令设置的文件名的字符串,如果没有设置可执行文件,则为 None
  • gdb.Breakpoint

    • 一个新的 inferior 属性,其包含特定于 inferior 的断点的 inferior ID(一个整数),或 None,如果没有设置这样的断点 。
  • gdb.Type

    • 新的 is_array_likeis_string_like 方法,其反映一个类型可以是类似数组或类似字符串,无论类型的实际类型代码是什么。
  • 一个新的 gdb.ValuePrinter 类,可用作应用 pretty-printer 的结果的基类。
  • 一个新实现的 gdb.LazyString.__str__ 方法。
  • gdb.Frame

    • 一个新的 static_link 方法,它返回嵌套的函数帧的外部帧。
    • 一个新的 gdb.Frame.language 方法,它返回帧语言的名称。
  • gdb.Command

    • GDB 现在重新格式化 gdb.Command 类的 doc 字符串和 gdb.Parameter 子类,以便在使用字符串作为 help 输出前从每行中删除不必要的前导空格。
  • gdb.Objfile

    • 一个新的 is_file 属性。
  • 一个新的 gdb.format_address (ADDRESS, PROGSPACE, ARCHITECTURE) 函数,其使用与从反汇编器中打印地址、符号和偏移信息时相同的格式。
  • 一个新的 gdb.current_language 函数,它返回当前语言的名称。
  • 一个用于包装 GDB 的反汇编器的新 Python API,包括 gdb.disassembler.register_disassembler(DISASSEMBLER, ARCH), gdb.disassembler.Disassembler ,gdb.disassembler.DisassembleInfogdb.disassembler.builtin_disassemble(INFO, MEMORY_SOURCE)gdb.disassembler.DisassemblerResult
  • 一个新的 gdb.print_options 函数,它以 gdb.Value.format_string 函数接受的形式返回当前打印选项的字典。
  • gdb.Value.format_string 函数

    • 如果在 print 或其他类似的操作中被调用,GDB.Value.format_string 现在使用 print 命令提供的格式。
    • gdb.Value.format_string 现在接受 summary 关键字。
  • 一个新的 gdb.BreakpointLocation Python 类型。
  • gdb.register_window_type 方法现在限制一组可接受的窗口名称。

特定于架构的更改:

  • AMD 和 Intel 64 位构架

    • 添加了对使用 libopcodes 库的反汇编器样式的支持,该库现在被默认使用。您可以使用 set style disassembler * 命令修改反汇编器输出的样式。要使用 Python Pygments 样式,请使用新的 maintenance set libopcodes-styling 命令。
  • 64 位 ARM 架构

    • 添加了为内存标记(MTE)转储内存标签数据的支持。
    • 添加了对 Scalable Matrix Extension 1 和 2 (SME/SME2)的支持。有些功能仍被视为实验性的或 alpha,例如,ZA 状态的手动函数调用,或者根据 DWARF 跟踪 Scalable Vector Graphics(SVG)更改。
    • 添加了对线程本地存储(TLS)变量的支持。
    • 添加了对硬件观察点的支持。
  • 64 位 IBM Z 架构

    • 对 IBM Z 目标上新 arch14 指令的记录和重播的支持,但专用的函数辅助指令 NNPA 除外。
  • IBM Power Systems, Little Endian

    • 添加了对 POWER11 的基本启用支持。

有关自 GDB 10.2 的 RHEL 9 系统版本以来的更改,请参阅 GDB 11.2 的 GCC Toolset 12 版本GDB 12.1 的 GCC Toolset 13 版本 的发行注记。

JIRA:RHEL-33256, JIRA:RHEL-39324, JIRA:RHEL-24764

RHEL 10 提供了 elfutils 版本 0.191

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

  • libdw 库中的更改:

    • dwarf_addrdie 函数现在支持缺少 debug_aranges 部分的二进制文件。
    • 改进了对 DWARF 软件包文件的支持。
    • 已添加了一个新的 dwarf_cu_dwp_section_info 函数。
  • debuginfod 服务器中的缓存驱除逻辑已改进,以提高小、频繁或慢文件(如 vdso.debug )的保留。
  • eu-srcfiles 工具现在可以获取 DWARF/ELF 文件的源文件,并将它们放到 zip 存档中。

Jira:RHEL-29197

RHEL 10 提供了 SystemTap 版本 5.1

RHEL 10 包括 SystemTap 追踪和探测工具版本 5.1。自 5.0 版本开始的显著变化包括:

  • 一个实验性 的--build-as=USER 标志,以在脚本编译过程中减少特权。
  • 改进了对主机 PID 识别的容器中运行的探测进程的支持。
  • 对用户空间硬件断点和监视点的新探测。
  • 支持 --runtime=bpf 模式的 --remote 操作。
  • 改进了内核用户传输的稳健性。

Jira:RHEL-29529

RHEL 10 提供了 Valgrind 版本 3.23.0

Valgrind 套件已更新至版本 3.23.0。主要改进包括:

  • --track-fds=yes 选项现在警告文件描述符的双重关闭,生成可抑制的错误,并支持 XML 输出。
  • --show-error-list=no|yes 选项现在接受一个新值 all,来也打印抑制的错误。
  • 在 64 位 IBM Z 架构上,Valgrind 现在支持神经网络处理辅助(NNPA)工具向量指令:VCNFVCLFNHVCFNVCLFNLVCRNFNNPA (z16/arch14)。
  • 在 64 位 ARM 架构上,Valgrind 现在支持 dotprod 指令(sdot/udot)。
  • 在 AMD 和 Intel 64 位构架上,Valgrind 现在为 x86_64-v3 微架构提供更准确的指令支持。
  • Valgrind 现在为可检测内存重叠的 wcpncpymemccpystrlcatstrlcpy 函数提供包装器。
  • Valgrind 现在支持以下 Linux syscall:mlock2fchmodat2pidfd_getfd

Jira:RHEL-29535

RHEL 10 引入了 Dyninst 版本 12.3.0

RHEL 10 与 Dyninst 库版本 12.3.0 一起分发。

Jira:RHEL-49597[1]

提供了 SystemTap 版本 5.2

RHEL 10.0 在版本 5.2 中提供 SystemTap 追踪和探测工具。

一个显著的增强是基于 elfutils 0.192 的基于 debuginfod-metadata 探测的完整激活。使用此功能,您可以通过为所有匹配名称搜索 debuginfod 服务器来编写 systemtap 脚本,以针对给定二进制或库的所有版本。

Jira:RHEL-64042

RHEL 10 引入了 debugedit 5.1

RHEL 10 与 debugedit 5.1 一起分发。最显著的更改有:

  • debugedit 工具现在使用更快的 xxhash 算法来生成 buildid
  • find-debuginfo 工具支持以下新选项:
  • -v--verbose,来为处理的所有文件添加更多输出
  • -q--quiet ,来静音所有非错误输出
  • find-debuginfo 工具现在将 -j 选项也传递给 dwz 工具,该工具启用了并行处理。
  • debugedit 工具现在处理压缩的 DWARF 调试 ELF 部分。
  • debugedit 工具现在处理更多 clang 编译器所使用的 DWARF5 结构。

Jira:RHEL-64137

RHEL 10 提供了 elfutils 版本 0.192

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

  • debuginfod:

    • 通过使用 Fedora 和 RHEL 中的 RPM IMA 方案,添加了按文件的签名验证,以进行完整性检查。
    • 用于元数据查询的新 API:file name buildid
    • 服务器端从内核 debuginfo 软件包提取文件非常快。现在它花费的时间从 ~50 秒下降到不到 0.25 秒。
  • libdw:

    • 新函数 dwfl_set_sysroot,dwfl_frame_unwound_sourcedwfl_unwound_source_str
  • stacktrace

Jira:RHEL-64046

RHEL 10 提供了 libabigail 2.6

RHEL 10 提供了 libabigail 库版本 2.6。主要变更包括:

  • 使用 BPF 类型格式(BTF)和通用跟踪格式(CTF)更好地支持 Linux 内核模块分析。
  • 改进了中间端的内部类型比较算法。
  • 改进了 abipkgdiffabidwabilint 工具中的日志记录
  • 修复多个程序错误。

有关进一步的更改,请参阅 上游发行注记

Jira:RHEL-64063

提供了 valgrind 版本 3.24.0

RHEL 10.0 提供了 valgrind 套件版本 3.24.0。主要改进包括:

  • --track-fds=yes 选项现在在使用错误的文件描述符时显示可抑制的错误,并错误被写到 XML 输出。如果不使用选项,显示的警告将被弃用,并将在以后的版本中删除。
  • 错误消息现在支持 Ada 名称分解。
  • deflate-conversion 工具(z15/arch13)现在支持 IBM Z 平台上的紧缩压缩调用(DFLTCC)指令。
  • 在 IBM Z 平台上,valgrind 现在支持消息安全协助(MSA)工具及其 1-9 扩展提供的指令。
  • Valgrind 现在支持以下新的 Linux 系统调用:

    • open_tree
    • move_mount
    • fsopen
    • fsconfig
    • fsmount
    • fspick
    • landlock_create_ruleset
    • landlock_add_rule
    • landlock_restrict_self

Jira:RHEL-64056

提供了 Go Toolset 版本 1.23

RHEL 10.0 提供了 Go Toolset 版本 1.23。主要改进包括:

  • for-range 循环接受以下类型的迭代函数:

    • func(func() bool)
    • func(func(K) bool)
    • func(func (K, V) bool)

      调用迭代参数函数会为 for-range 循环创建迭代值。有关参考链接,请参阅 上游发行注记

  • Go Toolchain 可以收集使用情况和中断统计信息,以帮助 Go 团队了解 Go Toolchain 是如何使用和工作的。默认情况下,Go Telemetry 不会上传遥测数据,仅将其存储在本地。如需更多信息,请参阅 上游 Go Telemetry 文档
  • go vet 子命令包含 stdversion 分析器,它标记对在引用文件中使用的 Go 版本太新符号的引用。
  • cmdcgo 功能支持 -ldflags 选项,来将标记传递给 C 链接器。当您使用非常大的 CGO_LDFLAGS 环境变量时,go 命令会自动使用这个标志来避免 argument list too long 错误。
  • trace 工具容忍部分破坏的跟踪,并尝试恢复跟踪数据。这在崩溃时特别有用,因为您可以获得导致崩溃的跟踪。
  • 运行时在未处理的 panic 或其他不可恢复的错误后打印的回溯行为传输缩进,以区分 goroutine 的堆栈追踪。
  • 使用配置文件引导的优化的编译器构建时间开销降低到个位数百分比。
  • 新的 -bindnow 链接器标志在构建动态链接的 ELF 二进制时启用立即函数绑定。
  • //go:linkname 链接器指令不再引用标准库中的内部符号,以及没有对其定义标记为 //go:linkname 的运行时。
  • 如果程序不再引用 TimerTicker,则垃圾回收会立即清理它们,即使还没有调用它们的 Stop 方法。与 TimerTicker 关联的计时器渠道现在没有缓冲,容量为 0。这确保每次调用 ResetStop 方法时,在调用后不会发送或接收过时的值。
  • 新的 unique 软件包为规范化值(如 interninghash-consing)提供了工具。
  • 新的 iter 软件包提供了基本定义,以与用户定义的迭代器一起工作。
  • slicesmaps 软件包引入了几个与迭代器一起使用的新功能。
  • 新的 structs 软件包为修改包含 struct 类型的属性(如内存布局)的 struct 字段提供类型。
  • 在以下软件包中进行了次要更改:

    • archive/tar
    • crypto/tls
    • crypto/x509
    • database/sql
    • debug/elf
    • encoding/binary
    • go/ast
    • go/types
    • math/rand/v2
    • net
    • net/http
    • net/http/httptest
    • net/netips
    • path/filepath
    • reflect
    • runtime/debug
    • runtime/pprof
    • runtime/trace
    • slices
    • sync
    • sync/atomic
    • syscall
    • testing/fstest
    • text/template
    • time
    • unicode/utf16

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

Go Toolset 是一个滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。

Jira:RHEL-34260

RHEL 10 引入了 LLVM Toolset 19.1.7

RHEL 10 与 LLVM Toolset 版本 19.1.7 一起分发。

LLVM 编译器的显著变化:

  • LLVM 现在使用 debug 记录,一个用于调试信息的更高效的表示。

Clang 的显著更新:

  • C++14 大小的重新分配现在默认启用。
  • C++17 支持已完成。
  • 添加了对 C++20 支持的改进,特别是围绕模块、概念和类模板参数推导(CTAD)。
  • 添加了对 C++23、C++2c、C23 和 C2y 支持的改进。

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

LLVM Toolset 是一个滚动应用程序流,只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。

Jira:RHEL-57456

RHEL 10.0 包括了 Rust Toolset 版本 1.84.1

RHEL 10.0 与 Rust Toolset 版本 1.84.1 一起分发。自之前可用的 1.79.0 版本以来显著的改进包括:

  • 新的 LazyCellLazyLock 类型延迟了初始化,直到第一次使用为止。它们使用每个实例中包含的初始化功能扩展了早期的 OnceCellOnceLock 类型。
  • 标准库中的新排序实现提高了运行时性能和编译时间。它们还会尝试检测比较器没有产生总顺序的情况,从而导致该 panic 而不是返回未排序的数据。
  • 添加了对不透明返回类型的精确捕获。新的 use<..> 语法指定了 impl Trait 返回类型中使用的通用参数和生命周期。
  • const 代码添加了许多新功能,例如:

    • 浮点支持
    • const 直接用于内联汇编
    • 对静态的引用
    • 可变参考和指针
  • unsafe 代码添加了许多新功能,例如:

    • 严格的来源 API
    • &raw 指针语法
    • 安全寻址静态
    • 在不安全的 extern 块中声明安全项目
  • Cargo 依赖项解析器现在是版本感知的。如果依赖项 crate 指定了其最低支持的 Rust 版本,则 Cargo 会在解析依赖关系图时使用此信息,而不是使用最新的兼容 semver 的 crate 版本。

兼容性备注:

  • WebAssembly 系统接口(WASI)目标从 rust-std-static-wasm32-wasi 改为 rust-std-static-wasm32-wasip1。您还可以通过在命令行上使用 --target wasm32-wasip1 参数来选择 WASI 目标。如需更多信息,请参阅 对 Rust 的 WASI 目标的更改 上游博客文章。
  • 拆分 panic 钩子和 panic 处理程序参数 core::panic::PanicInfostd::panic::PanicInfo 现在是不同的类型。
  • extern "C" 功能在未捕获的 panics 上停止。使用 extern "C-unwind" 来允许跨 ABI 边界的展开。

Rust Toolset 是一个滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。

Jira:RHEL-59689[1]

RHEL 10 包括 PCP 版本 6.3.0

RHEL 10 与 Performance Co-Pilot (PCP)版本 6.3.0 一起分发。与以前可用的 6.2.0 版本相比,显著变化包括:

新工具和代理

  • pcp2openmetrics :一个将 Open Metrics 格式的 PCP 指标推送到远程端点的新工具
  • pcp-geolocate :一个报告 latitude 和 longitude 指标标签的新工具
  • pmcheck :一个查询和控制 PCP 组件的新工具
  • pmdauwsgi :一个从 uWSGI 服务器导出仪表的新 PCP 代理

增强的工具

  • pmdalinux :添加新内核指标(巨页、文件系统、TCP、softnet、虚拟机气球)
  • pmdalibvirt :添加了对指标标签的支持,添加了新的气球、vCPU 和域信息指标
  • pmdabpf :为使用 pcp-atop 工具改进了 eBPF 网络指标,

Jira:RHELDOCS-18787[1]

RHEL 10 提供 Grafana 版本 10.2.6

Grafana 平台已更新至版本 10.2.6。

主要改进包括:

  • 支持通过在点击和拖动时按住 shift 来放大时间序列的 y 轴和烛台可视化。
  • 创建仪表板时简化数据源选择。
  • 更新了用户界面,包括对导航和命令面板的更新。
  • 对转换的各种改进,包括对 从计算中添加字段 转换的新的一元操作模式。
  • 对仪表盘和数据视觉化的各种改进,包括重新设计的空仪表盘和仪表盘面板。
  • 新的地图和画布面板。

其他更改:

  • 对用户、访问、身份验证、授权和安全的各种改进。
  • 警报改进以及新的警报功能。
  • 公共仪表盘现在可用。

有关之前可用的 Grafana 版本 9.2 以来的更改的完整列表,请参阅 上游文档

Jira:RHEL-35761

RHEL 10 提供 grafana-pcp 版本5.2.2

RHEL 10 与 grafana-pcp 插件版本 5.2.2 一起分发。主要变更包括:

  • 插件现在使用 Valkey 而不是 Redis 作为数据源。因此,PCP Redis 数据源被重命名为 PCP Valkey
  • 新仪表盘:

    • PCP 向量顶级消费者
    • PCP 向量 UWSGI 概述
  • 在替换 RediSearch 模块之前,指标搜索对 Valkey 数据源不可用。

Jira:RHEL-67043

Grafana、PCP 和 grafana-pcp 现在使用 Valkey 存储数据

在 RHEL 10 中,Valkey 键-值存储取代了 Redis。因此,Grafana、PCP 和 grafana-pcp 插件现在使用 Valkey 而不是 Redis 存储数据。grafana-pcp 插件中的 PCP Redis 数据源现在被命名为 PCP Valkey

Jira:RHEL-45646

在 RHEL 10 中,zlib-ng-compat 替换了 zlib

新的 zlib-ng-compat 软件包提供了一个被许多不同的程序使用的通用无损数据压缩库。与 RHEL 9 中发布的 zlib 相比,这个实现提供了各种好处。例如,在可用时 zlib-ng-compat 支持硬件加速,并提高了压缩效率和性能。zlib-ng-compat 是内置的 API 和 ABI 兼容模式,以确保从 zlib 进行平稳过渡。

Jira:RHEL-24058[1]

SWIG 4.3.0 在 CRB 存储库中提供

Simplified Wrapper 和 Interface Generator (SWIG)版本 4.2.1 现在在 CodeReady Linux Builder (CRB)存储库中提供。主要变更包括:

  • Python 标准模板库(STL)容器包装程序现在使用 Python Iterator 协议。
  • SWIG 现在支持:

    • Python 稳定的应用程序二进制接口(ABI)
    • Python 3.12 和 Python 3.13
    • Ruby 3.2 和 Ruby 3.3
    • Tcl 9.0
    • PHP 8;已删除对 PHP 7 的支持。
  • 添加了对没有 C++11 自动变量尾部返回类型的 C++14 自动变量的支持。
  • 构造器、破坏器和分配操作符已被修复,包括隐式的、默认的和已删除的及相关的非可分配变量打包程序。
  • 现在提供了一个以 Node.js 二进制稳定 ABI Node-API 为目标的新的 Javascript 生成器。
  • 多个已弃用的功能已删除。
  • 添加了对 C 作为目标语言的实验性支持。
  • 在使用 nspace 功能时处理命名空间已得到改进。
  • 已为 std::unique_ptrstd::string_viewstd::filesystem 对象 增强了 STL 包装程序。
  • 添加了对 C++17 折叠表达式和 C++11 尾随返回类型的支持。
  • 改进了字符串和字符字面的处理。

请注意,不支持 CodeReady Linux Builder 存储库中包含的软件包。

Jira:RHELDOCS-19059[1]

Red Hat build of OpenJDK 21 是 RHEL 10 中的默认 Java 实现

默认的 RHEL 10 Java 实现是 OpenJDK 21。使用 java-21-openjdk 软件包,它提供 OpenJDK 21 Java 运行时环境和 OpenJDK 21 Java 软件开发套件。如需更多信息,请参阅 OpenJDK 文档

Jira:RHEL-51248

Clang 和 LLVM 现在对 debug 部分压缩支持 zstd

默认情况下,Clang 和 LLVM 工具使用 Zlib 作为 debug 部分压缩的算法。有了此增强,用户可以使用 Zstandard (zstd)算法,该算法可以达到比 Zlib 更高的压缩率。

例如,如果您在使用 Clang 编译程序时使用 zstd 压缩,请使用以下命令:

$ clang -Wa,-compress-debug-sections=zstd -Wl,--compress-debug-sections=zstd ...
Copy to Clipboard Toggle word wrap

Jira:RHEL-70325

llvm-doc 软件包现在只包含对上游文档的引用。

在以前的版本中,llvm-doc 软件包包含 HTML 格式的 LLVM 文档。有了此更新,软件包只提供 /usr/share/doc/llvm/html/index.html 文件,该文件包含一个对上游文档的引用。

Jira:RHEL-58900

RHEL 10 提供 cmake 版本 3.30.5

RHEL 10 与 cmake 版本 3.30.5 一起分发。有关显著的变化,请参阅 上游发行注记

Jira:RHEL-65234

RHEL 10 提供 .NET 版本 9.0 和 8.0

Red Hat Enterprise Linux (RHEL) 10 支持 .NET (9.0)的最新版本和当前长期支持的 .NET (8.0),后者是一个具有自动内存管理和现代编程语言的通用开发平台。使用 .NET,您可以高效地构建高质量的应用程序。

有关安装和使用的详情,请查看 .NET 9.0.NET 8.0 文档。

Jira:RHELDOCS-20066[1]

RHEL 10 在 1.24.4 版本中提供 Go Toolset

Go Toolset 已更新至版本 1.24.4,并发布 RHSA-2025:10677 公告。

主要改进和变化包括:

  • 语言

    • 现在,通用类型别名被完全支持,允许类型别名参数化,以提高通用的灵活性。
  • 工具

    • Go 模块系统支持 go.mod 文件中的 工具 指令,支持直接管理可执行依赖关系。
    • Go 构建go installgo test 命令现在支持结构化输出的 the -json 标志。
    • 新的 GOAUTH 环境变量为私有模块提供增强的身份验证。
  • 运行时和性能

    • 运行时改进平均将 CPU 开销降低为 2-3%。
    • 主要变化包括基于 Swiss Tables 的新映射实施,以及更有效的内存分配。
  • 标准库

    • 新的 os.Root 类型启用目录限制的文件系统访问。
    • testing.B.Loop 方法提高了基准测试。
    • runtime.AddCleanup 功能提供更灵活的最终化机制。
    • 新的 软件包引入了弱指针。
  • 加密

    • 现在,提供了 ML-KEM 后密钥交换(crypto/mlkem)、HKDF、PBKDF2 和 SHA-3 的新软件包。
    • Go Cryptographic 模块现在正在检查 FIPS 140-3 认证。
  • 额外的更新

    • vet 工具包括一个新的分析器,用于检测测试和示例中的常见错误。
    • objdump 工具现在支持更多架构。
    • Cgo 引入了改进性能和正确性的注解。

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

Go Toolset 是一个滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。

Jira:RHEL-101075[1]

RHEL 10 中提供 IBM Semeru JDK

IBM Semeru 是一个技术兼容性套件(TCK)认证的 Java 运行时环境(JRE)实施,由 IBM 维护。RHEL Supplementary 存储库中提供了 java-21-ibm-semeru-certified-jdk-devel 软件包,作为 Open Java Development Kit (OpenJDK)分发的替代方案,该版本包括在 RHEL AppStream 存储库中

Jira:RHELDOCS-20591[1]

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat