This is the mail archive of the
mailing list for the binutils project.
Re: Problems with branch-to-arm-from-thumb for typeless symbol
- From: Hans-Peter Nilsson <hans-peter dot nilsson at axis dot com>
- To: rearnsha at arm dot com
- Cc: binutils at sourceware dot org
- Date: Mon, 8 Apr 2013 13:14:05 +0200
- Subject: Re: Problems with branch-to-arm-from-thumb for typeless symbol
> From: Richard Earnshaw <firstname.lastname@example.org>
> Date: Mon, 8 Apr 2013 12:46:00 +0200
> [sorry for the delayed reply, I've been OoO quite a bit recently]
> The linker should not be inserting code sequences that clobber register
> values when the ABI has not given it explicit permission to do
Wrong, this does not happen. I can't help but thinking you have
misunderstood: no registers are clobbered for veneers from thumb
to arm, which is the issue at hand and what I'm fixing. Oh, I
think I see: the test-case can be confusing but it's the
*from-thumb* veneer in the test-cases that is generated with the
patch! (The from-arm veneers are generated anyway even without,
due to .thumb_func.)
Nick gave his ok, but I'll not act on that until we have
> interworking veneer can need that and as such it is incorrect to make
> this change.
> It might in theory be possible to do this safely when you have the BLX
> <sym> instruction (ARMv5),
There was no BLX in the stubs I observed (because they're
default off due to an errata fix and have to be explicitly
enabled for v6).
> but that then leads to inconsistency across
> architecture versions and that's equally undesirable.
Again, those mode-switching veneers from thumb to arm (to
typeless symbols) already happen when the branch is out of
range, so what we have now is inconsistent: the patch *restores*
Does any of this change your decision?