All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marek Behún" <marek.behun@nic.cz>
To: u-boot@lists.denx.de
Subject: [RFC PATCH u-boot 09/12] ARM: make gd a function for LTO
Date: Wed,  3 Mar 2021 05:12:08 +0100	[thread overview]
Message-ID: <20210303041211.26945-10-marek.behun@nic.cz> (raw)
In-Reply-To: <20210303041211.26945-1-marek.behun@nic.cz>

On ARM the gd pointer is stored in registers r9 / x18. For this the
-ffixed-r9 / -ffixed-x18 flag 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 via macro.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68384

Signed-off-by: Marek Beh?n <marek.behun@nic.cz>
---
 arch/arm/include/asm/global_data.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/global_data.h b/arch/arm/include/asm/global_data.h
index fba655f3b9..d694074bff 100644
--- a/arch/arm/include/asm/global_data.h
+++ b/arch/arm/include/asm/global_data.h
@@ -91,7 +91,7 @@ struct arch_global_data {
 
 #include <asm-generic/global_data.h>
 
-#ifdef __clang__
+#if defined(__clang__) || defined(CONFIG_LTO)
 
 #define DECLARE_GLOBAL_DATA_PTR
 #define gd	get_gd()
-- 
2.26.2

  parent reply	other threads:[~2021-03-03  4:12 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03  4:11 [RFC PATCH u-boot 00/12] U-Boot LTO (Sandbox + ARM Nokia RX-51) Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 01/12] build: use thin archives instead of incremental linking Marek Behún
2021-03-04 10:57   ` Bin Meng
2021-03-04 18:17     ` Marek Behun
2021-03-05 13:34       ` Bin Meng
2021-03-05 13:37         ` Tom Rini
2021-03-06 21:20           ` Marek Behun
2021-03-05 15:39         ` Marek Behun
2021-03-03  4:12 ` [RFC PATCH u-boot 02/12] sandbox: errno: avoid conflict with libc's errno Marek Behún
2021-03-05  3:00   ` Bin Meng
2021-03-05 15:37     ` Marek Behun
2021-03-05 16:39       ` Simon Glass
2021-03-05 16:50         ` Marek Behun
2021-03-05 16:58           ` Simon Glass
2021-03-05 17:24             ` Heinrich Schuchardt
2021-03-05 17:24             ` Marek Behun
2021-03-05 19:42               ` Simon Glass
2021-03-05 17:21       ` Heinrich Schuchardt
2021-03-07  3:14         ` Marek Behun
2021-03-12  4:45   ` Simon Glass
2021-03-03  4:12 ` [RFC PATCH u-boot 03/12] linker_lists: declare entries and lists externally visible Marek Behún
2021-03-04 13:47   ` Marek Behun
2021-03-05  3:04   ` Bin Meng
2021-03-05 15:49     ` Marek Behun
2021-03-03  4:12 ` [RFC PATCH u-boot 04/12] efi_loader: fix warning when linking with LTO Marek Behún
2021-03-05  5:50   ` Bin Meng
2021-03-03  4:12 ` [RFC PATCH u-boot 05/12] binman: declare symbols externally visible Marek Behún
2021-03-04  0:37   ` Tom Rini
2021-03-04  1:53     ` Marek Behun
2021-03-03  4:12 ` [RFC PATCH u-boot 06/12] build: support building with Link Time Optimizations Marek Behún
2021-03-05  6:34   ` Bin Meng
2021-03-03  4:12 ` [RFC PATCH u-boot 07/12] arch: sandbox: make LTO available Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 08/12] sandbox: build with LTO Marek Behún
2021-03-03  4:12 ` Marek Behún [this message]
2021-03-03  4:12 ` [RFC PATCH u-boot 10/12] string: make memcpy() visible to fix LTO linking errors Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 11/12] arch: ARM: make LTO available Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 12/12] Nokia RX-51: build with LTO Marek Behún
2021-03-03 16:11 ` [RFC PATCH u-boot 00/12] U-Boot LTO (Sandbox + ARM Nokia RX-51) Tom Rini
2021-03-03 16:41   ` Marek Behun
2021-03-03 16:47     ` Tom Rini
2021-03-03 21:36     ` Tom Rini
2021-03-04  0:40       ` Adam Ford
2021-03-04  7:07         ` [PATCH] arm: fix LTO build for some thumb-interwork cases Marek Behún
2021-03-04 10:43       ` [RFC PATCH u-boot 00/12] U-Boot LTO (Sandbox + ARM Nokia RX-51) Marek Behun
2021-03-04 13:46         ` Adam Ford
2021-03-04 13:50           ` Marek Behun
2021-03-04 13:59             ` Adam Ford
2021-03-04 14:58           ` Tom Rini
2021-03-04 15:07             ` Adam Ford
2021-03-04 15:37               ` Marek Behun
2021-03-04 16:18                 ` Tom Rini
2021-03-04 15:59               ` Marek Behun
2021-03-04 22:18                 ` Adam Ford
2021-03-04 22:33                   ` Marek Behun
2021-03-05 11:25                     ` Adam Ford
2021-03-05 12:31                       ` Stefan Roese
2021-03-05 17:10                         ` Adam Ford
2021-03-06  3:03                           ` Adam Ford
2021-03-06 11:12                             ` Adam Ford
2021-03-06 17:37                               ` Marek Behun
2021-03-06 20:08                                 ` Tom Rini
2021-03-06 20:41                                   ` Pali Rohár
2021-03-06 20:54                                     ` Marek Behun
2021-03-06 21:00                                       ` Pali Rohár
2021-03-06 21:19                                         ` Marek Behun
2021-03-06 21:38                                           ` Pali Rohár
2021-03-06 21:49                                             ` Marek Behun
2021-03-07  3:45                                               ` Adam Ford
2021-03-07  4:06                                                 ` Marek Behun
2021-05-09 14:14                                                   ` Adam Ford
2021-05-09 18:44                                                     ` Marek Behun
2021-05-10 16:28                                                       ` Simon Glass
2021-05-13  9:22                                                         ` Pali Rohár
2021-03-04 16:17               ` Tom Rini
2021-03-04 16:35                 ` Pali Rohár

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210303041211.26945-10-marek.behun@nic.cz \
    --to=marek.behun@nic.cz \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.