u-boot/arch/arm/include/asm
Marek Behún 86c5e21013 ARM: make gd a function call for LTO and set via set_gd()
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@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
2021-05-24 14:21:30 -04:00
..
arch-am33xx arm: ti: am33xx: add DPLL_EN_FAST_RELOCK_BYPASS macro 2021-01-12 10:58:04 +05:30
arch-armada8k SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-armada100 SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-armv7 SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-aspeed aspeed: Add AST2600 platform support 2021-01-18 15:23:06 -05:00
arch-bcm235xx SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-bcm281xx SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-bcmcygnus Convert CONFIG_PHYLIB et al to Kconfig 2020-04-28 15:57:58 -04:00
arch-bcmns3 board: ns3: add api to save boot parameters passed from BL31 2020-07-29 10:13:41 -04:00
arch-bcmnsp SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-ep93xx SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-fsl-layerscape configs: fsl: move bootrom specific defines to Kconfig 2021-03-05 10:25:41 +05:30
arch-hi3660 common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
arch-hi3798cv200 poplar: clean up board level mmc initialization code 2019-01-25 12:12:57 -05:00
arch-hi6220 dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
arch-imx mx6dq: hab: Fix chip version in hab.h code 2021-04-08 09:18:29 +02:00
arch-imx8 imx8: Add DEK blob encapsulation 2021-04-08 20:29:52 +02:00
arch-imx8m iMX8M: Add support to enable CONFIG_IMX_HAB 2021-04-08 09:18:29 +02:00
arch-imxrt video: mxsfb: add support for i.MXRT 2020-04-18 12:54:43 +02:00
arch-lpc32xx dm: i2c: use CONFIG_IS_ENABLED macro for DM_I2C/DM_I2C_GPIO 2021-02-21 06:08:00 +01:00
arch-ls102xa gpio: mpc8xxx_gpio: Fix for litte endian 2021-02-08 14:01:19 +05:30
arch-mediatek mediatek: Drop dm.h header file 2020-08-03 22:19:54 -04:00
arch-meson arm: meson: remove static ethernet link setup 2021-04-06 11:10:29 +02:00
arch-mvebu km/spi: remove deprecated SPI flash driver code for KM Kirkwood boards 2019-07-11 10:58:03 +02:00
arch-mx5 spi: imx: Define register bits in the driver 2021-01-23 13:40:29 +01:00
arch-mx6 imx: imx6ull: fix pinmux sel_input value for uart5 pins 2021-04-08 23:59:50 +02:00
arch-mx7 spi: imx: Define register bits in the driver 2021-01-23 13:40:29 +01:00
arch-mx7ulp caam: enable support for iMX7ULP 2021-04-08 09:18:29 +02:00
arch-mx25 spi: imx: Define register bits in the driver 2021-01-23 13:40:29 +01:00
arch-mx27 treewide: convert bd_t to struct bd_info by coccinelle 2020-07-17 09:30:13 -04:00
arch-mx31 spi: imx: Define register bits in the driver 2021-01-23 13:40:29 +01:00
arch-mx35 spi: imx: Define register bits in the driver 2021-01-23 13:40:29 +01:00
arch-mxs treewide: convert bd_t to struct bd_info by coccinelle 2020-07-17 09:30:13 -04:00
arch-octeontx arm: octeontx: Add headers for OcteonTX 2020-08-25 08:01:16 +02:00
arch-octeontx2 arm: octeontx2: Add headers for OcteonTX2 2020-08-25 08:01:16 +02:00
arch-omap3 i2c: omap24xx_i2c: Move away from SoC specific headers for reg offset 2018-12-10 06:09:34 +01:00
arch-omap4 arm: Don't include common.h in header files 2020-05-18 14:54:24 -04:00
arch-omap5 arm: Don't include common.h in header files 2020-05-18 14:54:24 -04:00
arch-orion5x SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-owl net: designware: s700: Add glue code for S700 mac 2020-07-07 17:11:58 -04:00
arch-px30 rockchip: add px30 architecture core 2019-11-17 17:23:24 +08:00
arch-pxa SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-rk322x rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rk3036 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rk3128 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rk3188 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rk3288 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rk3308 arm: Don't include common.h in header files 2020-05-18 14:54:24 -04:00
arch-rk3328 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rk3368 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rk3399 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-rockchip Rockchip: video: edp: Change interrupt polarity configuration 2021-04-10 11:52:43 +02:00
arch-rv1108 rockchip: add common header boot0.h and gpio.h for soc 2019-05-08 17:34:12 +08:00
arch-sa1100 Move architecture-specific includes to arch/$ARCH/include/asm 2010-04-13 09:13:12 +02:00
arch-spear arm: spear: fix enabling of SSP2 clock 2018-09-25 21:49:18 -04:00
arch-stih410 treewide: Update email address Patrick Delaunay and Patrice Chotard 2020-12-09 10:57:50 +01:00
arch-stm32 treewide: Update email address Patrick Delaunay and Patrice Chotard 2020-12-09 10:57:50 +01:00
arch-stm32f4 treewide: Update email address Patrick Delaunay and Patrice Chotard 2020-12-09 10:57:50 +01:00
arch-stm32f7 treewide: Update email address Patrick Delaunay and Patrice Chotard 2020-12-09 10:57:50 +01:00
arch-stm32h7 treewide: Update email address Patrick Delaunay and Patrice Chotard 2020-12-09 10:57:50 +01:00
arch-stv0991 SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-sunxi sunxi: support asymmetric dual rank DRAM on A64/R40 2021-04-16 01:12:58 +01:00
arch-tegra common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
arch-tegra20 ARM: tegra: Use common header for PMU declarations 2019-06-05 09:16:33 -07:00
arch-tegra30 ARM: tegra: Use common header for PMU declarations 2019-06-05 09:16:33 -07:00
arch-tegra114 ARM: tegra: Use common header for PMU declarations 2019-06-05 09:16:33 -07:00
arch-tegra124 common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
arch-tegra186 SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
arch-tegra210 ARM: tegra: Use common header for PMU declarations 2019-06-05 09:16:33 -07:00
arch-vf610 dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
armv8 common: Move hang() to the same header as panic() 2020-01-17 17:53:40 -05:00
iproc-common configs: migrate CONFIG_SYS_ARM_CACHE_* in Kconfig 2020-05-01 11:34:01 -04:00
kona-common SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
mach-imx mx6dq: hab: Fix chip version in hab.h code 2021-04-08 09:18:29 +02:00
proc-armv ARM: correct detection of thumb mode 2019-07-18 11:31:24 -04:00
ti-common common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
xen Revert "arch: arm/xen: add putc() for debugging" 2020-10-23 09:16:07 -04:00
acpi_table.h acpi: Add missing ARM acpi_table header 2021-01-18 15:14:15 -05:00
armv7.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
armv7_mpu.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
armv7m.h arm: armv7m: clean up armv7m unified code compilation 2018-09-10 21:19:33 -04:00
assembler.h arm: Migrate SYS_THUMB_BUILD to Kconfig, introduce SPL_SYS_THUMB_BUILD 2017-03-18 20:28:01 -04:00
atomic.h ARM: use asm-generic/atomic.h 2018-09-25 21:49:18 -04:00
barriers.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
bitops.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
boot0-linux-kernel-header.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
bootm.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
byteorder.h armv8: Use __aarch64__ rather than CONFIG_ARM64 in some cases 2014-01-10 10:10:23 +01:00
cache.h arm: cp15: remove weak function arm_init_domains 2021-03-02 15:53:37 -05:00
config.h lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
davinci_rtc.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
dma-mapping.h arm: Don't include common.h in header files 2020-05-18 14:54:24 -04:00
ehci-omap.h usb: ehci-omap: Add Support for DM_USB and OF_CONTROL 2020-05-22 15:22:35 +02:00
emif.h arm: Don't include common.h in header files 2020-05-18 14:54:24 -04:00
fsl_secure_boot.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
gic-v3.h arch: arm: use dt and UCLASS_SYSCON to get gic lpi details 2020-07-29 10:37:11 -04:00
gic.h arm64 patch: gicv3 support 2014-04-08 00:15:12 +02:00
global_data.h ARM: make gd a function call for LTO and set via set_gd() 2021-05-24 14:21:30 -04:00
gpio.h gpio: do not include <asm/arch/gpio.h> on ARCH_QEMU 2021-01-18 15:14:15 -05:00
handoff.h arm: Add arm handoff header file 2020-01-24 11:19:52 -05:00
hardware.h Move architecture-specific includes to arch/$ARCH/include/asm 2010-04-13 09:13:12 +02:00
io.h arm: include/asm/io.h: Add 64bit clrbits and setbits helpers 2020-08-25 08:01:16 +02:00
linkage.h arm: adapt asm/linkage.h from Linux 2012-05-15 08:31:26 +02:00
mach-types.h mcx: remove board 2019-05-28 13:58:06 -04:00
macro.h ARMv8: Enable all asynchronous abort exceptions taken to EL3 2018-11-16 13:34:33 -05:00
memory.h Various, accumulated typos collected from around the tree. 2016-10-06 20:57:40 -04:00
mmu.h arm: provide a function for boards init code to modify MMU virtual-physical map 2020-07-10 14:10:43 -04:00
omap_common.h arm: Don't include common.h in header files 2020-05-18 14:54:24 -04:00
omap_gpio.h dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
omap_i2c.h dm: i2c: use CONFIG_IS_ENABLED macro for DM_I2C/DM_I2C_GPIO 2021-02-21 06:08:00 +01:00
omap_mmc.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
omap_musb.h dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
omap_sec_common.h arm: Don't include common.h in header files 2020-05-18 14:54:24 -04:00
opcodes-sec.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
opcodes-virt.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
opcodes.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
pl310.h ARM: pl310: Add macro's for handling tag and data latency mask 2019-05-05 08:48:50 -04:00
posix_types.h armv8: Use __aarch64__ rather than CONFIG_ARM64 in some cases 2014-01-10 10:10:23 +01:00
processor.h Remove ${objtree}/include/asm/proc/ link 2014-06-11 16:27:05 -04:00
psci.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
ptrace.h Remove ${objtree}/include/asm/proc/ link 2014-06-11 16:27:05 -04:00
sections.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
secure.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2021-05-24 14:21:30 -04:00
setjmp.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
setup.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2021-05-24 14:21:30 -04:00
spin_table.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
spl.h arm: K3: am654: Add support for boot device detection 2018-09-11 08:32:55 -04:00
string.h ARM: revive CONFIG_USE_ARCH_MEMCPY/MEMSET for UniPhier and Tegra 2016-12-27 11:24:15 -05:00
system.h arm: remove set_dacr/get_dacr functions 2021-03-02 15:53:37 -05:00
types.h arch: types.h: factor out fixed width typedefs to int-ll64.h 2018-09-10 20:48:16 -04:00
u-boot-arm.h common: Move reset_misc() function to arch header 2020-01-17 13:27:30 -05:00
u-boot.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
unaligned.h arm64: core support 2014-01-09 16:08:44 +01:00
unified.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
utils.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
xen.h board: Introduce xenguest_arm64 board 2020-08-14 15:18:27 -04:00