On 15/12/2019 23.29, Rasmus Villemoes wrote: > I'm also seeing the build failure that commit > > 7d4776545b env: solve compilation error in SPL > > tried to fix, namely that the reference to env_flags_validate from > env_htab cannot be satisfied when flags.o is not built in. However, > that commit got reverted by > > d90fc9c3de Revert "env: solve compilation error in SPL" > > Necessary, but not sufficient conditions to see this are > > CONFIG_SPL=y (obviously) > CONFIG_SPL_ENV_SUPPORT=n (so flags.o does not get compiled) > CONFIG_SPL_LIBCOMMON_SUPPORT=y (so env/built-in.o is part of the SPL link) > > Now, these are satisfied for e.g. imx6q_logic_defconfig. But that > builds just fine, and spl/u-boot-spl.map lists .data.env_htab among > the discarded (garbage collected) sections. Yet, on our > mpc8309-derived board, we do see the build failure, so perhaps the > linker works a bit differently on ppc than on ARM, or there's yet some > other configuration option needed to observe the break.
Yeah, I think this is a difference in how the linker works on ppc vs arm. Doing git grep --files-with-matches SPL=y -- configs/ | xargs grep --files-with-matches SPL_LIBCOMMON_SUPPORT=y | xargs grep --files-without-match SPL_ENV_SUPPORT | xargs head -n1 shows that all the in-tree defconfigs with the above combination are ARM boards (except for microblaze_defconfig, but I don't have such a toolchain), and they most likely all build just fine. But taking some random PPC config (say T2080QDS_NAND_defconfig) with the first and third point, and then manually disabling SPL_ENV_SUPPORT, immediately shows the break. For reference, I have $ ${CROSS_COMPILE}ld --version GNU ld (GNU Binutils for Ubuntu) 2.30 > This is another attempt at solving it, which also cleans up > env/Makefile a bit: Introduce a def_bool y symbol CONFIG_ENV_SUPPORT > which complements CONFIG_(SPL/TPL)_SUPPORT. Then use > CONFIG_$(SPL_TPL_)ENV_SUPPORT to decide whether to include the five > basic env/*.o files. For attr.o, flags.o and callback.o, this > shouldn't change anything. Also, common.o and env.o still get > unconditionally built for U-boot proper. But for TPL/SPL, those two > are only included if CONFIG_(SPL/TPL)_SUPPORT is set. Any comments on this approach, apart from the spellos (I'm missing ENV_ in front of SUPPORT in two places)? Rasmus