4.9. 编译器和开发工具
改进了 glibc
中基于 Intel® Xeon® v5 硬件的字符串和内存例程性能
在以前的版本中,glibc
用于字符串和内存例程的默认缓存量会导致基于 Intel® Xeon® v5 的系统上的性能低于预期。有了此更新,已调整了要使用的缓存量,以提高性能。
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
,alignof
,bool
,false
,static_assert
,thread_local
和true
。 -
添加了
[[noreturn]]
属性,来指定不会向其调用者返回执行的函数。 - 添加了对空初始化器大括号的支持。
-
添加了对
STDC_VERSION keyring_H
标头版本宏的支持。 -
删除了
ATOMIC_VAR_INIT
宏。 -
为
<stddef.h>
标头添加了unreachable
宏。 - 删除了三角图。
- 删除了非原型函数。
-
通过
-Wformat
选项为%wN
和%wfN
格式长度修饰符添加了printf
和scanf
格式检查。 - 添加了对 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 ,其中
float
和double
表达式以long double
评估。 -
以
double
精度评估float
表达式的 64 位 IBM Z 系统。 -
支持
std::float16_t
或std::bfloat16_t
类型的几个架构,其中这些类型以float
精度评估。
-
使用 x87 math 的 Intel 32 和 64 位,某些情况下的 Motorola 68000 ,其中
改进了对 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::bitset
、std::to_chars
和std::from_chars
函数添加了constexpr
修饰符。 - 添加了对扩展的浮点类型的库支持。
-
在
-
添加了对 Library Fundamentals Technical Specification (TS)的版本 3 中
<experimental/scope>
标头的支持。 -
添加了对 Concurrency TS 的版本 2 中
<experimental/synchronized_value>
标头的支持。 添加了对许多之前在 freestanding 模式下不可用的功能的支持。例如:
-
std::tuple
类模板现在可用于独立编译。 -
libstdc++
库向 freestanding 子集添加了组件,如std::array
和std::string_view
。 -
libstdc++
库现在使用-ffreestanding
编译器选项,因此不再需要构建libstdc++
库的一个单独的独立安装。使用-ffreestanding
编译将可用的功能限制到独立的子集,即使libstdc++
库是作为完整的托管的实现而构建的。
-
新目标和特定于目标的改进
64 位 ARM 架构:
-
添加了对
-march=
选项的armv9.1-a
、armv9.2-a
和armv9.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
-
另外,还实现对
open
、close
、creat
、dup
、dup2
、dup3
、pipe
、pipe2
、read
、和write
函数的行为的特殊处理。
-
另外,还实现对
-
对滥用
<stdarg.h>
标头的四个新警告:-
-Wanalyzer-va-list-leak
警告在va_start
或va_copy
宏之后缺少va_end
宏。 -
-Wanalyzer-va-list-use-after-va-end
警告在已对其调用了va_end
宏的va_list
对象类型上使用了va_arg
或va_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 off
和maint 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
这些分别是旧layout
,focus
,refresh
和winheight
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
命令现在确保TTY
、CMD
和ARGs
设置从原始下级复制到新的下级。所有使用set environment
或unset 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
表示remote
和extended-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_scalar
为True
时可读,对于有符号类型将为True
,对于所有其他类型将为False
。尝试读取 non-scalar 类型的此属性将引发一个ValueError
。 - 现在,您可以添加在 Python 中添加 GDB 和实施的 MI 命令。
如需更多信息,请参阅上游发行注记:
Bugzilla:2172095[1]
GCC Toolset 13:bintuils
rebase 到版本 2.40
GCC Toolset 13 提供 binutils
软件包版本 2.40。主要改进包括:
链接器:
-
链接器的新
-w
(--no-warnings
)命令行选项抑制了任何警告或错误消息的生成。如果您需要创建一个已知无法正常工作的二进制文件,这非常有用。 现在,ELF 链接器会生成一条警告信息,如果:
- 堆栈可执行
-
它创建了一个内存常量片段,具有
Read
、Write
和eXecute
全部三个权限集 它会创建一个具有
eXecute
权限的线程本地数据段。您可以使用
--no-warn-exec-stack
或--no-warn-rwx-segments
选项禁用这些警告。
- 链接器现在可以将任意 JSON 格式的元数据插入到它创建的二进制文件中。
其他工具:
-
新的
objdump
工具的--private
选项,用于显示文件标头中的字段,以及 Portable Executable (PE)格式的部分标头。 -
objcopy
和strip
的新的--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
工具现在支持扩展的远程协议。此模式下支持 GDBrun
命令,因此您可以从单个终端运行 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_annotate
、cg_diff
和cg_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 3
和vector-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 指令。
SystemTap
rebase 到版本 4.9
systemtap
软件包已升级到版本 4.9。主要变更包括:
-
新的 Language-Server-Protocol (LSP)后端,用于在支持 LSP 的编辑器上更轻松地交互式起草
systemtap
脚本。 - 访问 Python/Jupyter 交互式笔记本前端。
- 改进了 DWARF 5 位字段的处理。
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
)压缩格式。
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 发行注记。
Rust Toolset rebase 到版本 1.71.1
Rust Toolset 已更新至版本 1.71.1。主要变更包括:
- 多个生成者(mpsc),单个消费者渠道的新实现,以提高性能
-
新的 Cargo
稀疏
索引协议,来更有效地使用crates.io
注册中心 -
用于一次性值初始化的新的
OnceCell
和OnceLock
类型 -
新的
C-unwind
ABI 字符串,以启用跨 Foreign Function Interface (FFI)边界的强制展开的使用
如需了解更多详细信息,请参阅上游版本公告系列:
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 build
和go test
命令不再接受-i
标志。 -
go generate
和go test
命令现在接受-skip pattern
选项。 -
go build
、go 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 流解析器现在作为一个可选功能提供。
如需更多信息,请参阅上游发行注记:
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 分钟
.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]