[ARM] Wrong BLX destination

Christophe Lyon christophe.lyon@linaro.org
Wed Mar 9 15:51:00 GMT 2016


On 9 March 2016 at 16:45, Simon Marchi <simon.marchi@polymtl.ca> wrote:
> On 2016-03-09 08:49, Nick Clifton wrote:
>>
>> Hi Simon,
>>>
>>> Do you know if this is the intended behavior,
>>
>>
>> Yes...
>>
>>> and if so, what explains it?
>>
>>
>> The fact that your test2.S file claims to be an ARM assembler source file
>> (via
>> the .arm pseudo-op) and so, by inference, all of the symbols in it are ARM
>> symbols and not THUMB symbols.
>>
>> If you change test2.S so that it starts with:
>>
>>    .thumb
>>
>> then your test will work.
>
>
> Changing only .arm to .thumb in test2.S does not change the result.  I still
> have
>
.thumb tells the assembler that the following instructions should be
encoded in thumb mode.

>     8220:       fa000015        blx     827c <hello1>
>     8224:       fa000014        blx     827c <hello1>
>     8228:       fa000014        blx     8280 <hello3>
>
> As mentioned in my other reply, adding .thumb_func before the helloX
.thumb_func tells the assembler that the next symbol is a function
written in thumb mode (but does not change the parsing mode IIRC)
This is used by the linker when resolving relocations.

> definitions changed the result to make indirect calls through
> __helloX_from_arm.
>
> Thanks,
>
> Simon



More information about the Binutils mailing list