[PATCH u-boot 00/39] U-Boot LTO (Sandbox + Some ARM boards)
Marek Behún
marek.behun at nic.cz
Sun Mar 7 05:24:59 CET 2021
Hello,
so after the RFC I am now sending first version of patches adding
support for LTO to U-Boot.
This series was tested by Github/Azure CI at
https://github.com/u-boot/u-boot/pull/57
and also by Pali Rohar and Adam Ford for some boards.
There is one test that fails and one that did not complete after 60
minutes, but these seem to be related to an issue regarding a race
condition with GNU Make's jobserver - I am using -flto=jobserver.
We could remove the jobserver option, but the linking is then painfully
slow, so I don't know.
Anyway the code size decrease is nice, approximately 15% for SPL.
It's lower on the main binary, only about 5%, but this is still nice
and needed for some boards, such as Nokia RX-51 (N900), because the
binary is otherwise on the boundary already.
I am satisfied with how even clang now links with LTO, at least for
sandbox, and passing all CI tests.
For sandbox I have added a patch that enables LTO by default.
For ARM, there is one patch that enables LTO for several boards -
these are tested to work (thanks Pali and Adam).
The last patch, which enables LTO for all ARM boards by default,
is prefixed "DO NOT MERGE!"
This patch series therefore should not (hopefully) cause regression
when applied.
Marek
Marek Behún (39):
ddr: marvell: axp: align signature of mv_xor_mem_init() with a38x
ddr: marvell: axp: fix array types have different bounds warning
regmap: fix a serious pointer casting bug
api: fix a potential serious bug caused by undef CONFIG_SYS_64BIT_LBA
checkpatch: require quotes around section name in the __section()
macro
treewide: Convert macro and uses of __section(foo) to __section("foo")
compiler.h: align the __ADDRESSABLE macro with Linux' version
linker_lists: prepare macros to avoid code repetition
test/py: improve regular expression for ut subtest symbol matcher
linker_lists: declare lists and entries as __ADDRESSABLE for LTO
binman: declare symbols externally visible
string: make memcpy() and memset() visible to fix LTO linking errors
efi_loader: fix warning when linking with LTO
lib: crc32: make the crc_table variable non-const
Makefile, Makefile.spl: cosmetic change
build: use thin archives instead of incremental linking
build: support building with Link Time Optimizations
build: LTO: move platform libs into --start-group list
sandbox: errno: avoid conflict with libc's errno
sandbox: use sections instead of symbols for getopt array boundaries
sandbox: make LTO available
sandbox: enable LTO by default
ARM: global_data: make set_gd() work for armv5 and armv6
ARM: make gd a function call for LTO and set via set_gd()
ARM: fix LTO build for some thumb-interwork cases
ARM: fix LTO for imx28_xea
ARM: fix LTO for apf27
ARM: fix LTO for keystone
ARM: kona: fix clk_bsc_enable() type mismatch for LTO
ARM: imx6m: fix imx_eqos_txclk_set_rate() type mismatch for LTO
ARM: fix LTO for seaboard
ARM: fix LTO for rockchip and samsung
ARM: omap3: fix LTO for DM3730 (and possibly other omap3 boards)
armv8: SPL: discard relocation information
ata: ahci: fix ahci_link_up() type mismatch for LTO
ARM: make LTO available
ARM: don't use -ffunction-sections/-fdata-sections with LTO build
ARM: enable LTO for some boards
ARM: enable LTO by default
Kbuild | 2 +
Kconfig | 19 +++++++
Makefile | 49 ++++++++++++++--
arch/Kconfig | 4 ++
arch/arm/config.mk | 8 ++-
arch/arm/cpu/arm926ejs/Makefile | 2 +
arch/arm/cpu/arm926ejs/mxs/mxs.c | 2 +-
arch/arm/cpu/arm926ejs/mxs/spl_boot.c | 4 +-
arch/arm/cpu/arm926ejs/spear/spl.c | 2 +-
arch/arm/cpu/armv7/kona-common/clk-stubs.c | 2 +-
arch/arm/cpu/armv7/ls102xa/ls102xa_psci.c | 2 +-
arch/arm/cpu/armv8/fsl-layerscape/spl.c | 2 +-
arch/arm/cpu/armv8/spl_data.c | 4 +-
arch/arm/cpu/armv8/u-boot-spl.lds | 1 +
arch/arm/include/asm/global_data.h | 6 +-
arch/arm/include/asm/secure.h | 6 +-
arch/arm/include/asm/setup.h | 2 +-
arch/arm/lib/Makefile | 3 +
arch/arm/lib/sections.c | 31 +++++-----
arch/arm/lib/spl.c | 2 +-
arch/arm/mach-at91/spl.c | 2 +-
arch/arm/mach-exynos/spl_boot.c | 2 +-
arch/arm/mach-imx/imx8m/clock_imx8mm.c | 2 +-
arch/arm/mach-imx/imx8m/soc.c | 2 +-
arch/arm/mach-imx/spl_imx_romapi.c | 16 +++---
arch/arm/mach-k3/am6_init.c | 2 +-
arch/arm/mach-k3/j721e_init.c | 4 +-
arch/arm/mach-keystone/Makefile | 1 +
arch/arm/mach-mvebu/mbus.c | 4 +-
arch/arm/mach-mvebu/timer.c | 2 +-
arch/arm/mach-nexell/clock.c | 6 +-
arch/arm/mach-nexell/timer.c | 6 +-
arch/arm/mach-omap2/omap3/Makefile | 2 +
arch/arm/mach-rockchip/board.c | 2 +-
arch/arm/mach-socfpga/spl_a10.c | 2 +-
arch/arm/mach-sunxi/board.c | 2 +-
arch/arm/mach-tegra/board.c | 2 +-
arch/arm/mach-tegra/cboot.c | 8 +--
arch/arm/mach-tegra/tegra20/Makefile | 1 +
arch/mips/mach-jz47xx/jz4780/jz4780.c | 2 +-
arch/nds32/include/asm/setup.h | 6 +-
arch/powerpc/include/asm/cache.h | 4 +-
arch/riscv/cpu/cpu.c | 4 +-
arch/sandbox/config.mk | 12 +++-
arch/sandbox/cpu/os.c | 3 +-
arch/sandbox/cpu/start.c | 3 +-
arch/sandbox/cpu/u-boot-spl.lds | 8 ++-
arch/sandbox/cpu/u-boot.lds | 8 ++-
arch/sandbox/include/asm/getopt.h | 2 +-
arch/sandbox/include/asm/sections.h | 21 ++++++-
arch/sandbox/lib/sections.c | 9 +--
arch/x86/cpu/coreboot/tables.c | 2 +-
arch/x86/cpu/coreboot/timestamp.c | 2 +-
arch/x86/lib/sections.c | 9 +--
arch/xtensa/cpu/cpu.c | 2 +-
board/bosch/shc/board.c | 2 +-
board/broadcom/bcmstb/bcmstb.c | 2 +-
board/samsung/arndale/arndale_spl.c | 2 +-
board/samsung/common/exynos5-dt.c | 2 +-
board/samsung/smdk5250/smdk5250_spl.c | 2 +-
board/samsung/smdk5420/smdk5420_spl.c | 2 +-
board/siemens/draco/board.c | 2 +-
board/xilinx/common/fru_ops.c | 2 +-
configs/da850evm_defconfig | 1 +
configs/da850evm_direct_nor_defconfig | 1 +
configs/da850evm_nand_defconfig | 1 +
configs/imx6q_logic_defconfig | 1 +
configs/imx8mn_beacon_2g_defconfig | 1 +
configs/imx8mn_beacon_defconfig | 1 +
configs/nokia_rx51_defconfig | 1 +
configs/turris_mox_defconfig | 1 +
configs/turris_omnia_defconfig | 1 +
drivers/ata/ahci.c | 2 +-
drivers/bios_emulator/biosemu.c | 4 +-
drivers/core/regmap.c | 13 ++++-
drivers/ddr/marvell/axp/ddr3_dfs.c | 4 +-
drivers/ddr/marvell/axp/ddr3_sdram.c | 2 +-
drivers/ddr/marvell/axp/xor.c | 4 +-
drivers/ddr/marvell/axp/xor.h | 4 +-
drivers/firmware/psci.c | 2 +-
drivers/mtd/nand/raw/mxc_nand_spl.c | 2 +-
drivers/pinctrl/nxp/pinctrl-imx5.c | 2 +-
drivers/pinctrl/nxp/pinctrl-imx7.c | 2 +-
drivers/pinctrl/nxp/pinctrl-imx8m.c | 2 +-
drivers/power/pmic/pmic_tps62362.c | 2 +-
drivers/power/pmic/pmic_tps65217.c | 2 +-
drivers/power/pmic/pmic_tps65218.c | 2 +-
drivers/power/pmic/pmic_tps65910.c | 2 +-
drivers/serial/serial_pl01x.c | 4 +-
include/api_public.h | 23 ++++++--
include/binman_sym.h | 5 +-
include/efi_loader.h | 8 +--
include/errno.h | 8 ++-
include/linker_lists.h | 66 ++++++++++++++--------
include/linux/compiler.h | 10 ++--
include/linux/compiler_attributes.h | 2 +-
lib/crc32.c | 2 +-
lib/errno.c | 4 +-
lib/string.c | 5 +-
lib/trace.c | 4 +-
scripts/Makefile.build | 16 +++---
scripts/Makefile.lib | 3 +
scripts/Makefile.spl | 30 ++++++++--
scripts/checkpatch.pl | 2 +-
test/py/conftest.py | 2 +-
105 files changed, 391 insertions(+), 197 deletions(-)
--
2.26.2
More information about the U-Boot
mailing list