This is the public release of binutils 2.9.1.0.19a for Linux, which is based on binutils 2.9.1 plus Linux/ARM support, some x86 assembler changes, some PPC bug fixes, some alpha bug fixes and an exception frame optimization bug fix. Due to the exception frame optimization bug fix, it is highly recommended that you recompile all your C++ codes. Otherwise, exception handling may not work right when an exception is thrown. According to Ian Lance Taylor , although the bug is generic, it is not likely to occur on x86. But I don't have time to confirm it. This is intended to be the final public release for binutils 2.9.1.0.x based on binutils 2.9.1 and the current 16-bit x86 assembler changes. The future release will be based on the binutils snapshot, which has a different approach for 16-bit x86 assembly code. Those changes should not affect the correct x86 assembly codes, 16-bit and 32-bit. Since I no longer have machine running libc 5, starting from this release, there will be no pre-compiled binaries for libc 5. There was some problem on Linux/alpha. The binaries generated by the new binituls may not run correctly on Linux/alpha. It turned out it was a bug in the alpha dynamic linker in glibc 2.0.6. The current glibc 2.1 and glibc 2.0.7 should be ok. This release should work on linux/x86/alpha. There are some ELF bug fixes. But I don't know if it fixes all the bugs reported on linux/sparc, Linux/MIPS and linux/PPC. I'd like to hear reports on them. Please report any bugs related to binutils 2.9.1.0.19a to hjl@lucon.org. Changes from binutils 2.9.1.0.15: 1. A PPC DWARF2 EH patch for gas. 2. Allow '.' in the middle of a symbol name for the versioning script. 3. Another ELF bug fix for program header handling. 4. Some Linux/Sparc64 patches. 5. A shared library linking patch. 6. Update cplus-dem.c from egcs 1.1.1 release. 7. Fix ARM bugs. 8. Fix MIPS/ELF bugs. 9. Fix an objdump bug. Changes from binutils 2.9.1.0.7: 1. Added AMD 3DNow! support. 2. An ELF bug fix for program header handling. 3. Add some vxworks suppport. 4. An ELF/alpha bug fix for creating large shared libraries. 5. Fix -Bsymbolic bugs for Linux/alpha. 6. An ELF/PPC bug fix. 7. Fix an exception frame optimization bug. 8. Fix a 16bit x86 gas bug. Changes from binutils 2.9.1.0.4: 1. Fix various ARM bugs. 2. A MIPS assembler ".align" bug is fixed. 3. bfd.h, bfd.h and bfdlink.h are included in the binary package. 4. 2 x86 16bit mode assembler bugs, "ret" and "movb $35,0x4(%di)", are fixed. Changes from binutils 2.8.1.0.23: 1. Update from binutils 2.9.1. 2. "push $4096" for x86 works now. 3. For x86, don't emit operand size prefix if there is no ambiguity. 4. Add "xlatb" for x86. 5. There are some major x86 assembler changes with operand size suffix. Some x86 assembler performence bugs are fixed. The Linux kernel and applications may run faster when assembled the new x86 assembler on x86. Please double check them on x86. gcc/egcs should be fine. But the Linux kernel does have some invalid x86 assembly code. In arch/i386/lib/locks.S, there was btl %dl, SYMBOL_NAME(smp_invalidate_needed) It is not valid. The register should be either 16-bit or 32-bit. 8-bit is not allowed. Previously, gas would silently turn call sys_call_table(,%eax,4) into call *sys_call_table(,%eax,4) Now, it is flagged as an error. There are asm codes like that in the Linux kernel. They should be fixed. If you have any x86 assembler problem, please let me know. 6. Fix the address for x86's lgdt/lidt. 7. An x86 assembler/disassembler bug related to popa/pusha is fixed. 8. Martynas Kunigelis 's 16-bit gas code was added. 9. Fix a Sparc/ELF bfd bug. 10. Some ARM/ELF gas changes. 11. An ELF linker bug which loads the incompatible needed shared library is fixed. IMPORTANT: The .plt format that the Alpha was using was not thread safe. So I changed it. The new format is *not* binary compatible with the old, thus you must use glibc 2.0.4 to get an ld.so that can understand it. Note that the new ld.so knows how to deal with the old .plt format, so old libraries will still work, but they should be relinked eventually for performance reasons. The file list: 1. binutils-2.9.1.0.19a.tar.gz. Source code. 2. binutils-2.9.1-2.9.1.0.19a.diff.gz. Patch against binutils 2.9.1. 3. binutils-2.9.1.0.15-2.9.1.0.19a.diff.gz. Patch against binutils 2.9.1.0.15. 4. binutils-2.9.1.0.19a-glibc.x86.tar.gz. Precompiled Linux/x86 binaries for libc 6 (glibc 2.0.6 or above). 5. binutils-2.9.1.0.19a-alpha.tar.gz. Precompiled Linux/alpha binaries for glibc 2.0.7 or above. The primary ftp sites for the compiler/C library: 1. ftp://tsx-11.mit.edu/pub/linux/packages/GCC 2. ftp://sunsite.unc.edu/pub/Linux/GCC To install the binary package, please follow the procedure very closely. Please backup/save all the files you are instructed to delete and you should do gzip -dc binutils-2.9.1.0.19a-glibc.x86.tar.gz | tar tvvf - or gzip -dc binutils-2.9.1.0.19a-alpha.tar.gz | tar tvvf - to see what is in there. Please do back up before you remove things. To install for libc 6 (glibc 2.0.6 or above), PLEASE DO 1. su root 2. cd / 3. rm -f /usr/bin/encaps /usr/bin/nm 4. gzip -dc binutils-2.9.1.0.19a-glibc.x86.tar.gz | tar xvvf - 5. ldconfig Now you have the new gas/binutils under /usr/bin and /usr/ix86-linuxaout/bin. You have to use /usr/ix86-linuxaout/bin/as and /usr/ix86-linuxaout/bin/ld -m i386linux if you want to use a.out as and ld directly. To install for alpha, PLEASE DO 1. su root 2. cd / 3. gzip -dc binutils-2.9.1.0.19a-alpha.tar.gz | tar xvvf - 4. ldconfig I have changed the target names for Linux/x86 and Linux/x86 (a.out) to ix86-linux and ix86-linuxaout respectively. The precompiled binaries are installed under /usr/ix86-linux and /usr/ix86-linuxaout. You should make appropriate symbolic links if you have a different name for the Linux/x86 target, like i586-unknown-linux. If you have an old linux library in the a.out format and you cannot obtain the newer version in the ELF format for whatever reason, you can try "objcopy --remove-leading-char" on the a.out library and see if it can link with your code in ELF. For Sybase client libraries, I did # cd sybase/lib # for f in *.a do objcopy --remove-leading-char $f done It seems to compile/link fine with libc 5.4.2x. But I don't know if it really works or not. The resulting binaries should work if the libc ABI used by the old library is unchanged in the new libc. Thanks. H.J. Lu hjl@lucon.org 12/14/98