6.9. 编译器和开发工具
系统升级中断后,ldconfig 不再崩溃
在以前的版本中,当处理中断的系统升级后,当处理不完整的共享对象时,ldconfig 工具会在 /usr/lib64 目录中意外停止分段错误。有了此更新,ldconfig 会忽略在系统升级过程中写入的临时文件。因此,在系统升级中断后,ldconfig 不再崩溃。
改进了 glibc 与对依赖项周期中涉及的共享对象使用dlclose 的应用程序的兼容性
在以前的版本中,当使用 glibc 中的 dlclose 函数在依赖项周期中卸载共享对象时,在所有其他对象被卸载前,对象的 ELF 析构函数可能还没有被调用。由于此 ELF 析构函数执行较晚,因此应用程序由于初始共享对象的依赖项已被取消初始化而经历了崩溃和其他错误。
在这个版本中,glibc 已被修复,在启动任何其他 ELF destructors 前首先调用被卸载的直接对象的 ELF destructor。因此,改进了与对依赖项周期中涉及的共享对象使用 dlclose 的应用程序的兼容性,且崩溃不再发生。
Jira:RHEL-10481[1]
改进了 glibc 宽字符写性能
在以前的版本中,glibc 中的宽 stdio 流实现不会将默认缓冲区大小视为足够大,以进行宽字符写操作,而是使用 16 字节回退缓冲区,对性能造成了负面影响。有了此更新,缓冲区管理已被修复,且使用整个写缓冲区。因此,glibc 宽字符写性能提高了。
Jira:RHEL-19824[1]
glibc 动态链接器可防止应用程序使用来自自定义 malloc 实现的 TLS 访问的 reentrant malloc 调用
有些应用程序提供了一个自定义的 malloc 动态内存分配实现,它使用全局动态线程-local 存储(TLS)而不是 initial-exec TLS。在以前的版本中,带有使用全局动态 TLS 的捆绑 malloc 调用的应用程序可能会遇到对应用程序的 malloc 子系统重新发送调用的情况。因此,应用程序 malloc 调用会因为堆栈耗尽或内部数据结构的意外状态而崩溃。
随着 RHBA-2024:5834 公告的发布,glibc 动态链接程序会从自定义 malloc 实现中检测 TLS 访问。如果在 malloc 调用期间检测到 TLS 访问,则会跳过 TLS 处理期间进一步的调用,并会阻止重新分配(reentrant malloc 调用)。