[PATCH u-boot v4 21/36] ARM: make gd a function call for LTO and set via set_gd()

Tom Rini trini at konsulko.com
Tue May 25 02:56:12 CEST 2021


On Thu, May 20, 2021 at 01:24:10PM +0200, Marek Behún wrote:

> On ARM, the gd pointer is stored in registers r9 / x18. For this the
> -ffixed-r9 / -ffixed-x18 flag is used when compiling, but using global
> register variables causes errors when building with LTO, and these
> errors are very difficult to overcome.
> 
> Richard Biener says [1]:
>   Note that global register vars shouldn't be used with LTO and if they
>   are restricted to just a few compilation units the recommended fix is
>   to build those CUs without -flto.
> 
> We cannot do this for U-Boot since all CUs use -ffixed-reg flag.
> 
> It seems that with LTO we could in fact store the gd pointer differently
> and gain performance or size benefit by allowing the compiler to use
> r9 / x18. But this would need more work.
> 
> So for now, when building with LTO, go the clang way, and instead of
> declaring gd a global register variable, we make it a function call via
> macro.
> 
> [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68384
> 
> Signed-off-by: Marek Behún <marek.behun at nic.cz>
> Reviewed-by: Simon Glass <sjg at chromium.org>

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/20210524/cf9db0c5/attachment.sig>


More information about the U-Boot mailing list