Linker-Generated Thunking Routines
If no declspecs are used to enable interworking function calls, then the linker will generate a thunking routine to perform any necessary caller-side mode changes from ARM to THUMB or vice versa. The linker will generate a thunking routine for each unique function called from an object that requires the opposite mode.
The linker-generated thunking routines handle only the mode switch for the calling of the function. In order for the required mode switch to occur on the return from the function, the programmer must use the /QRinterwork-return - Enable Interworking flag at compile time.
The following example shows a linker-generated thunking routine generated when switching from ARM to THUMB mode.
0xe59fc000 ldr r12, [pc]
0xe12fff1c bx r12
0x00000000 DCD |destination|
The following example shows the linker-generated thunking routine generated when switching from THUMB to ARM mode.
0xb408 push {r3}
0x4b02 ldr r3, [pc, #8]
0x469c mov r12, r3
0xbc08 pop {r3}
0x4760 bx r12
0x0000 pad
0x00000000 DCD |destination|
To avoid generation of thunking routines by the linker, use __declspec(iwcall), __declspec(iw16), or __declspec(iw32) as appropriate.
See Also
Mode Switching | ARM Compiler Flags | Declspecs | iwcall | iw16 | iw32 | /QRinterwork-return - Enable Interworking | /QRarch - Specify Target Architecture
Last updated on Thursday, April 08, 2004
© 1992-2003 Microsoft Corporation. All rights reserved.