From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFA8EC47092 for ; Tue, 1 Jun 2021 15:00:20 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 784D36128A for ; Tue, 1 Jun 2021 15:00:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 784D36128A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=foss.st.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 3B4EB82AE5; Tue, 1 Jun 2021 17:00:16 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=foss.st.com header.i=@foss.st.com header.b="TTEbmUIm"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 6B68C82AE5; Tue, 1 Jun 2021 17:00:14 +0200 (CEST) Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 7631482B89 for ; Tue, 1 Jun 2021 17:00:06 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=patrick.delaunay@foss.st.com Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 151Euu5g030527; Tue, 1 Jun 2021 16:59:57 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=subject : to : references : from : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=selector1; bh=oRVA3OIkiJzqsTAkOPn7Yq6HZ0QaxnPyYoJYduhMJaw=; b=TTEbmUImWxyTg1Z9QGSsqWKwNI24aD1etO08NVWZ0ZNSxzIzsVXE8QYQ8dWtumObKai0 GLUkXMVkUb32Pwg17iPf2Tmu+koyfxAWQKqtQajsrLIkiWDcvJa6L8Q60RoRzKbTlMUf GKuQk0utll/IO67uGaC+YOy3oH5D6IygblReaN36jaS0Fif1ydX8Gdo7KG04PPaY1zBH GQ8zZTl3IuI2e4ttO6L9uUQHNRBNHmAYOmqJhB96I3qP8j6PFsj82lrQbqLKFJ5Q1gKD UL/BcazjP3kKIaErNdiRkty2BA+oIrjHYNVWlHiJdOeEicK2Ubq3Othni+bq25jn2j09 fw== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 38whh31ytx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 01 Jun 2021 16:59:57 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id F233310002A; Tue, 1 Jun 2021 16:59:54 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag2node3.st.com [10.75.127.6]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id C965B22D63B; Tue, 1 Jun 2021 16:59:54 +0200 (CEST) Received: from lmecxl0994.lme.st.com (10.75.127.45) by SFHDAG2NODE3.st.com (10.75.127.6) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 1 Jun 2021 16:59:53 +0200 Subject: Re: [PATCH u-boot v4 00/36] U-Boot LTO (Sandbox + Some ARM boards) To: =?UTF-8?Q?Marek_Beh=c3=ban?= , , Simon Glass , Heiko Schocher , Patrick Delaunay , Patrice CHOTARD , Miquel Raynal , Tom Rini , =?UTF-8?Q?Pali_Roh=c3=a1r?= , Stefan Roese , Heinrich Schuchardt , Alexander Graf , Marek Vasut , Neil Armstrong , "Ryder Lee" , Adam Ford , Bin Meng , Harald Seiler , Tim Harvey , Patrice CHOTARD References: <20210520112425.25166-1-marek.behun@nic.cz> From: Patrick DELAUNAY Message-ID: Date: Tue, 1 Jun 2021 16:59:52 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20210520112425.25166-1-marek.behun@nic.cz> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [10.75.127.45] X-ClientProxiedBy: SFHDAG1NODE1.st.com (10.75.127.1) To SFHDAG2NODE3.st.com (10.75.127.6) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.761 definitions=2021-06-01_07:2021-06-01, 2021-06-01 signatures=0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean Hi Marek, On 5/20/21 1:23 PM, Marek Behún wrote: > Hello, > > this is version 4 of patches adding support for LTO to U-Boot. > > This series is being tested by Github/Azure CI at > https://github.com/u-boot/u-boot/pull/57 > > There is a problem with sandbox_clang test scenario, which I was > unable to resolve yet, or even determine correctly whether the > problem is with my patches or was there before. (One of the > problems is with testing stack protector test_stackprotector.py, > but for some reason I could not make this work even with GCC on > my local machine.) > Nevertheless I am sending these patches now so that at least you > can review them. In the meantime I will try to resolve the issue > with sandbox_clang test scenario. > > Changes since v3: > - for some reason the mvneta driver does not work correctly when > U-Boot is compiled with LTO. I have not debugged this issue yet, so > for now I have removed Turris Omnia and Turris MOX from devices with > enabled LTO > - linker list entry symbols are now forced to emit by using the > __ADDRESSABLE macro in a generated C file (keep-syms-lto.c). > Previously this was done in the ll_entry_declare() macro, but this > was not flexible, since, for example, trying to declare an entry as > extern could not work that way. This came to attention now after > Simon's patches for dtoc were merged, and ll_entry_declare() is > being used with the extern keyword in include/generated/dt-decl.h > - when compiling LTO with Clang, use llvm-ar and llvm-nm for AR and NM > - several patches rebased > - removed patch "api: fix a potential serious bug caused by undef > CONFIG_SYS_64BIT_LBA" > - updated patch converting __attribute__((section(...))) to > __section(...) > > Changes sinve v2: > - now linking with --build-id=none in order to avoid link failures with > some toolchains (thanks Herald Seiler) > - we don't use -flto=jobserver anymore, since it causes build errors for > some people. Instead we link with -flto=NPROC > - removed LTO exception for arch/arm/mach-omap2/omap3/clock.o, Adam Ford > says it is not needed > - added some Reviewed-by tags > > Changes since v1: > - remove patches applied into u-boot-marvell > - added Reviewed-by tags > - addressed some issues discovered by Bin Meng, Marek Vasut, > Heinrich Schuchardt > - added more ARM boards (thanks to Adam Ford, Tim Harvey and Bin Meng) > - removed --gc-sections for ARM if internal libgcc is used > - remove -fwhole-program in final LTO LDFLAGS > - declared all 4 functions (memcpy, memset, memcmp, memmove) __used, > (these are mentioned in GCC man page for option -nodefaultlibs that > the compiler may generate; this seems to be a bug in GCC that linking > fails with LTO even if these functions are present, because the > symbols can be renamed on some targets by optimization) > > Marek > > Marek Behún (36): > regmap: fix a serious pointer casting bug > 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 > test/py: improve regular expression for ut subtest symbol matcher > string: make memcpy(), memset(), memcmp() and memmove() visible for > LTO > efi_loader: fix warning when linking with LTO > efi_loader: add Sphinx doc for __efi_runtime and __efi_runtime_data > efi_loader: add macro for const EFI runtime data > efi_selftest: compiler flags for efi_selftest_miniapp_exception.o > lib: crc32: put the crc_table variable into efi_runtime_rodata section > Makefile, Makefile.spl: cosmetic change > build: use thin archives instead of incremental linking > build: support building with Link Time Optimizations > build: link with --build-id=none > 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: imx8m: 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: don't use --gc-sections with LTO when using private libgcc > ARM: enable LTO for some boards > > Kbuild | 2 + > Kconfig | 24 +++++++ > Makefile | 81 ++++++++++++++++++++-- > arch/Kconfig | 3 + > arch/arm/config.mk | 10 ++- > 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/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/am642_init.c | 2 +- > 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 | 1 + > 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 | 14 +++- > 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/timestamp.c | 2 +- > arch/x86/lib/coreboot/cb_sysinfo.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/am3517_evm_defconfig | 1 + > configs/da850evm_defconfig | 1 + > configs/da850evm_direct_nor_defconfig | 1 + > configs/da850evm_nand_defconfig | 1 + > configs/imx6q_logic_defconfig | 1 + > configs/imx8mm_beacon_defconfig | 1 + > configs/imx8mm_venice_defconfig | 1 + > configs/imx8mn_beacon_2g_defconfig | 1 + > configs/imx8mn_beacon_defconfig | 1 + > configs/nokia_rx51_defconfig | 1 + > configs/omap3_logic_defconfig | 1 + > configs/r8a774a1_beacon_defconfig | 1 + > configs/r8a774b1_beacon_defconfig | 1 + > configs/r8a774e1_beacon_defconfig | 1 + > drivers/ata/ahci.c | 2 +- > drivers/bios_emulator/biosemu.c | 4 +- > drivers/clk/kendryte/clk.c | 4 +- > drivers/core/regmap.c | 59 +++++++++++++++- > 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/efi_loader.h | 54 +++++++++++++-- > include/errno.h | 8 ++- > include/linker_lists.h | 24 +++---- > include/linux/compiler.h | 10 +-- > include/linux/compiler_attributes.h | 2 +- > lib/crc32.c | 3 +- > lib/efi_selftest/Makefile | 2 + > lib/errno.c | 4 +- > lib/string.c | 9 +-- > lib/trace.c | 4 +- > scripts/Makefile.build | 16 ++--- > scripts/Makefile.lib | 3 + > scripts/Makefile.spl | 63 +++++++++++++++-- > scripts/checkpatch.pl | 2 +- > scripts/gen_ll_addressable_symbols.sh | 12 ++++ > test/py/conftest.py | 2 +- > 107 files changed, 513 insertions(+), 183 deletions(-) > create mode 100755 scripts/gen_ll_addressable_symbols.sh > I am trying to activate CONFIG_LTO for STMicroelectronics stm32mp15 platform (stm32mp15_trusted_defconfig and stm32mp15_basic_defconfig). The config stm32mp15_basic_defconfig, with SPL supported failed to boot with gcc-arm-9.2-2019.12. because a weak function is not correctly handle between 1/ ./arch/arm/lib/cache-cp15.c: 96     __weak void dram_bank_mmu_setup(int bank); 2/ the stm32mp implementation in    arch/arm/mach-stm32mp/cpu.c:62    void dram_bank_mmu_setup(int bank) => The used function in SPL is the cache library, not the stm32mp function.       and SPL boot it OK when I remove the function in the cache library... And the issue is also solved with I use a more recent version gcc-arm-10.2-2020.11 on my PC. Do you see the same kind of issue for old version of gcc ? Do you think CONFIG_LTO require a more recent version of gcc that the minimal version required by U-Boot  because I don't see this information in the serie? Regards Patrick