An updated binutils package that fixes several bugs and adds various enhancements is now available for Red Hat Enterprise Linux 6.
binutils is a collection of binary utilities, including ar (for creating, modifying and extracting from archives), as (a family of GNU assemblers), gprof (for displaying call graph profile data), ld (the GNU linker), nm (for listing symbols from object files), objcopy (for copying and translating object files), objdump (for displaying information from object files), ranlib (for generating an index for the contents of an archive), readelf (for displaying detailed information about binary files), size (for listing the section sizes of an object or archive file), strings (for listing printable strings from files), strip (for discarding symbols), and addr2line (for converting addresses to file and line).
- Prior to this update, the readelf utility added
0x40into a character in order to display a non-printing character but did not do so when processing a multibyte character. As a result, the readelf utility did not display a multibyte character in the ELF header correctly. The code has been corrected and readelf no longer displays garbled characters when processing multibyte, or non-ASCII, characters.
- An unneeded patch to bineutils caused a large link time degradation when using the
binutils --build-idcommand. This update removes that patch.
- An Operating System (OS) Application Binary Interface (ABI) describes the low-level interface between a program and the operating system (OS/ABI). The indirect meta-function,
ifunc(), whose value can be determined at load time, allows for architecture dependent optimization. Prior to this update, the OS/ABI preprocessor macro was erroneously set to
UNIX - Linuxinstead of
UNIX - System Vin an ELF header by a dynamic executable which used
ifunc(). This update applies a backported patch which corrects the code and the error no longer occurs.
- Prior to this update, the binutils'
stripcommand, which is run as part of the RPM build process, did not copy the
EI_OSABIvalue in the ELF file header properly, it set the value to zero. Consequently, if the
EI_OSABIfield of the debug file had a value of
3(ABI tag for GNU/Linux), in the stripped file it was erroneously set to
UNIX - System V). This update corrects the problem and
stripnow leaves the field intact.
- On 64-bit PowerPC platforms, the position of
-ldlin the list compiler options caused unexpected behavior when compiling C++ code. If
-ldlwas not placed at the end of parameter list, the GNU C Compiler (GCC) failed with an error in the format:
libtest.a(some_object_file.o): undefined reference to `.dlerror'With this update, the code has been corrected and the GCC compiler functions as expected.
- When compiling C source code using the GNU C Compiler (GCC), a Table Of Contents (TOC), is created for every executable file. Prior to this update, compiling C++ code using GCC for 64-bit PowerPC, using
-mcmodel=small -mno-minimal-tocas options, GNU linker, (ld), erroneously decided that if a section did not make use of the TOC it could belong to any TOC group. Consequently, when a local function call was made from one section of code to another section in the same object file, due to the two sections being assigned to different TOC groups, a failure occurred and an error message in the following format was logged.
libbackend.a(cse.o)(.text.unlikely+0x60): sibling call optimization to `.opd' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.opd' externThis update applies an upstream patch to improve the partitioning of sections of code, which make local function calls, into multiple TOC groups. As a result the error no longer occurs in the scenario described.
NoteIt is necessary to relink executables and shared libraries containing objects which were compiled with
-mcmodel=small -mno-minimal-toc. Therefore code should be recompiled by running these commands again after applying the update.
- Prior to this update, after compiling a kernel from source code with debugging information, some debug information was missing. Consequently, when using the GNU Project's debugger (GDB) utility, if a user issued the command
l setup_archto determine the target architecture, the following error was displayed.
No line number known for setup_archThis update corrects the code and the GDB utility now correctly displays the architecture for which the code was compiled.
- Compilers used for producing code optimized for 64-bit PowerPC platforms use the default Red Hat Enterprise Linux system linker, ld, provided with the operating system to produce executables and libraries. Some object code generated by the IBM XL compiler caused ld to terminate unexpectedly with a segmentation fault. Consequently, users were not able to produce optimized executables or libraries. With this update, a backported patch has been applied to correct the problem and ld no longer crashes in the scenario described.
- When linking FORTRAN programs with the IBM XL compiler and the default Red Hat Enterprise Linux 6.1 system linker, ld sometimes terminated unexpectedly with a segmentation fault. This updates applies an upstream patch to correct the problem and ld no longer crashes in the scenario described.
- The assembler, as, when generating a memory reference to a local symbol plus or minus an offset, did not include the constant offset when generating 32-bit x86 code. Consequently, when the local symbol being referenced was defined before the instruction using the symbol with an offset, an error would occur. This update corrects the code and the problem no longer occurs.
Users of binutils are advised to upgrade to this updated package, which fixes these bugs and adds these enhancements.