[fpc-devel] Capability CPUARM_HAS_BLX_LABEL with ARM instruction set

Garry Wood garry at softoz.com.au
Thu Dec 17 01:34:25 CET 2015

On 12/16/2015 10:13 AM, Jonas Maebe wrote:
>> The compiler and assembler mark which code is ARM and which is Thumb. 
>> Normally, when the linker processes the object files, it will replace 
>> the blx instructions with bl if they go from ARM to ARM or from Thumb 
>> to Thumb. The reason that a compiler/assembler cannot do this, is that 
>> the target of a call may be in another object file and the 
>> compiler/assembler cannot know whether this object file has been 
>> compiled in ARM or Thumb mode.
>> Are you not processing the generated code with a linker at all?
>> Jonas
>Just adding to Jonas's answer here.
>While it's true that BLX always changes instructions set, I've heard some reports indicating that some assembler/linker combinations on OSX (apparently clang based?) have been behaving >strangely with this lately.
>GCC+binutils have always been following the "emit blx and let the linker
>fix it" recipe, just as fpc does.
>Best Regards,

I'm certainly using both as and ld (both arm-none-eabi for Win32 from launchpad.net) to produce the binary. The linker outputs an elf and I modified the MakeExecutable method in the compiler to do an objcopy after the linker to obtain a binary image. I also get it to do objdump on the elf to produce a list file which is where I see the blx <label> appearing.

I'll do some more searching based on the additional information from Jeppe to see if there is maybe a reported issue or an additional linker switch or something that is required.

Thanks for the info.


More information about the fpc-devel mailing list