7.3.5. Using two copies of the same function

You may wish to include two functions with the same name, one compiled for ARM and the other for Thumb.

Duplicate definitions can be useful, for example, if you have a speed-critical routine in a system with 16-bit and 32-bit memory where the overhead of the interworking veneer would degrade the performance too much.

The linker allows duplicate definitions provided that each definition is of a different type. That is, one definition defines a Thumb routine and the other defines an ARM routine. The linker generates a warning message if there is a duplicate definition of a symbol:

Both ARM & Thumb versions of symbol present in image

This is a warning to advise you in case you accidentally include two copies of the same routine. If that is what you intended, you can ignore the warning.


When both versions of an identically-named routine are present in an image, and a call is made through a function pointer, it is not possible to determine which version of the routine will be called. Therefore, if you are using function pointers to call such routines, you must compile both routines, and the routine making the call, for interworking.

Copyright © 1997, 1998 ARM Limited. All rights reserved.ARM DUI 0040D