6.10. 编译器和开发工具
GCC Toolset 13:GCC 现在在启用了向量化的 IBM POWER9, Little Endian 上正确编译代码
在以前的版本中,当在启用了向量化 IBM POWER9、Little Endian 上编译代码时,GCC 编译器会生成不正确的代码。扩展器中的 Register Transfer Language (RTL)模式已被修复,代码现在可以正确编译。
Jira:RHEL-45190[1]
glibc
动态链接器防止使用来自自定义 malloc
实现的 TLS 访问的应用程序所做的可重入 malloc
调用
有些应用程序提供了一个自定义的 malloc
动态内存分配实现,它使用全局动态本地线程存储(TLS),而不是初始执行的 TLS。在此次更新之前,带有使用全局动态 TLS 的捆绑的 malloc
调用的应用程序可能会遇到对应用程序的 malloc
子系统的可重入调用。因此,应用程序 malloc
调用因为堆栈耗尽或内部数据结构的意外状态而崩溃。有了此更新,glibc
动态链接程序会检测自定义 malloc
实现中的 TLS 访问。如果在 malloc
调用期间检测到 TLS 访问,则会在 TLS 处理期间跳过进一步的调用,并阻止可重入 malloc
调用。
TLS 数据不再被 ELF 构造器的 dlopen ()
调用覆盖
在以前的版本中,当从 ELF 构造器调用 dlopen ()
函数时,glibc
动态链接器无法正确跟踪线程本地存储(TLS)初始化状态。因此,在应用程序修改后,TLS 数据会被恢复为原始值。在这个版本中,动态链接器使用单独的标记来跟踪每个共享对象的 TLS 初始化。因此,TLS 数据不再被 ELF 构造器中的 dlopen
() 函数的调用意外覆盖。
Perftools 不再无法处理 LTO 调试信息
在以前的版本中,binutils
集合中的 Binary File Descriptor (BFD)库(其被性能工具使用,来从二进制文件读取调试信息)无法处理启用了 Link Time Optimization (LTO)的 GCC 编译器生成的调试信息。因此,perftools 会显示错误消息,并在检查包含 LTO 调试信息的文件时无法正确执行。BFD 库已被更新,以处理在启用了 LTO 的编译过程中生成的调试信息,受影响的 perftools 可以成功处理此类调试信息。
Jira:RHEL-43758[1]