There are several limitations on interoperation between the GNU tools and libraries and the ARM Compiler toolchain:
- GNU tool and library compatibility with the ARM Compiler toolchain
Be aware of the following compatibility requirements:
CodeSourcery 2008q1 is the earliest recommended release.
CodeSourcery 2005q3 is the earliest release that provides basic interoperation with the ARM Compiler toolchain, however, releases earlier than 2008 have known interoperability issues and you might encounter problems using them.
If libraries from a distribution or mainline GNU toolchain build are used, their sources tend to be behind CodeSourcery releases in terms of bug fixes, so a more recent version might be required to avoid interoperation problems.
You must use the 2005-q3-2 release of the CodeSourcery tools (or a later release). Because of updates in the ARM Application Binary Interface (ABI) ELF specification, the binary utilities (binutils) from this CodeSourcery release cannot consume object files built with the ARM Compiler toolchain. Support for the new ELF ABI revision is in the 2006-q1 and later releases.
There are slight implementation differences in the way C++ exceptions are handled between the ARM Compiler toolchain and GCC. Because of these differences, the GNU C/C++ library prior to the CodeSourcery 2007-q1-10 release did not support code generated by the ARM Compiler toolchain that used C++ exceptions. Therefore, to use C++ exceptions you must use the CodeSourcery 2007-q1-10 release or later. This includes using these libraries on the filesystem of your target.
- The ARM Compiler toolchain cannot be used for building the Linux kernel or kernel-based code, such as device drivers or other kernel modules
This is because a significant portion of the kernel code is written in assembly language using the GNU assembler (GAS) syntax. This is incompatible with armasm, and there is no performance gain to be made from rebuilding such code with a different assembler.
Also, the function interfaces for the kernel code prior to version 2.6.16 have not been written to comply with the ABI. This means that drivers and other kernel modules cannot be compiled using the ARM Compiler toolchain because there are no guarantees that calls would be made correctly between the kernel and the driver code. You must use the GNU toolchain when building the kernel and kernel modules.
- ARM architecture v4T is not fully supported
The following GCC features are not supported:
assembly source, both inline assembly and separate GNU assembler (GAS) source files