3.13. 编译器和开发工具
LLVM Toolset 已更新至 19.1.7
LLVM Toolset 已更新至版本 19.1.7。
LLVM 编译器的显著变化:
- LLVM 现在使用 debug 记录,一种更有效的调试信息的表示方法。
Clang 的显著变化:
- C++14 大小的释放现在被默认启用。
- C++17 支持已完成。
- 已添加了对 C++20 支持的改进,尤其是围绕模块、概念和 Class Template Argument Deduction(CTAD)。
- 添加了对 C++23、C++2c、C23 和 C2y 支持的改进。
如需更多信息,请参阅 LLVM 发行注记 和 Clang 发行注记。
LLVM Toolset 是一个滚动应用程序流,只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。
llvm-doc
软件包现在只包含对上游文档的引用。
在以前的版本中,llvm-doc
软件包包含 HTML 格式的 LLVM 文档。有了此更新,软件包只提供 /usr/share/doc/llvm/html/index.html
文件,其包含对上游文档的引用。
Clang 和 LLVM 现在支持用于 debug 部分压缩的 zstd
默认情况下,Clang 和 LLVM 工具使用 Zlib
作为 debug 部分压缩的算法。有了此增强,用户可以使用 Zstandard (zstd
)算法,该算法可以达到比 Zlib
更高的压缩率。
例如,如果您想在使用 Clang 编译程序时使用 zstd
压缩,请使用以下命令:
clang -Wa,-compress-debug-sections=zstd -Wl,--compress-debug-sections=zstd ...
$ clang -Wa,-compress-debug-sections=zstd -Wl,--compress-debug-sections=zstd ...
Rust Toolset rebase 到版本 1.84.1
Rust Toolset 已更新到版本 1.84.1。自之前可用的版本 1.79.0 以来的显著改进包括:
-
新的
LazyCell
和LazyLock
类型会延迟初始化,直到第一次使用为止。它们使用每个实例中包含的初始化功能扩展了之前的OnceCell
和OnceLock
类型。 - 标准库中的新排序实现提高了运行时性能和编译时间。它们还会尝试检测比较器没有产生总顺序的情况,从而使其 panic 而不是返回未排序的数据。
-
添加了对不透明返回类型的精确捕获。新的
use<..>
语法指定了impl Trait
返回类型中使用的通用参数和生命周期。 添加了
const
代码的许多新功能,例如:- 浮点支持
-
直接用于内联汇编的
const
- 对静态的引用
- 可变引用和指针
添加了
不安全
代码的许多新功能,例如:- 严格的来源 API
-
&raw
指针语法 - 安全寻址静态
-
在不安全的
extern
块中声明安全项
-
Cargo 依赖项解析器现在是版本感知的。如果依赖项 crate 指定了其最低支持的 Rust 版本,则 Cargo 会在解析依赖关系图时使用此信息,而不是使用最新的兼容
semver
的 crate 版本。
兼容性备注:
-
WebAssembly System Interface(WASI)目标从
rust-std-static-wasm32-wasi
变为rust-std-static-wasm32-wasip1
。您还可以通过在命令行上使用--target wasm32-wasip1
参数来选择 WASI 目标。如需更多信息,请参阅 对 Rust 的 WASI 目标的更改 上游博客文章。 -
分割的 panic 钩子和 panic 处理程序参数
core::panic::PanicInfo
和std::panic::PanicInfo
现在是不同的类型。 -
extern "C"
功能会在未捕获的 panics 上中止进程。使用extern "C-unwind"
来允许跨 ABI 边界的展开。
Rust Toolset 是滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。
pcp 已 rebase 到版本 6.3.2
Performance Co-Pilot (PCP)已更新至版本 6.3.2。与之前可用的 6.2.2 版本相比,显著的变化包括:
-
pmdaopenmetrics
: 现在默认添加了 Virtual Large Language Model (vLLM)指标。 -
pmdalinux
:添加了对 Hyper-V 气球指标的支持。 -
pmdalinux
:更新了网络和巨页
内核指标。 -
pmdaamdgpu
: 这个新代理从libdrm
和libdrm-amdgpu
库中收集指标。 -
pmdabpftrace
:这个代理和许多或较慢的bpftrace
脚本的启动已被修复。 -
pmdaproc
:此代理现在从 Linuxfdinfo
接口的 AMD GPU 中收集新指标。 -
pmdahacluster
: 指标已更新,以支持新的 Pacemaker 版本。 -
pmdastatsd
: 修复了一个 bug ,以避免在负载下崩溃。 -
pcp-htop
: 添加了 AMD GPU 指标支持。 -
pcp-htop
: Platform 设置已被修复,以启用屏幕标签页。 -
pcp-xsos
:添加了这个工具。详情请查看pcp-xsos
提供了系统的快速摘要。 -
pmrep
: 更新了多个配置文件指标集。 -
pmlogconf
: 更新了多个配置文件自动记录。 -
libpcp
和pmcd
: 添加了几个安全强化改进。 -
libpcp
和pmlogger
: 添加了对可选的归档的zstd
压缩的支持。
glibc
库包含改进的 IBM POWER10 优化
有了此增强,glibc
库改进了对 IBM POWER10 平台的硬件支持。因此,strcmp ()
和 memchr ()
API 的性能在这个平台上已被显著改进。
Jira:RHEL-24740[1]
Valgrind
已 rebase 到版本 3.24.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
-
libabigail
已 rebase 到版本 2.6
libabigail
库已更新至版本 2.6。主要变更包括:
- 使用 BPF 类型格式(BTF)和通用跟踪格式(CTF)来更好地支持 Linux 内核模块分析。
- 改进了中间的内部类型比较算法。
-
改进了
abipkgdiff
、abidw
和abilint
工具中的日志记录 - 多个 bug 修复。
有关进一步的更改,请参阅 上游发行注记。
SystemTap
已 rebase 到版本 5.2
SystemTap
追踪和探测工具已更新至版本 5.2。
一个显著的增强是基于 debuginfod-metadata
探测的全面激活,基于 elfutils
0.192。使用此功能,您可以编写一个 systemtap
脚本,通过搜索 debuginfod
服务器查找所有匹配名称,来将给定二进制或库的所有版本作为目标。
elfutils
已 rebase 到版本 0.192
elfutils
软件包已更新至版本 0.192。主要改进包括:
-
debuginfod
服务现在可以执行每个文件签名验证,来使用 RHEL 中的 RPM Integrity Measurement Architecture(IMA)方案来检查完整性。 -
添加了一个新的
debuginfod
API 来查询服务器元数据,如从文件名查询构建 ID。 -
debuginfod
服务器端从内核debuginfo
软件包中提取文件现在非常快 -
dwfl_set_sysroot
,dwfl_frame_unwound_source
和dwfl_unwound_source_str
函数已添加到libdw
库中。 -
eu-stacktrace
工具作为技术预览提供。详情请查看eu-stacktrace
作为技术预览提供。
现在,ld
链接器会检测应用程序是否对内存区域使用了读、写和执行权限
同时具有读、写和执行权限的内存区域是一个潜在的攻击点,因为缓冲区溢出可以允许可执行代码注入到内存中,然后执行。
有了此增强,ld
链接器会检测应用程序是否使用了具有这 3 个权限的内存区域,并向应用程序报告以下错误:
ld: error: <file_name> has a LOAD segment with RWX permissions
ld: error: <file_name> has a LOAD segment with RWX permissions
您可以使用带有 -no-error-rwx-segments
选项的 ld
来抑制错误。但是,如果链接器没有报告此错误,要防止应用程序中的潜在风险,请修改源代码,并更改您构建应用程序的方式,以便消除问题。
Jira:RHEL-59802[1]
ld
链接器现在会检测应用程序是否使用一个可执行堆栈
如果由于缓冲区溢出,放在内存可执行区域中的堆栈是潜在的攻击点,可执行代码放在这里。
有了此增强,ld
链接器会检测应用程序是否是使用可执行堆栈创建的,并报告错误,例如:
error: creating an executable stack because of -z execstack command line option error: <file>: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section) error: <file>: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section
error: creating an executable stack because of -z execstack command line option
error: <file>: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)
error: <file>: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section
您可以将 ld
与 -no-error-execstack
选项一起使用来抑制错误。但是,如果 ld
报告了错误,要防止应用程序中的潜在风险,最好是修改源代码并更改构建机器,以便其不使用可执行堆栈。
Jira:RHEL-59801[1]
binutils
现在支持 IBM Z 指令集的 arch15
扩展
有了此增强,binutils
支持 IBM Z 平台上的 arch15
扩展 CPU。开发人员现在可以使用汇编源文件中的 arch15
扩展提供的新功能,或者当更新的编译器可用时,也可以在编译的程序中使用这些新功能。这可以产生更小、更快的程序。
Jira:RHEL-50068[1]
boost-devel
软件包提供 BoostConfig.cmake
和其他官方 CMake 脚本
此增强在 boost-devel
软件包中添加了 BoostConfig.cmake
和其他官方 CMake 脚本。CMake 在一些情况下使用这些脚本来测试 boost
功能是否存在。因此,测试 boost
功能的 CMake 项目现在可以更加稳健地工作。
Go Toolset 已 rebase 到版本 1.23
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 版本太新符号的引用。 -
cmd
和cgo
功能支持-ldflags
选项,来将标记传递给 C 链接器。当您使用非常大的CGO_LDFLAGS
环境变量时,go
命令会自动使用这个标志来避免argument list too long
错误。 -
trace
工具容许部分破坏的追踪,并尝试恢复追踪数据。这在崩溃时特别有用,因为您可以获得导致崩溃的追踪。 -
在未处理的 panic 或其他致命错误后打印的回溯带有缩进,以区分第一个
goroutine
中的goroutine
的堆栈追踪。 - 使用 profile-guided 优化的编译器构建时间开销被降低到个位数百分比。
-
新的
-bindnow
链接器标志在构建动态链接的 ELF 二进制文件时启用立即函数绑定。 -
//go:linkname
链接器指令不再在标准库和在其定义上没有标记//go:linkname
的运行时中引用内部符号。 -
如果程序不再引用
Timer
或Ticker
,则垃圾收集会立即清理它们,即使它们的Stop
方法还没有调用。与Timer
或Ticker
关联的计时器渠道现在未被缓冲,容量为 0。这确保每次调用Reset
或Stop
方法时,在调用后不会发送或接收过时的值。 -
新的
unique
软件包为规范化值(如interning
或hash-consing
)提供工具。 -
新的
iter
软件包提供基本的定义,来与用户定义的迭代器一起工作。 -
slices
和maps
软件包引入了几个与迭代器一起工作的新功能。 -
新的
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-62392[1]
glibc
现在支持 GB18030-2022 编码标准
此增强更新了版本 2005 到 2022 中 glibc
中的 GB18030 编码标准的支持。使用 2022 版本,您可以使用 31 个新的转码关系以及这个标准引入的附加字符和代码点。
Jira:RHEL-56032[1]
Go Toolset rebase 到版本 1.24.4
Go Toolset 已更新至版本 1.24.4,并发布 RHSA-2025:10676 公告。
主要改进和变化包括:
语言 :
- 现在,通用类型别名被完全支持,允许类型别名参数化,以提高通用的灵活性。
工具 :
-
Go 模块系统支持
go.mod
文件中的工具
指令,支持直接管理可执行依赖关系。 -
Go
构建
、go install
和go test
命令现在支持结构化输出的 the-json
标志。 -
新的
GOAUTH
环境变量为私有模块提供增强的身份验证。
-
Go 模块系统支持
运行时和性能 :
- 运行时改进平均将 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 认证。
-
现在,提供了 ML-KEM 后密钥交换(
额外的更新 :
-
vet
工具包括一个新的分析器,用于检测测试和示例中的常见错误。 - objdump 工具现在支持更多架构。
-
Cgo
引入了改进性能和正确性的注解。
-
如需更多信息,请参阅上游发行注记。
Go Toolset 是一个滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。
Jira:RHEL-101074[1]