第 6 章 编译器和工具
在命令中断后 tcsh
不再处于不一致的状态
中断 eval sleep 10 命令会使
tcsh
shell 处于 incosistent 状态。因此,需要按 Ctrl+D 组合键两次才能成功退出 shell。在这个版本中,tcsh
会在按 Ctrl+D 后正确退出。(BZ#1219923)
更正 tcsh
中的 if
语句的解析
如果
then
关键字前面没有空格,则 tcsh
shell 无法正确解析 if
语句。因此,如果
语句的分支被处理不正确,这会导致代码的不正确部分和行为错误执行。已修复 tcsh
shell,以便在缺少 then
关键字前正确处理源代码。(BZ#1231097)
现在,在请求时正确应用 RELRO 保护
在以前的版本中,系统加载程序启动的二进制文件在某些情况下会缺少 Relocation Read-Only (RELRO)保护,即使应用程序构建时已被明确请求。这是因为静态链接器和系统加载程序间的错误沟通。链接器的底层源代码已被调整,以确保加载程序可以应用 RELRO 保护,从而为应用程序恢复安全功能。应用程序以及所有依赖的对象文件、存档和库使用之前版本 binutils 构建,以更正此缺陷。(BZ#1227839)
tcsh
正确解释转义序列
在以前的版本中,
tcsh
命令语言解释器错误地消耗某些转义序列,它以反斜杠 \
字符开头。这个版本修复了对转义序列的解释,tcsh
现在返回与 Red Hat Enterprise Linux 5 相同的结果。(BZ#1301857)
OpenMP heuristics 调整了多 CPU 系统上的性能
GNU OpenMP 运行时(
libgomp
)使用的 Heuristics 用于确定延迟缩减措施,以考虑多处理器系统上的 CPU 关联性,并使用较低的旋转计数。因此,因为资源不足导致的死锁或运行非常慢的程序会大大加快运行。(BZ#1229852)
减少锁定竞争并提高了线程应用程序调用 localtime_r ()的性能。
以前,localtime_r ()函数中的锁争用,对需要经常调用这个功能的线程应用程序性能降低。
glibc
库的内部例程中的锁定采购已被重新组织,以减少锁定竞争的可能性。(BZ#1244585)
当处理 $$eval
命令或 $(shell)
结构时,make
工具不再意外终止。
并行构建不再意外终止
在以前的版本中,一个 bug 会导致
make
工具显示错误消息,并在执行并行构建时意外终止。这个问题现已解决,并行构建不再会因为这个错误而崩溃。(BZ#861189)
由于 $(eval)
结构,并行构建不再意外终止
当同时调用 dprintf ()和 fork ()时,多线程应用程序不再崩溃
以前,使用 dprintf ()和 fork ()
glibc
功能的多线程应用程序可能会因为分段错误而意外终止。在这个版本中,fork () 实现已被修复,忽略 dprintf ()创建的临时流,上面描述的问题不再发生。(BZ#1275384)
改进了核心 C 库(glibc)以提高 malloc ()可扩展性
在实现
malloc ()
函数时,可能会导致跨线程不必要的内存分配请求序列化。在这个版本中解决了这个问题,提高了频繁创建和销毁线程的应用程序的分配请求的并发吞吐量。(BZ#1264189)
改进了 /etc/mcelog/mcelog.conf
中的文档
位于
/etc/ mcelog
/mcelog.conf
的默认 mcelog 配置文件现在包含多个可用选项(如 mem-ce-error-log
)。(BZ#1170580)
当审计模块提供 DSO 路径时,动态链接器(ld.so)不再失败
在以前的版本中,当审计模块提供备用 DSO (动态共享对象)路径时,
ld.so
动态链接程序会意外终止并出现分段错误。这个版本解决了这个程序错误,现在动态链接器跟踪原始 DSO 路径以备将来参考,不再会失败。(BZ#1211098)
glibc 和 tzdata 更新不再替换 /etc/localtime
符号链接
在以前的版本中,在
/etc/localtime
文件是一个符号链接的系统上,glibc 和 tzdata 软件包的更新会将链接替换为 /etc/sysconfig/clock
配置文件中定义的 time-zone 文件。应用了补丁来解决问题,因为符号链接不再被替换 /etc/localtime
。对于最佳兼容性,建议不要直接修改 /etc/localtime
。相反,编辑 /etc/sysconfig/clock
配置文件,并在之后执行 tzdata-update
命令。(BZ#1200555)
glibc
POSIX 实时支持在大型 TLS 数据时不再失败
glibc
库中的 POSIX 实时支持中的一个缺陷会导致在大型线程本地存储(TLS)数据中存在异步 I/O 或某些计时器 API 调用失败。librt
库已被修复,当应用程序中存在大型 TLS 数据时,受影响的 API 不再返回错误消息。(BZ#1299319)
iconv
不再添加冗余的转换序列
在以前的版本中,
iconv
工具有时会为 IBM930、IBM933、IBM935、IBM937 和 IBM939 字符集错误处理字符转换。因此,iconv
的输出中会包括冗余的转换序列。生成的非格式输出可能会导致无法读取输出数据。字符转换例程已被修正,不再输出冗余转换序列。(BZ#1293914)
/etc/gai.conf
不再列为 glibc-common 软件包
在以前的版本中,当使用 rpm -V 命令检查 glibc-common 软件包时,
/etc/gai.conf
配置文件可能会标记为修改,即使该软件包没有该文件。在这个版本中,从 glibc-common 中删除错误的文件条目。因此,rpm -V glibc-common 不再列出 /etc/gai.conf
配置文件已修改。(BZ#1223818)
java-1.8.0-openjdk 安装的命名规则一致
在以前的版本中,java-1.8.0-openjdk 软件包的安装目录自动生成的名称与 java-1.6.0-openjdk 和 java-1.7.0-openjdk 软件包的安装目录名称不一致。因此,与 java-1.8.0-openjdk 交互时,预期一致的 Java 命名模式的应用程序和自动化工具会失败。在这个版本中,java-1.8.0-openjdk 安装目录与之前的版本相同,这可以防止上面描述的问题。请注意,由于路径结构的变化,现在无法在更新前恢复到 java-1.8.0-openjdk 版本。(BZ#1217177)
LDAP 绑定密码会被正确模糊处理
当使用 ipa-replica-image 时,sosreport
不再超时
在以前的版本中,使用 ipa-replica-image 命令会导致
sosreport
工具执行更长的时间,并在某些情况下会超时。另外,在 sosreport
中捕获了对认证相关问题进行故障排除所需的所有信息。在这个版本中,确保 sosreport
收集足够的与认证相关的信息,并删除 ipa-replica-image,这可以防止上面描述的超时发生。(BZ#1203947)
现在,在使用- acls 时 tar
可以正确地设置 ACL
tar
在以前的版本中,当使用--
acls
选项提取 tar 文件时,提取的文件从父目录继承默认的访问控制列表(ACL)。在这个版本中,当使用 when- acls
时,tar
会提取存档中设置的相同 ACL 的所有文件和目录。(BZ#1220891)
tar
可以正确地处理具有大 UID 的用户创建的存档
当 UID 或 GID 大于 2097151 的用户创建 pax 存档时,会正确创建归档,但
tar
会返回误导警告信息和非零退出状态。这个 bug 已被修复,tar
现在使用正确的退出状态退出,且没有假的警告信息。(BZ#1247788)
已修复 OProfile 以防止被长参数导致的缓冲区溢出
在此次更新之前,OProfile 中的参数检查代码会遭遇问题,在传递长路径名称或事件单元掩码时可能会导致缓冲区溢出。这个版本解决了问题,长参数不再导致缓冲区溢出。(BZ#1206242)
OProfile
现在可以在 IBM POWER7+ 系统中正常工作
在此次更新之前,IBM POWER 系统的
OProfile
使用旧版本的 libpfm
库构建,这会导致对 POWER7+ 处理器不可用,operf
和 ocount
工具无法在新的 IBM POWER 系统上运行。这个程序错误已被解决,operf
和 ocount
命令现在可以在 POWER7+ 系统中正常工作。(BZ#1303970)
应用程序不再会失败,并显示 'dlopen: 无法加载使用静态 TLS' 的更多对象。
glibc
动态加载程序无法加载使用静态线程本地存储(TLS)的 16 多个共享库。因此,应用程序可能会失败并显示出错信息,dlopen : 无法加载任何带有静态 TLS 的对象
。这个程序错误已被解决,在这种情况下,应用程序可以正常启动,如果有足够的静态存储空间。(BZ#1198802)
GDB
现在生成较小的核心文件,并尊重 core-dump 过滤
gcore
命令(为 GDB
提供自己的核心转储功能)已更新,以更密切地模拟 Linux 内核内核转储代码的功能,从而生成较小的 core-dump 文件。GDB
现在遵循 /proc/PID/coredump_filter
文件,该文件控制将哪些内存片段写入 core-dump 文件。(BZ#1085906)
GDB
不再使用已删除的可执行文件终止运行的进程
在此次更新之前,
GDB
会尝试附加到带有已删除可执行文件的正在运行的进程会意外终止该进程。这个程序错误已被解决,GDB
不再错误地使用已删除的可执行文件终止进程。(BZ#1219747)
修复了 Bash
中的信号处理
由于信号处理程序函数调用某些 signal-unsafe 功能,如
malloc ()
,因此在某些情况下 Bash
shell 在收到信号后变得无响应。此更新可确保信号处理程序不再调用 signal-unsafe 函数,这可以防止上面描述的错误发生。(BZ#868846)
命令替换现在可以在 bash
中的算术表达式中工作
在以前的版本中,
bash
在对 shell 解析器的递归调用之间不会保存输入行状态,从而导致 shell 无法解析命令替换在 arithmetic 表达式中。例如,以下命令失败:
for point in "/boot"; do disk_dir["$( df -P $point | awk '{print $1}' )"]=1; done
for point in "/boot"; do disk_dir["$( df -P $point | awk '{print $1}' )"]=1; done
这个 bug 已被修复,
bash
现在会在对解析器进行递归调用前保存输入行状态,命令替换现在可以在 arithmetic 表达式内正常工作。(BZ#1207803)
KornShell 现在重置并修改信号陷阱,不再崩溃
在以前的版本中,当尝试重置或修改某些信号陷阱时,KornShell (ksh)会意外终止并出现分段错误。在这个版本中,ksh 不会尝试释放用于字符串文字的内存。因此,ksh 不再会在上述情况下崩溃。(BZ#1247383)
不支持扩展属性和 ACL 时,打印 ls 输出不再需要很长时间
在以前的版本中,列出文件系统上的文件和目录而无需对扩展属性和访问控制列表(ACL)的支持,对每个文件都需要不必要的和高成本 lstat ()和 lgetxattr ()系统调用。因此,打印 ls 命令的输出需要几秒钟时间。现在,当
不支持
系统调用的结果时,ls 不会在此挂载点上再次尝试调用。因此,在上述情况下,ls 输出的打印速度显著提高。(BZ#1248141)
在分叉时,KornShell 不再省略命令列表中的后台进程
由于 KornShell (ksh)中的一个错误,在命令列表中分叉后台进程之前可能会完全省略该进程。处理分叉子进程的源代码已被修改,命令列表中的后台进程现在会如预期执行。(BZ#1217236)
在 KornShell 中,多字节字符不再损坏
在以前的版本中,在 KornShell (ksh)的命令行选项变量后,多字节 unicode 解析器会收到切换输入。因此,命令行变量后的多字节字符被破坏。补丁已被应用于修复多字节输入解析。因此,在上述情形中,可以正确处理多字节字符。(BZ#1256495)
Oracle ACFS 现在包含在已知的文件系统中
在以前的版本中,Oracle ASM 集群文件系统(ACFS)没有列在
stat
和 tail
工具的已知文件系统中。因此,tail
工具会输出一条错误消息,表示文件系统无法识别。ACFS 已添加到已知文件系统列表中,描述的情形中不再会出现错误消息。
另外,上游识别的其他文件系统也被添加到已知文件系统列表中,即
acfs
,bpf_fs
,btrfs_test
,configfs
,efivarfs
,exofs
,f2fs
, hfs+ ,hfs+
, hfsx
,hostfs
, , ibrix ,ibrix
,log
fs ,
nsfs,
overlayfs, smack
fs, s
nfs, trace
fs , 和 ubi
fs .(BZ#1280333)
netfs stop 命令现在只卸载相关的循环设备
在以前的版本中,在停止
netfs
服务时,所有循环设备都非常显著。在这个版本中,在运行 netfs stop 命令时,只卸载相关的循环设备;即,在网络挂载之上挂载的设备。(BZ#1156231)