
HI Tom
On Sat, Mar 19, 2022 at 6:44 PM Tom Rini trini@konsulko.com wrote:
On Sat, Mar 19, 2022 at 06:37:18PM +0100, Michael Nazzareno Trimarchi wrote:
Hi Tom
On Sat, Mar 19, 2022 at 6:30 PM Tom Rini trini@konsulko.com wrote:
On Sat, Mar 19, 2022 at 06:27:38PM +0100, Michael Nazzareno Trimarchi wrote:
Hi
On Sat, Mar 19, 2022 at 6:25 PM Tom Rini trini@konsulko.com wrote:
On Sat, Mar 19, 2022 at 06:08:18PM +0100, Michael Nazzareno Trimarchi wrote:
Hi Tom
On Sat, Mar 19, 2022 at 6:03 PM Tom Rini trini@konsulko.com wrote: > > On Sat, Mar 19, 2022 at 05:48:59PM +0100, Michael Nazzareno Trimarchi wrote: > > Hi Tom > > > > On Sat, Mar 19, 2022 at 5:05 PM Tom Rini trini@konsulko.com wrote: > > > > > > On Sat, Mar 19, 2022 at 02:51:01PM +0100, Michael Nazzareno Trimarchi wrote: > > > > Hi > > > > > > > > On Sat, Mar 19, 2022 at 2:25 PM Fabio Estevam festevam@gmail.com wrote: > > > > > > > > > > Hi Michael, > > > > > > > > > > On Sat, Mar 19, 2022 at 6:47 AM Michael Nazzareno Trimarchi > > > > > michael@amarulasolutions.com wrote: > > > > > > > > > > > > HI > > > > > > > > > > > > Please send me a link to apply your series > > > > > > > > > > You can get the series from patchwork (just click in the 'series' button) > > > > > https://patchwork.ozlabs.org/project/uboot/patch/20220112133127.16880-2-gaur... > > > > > > > > Done, well, I have tried remove DM_GPIO in SPL. Seems that I need to > > > > remove a lot of features. I have tested LTO build but size > > > > of SPL increase. Is that strange? > > > > > > That is very strange. Can you post your patches somewhere? > > > > > > -- > > > Tom > > > > Start from here 9776c4e9d00ac49d6388ffe9e084ff03b37ae479 > > export ARCH=arm > > export CROSS_COMPILE=arm-linux-gnueabihf- > > > > make imx6dl_mamoj_defconfig > > build it > > > > Try then to enable LTO and build it again > > > > spl/u-boot-spl.bin exceeds file size limit: > > limit: 0xefa0 bytes > > actual: 0xf071 bytes > > excess: 0xd1 bytes > > > > So LTO does not help even on beginning on this board. You don't need > > to apply any patch for this test > > I think that's some artifact of mixing LTO/non-LTO and the world not > getting rebuilt? Just enabling LTO after the defconfig works fine and > is smaller than before.
In order to save space I did not change what we have. Every build starts from a mrproper and new configuration. I can not mix LTO/non-LTO in this case. I'm using upstream defconfig and upstream defconfig + LTO enabled and the result is that spl increase in size for LTO building. I'm working to keep out part that are not really needed but I was hoping that LTO give me some help here
Yes, LTO saves about 5KiB on the SPL binary. You just need to enable it in the config before you start building, not after you've built everything once.
Offcourse ;) but this not the case. I don't drink enough to think that change a config, decrease the build size ;)
LTO is an entirely different way of the compiler / linker optimizing the binary. So yes, in this case enabling a single option decreases the size.
I think we are in a circle. Let's have the result with LTO
spl/keep-syms-lto.c ( cd spl && arm-linux-gnueabihf-gcc -nostdlib -nostartfiles -fuse-linker-plugin -flto=8 -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -std=gnu11 -fshort-wchar -fno-strict-aliasing -fno-PIE -Os -flto=8 -fno-stack-protector -fno-delete-null-pointer-checks -Wno-pointer-sign -Wno-stringop-truncation -Wno-array-bounds -Wno-stringop-overflow -Wno-maybe-uninitialized -fmacro-prefix-map=./= -g -fstack-usage -Wno-format-nonliteral -Wno-address-of-packed-member -Wno-unused-but-set-variable -Werror=date-time -Wno-packed-not-aligned -ffunction-sections -fdata-sections -fno-stack-protector -D__KERNEL__ -D__UBOOT__ -DCONFIG_SPL_BUILD -D__ARM__ -Wa,-mimplicit-it=always -mthumb -mthumb-interwork -mabi=aapcs-linux -mno-unaligned-access -fno-common -ffixed-r9 -msoft-float -mgeneral-regs-only -pipe -march=armv7-a -D__LINUX_ARM_ARCH__=7 -mtune=generic-armv7-a -Ispl/include -Iinclude -I./arch/arm/include -include ./include/linux/kconfig.h -nostdinc -isystem /usr/lib/gcc-cross/arm-linux-gnueabihf/9/include -Wl,-T -Wl,u-boot-spl.lds -Wl,-Bstatic -Wl,--gc-sections -Wl,--no-dynamic-linker -Wl,--build-id=none -Wl,-Ttext -Wl,0x00908000 arch/arm/cpu/armv7/start.o -Wl,--whole-archive arch/arm/cpu/armv7/built-in.o arch/arm/cpu/built-in.o arch/arm/lib/built-in.o arch/arm/mach-imx/built-in.o board/bticino/mamoj/built-in.o common/spl/built-in.o common/init/built-in.o boot/built-in.o common/built-in.o cmd/built-in.o env/built-in.o lib/built-in.o disk/built-in.o drivers/built-in.o drivers/usb/dwc3/built-in.o drivers/usb/cdns3/built-in.o dts/built-in.o fs/built-in.o keep-syms-lto.o arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Wl,--no-whole-archive -Wl,-Map,u-boot-spl.map -o u-boot-spl ) arm-linux-gnueabihf-objcopy -j .text -j .secure_text -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -j .binman_sym_table -j .text_rest -j .dtb.init.rodata -j .efi_runtime -j .efi_runtime_rel -O binary spl/u-boot-spl spl/u-boot-spl-nodtb.bin arm-linux-gnueabihf-objdump -t spl/u-boot-spl > spl/u-boot-spl.sym cat spl/u-boot-spl-nodtb.bin spl/u-boot-spl.dtb > spl/u-boot-spl-dtb.bin cp spl/u-boot-spl-dtb.bin spl/u-boot-spl.bin spl/u-boot-spl.bin exceeds file size limit: limit: 0xefa0 bytes actual: 0xf079 bytes excess: 0xd9 bytes make: *** [Makefile:2082: spl/u-boot-spl.bin] Error 1 make: *** Deleting file 'spl/u-boot-spl.bin'
and without
NUX_ARM_ARCH__=7 -mtune=generic-armv7-a -D__ASSEMBLY__ -x c -o spl/u-boot-spl.cfgout arch/arm/mach-imx/spl_sd.cfg ./tools/mkimage -n spl/u-boot-spl.cfgout -T imximage -e 0x00908000 -d spl/u-boot-spl.bin SPL >SPL.log && cat SPL.log Image Type: Freescale IMX Boot Image Image Ver: 2 (i.MX53/6/7 compatible) Mode: DCD Data Size: 73824 Bytes = 72.09 KiB = 0.07 MiB Load Address: 00907420 Entry Point: 00908000 HAB Blocks: 0x00907400 0x00000000 0x0000fc00 DCD Blocks: 0x00910000 0x0000002c 0x00000004 make -f ./scripts/Makefile.build obj=arch/arm/mach-imx u-boot-with-spl.imx mkdir -p spl/ ./tools/mkimage -n spl/u-boot-spl.cfgout -T imximage -e 0x00908000 -d spl/u-boot-spl.bin SPL >SPL.log && cat SPL.log Image Type: Freescale IMX Boot Image Image Ver: 2 (i.MX53/6/7 compatible) Mode: DCD Data Size: 73824 Bytes = 72.09 KiB = 0.07 MiB Load Address: 00907420 Entry Point: 00908000 HAB Blocks: 0x00907400 0x00000000 0x0000fc00 DCD Blocks: 0x00910000 0x0000002c 0x00000004 arm-linux-gnueabihf-objcopy -j .text -j .secure_text -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -j .binman_sym_table -j .text_rest -j .dtb.init.rodata -j .efi_runtime -j .efi_runtime_rel -I binary -O binary --pad-to=0x11000 SPL u-boot-with-spl.imx && cat u-boot.img >> u-boot-with-spl.imx || rm -f u-boot-with-spl.imx
What I'm trying to say is that I have followed the correct steps and this is the LTO change
git diff diff --git a/configs/imx6dl_mamoj_defconfig b/configs/imx6dl_mamoj_defconfig index ae27857e6f..4a535012b2 100644 --- a/configs/imx6dl_mamoj_defconfig +++ b/configs/imx6dl_mamoj_defconfig @@ -14,6 +14,7 @@ CONFIG_SPL_TEXT_BASE=0x00908000 CONFIG_SPL_DRIVERS_MISC=y CONFIG_IMX_HAB=y # CONFIG_CMD_BMODE is not set +CONFIG_LTO=y CONFIG_DISTRO_DEFAULTS=y CONFIG_BOOTDELAY=3 CONFIG_SPL_OS_BOOT=y
Here's what I see: $ git describe HEAD v2022.04-rc4-50-g9776c4e9d00a $ make imx6dl_mamoj_defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf # # configuration written to .config # $ sed -i -e 's/# CONFIG_LTO is not set/CONFIG_LTO=y/' .config $ grep LTO .config CONFIG_ARCH_SUPPORTS_LTO=y CONFIG_LTO=y $ make CROSS_COMPILE=~/.buildman-toolchains/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi- -sj12 ===================== WARNING ====================== This board does not use CONFIG_DM_SERIAL (Driver Model for Serial drivers). Please update the board to use CONFIG_DM_SERIAL before the v2023.04 release. Failure to update by the deadline may result in board removal. See doc/driver-model/migration.rst for more info. ==================================================== arch/arm/dts/imx6dl-dhcom-pdk2.dtb: Warning (pwms_property): /display-bl:pwms: cell 3 is not a phandle reference arch/arm/dts/imx6dl-dhcom-pdk2.dtb: Warning (pwms_property): /display-bl: Missing property '#pwm-cells' in node /soc/bus@2000000/gpc@20dc000 or bad phandle (referred from pwms[3]) arch/arm/dts/imx6q-dhcom-pdk2.dtb: Warning (pwms_property): /display-bl:pwms: cell 3 is not a phandle reference arch/arm/dts/imx6q-dhcom-pdk2.dtb: Warning (pwms_property): /display-bl: Missing property '#pwm-cells' in node /soc/bus@2000000/gpc@20dc000 or bad phandle (referred from pwms[3]) $ ls -lh spl/u-boot-spl* -rwxrwxr-x 1 trini trini 944K Mar 19 13:40 spl/u-boot-spl -rw-rw-r-- 1 trini trini 54K Mar 19 13:40 spl/u-boot-spl.bin -rw-rw-r-- 1 trini trini 1.6K Mar 19 13:40 spl/u-boot-spl.cfgout -rw-rw-r-- 1 trini trini 2.2K Mar 19 13:40 spl/u-boot-spl.dtb -rw-rw-r-- 1 trini trini 54K Mar 19 13:40 spl/u-boot-spl-dtb.bin -rw-rw-r-- 1 trini trini 728 Mar 19 13:40 spl/u-boot-spl.lds -rw-rw-r-- 1 trini trini 5.9K Mar 19 13:40 spl/u-boot-spl.ltrans0.ltrans.su -rw-rw-r-- 1 trini trini 7.2K Mar 19 13:40 spl/u-boot-spl.ltrans1.ltrans.su -rw-rw-r-- 1 trini trini 182K Mar 19 13:40 spl/u-boot-spl.map -rwxrwxr-x 1 trini trini 51K Mar 19 13:40 spl/u-boot-spl-nodtb.bin -rw-rw-r-- 1 trini trini 135K Mar 19 13:40 spl/u-boot-spl.sym
The only difference is the toolchain gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04) and for the result you get I'm agree with you.
Michael
-- Tom