Chapter 6. Compiler and Tools

tcsh no longer in an inconsistent state after a command interruption

Interrupting the eval sleep 10 command left the tcsh shell in an incosistent state. Consequently, it was necessary to press the Ctrl+D key combination twice to successfully exit the shell. With this update, tcsh correctly exits after pressing Ctrl+D once. (BZ#1219923)

Correct parsing of the if statement in tcsh

The tcsh shell failed to correctly parse the if statements if there was no space before the then keyword. Consequently, incorrect branches of the if statement were processed, which led to execution of incorrect sections of the code and misbehavior. The tcsh shell has been fixed to correctly process the source code when spaces before the then keyword are missing. (BZ#1231097)

RELRO protection now properly applied when requested

Previously, binary files started by the system loader would, in some cases, lack the Relocation Read-Only (RELRO) protection even though this had been explicitly requested when the application was built. This was due to a miscommunication between the static linker and the system loader. The underlying source code of the linker has been adjusted to ensure that it makes it possible for the loader to apply the RELRO protection, thus restoring the security feature for applications. Applications and all dependent object files, archives, and libraries built with a previous version of binutils should be rebuilt to correct this defect. (BZ#1227839)

Escape sequences correctly interpreted by tcsh

Previously, the tcsh command-language interpreter incorrectly consumed certain escape sequences, which start with the backslash \ character. This update fixes the interpretation of the escape sequences, and tcsh now returns the same results as in Red Hat Enterprise Linux 5. (BZ#1301857)

OpenMP heuristics adjusted for higher performance on multi-CPU systems

Heuristics used by the GNU OpenMP runtime ( libgomp ) to determine latency-reduction measures have been adjusted to take into account CPU affinity on multiprocessor systems and to use a lower spin count. As a result, programs that appeared deadlocked or ran very slowly due to resource starvation now run considerably faster. (BZ#1229852)

Reduced lock contention and increased performance for threaded applications calling localtime_r()

Lock contention in the localtime_r() function previously decreased performance for threaded applications that needed to call this function frequently. The lock acquisition in the glibc library's internal routines has been reorganized to decrease the possibility of lock contention. (BZ#1244585)

The make utility no longer terminates unexpectedly when processing $$eval commands or the $(shell) construct.

Due to bugs in the make package, the make utility sometimes terminated unexpectedly when processing files which contained $$eval commands or $(shell) processes. These bugs have been fixed, and make no longer crashes in these situations. (BZ#835483)

Parallel builds no longer terminate unexpectedly

Previously, a bug caused the make utility to display an error message and terminate unexpectedly when executing parallel builds. This has now been fixed, and parallel builds no longer crash due to this bug. (BZ#861189)

Parallel builds no longer terminate unexpectedly due to $(eval) constructs

Previously, a bug caused the make utility to terminate unexpectedly when executing parallel builds containing $(eval) constructs. This has now been fixed, and parallel builds no longer crash due to this bug. (BZ#1093149)

Multithreaded applications no longer crash when calling dprintf() and fork() concurrently

Multithreaded applications that use the dprintf() and fork() glibc functions concurrently could previously terminate unexpectedly with a segmentation fault. With this update, the fork() implementation has been fixed to ignore temporary streams created by dprintf(), and the described problem no longer occurs. (BZ#1275384)

Core C library (glibc) enhanced to increase malloc() scalability

A defect in the implementation of the malloc() function could result in the unnecessary serialization of memory allocation requests across threads. This update fixes the problem and substantially increases the concurrent throughput of allocation requests for applications that frequently create and destroy threads. (BZ#1264189)

Improved documentation in /etc/mcelog/mcelog.conf

The default mcelog configuration file found at /etc/mcelog/mcelog.conf now contains better descriptions for several available options, such as mem-ce-error-log. (BZ#1170580)

The dynamic linker (ld.so) does not fail anymore when an audit module provides a DSO path

Previously, when an audit module provided an alternate DSO (dynamic shared object) path, the ld.so dynamic linker terminated unexpectedly with a segmentation fault. This update addresses the bug, and now the dynamic linker keeps track of the original DSO path for future reference and does not fail anymore. (BZ#1211098)

glibc and tzdata updates no longer replace /etc/localtime symbolic links

Previously, on systems where the /etc/localtime file was a symbolic link, updates of the glibc and tzdata packages replaced the link with the time-zone file defined in the /etc/sysconfig/clock configuration file. A patch has been applied to address the problem and /etc/localtime as a symbolic link is no longer replaced. For optimum compatibility, it is recommended not to modify /etc/localtime directly. Instead, edit the /etc/sysconfig/clock configuration file and execute the tzdata-update command afterwards. (BZ#1200555)

glibc POSIX real-time support no longer fails on large TLS data

A defect in the POSIX real-time support in the glibc library caused asynchronous I/O or certain timer API calls to fail in the presence of large thread-local storage (TLS) data. The librt library has been fixed, and the impacted APIs no longer return error messages when large TLS data is present in applications. (BZ#1299319)

iconv no longer adds a redundant shift sequence

Previously, the iconv utility sometimes mishandled character conversion for the IBM930, IBM933, IBM935, IBM937, and IBM939 character sets. Consequently, a redundant shift sequence was included in the output of iconv. The generated non-conforming output could result in an inability to read the output data. The character conversion routines have been corrected and no longer output a redundant shift sequence. (BZ#1293914)

/etc/gai.conf no longer listed as belonging to the glibc-common package

Previously, the /etc/gai.conf configuration file could be flagged as modified when the rpm -V command was used to check the glibc-common package, even though that package did not own that file. This update removes the erroneous file entry from glibc-common. As a result rpm -V glibc-common no longer lists the /etc/gai.conf configuration file as modified. (BZ#1223818)

Naming convention for java-1.8.0-openjdk installation made consistent

Previously, the automatically generated name for the installation directory for the java-1.8.0-openjdk package was not consistent with installation directory names for the java-1.6.0-openjdk and java-1.7.0-openjdk packages. As a consequence, applications and automated tools that expected a consistent Java naming pattern failed when interacting with java-1.8.0-openjdk. With this update, java-1.8.0-openjdk installation directory follows the same pattern as the previous versions, which prevents the described problem. Note that due to the changes in the path structure, it is now impossible to revert to a version of java-1.8.0-openjdk prior to this update. (BZ#1217177)

LDAP bind passwords are properly obfuscated

In some cases, it was previously possible for the sosreport utility to capture LDAP bind credentials in plain text. This problem has been fixed, and LDAP bind passwords are now obfuscated in sosreport as expected. (BZ#1227462)

sosreport no longer times out when ipa-replica-image is used

Previously, using the ipa-replica-image command caused the sosreport utility to take longer to execute and in some cases to time out. In addition, not all the information needed to troubleshoot certification-related problems was captured in sosreport. This update ensures that sufficient certification-related information is collected by sosreport and removes ipa-replica-image, which prevents the described timeouts from occurring. (BZ#1203947)

tar now correctly sets ACL when --acls is used

Previously, when a tar file was extracted using the --acls option, the extracted files inherited the default Access Control Lists (ACL) from the parent directory. With this update, when --acls is used, tar extracts all files and directories with the same ACLs that are set in the archive. (BZ#1220891)

tar correctly handles archives created by a user with a big UID

When a user with a UID or GID greater than 2097151 created a pax archive, the archive was created correctly but tar returned a misleading warning message and a non-zero exit status. This bug has been fixed, tar now exits with the correct exit status and no false warning messages. (BZ#1247788)

OProfile fixed to prevent buffer overflow caused by long arguments

Prior to this update, the argument-check code in OProfile suffered from a problem that could cause a buffer overflow when passed a long path name or event unit mask. This update addresses the problems, and long arguments no longer cause a buffer overflow. (BZ#1206242)

OProfile now works correctly on IBM POWER7+ systems

Prior to this update, OProfile for IBM POWER Systems was built using an old version of the libpfm libraries, which resulted in support for the POWER7+ processors not being available and the operf and ocount tools not being able to run successfully on new IBM POWER Systems. This bug has been fixed, and the operf and ocount commands now work as expected on POWER7+ systems as well. (BZ#1303970)

Applications no longer fail with 'dlopen: cannot load any more object with static TLS'

The glibc dynamic loader was unable to load more than 16 shared libraries that make use of static thread-local storage (TLS). Consequently, applications could fail with an error message, dlopen: cannot load any more object with static TLS. This bug has been fixed, and applications now start correctly in this scenario, provided sufficient static storage space is available. (BZ#1198802)

GDB now generates smaller core files and respects core-dump filtering

The gcore command, which provides GDB with its own core-dumping functionality, has been updated to more closely simulate the function of the Linux kernel core-dumping code, thus generating smaller core-dump files. GDB now also respects the /proc/PID/coredump_filter file, which controls what memory segments are written to core-dump files. (BZ#1085906)

GDB no longer kills running processes with deleted executables

Prior to this update, GDB attempting to attach to a running process with a deleted executable would accidentally kill the process. This bug has been fixed, and GDB no longer erroneously kills processes with deleted executables. (BZ#1219747)

Fixed signal handling in Bash

Due to the signal handler function calling certain signal-unsafe functions such as malloc(), the Bash shell in some cases became unresponsive after it received a signal. This update ensures that the signal handler no longer calls signal-unsafe functions, which prevents the described bug from occurring. (BZ#868846)

Command substitution now works inside arithmetic expressions in bash

Previously, bash did not save input line state across recursive calls to the shell parser, causing the shell to fail to parse command substitution inside arithmetic expressions. For example, the following command failed:
for point in "/boot"; do disk_dir["$( df -P $point | awk '{print $1}' )"]=1; done
This bug has been fixed, bash now saves input line state before making recursive calls to the parser, and command substitution now works inside arithmetic expressions. (BZ#1207803)

KornShell now resets and modifies signal traps as expected and no longer crashes

Previously, KornShell (ksh) terminated unexpectedly with a segmentation fault when attempting to reset or modify certain signal traps. With this update, ksh does not attempt to free memory used for a string literal. As a result, ksh no longer crashes in the described situation. (BZ#1247383)

Printing the ls output no longer takes a long time when extended attributes and ACLs are not supported

Previously, listing files and directories on file systems without support for extended attributes and access control lists (ACLs) involved unnecessary and high-cost lstat() and lgetxattr() system calls for every file. As a consequence, it could take several seconds to print the output of the ls command. Now, when the result of the system call is not supported, ls does not try the call again on this mount point. As a result, the printing speed of the ls output has improved significantly in the described situation. (BZ#1248141)

KornShell no longer omits a background process in a command list when forking

Due to a bug in KornShell (ksh), forking a background process in a command list could previously omit that process completely. The source code that handles forking sub-processes has been modified, and a background process in a command list is now executed as expected. (BZ#1217236)

Multibyte characters are no longer corrupted in KornShell

Previously, the multibyte unicode parser received shifted input after a command-line option variable in KornShell (ksh). Consequently, the multibyte character after a command-line variable became corrupted. A patch has been applied to fix multibyte input parsing. As a result, multibyte characters are handled correctly in the described situation. (BZ#1256495)

The Oracle ACFS is now included among known file systems

Previously, the Oracle ASM Cluster file system (ACFS) was not listed among known file systems for the stat and tail utilities. As a consequence, the tail utility printed an error message stating that the file system was not recognized. ACFS has been added to the list of known file systems, and the error message no longer appears in the described situation.
In addition, other file systems recognized by upstream have been added to the list of known file systems as well, namely acfs, bpf_fs, btrfs_test, configfs, efivarfs, exofs, f2fs, hfs+, hfsx, hostfs, ibrix, logfs, nsfs, overlayfs, smackfs, snfs, tracefs, and ubifs. (BZ#1280333)

The netfs stop command now only unmounts relevant loop devices

Previously, all loop devices were umnounted when stopping the netfs service. With this update, when running the netfs stop command, only relevant loop devices are unmounted; that is, the ones that are mounted on top of a network mount. (BZ#1156231)