[U-Boot] [PATCH 1/6 V3] common: Add symbol handling for generic lists into Makefile

Marek Vasut marex at denx.de
Mon Oct 15 03:49:25 CEST 2012


Dear Daniel Schwierzeck,

> 2012/10/12 Marek Vasut <marex at denx.de>:
> > This patch adds essential components for generation of the contents of
> > the linker section that is used by the linker-generated array. All of
> > the contents is held in a separate file, u-boot.lst, which is generated
> > at runtime just before U-Boot is linked.
> > 
> > The purpose of this code is to especially generate the appropriate
> > boundary symbols around each subsection in the section carrying the
> > linker-generated arrays. Obviously, the interim linker code for actual
> > placement of the variables into the section is generated too. The
> > generated file, u-boot.lst, is included into u-boot.lds via the linker
> > INCLUDE directive in u-boot.lds .
> > 
> > Adjustments are made in the Makefile and spl/Makefile so that the
> > u-boot.lds and u-boot-spl.lds depend on their respective .lst files.
> > 
> > Signed-off-by: Marek Vasut <marex at denx.de>
> > Cc: Joe Hershberger <joe.hershberger at gmail.com>
> > Cc: Mike Frysinger <vapier at gentoo.org>
> > 
> > Cover-letter:
> > Linker-generated arrays (take 2)
> > 
> > This is a second stab at the linker-generated array. Basically, this
> > concept is a generic abstraction of how u_boot_cmd works today. The
> > patch 2/4 contains a huge pile of documentation which should clarify
> > most of the questions.
> > 
> > I don't see size growth, I see size fluctiation in the order of tens
> > of bytes with these patches applied. Subsequent patch added to this
> > series removes the __u_boot_cmd section completely.
> > ---
> > 
> >  .gitignore                                     |    1 +
> >  Makefile                                       |   19 ++++---
> >  config.mk                                      |    2 +
> >  helper.mk                                      |   64
> >  ++++++++++++++++++++++++ nand_spl/board/freescale/mpc8536ds/Makefile   
> >  |    9 +++-
> >  nand_spl/board/freescale/mpc8569mds/Makefile   |    9 +++-
> >  nand_spl/board/freescale/mpc8572ds/Makefile    |    9 +++-
> >  nand_spl/board/freescale/mx31pdk/Makefile      |    9 +++-
> >  nand_spl/board/freescale/p1010rdb/Makefile     |    9 +++-
> >  nand_spl/board/freescale/p1023rds/Makefile     |    9 +++-
> >  nand_spl/board/freescale/p1_p2_rdb/Makefile    |    9 +++-
> >  nand_spl/board/freescale/p1_p2_rdb_pc/Makefile |    9 +++-
> >  nand_spl/board/karo/tx25/Makefile              |    9 +++-
> >  spl/.gitignore                                 |    1 +
> >  spl/Makefile                                   |    8 ++-
> >  15 files changed, 150 insertions(+), 26 deletions(-)
> >  create mode 100644 helper.mk
> > 
> > V2:
> > - Rebase on top of testing/dm-kerneldoc
> > - Fix INCLUDE u-boot.lds in linker scripts. It didn't work with older LD,
> > 
> >   use #include instead and make use of CPP.
> > 
> > - Fix placement of u-boot.lds for NAND SPL
> > V3:
> > - Rebase on top of u-boot/next
> > - Put u-boot.lst into include/ , so the CPP finds it easily.
> > 
> > diff --git a/.gitignore b/.gitignore
> > index d91e91b..1ac43f2 100644
> > --- a/.gitignore
> > +++ b/.gitignore
> > @@ -38,6 +38,7 @@
> > 
> >  /u-boot.sha1
> >  /u-boot.dis
> >  /u-boot.lds
> > 
> > +/u-boot.lst
> > 
> >  /u-boot.ubl
> >  /u-boot.ais
> >  /u-boot.dtb
> > 
> > diff --git a/Makefile b/Makefile
> > index ab34fa7..66c8c77 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -535,7 +535,10 @@ else
> > 
> >  GEN_UBOOT = \
> >  
> >                 UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
> >                 sed  -n -e
> >                 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`
> >                 ;\
> > 
> > -               cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F))
> > $$UNDEF_SYM $(__OBJS) \ +               UNDEF_LST=`$(OBJDUMP) -x
> > $(LIBBOARD) $(LIBS) | \ +               sed  -n -e
> > 's/.*\($(SYM_PREFIX)__u_boot_list_.*\)/-u\1/p'|sort|uniq`;\
> 
> this must be:
> > +               sed  -n -e
> > 's/.*\($(SYM_PREFIX)_u_boot_list_.*\)/-u\1/p'|sort|uniq`;\

I suspect this might break blackfin.

> otherwise $UNDEF_LST is always empty which breaks at least all MIPS
> boards because
> all _uboot_list_* symbols are discarded by the linker. I noticed that
> on ARM and PowerPC
> the content of $UNDEF_LST does not matter at all because those symbols
> are always linked into the final binary.

About time to fix mips ... or throw it away altogether, until it learns to do 
stuff right (incl. relocation).

> I've pushed debug patches to git://git.denx.de/u-boot-mips.git
> test/dm-lgarray-fixed
> if you want to test it yourself. With those patches make and MAKEALL will
> fail if the _uboot_list_cmd_* symbols are missing in the System.map.

I will check it, thanks.

> BTW: you could actually drop this in patch 5/5 because it's not needed 
anymore:
> >                 UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
> >                 sed  -n -e
> >                 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`
> >                 ;\

Good point.

Best regards,
Marek Vasut


More information about the U-Boot mailing list