Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Both declspec modifiers and linker-generated thunking routines add additional 32-bit words of text-space instruction.
In general, if a program contains only a few interworking functions, but the interworking functions are called from many places; a linker-generated thunking routine probably results in smaller overall code size.
If a program contains many different interworking functions, but the interworking functions are called from only a few places, using the iwcall or iw16 declspec results in code size similar to that required by a linker-generated thunking routine.
If code size efficiency is important, keep in mind the following additional word requirements:
The iwcall and iw16 declspecs require an additional 32-bit word of text-space instruction per interworking call.
Because the function address must be placed into and loaded from the literal pool, the function address can add up to two 32-bit words of text space instruction to the space required by the linker-generated thunking routine.
Because different load instructions can share a given literal pool entry, some function calls do not add words for a declspec. The literal pool entry can be loaded into a register that different BX instructions use without reloading the register.
Allowing the linker to generate a thunking routine for the ARM compiler requires three additional 32-bit words per called function but no additional words at the call sites. A linker-generated thunking routine for the THUMB compiler requires four words instead of three.
Note Regardless of how many different callers call a function, the linker generates only one interworking thunking routine per function call.
See Also
Linker-generated Thunking Routines | iwcall | iw16 | iw32
Send Feedback on this topic to the authors