[ARM] register label conflict with blx instruction

Christian Bruel christian.bruel@st.com
Wed Nov 5 11:34:00 GMT 2014


On 11/05/2014 11:40 AM, Richard Earnshaw wrote:
> On 05/11/14 10:23, Christian Bruel wrote:
>> Hello,
>>
>> I'm wondering what would be the best way to deal with labels conflicting
>> with a register name in ARM gas.
>>
>> e.g with
>>
>>       .thumb
>>       .thumb_func
>>       .type    r0, %function
>> r0:
>>     ...
>>
>>       .arm
>>       .type    f, %function
>> f:
>>       blx    r0
>>
> Write
> 	bl	r0
>
> then let the linker fix it up.  Compilers shouldn't need to emit blx
> <label>.

that was my hope, but it does not always fix it up, I entered a bz 
binutils #17505 for this. So thought emitting it directly when possible 
would be a alternative.

On a side note, there is a REGISTER_PREFIX in the assembler. What about 
having the compiler generates prefixed register names to avoid the 
conflict ? %a0 vs a0 ?

Thanks

Christian




> R.
>
>> the assembler will see r0 as a reg and of course produce wrong code.
>>
>> Prefixing labels in the assembler fixes the issue. But this is compiler
>> generated code (from the attribute target work), Changing
>> USER_LABEL_PREFIX would modify all visible symbols which is not
>> desirable. I only wish to generate this for static function to bypass a
>> current limitation with the assembler.
>>
>> Any idea about an arm assembly syntax to avoid naming conflict between
>> regs and symbols for instruction that support boths ?
>>
>> Thanks,
>>
>> Christian
>>
>>
>>
>>
>



More information about the Binutils mailing list