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)方案来检查完整性。 - 
						添加了一个新的 
debuginfodAPI 来查询服务器元数据,如从文件名查询构建 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]