Hi Tom On Tue, Oct 18, 2022 at 7:57 PM Tom Rini <tr...@konsulko.com> wrote: > > On Tue, Oct 18, 2022 at 07:48:27PM +0200, Max Krummenacher wrote: > > From: Max Krummenacher <max.krummenac...@toradex.com> > > > > With LTO enabled the U-Boot initial environment is no longer stored > > in an easy accessible section in env/common.o. I.e. the section name > > changes from build to build, its content maybe compressed and it is > > annotated with additional data. > > > > For GCC adding the option '-ffat-lto-objects' when compiling common.o > > adds additionally the traditional sections in the object file and > > 'make u-boot-initial-env' would work also for the LTO enabled case. > > However clang doesn't have that option. > > > > Fix this by recompiling common.o into a object file only used for > > the creation of u-boot-initial-env if LTO is enabled. > > > > See also: > > https://lore.kernel.org/all/927b122e-1f62-e790-f5ca-30bae4332...@foss.st.com/ > > > > Signed-off-by: Max Krummenacher <max.krummenac...@toradex.com> > > > > --- > > > > Makefile | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/Makefile b/Makefile > > index 3866cc62f9a..cd45c720d23 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -2451,9 +2451,17 @@ endif > > $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost > > > > quiet_cmd_genenv = GENENV $@ > > +ifeq ($(LTO_ENABLE),y) > > +cmd_genenv = $(CC) $(filter-out $(LTO_CFLAGS),$(c_flags)) -c -o > > env/initial_env.o env/common.c; \ > > + $(OBJCOPY) --dump-section .rodata.default_environment=$@ > > env/initial_env.o; \ > > + sed --in-place -e 's/\x00/\x0A/g' $@; sed --in-place -e '/^\s*$$/d' > > $@; \ > > + sort --field-separator== -k1,1 --stable $@ -o $@; \ > > + rm -f env/initial_env.o env/initial_env.su > > +else > > cmd_genenv = $(OBJCOPY) --dump-section .rodata.default_environment=$@ > > env/common.o; \ > > sed --in-place -e 's/\x00/\x0A/g' $@; sed --in-place -e '/^\s*$$/d' > > $@; \ > > sort --field-separator== -k1,1 --stable $@ -o $@ > > +endif > > > > u-boot-initial-env: u-boot.bin > > $(call if_changed,genenv) > > Can we pipe the output instead of making a new object file? Maybe not, > in a portable way it seems. But, I'm not sure the above respects using > O= as well so that does need to be checked and fixed if so.
While I didn't test it seems that objcopy doesn't allow to pipe data in and out of it. Max > > -- > Tom