[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