1.3. Limitations

There are several limitations on interoperation between the GNU tools and libraries and RVCT:

The GNU binutils (including ld) from CodeSourcery's 2005-q3-2 release cannot consume RVCT 3.0 objects

For linking with the GNU C library, you should use the 2005-Q3-2 release of the CodeSourcery tools (or a later release). However, due to updates in the ARM ABI ELF specification, the binary utilities (binutils) from this CodeSourcery release cannot consume object files built by RVCT 3.0. Support for the new ELF ABI revision is in the 2006-q1 and later releases.

RVCT cannot be used for compiling 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.

In addition, 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 RVCT as there are no guarantees that calls would be made correctly between the kernel and the driver code. You must use the GNU toolchain and the old GNU ABI when building the kernel and kernel modules.

Only ARM architecture versions 5TE and above are supported

See "Target Requirements" below.

C++ exceptions are not supported

These are currently only compatible at the ABI-specified interface. The implementation details differ such that C++ exceptions from armcc-compiled code cannot be handled by the GNU C/C++ library, and likewise exceptions from classes in objects compiled with GNU g++ cannot be handled by the RVCT libraries.

You must take care when using alloca()

This is compiler-specific, therefore when calling the function from RVCT-compiled code you must statically link against the implementation in the RVCT libraries. This is contained in the alloca.o and rt_alloca_state.o C library objects. Note also that the RVCT library implementation of alloca() is not thread-safe and using alloc() with setjmp() and longjmp() may lead to memory leaks. You may prefer to write your own alloc() implementation around malloc(), however this would not be trivial.

GCC inline assembly code is not compatible with RVCT and vice versa

Likewise, standard assembly language files cannot be built by both armasm and the GNU assembler (gas) as they use different syntax. The recommended solution is to conditionally use alternative copies of your assembly code with the appropriate syntax for each toolchain.

Limitations on wide character variables (wchar_t)

RVCT 3.0 only supports unsigned short type wide character variables. However, RVCT 3.0 SP1 adds support for unsigned int type for wide character variables, through the use of the --wchar32 compiler option.

Copyright © 2005-2006. All rights reserved.DAI0150B
Non-Confidential