[PATCH] ARM: relocate: Fix Thumb code by using proper label type
Tom Rini
trini at konsulko.com
Wed Jul 27 12:59:24 CEST 2022
On Tue, Jul 12, 2022 at 12:00:23PM +0100, Andre Przywara wrote:
> The generic ARM relocate_code function was using its own function entry
> point as a relocation base, and it was obtaining that address by using
> the "adr" instruction on that entry point label.
> However that label is not just an ordinary label, instead we explicitly
> mark it as a function start address. Normally that doesn't change much
> (other than for debugging), but when assembled in Thumb mode, newer
> versions of the GNU assembler prepare everything for this address being
> used as the argument to a "bx" call, so make sure bit 0 is set in there
> to mark this function as Thumb code. Of course this doesn't end up very
> well when we use this address for the ensuing memcpy operation.
>
> To avoid this problem, and to solve it in a robust way, add an extra
> label, which is not marked as a function entry, and use that for the adr
> instruction. This lets all assemblers generate the right immediate offset
> in the "adr" instruction.
>
> This fixes in particular ARMv7-M ports when using GNU binutils v2.37 or
> newer (commit d3e52e120b68 seems to trigger the change in behaviour).
>
> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
> Reported-by: Jesse Taube <mr.bossman075 at gmail.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20220727/486fcae7/attachment.sig>
More information about the U-Boot
mailing list