All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v1 0/1] Get rid of R_ARM_ABS32 relocation records
@ 2013-02-02 17:02 Albert ARIBAUD
  2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
  0 siblings, 1 reply; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-02 17:02 UTC (permalink / raw)
  To: u-boot

R_ARM_ABS32 relocation records cause symbol references
to be zero before relocation, and become correct only
after relocation. On the other hand, R_ARM_RELATIVE
records make references correct before as well as
after relocation.

This patch series aims at removing all R_ARM_ABS32
relocations from ARM targets.

the main contributor of R_ARM_ABS32 relocations is the
support code for linker-lists, aka Linker-Generated
Arrays. This is due to the fact that LGA start and end
symbols, used for ranging these arrays, are linker-
generated symbols, which always relocate as R_ARM_ABS32
even though they are supposed *not* to be absolute.

V1 of this patch 'series' fixes LGAs so that start or
end symbols are actually compiler-generated, and thus
their references are relocated using R_ARM_RELATIVE.

This V1 is provided for all to test and make sure that
no ill-effect arises from LGA changes; V2 will integrate
any feedback on LGAs and also remove any remaining
R_ARM_ABS32 relocations.


Albert ARIBAUD (1):
  Refactor linker-generated arrays

 Makefile                                         |    6 +-
 arch/arm/cpu/arm920t/ep93xx/u-boot.lds           |    2 +-
 arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds        |    2 +-
 arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds      |    2 +-
 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds    |    2 +-
 arch/arm/cpu/ixp/u-boot.lds                      |    2 +-
 arch/arm/cpu/u-boot.lds                          |    2 +-
 arch/avr32/cpu/u-boot.lds                        |    2 +-
 arch/blackfin/cpu/u-boot.lds                     |    2 +-
 arch/microblaze/cpu/u-boot.lds                   |    2 +-
 arch/mips/cpu/u-boot.lds                         |    2 +-
 arch/nds32/cpu/n1213/u-boot.lds                  |    2 +-
 arch/nios2/cpu/u-boot.lds                        |    2 +-
 arch/powerpc/cpu/74xx_7xx/u-boot.lds             |    2 +-
 arch/powerpc/cpu/mpc512x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc5xx/u-boot.lds               |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8220/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc824x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8260/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc83xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand.lds         |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds     |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc86xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/ppc4xx/u-boot.lds               |    2 +-
 arch/sandbox/cpu/u-boot.lds                      |    2 +-
 arch/sh/cpu/sh2/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh3/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh4/u-boot.lds                       |    2 +-
 arch/x86/cpu/u-boot.lds                          |    2 +-
 board/BuS/eb_cpu5282/u-boot.lds                  |    2 +-
 board/LEOX/elpt860/u-boot.lds                    |    2 +-
 board/RPXClassic/u-boot.lds                      |    2 +-
 board/RPXlite/u-boot.lds                         |    2 +-
 board/RPXlite_dw/u-boot.lds                      |    2 +-
 board/RRvision/u-boot.lds                        |    2 +-
 board/actux1/u-boot.lds                          |    2 +-
 board/actux2/u-boot.lds                          |    2 +-
 board/actux3/u-boot.lds                          |    2 +-
 board/adder/u-boot.lds                           |    2 +-
 board/ait/cam_enc_4xx/u-boot-spl.lds             |    2 +-
 board/altera/nios2-generic/u-boot.lds            |    2 +-
 board/amcc/acadia/u-boot-nand.lds                |    2 +-
 board/amcc/bamboo/u-boot-nand.lds                |    2 +-
 board/amcc/canyonlands/u-boot-nand.lds           |    2 +-
 board/amcc/kilauea/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-ram.lds                |    2 +-
 board/astro/mcf5373l/u-boot.lds                  |    2 +-
 board/cobra5272/u-boot.lds                       |    2 +-
 board/cogent/u-boot.lds                          |    2 +-
 board/dave/PPChameleonEVB/u-boot.lds             |    2 +-
 board/davinci/da8xxevm/u-boot-spl-da850evm.lds   |    2 +-
 board/davinci/da8xxevm/u-boot-spl-hawk.lds       |    2 +-
 board/dvlhost/u-boot.lds                         |    2 +-
 board/eltec/mhpc/u-boot.lds                      |    2 +-
 board/emk/top860/u-boot.lds                      |    2 +-
 board/ep88x/u-boot.lds                           |    2 +-
 board/esd/dasa_sim/u-boot.lds                    |    2 +-
 board/esd/pmc440/u-boot-nand.lds                 |    2 +-
 board/esd/tasreg/u-boot.lds                      |    2 +-
 board/esteem192e/u-boot.lds                      |    2 +-
 board/evb64260/u-boot.lds                        |    2 +-
 board/fads/u-boot.lds                            |    2 +-
 board/flagadm/u-boot.lds                         |    2 +-
 board/freescale/m5208evbe/u-boot.lds             |    2 +-
 board/freescale/m52277evb/u-boot.lds             |    2 +-
 board/freescale/m5235evb/u-boot.lds              |    2 +-
 board/freescale/m5249evb/u-boot.lds              |    2 +-
 board/freescale/m5253demo/u-boot.lds             |    2 +-
 board/freescale/m5253evbe/u-boot.lds             |    2 +-
 board/freescale/m5271evb/u-boot.lds              |    2 +-
 board/freescale/m5272c3/u-boot.lds               |    2 +-
 board/freescale/m5275evb/u-boot.lds              |    2 +-
 board/freescale/m5282evb/u-boot.lds              |    2 +-
 board/freescale/m53017evb/u-boot.lds             |    2 +-
 board/freescale/m5329evb/u-boot.lds              |    2 +-
 board/freescale/m5373evb/u-boot.lds              |    2 +-
 board/freescale/m54418twr/u-boot.lds             |    2 +-
 board/freescale/m54451evb/u-boot.lds             |    2 +-
 board/freescale/m54455evb/u-boot.lds             |    2 +-
 board/freescale/m547xevb/u-boot.lds              |    2 +-
 board/freescale/m548xevb/u-boot.lds              |    2 +-
 board/freescale/mx31ads/u-boot.lds               |    2 +-
 board/gaisler/gr_cpci_ax2000/u-boot.lds          |    2 +-
 board/gaisler/gr_ep2s60/u-boot.lds               |    2 +-
 board/gaisler/gr_xc3s_1500/u-boot.lds            |    2 +-
 board/gaisler/grsim/u-boot.lds                   |    2 +-
 board/gaisler/grsim_leon2/u-boot.lds             |    2 +-
 board/gen860t/u-boot-flashenv.lds                |    2 +-
 board/gen860t/u-boot.lds                         |    2 +-
 board/genietv/u-boot.lds                         |    2 +-
 board/hermes/u-boot.lds                          |    2 +-
 board/hymod/u-boot.lds                           |    2 +-
 board/icu862/u-boot.lds                          |    2 +-
 board/idmr/u-boot.lds                            |    2 +-
 board/ip860/u-boot.lds                           |    2 +-
 board/ivm/u-boot.lds                             |    2 +-
 board/korat/u-boot-F7FC.lds                      |    2 +-
 board/kup/kup4k/u-boot.lds                       |    2 +-
 board/kup/kup4x/u-boot.lds                       |    2 +-
 board/lwmon/u-boot.lds                           |    2 +-
 board/manroland/uc100/u-boot.lds                 |    2 +-
 board/matrix_vision/mvsmr/u-boot.lds             |    2 +-
 board/mbx8xx/u-boot.lds                          |    2 +-
 board/mousse/u-boot.lds                          |    2 +-
 board/mvblue/u-boot.lds                          |    2 +-
 board/netphone/u-boot.lds                        |    2 +-
 board/netta/u-boot.lds                           |    2 +-
 board/netta2/u-boot.lds                          |    2 +-
 board/netvia/u-boot.lds                          |    2 +-
 board/nx823/u-boot.lds                           |    2 +-
 board/openrisc/openrisc-generic/u-boot.lds       |    2 +-
 board/quantum/u-boot.lds                         |    2 +-
 board/r360mpi/u-boot.lds                         |    2 +-
 board/rbc823/u-boot.lds                          |    2 +-
 board/renesas/sh7757lcr/u-boot.lds               |    2 +-
 board/rsdproto/u-boot.lds                        |    2 +-
 board/samsung/smdk5250/smdk5250-uboot-spl.lds    |    2 +-
 board/samsung/smdk6400/u-boot-nand.lds           |    2 +-
 board/sandpoint/u-boot.lds                       |    2 +-
 board/sixnet/u-boot.lds                          |    2 +-
 board/snmc/qs850/u-boot.lds                      |    2 +-
 board/snmc/qs860t/u-boot.lds                     |    2 +-
 board/spc1920/u-boot.lds                         |    2 +-
 board/spd8xx/u-boot.lds                          |    2 +-
 board/stx/stxxtc/u-boot.lds                      |    2 +-
 board/svm_sc8xx/u-boot.lds                       |    2 +-
 board/tqc/tqm8xx/u-boot.lds                      |    2 +-
 board/v37/u-boot.lds                             |    2 +-
 board/vpac270/u-boot-spl.lds                     |    2 +-
 common/cmd_help.c                                |    2 +-
 common/command.c                                 |    1 +
 config.mk                                        |    2 -
 helper.mk                                        |   64 ------
 include/command.h                                |    2 +-
 include/env_callback.h                           |    2 +-
 include/linker_lists.h                           |  244 +++++++++++++++++-----
 nand_spl/board/freescale/mpc8536ds/Makefile      |    6 +-
 nand_spl/board/freescale/mpc8569mds/Makefile     |    6 +-
 nand_spl/board/freescale/mpc8572ds/Makefile      |    6 +-
 nand_spl/board/freescale/mx31pdk/Makefile        |    6 +-
 nand_spl/board/freescale/mx31pdk/u-boot.lds      |    2 +-
 nand_spl/board/freescale/p1010rdb/Makefile       |    6 +-
 nand_spl/board/freescale/p1023rds/Makefile       |    6 +-
 nand_spl/board/freescale/p1_p2_rdb/Makefile      |    6 +-
 nand_spl/board/karo/tx25/Makefile                |    6 +-
 nand_spl/board/karo/tx25/u-boot.lds              |    2 +-
 nand_spl/board/samsung/smdk6400/u-boot.lds       |    2 +-
 spl/Makefile                                     |    6 +-
 152 files changed, 342 insertions(+), 305 deletions(-)
 delete mode 100644 helper.mk

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-02 17:02 [U-Boot] [PATCH v1 0/1] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
@ 2013-02-02 17:02 ` Albert ARIBAUD
  2013-02-02 17:51   ` Daniel Schwierzeck
                     ` (5 more replies)
  0 siblings, 6 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-02 17:02 UTC (permalink / raw)
  To: u-boot

Refactor linker-generated array code so that symbols
which were previously linker-generated are now compiler-
generated. This causes relocation records of type
R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
code which uses LGA able to run before relocation as
well as after.

Note: this affects more than ARM targets, as linker-
lists span possibly all target architectures, notably
PowerPC.

Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
---
 Makefile                                         |    6 +-
 arch/arm/cpu/arm920t/ep93xx/u-boot.lds           |    2 +-
 arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds        |    2 +-
 arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds      |    2 +-
 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds    |    2 +-
 arch/arm/cpu/ixp/u-boot.lds                      |    2 +-
 arch/arm/cpu/u-boot.lds                          |    2 +-
 arch/avr32/cpu/u-boot.lds                        |    2 +-
 arch/blackfin/cpu/u-boot.lds                     |    2 +-
 arch/microblaze/cpu/u-boot.lds                   |    2 +-
 arch/mips/cpu/u-boot.lds                         |    2 +-
 arch/nds32/cpu/n1213/u-boot.lds                  |    2 +-
 arch/nios2/cpu/u-boot.lds                        |    2 +-
 arch/powerpc/cpu/74xx_7xx/u-boot.lds             |    2 +-
 arch/powerpc/cpu/mpc512x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc5xx/u-boot.lds               |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8220/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc824x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8260/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc83xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand.lds         |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds     |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc86xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/ppc4xx/u-boot.lds               |    2 +-
 arch/sandbox/cpu/u-boot.lds                      |    2 +-
 arch/sh/cpu/sh2/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh3/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh4/u-boot.lds                       |    2 +-
 arch/x86/cpu/u-boot.lds                          |    2 +-
 board/BuS/eb_cpu5282/u-boot.lds                  |    2 +-
 board/LEOX/elpt860/u-boot.lds                    |    2 +-
 board/RPXClassic/u-boot.lds                      |    2 +-
 board/RPXlite/u-boot.lds                         |    2 +-
 board/RPXlite_dw/u-boot.lds                      |    2 +-
 board/RRvision/u-boot.lds                        |    2 +-
 board/actux1/u-boot.lds                          |    2 +-
 board/actux2/u-boot.lds                          |    2 +-
 board/actux3/u-boot.lds                          |    2 +-
 board/adder/u-boot.lds                           |    2 +-
 board/ait/cam_enc_4xx/u-boot-spl.lds             |    2 +-
 board/altera/nios2-generic/u-boot.lds            |    2 +-
 board/amcc/acadia/u-boot-nand.lds                |    2 +-
 board/amcc/bamboo/u-boot-nand.lds                |    2 +-
 board/amcc/canyonlands/u-boot-nand.lds           |    2 +-
 board/amcc/kilauea/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-ram.lds                |    2 +-
 board/astro/mcf5373l/u-boot.lds                  |    2 +-
 board/cobra5272/u-boot.lds                       |    2 +-
 board/cogent/u-boot.lds                          |    2 +-
 board/dave/PPChameleonEVB/u-boot.lds             |    2 +-
 board/davinci/da8xxevm/u-boot-spl-da850evm.lds   |    2 +-
 board/davinci/da8xxevm/u-boot-spl-hawk.lds       |    2 +-
 board/dvlhost/u-boot.lds                         |    2 +-
 board/eltec/mhpc/u-boot.lds                      |    2 +-
 board/emk/top860/u-boot.lds                      |    2 +-
 board/ep88x/u-boot.lds                           |    2 +-
 board/esd/dasa_sim/u-boot.lds                    |    2 +-
 board/esd/pmc440/u-boot-nand.lds                 |    2 +-
 board/esd/tasreg/u-boot.lds                      |    2 +-
 board/esteem192e/u-boot.lds                      |    2 +-
 board/evb64260/u-boot.lds                        |    2 +-
 board/fads/u-boot.lds                            |    2 +-
 board/flagadm/u-boot.lds                         |    2 +-
 board/freescale/m5208evbe/u-boot.lds             |    2 +-
 board/freescale/m52277evb/u-boot.lds             |    2 +-
 board/freescale/m5235evb/u-boot.lds              |    2 +-
 board/freescale/m5249evb/u-boot.lds              |    2 +-
 board/freescale/m5253demo/u-boot.lds             |    2 +-
 board/freescale/m5253evbe/u-boot.lds             |    2 +-
 board/freescale/m5271evb/u-boot.lds              |    2 +-
 board/freescale/m5272c3/u-boot.lds               |    2 +-
 board/freescale/m5275evb/u-boot.lds              |    2 +-
 board/freescale/m5282evb/u-boot.lds              |    2 +-
 board/freescale/m53017evb/u-boot.lds             |    2 +-
 board/freescale/m5329evb/u-boot.lds              |    2 +-
 board/freescale/m5373evb/u-boot.lds              |    2 +-
 board/freescale/m54418twr/u-boot.lds             |    2 +-
 board/freescale/m54451evb/u-boot.lds             |    2 +-
 board/freescale/m54455evb/u-boot.lds             |    2 +-
 board/freescale/m547xevb/u-boot.lds              |    2 +-
 board/freescale/m548xevb/u-boot.lds              |    2 +-
 board/freescale/mx31ads/u-boot.lds               |    2 +-
 board/gaisler/gr_cpci_ax2000/u-boot.lds          |    2 +-
 board/gaisler/gr_ep2s60/u-boot.lds               |    2 +-
 board/gaisler/gr_xc3s_1500/u-boot.lds            |    2 +-
 board/gaisler/grsim/u-boot.lds                   |    2 +-
 board/gaisler/grsim_leon2/u-boot.lds             |    2 +-
 board/gen860t/u-boot-flashenv.lds                |    2 +-
 board/gen860t/u-boot.lds                         |    2 +-
 board/genietv/u-boot.lds                         |    2 +-
 board/hermes/u-boot.lds                          |    2 +-
 board/hymod/u-boot.lds                           |    2 +-
 board/icu862/u-boot.lds                          |    2 +-
 board/idmr/u-boot.lds                            |    2 +-
 board/ip860/u-boot.lds                           |    2 +-
 board/ivm/u-boot.lds                             |    2 +-
 board/korat/u-boot-F7FC.lds                      |    2 +-
 board/kup/kup4k/u-boot.lds                       |    2 +-
 board/kup/kup4x/u-boot.lds                       |    2 +-
 board/lwmon/u-boot.lds                           |    2 +-
 board/manroland/uc100/u-boot.lds                 |    2 +-
 board/matrix_vision/mvsmr/u-boot.lds             |    2 +-
 board/mbx8xx/u-boot.lds                          |    2 +-
 board/mousse/u-boot.lds                          |    2 +-
 board/mvblue/u-boot.lds                          |    2 +-
 board/netphone/u-boot.lds                        |    2 +-
 board/netta/u-boot.lds                           |    2 +-
 board/netta2/u-boot.lds                          |    2 +-
 board/netvia/u-boot.lds                          |    2 +-
 board/nx823/u-boot.lds                           |    2 +-
 board/openrisc/openrisc-generic/u-boot.lds       |    2 +-
 board/quantum/u-boot.lds                         |    2 +-
 board/r360mpi/u-boot.lds                         |    2 +-
 board/rbc823/u-boot.lds                          |    2 +-
 board/renesas/sh7757lcr/u-boot.lds               |    2 +-
 board/rsdproto/u-boot.lds                        |    2 +-
 board/samsung/smdk5250/smdk5250-uboot-spl.lds    |    2 +-
 board/samsung/smdk6400/u-boot-nand.lds           |    2 +-
 board/sandpoint/u-boot.lds                       |    2 +-
 board/sixnet/u-boot.lds                          |    2 +-
 board/snmc/qs850/u-boot.lds                      |    2 +-
 board/snmc/qs860t/u-boot.lds                     |    2 +-
 board/spc1920/u-boot.lds                         |    2 +-
 board/spd8xx/u-boot.lds                          |    2 +-
 board/stx/stxxtc/u-boot.lds                      |    2 +-
 board/svm_sc8xx/u-boot.lds                       |    2 +-
 board/tqc/tqm8xx/u-boot.lds                      |    2 +-
 board/v37/u-boot.lds                             |    2 +-
 board/vpac270/u-boot-spl.lds                     |    2 +-
 common/cmd_help.c                                |    2 +-
 common/command.c                                 |    1 +
 config.mk                                        |    2 -
 helper.mk                                        |   64 ------
 include/command.h                                |    2 +-
 include/env_callback.h                           |    2 +-
 include/linker_lists.h                           |  244 +++++++++++++++++-----
 nand_spl/board/freescale/mpc8536ds/Makefile      |    6 +-
 nand_spl/board/freescale/mpc8569mds/Makefile     |    6 +-
 nand_spl/board/freescale/mpc8572ds/Makefile      |    6 +-
 nand_spl/board/freescale/mx31pdk/Makefile        |    6 +-
 nand_spl/board/freescale/mx31pdk/u-boot.lds      |    2 +-
 nand_spl/board/freescale/p1010rdb/Makefile       |    6 +-
 nand_spl/board/freescale/p1023rds/Makefile       |    6 +-
 nand_spl/board/freescale/p1_p2_rdb/Makefile      |    6 +-
 nand_spl/board/karo/tx25/Makefile                |    6 +-
 nand_spl/board/karo/tx25/u-boot.lds              |    2 +-
 nand_spl/board/samsung/smdk6400/u-boot.lds       |    2 +-
 spl/Makefile                                     |    6 +-
 152 files changed, 342 insertions(+), 305 deletions(-)
 delete mode 100644 helper.mk

diff --git a/Makefile b/Makefile
index 51bd918..3cff193 100644
--- a/Makefile
+++ b/Makefile
@@ -595,11 +595,7 @@ $(SUBDIR_EXAMPLES): $(obj)u-boot
 $(LDSCRIPT):	depend
 		$(MAKE) -C $(dir $@) $(notdir $@)
 
-# The following line expands into whole rule which generates u-boot.lst,
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(obj)include/u-boot.lst, $(LIBBOARD) $(LIBS)))
-$(obj)u-boot.lds: $(LDSCRIPT) $(obj)include/u-boot.lst
+$(obj)u-boot.lds: $(LDSCRIPT)
 		$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 nand_spl:	$(TIMESTAMP_FILE) $(VERSION_FILE) depend
diff --git a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
index 008ae89..8d371f8 100644
--- a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
+++ b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
@@ -51,7 +51,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds b/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
index 6dc681a..ba33978 100644
--- a/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
+++ b/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
@@ -52,7 +52,7 @@ SECTIONS
 	. = ALIGN(4);
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds b/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
index f3bd5e7..ae23ddd 100644
--- a/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
+++ b/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
@@ -52,7 +52,7 @@ SECTIONS
 	. = ALIGN(4);
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
index 9979c30..aefaccc 100644
--- a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
+++ b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
@@ -49,7 +49,7 @@ SECTIONS
 	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/ixp/u-boot.lds b/arch/arm/cpu/ixp/u-boot.lds
index 81d954f..2adfe5b 100644
--- a/arch/arm/cpu/ixp/u-boot.lds
+++ b/arch/arm/cpu/ixp/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
index e6b202b..466eb04 100644
--- a/arch/arm/cpu/u-boot.lds
+++ b/arch/arm/cpu/u-boot.lds
@@ -52,7 +52,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/avr32/cpu/u-boot.lds b/arch/avr32/cpu/u-boot.lds
index 0b16d2a..ad4003f 100644
--- a/arch/avr32/cpu/u-boot.lds
+++ b/arch/avr32/cpu/u-boot.lds
@@ -50,7 +50,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/blackfin/cpu/u-boot.lds b/arch/blackfin/cpu/u-boot.lds
index 58db838..88b1eaf 100644
--- a/arch/blackfin/cpu/u-boot.lds
+++ b/arch/blackfin/cpu/u-boot.lds
@@ -114,7 +114,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	} >ram_data
 
 	.text_l1 :
diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
index fe3d97d..e1fab9f 100644
--- a/arch/microblaze/cpu/u-boot.lds
+++ b/arch/microblaze/cpu/u-boot.lds
@@ -54,7 +54,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	.bss ALIGN(0x4):
diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds
index 37c9d23..6571518 100644
--- a/arch/mips/cpu/u-boot.lds
+++ b/arch/mips/cpu/u-boot.lds
@@ -64,7 +64,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	uboot_end_data = .;
diff --git a/arch/nds32/cpu/n1213/u-boot.lds b/arch/nds32/cpu/n1213/u-boot.lds
index cef19c5..4516b45 100644
--- a/arch/nds32/cpu/n1213/u-boot.lds
+++ b/arch/nds32/cpu/n1213/u-boot.lds
@@ -55,7 +55,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/nios2/cpu/u-boot.lds b/arch/nios2/cpu/u-boot.lds
index d0eb80d..a879f5b 100644
--- a/arch/nios2/cpu/u-boot.lds
+++ b/arch/nios2/cpu/u-boot.lds
@@ -48,7 +48,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	/* INIT DATA sections - "Small" data (see the gcc -G option)
diff --git a/arch/powerpc/cpu/74xx_7xx/u-boot.lds b/arch/powerpc/cpu/74xx_7xx/u-boot.lds
index ecee439..666e72e 100644
--- a/arch/powerpc/cpu/74xx_7xx/u-boot.lds
+++ b/arch/powerpc/cpu/74xx_7xx/u-boot.lds
@@ -65,7 +65,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc512x/u-boot.lds b/arch/powerpc/cpu/mpc512x/u-boot.lds
index 7faefba..b6eaef0 100644
--- a/arch/powerpc/cpu/mpc512x/u-boot.lds
+++ b/arch/powerpc/cpu/mpc512x/u-boot.lds
@@ -60,7 +60,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc5xx/u-boot.lds b/arch/powerpc/cpu/mpc5xx/u-boot.lds
index c91e146..30512e5 100644
--- a/arch/powerpc/cpu/mpc5xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc5xx/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds b/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
index ac7844d..a75d137 100644
--- a/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
+++ b/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
@@ -68,7 +68,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/mpc5xxx/u-boot.lds b/arch/powerpc/cpu/mpc5xxx/u-boot.lds
index 1f46ead..bc54535 100644
--- a/arch/powerpc/cpu/mpc5xxx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc5xxx/u-boot.lds
@@ -63,7 +63,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc8220/u-boot.lds b/arch/powerpc/cpu/mpc8220/u-boot.lds
index c147954..f40079e 100644
--- a/arch/powerpc/cpu/mpc8220/u-boot.lds
+++ b/arch/powerpc/cpu/mpc8220/u-boot.lds
@@ -62,7 +62,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc824x/u-boot.lds b/arch/powerpc/cpu/mpc824x/u-boot.lds
index a713012..fefd3a8 100644
--- a/arch/powerpc/cpu/mpc824x/u-boot.lds
+++ b/arch/powerpc/cpu/mpc824x/u-boot.lds
@@ -63,7 +63,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc8260/u-boot.lds b/arch/powerpc/cpu/mpc8260/u-boot.lds
index 42385fc..17c9f5b 100644
--- a/arch/powerpc/cpu/mpc8260/u-boot.lds
+++ b/arch/powerpc/cpu/mpc8260/u-boot.lds
@@ -62,7 +62,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc83xx/u-boot.lds b/arch/powerpc/cpu/mpc83xx/u-boot.lds
index d699def..cd63f86 100644
--- a/arch/powerpc/cpu/mpc83xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc83xx/u-boot.lds
@@ -61,7 +61,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
index f7c4a22..bf9d7f3 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
@@ -72,7 +72,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds b/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
index 46dbaed..94efe76 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
@@ -54,7 +54,7 @@ SECTIONS
 	_edata  =  .;
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(8);
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot.lds b/arch/powerpc/cpu/mpc85xx/u-boot.lds
index 4a40a1f..494c9de 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot.lds
@@ -80,7 +80,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/mpc86xx/u-boot.lds b/arch/powerpc/cpu/mpc86xx/u-boot.lds
index 8bfadf2..5360ad2 100644
--- a/arch/powerpc/cpu/mpc86xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc86xx/u-boot.lds
@@ -67,7 +67,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/ppc4xx/u-boot.lds b/arch/powerpc/cpu/ppc4xx/u-boot.lds
index a96ddd5..0a673b6 100644
--- a/arch/powerpc/cpu/ppc4xx/u-boot.lds
+++ b/arch/powerpc/cpu/ppc4xx/u-boot.lds
@@ -81,7 +81,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/arch/sandbox/cpu/u-boot.lds b/arch/sandbox/cpu/u-boot.lds
index 1b781eb..544f37b 100644
--- a/arch/sandbox/cpu/u-boot.lds
+++ b/arch/sandbox/cpu/u-boot.lds
@@ -27,7 +27,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	__u_boot_sandbox_option_start = .;
diff --git a/arch/sh/cpu/sh2/u-boot.lds b/arch/sh/cpu/sh2/u-boot.lds
index 17f8091..32cfdb4 100644
--- a/arch/sh/cpu/sh2/u-boot.lds
+++ b/arch/sh/cpu/sh2/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/arch/sh/cpu/sh3/u-boot.lds b/arch/sh/cpu/sh3/u-boot.lds
index c831961..e01b61c 100644
--- a/arch/sh/cpu/sh3/u-boot.lds
+++ b/arch/sh/cpu/sh3/u-boot.lds
@@ -80,7 +80,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/arch/sh/cpu/sh4/u-boot.lds b/arch/sh/cpu/sh4/u-boot.lds
index 0ecafcf..1a2c592 100644
--- a/arch/sh/cpu/sh4/u-boot.lds
+++ b/arch/sh/cpu/sh4/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/arch/x86/cpu/u-boot.lds b/arch/x86/cpu/u-boot.lds
index 0c6f0e3..6cc881e 100644
--- a/arch/x86/cpu/u-boot.lds
+++ b/arch/x86/cpu/u-boot.lds
@@ -36,7 +36,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/board/BuS/eb_cpu5282/u-boot.lds b/board/BuS/eb_cpu5282/u-boot.lds
index 0c92d31..a8a9fcb 100644
--- a/board/BuS/eb_cpu5282/u-boot.lds
+++ b/board/BuS/eb_cpu5282/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/LEOX/elpt860/u-boot.lds b/board/LEOX/elpt860/u-boot.lds
index 2bb876d..2989172 100644
--- a/board/LEOX/elpt860/u-boot.lds
+++ b/board/LEOX/elpt860/u-boot.lds
@@ -89,7 +89,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/RPXClassic/u-boot.lds b/board/RPXClassic/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/RPXClassic/u-boot.lds
+++ b/board/RPXClassic/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/RPXlite/u-boot.lds b/board/RPXlite/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/RPXlite/u-boot.lds
+++ b/board/RPXlite/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/RPXlite_dw/u-boot.lds b/board/RPXlite_dw/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/RPXlite_dw/u-boot.lds
+++ b/board/RPXlite_dw/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/RRvision/u-boot.lds b/board/RRvision/u-boot.lds
index 748e511..6d957ad 100644
--- a/board/RRvision/u-boot.lds
+++ b/board/RRvision/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/actux1/u-boot.lds b/board/actux1/u-boot.lds
index c41eed0..daa5ed2 100644
--- a/board/actux1/u-boot.lds
+++ b/board/actux1/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN (4);
diff --git a/board/actux2/u-boot.lds b/board/actux2/u-boot.lds
index 8409984..24ab013 100644
--- a/board/actux2/u-boot.lds
+++ b/board/actux2/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN (4);
diff --git a/board/actux3/u-boot.lds b/board/actux3/u-boot.lds
index a3bd02b..114a5c2 100644
--- a/board/actux3/u-boot.lds
+++ b/board/actux3/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN (4);
diff --git a/board/adder/u-boot.lds b/board/adder/u-boot.lds
index 73e2f3f..01a1d01 100644
--- a/board/adder/u-boot.lds
+++ b/board/adder/u-boot.lds
@@ -65,7 +65,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/ait/cam_enc_4xx/u-boot-spl.lds b/board/ait/cam_enc_4xx/u-boot-spl.lds
index 656b2fb..70d4ab7 100644
--- a/board/ait/cam_enc_4xx/u-boot-spl.lds
+++ b/board/ait/cam_enc_4xx/u-boot-spl.lds
@@ -49,7 +49,7 @@ SECTIONS
 	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	} >.sram
 	. = ALIGN(4);
 	.rel.dyn : {
diff --git a/board/altera/nios2-generic/u-boot.lds b/board/altera/nios2-generic/u-boot.lds
index 289386b..c65277c 100644
--- a/board/altera/nios2-generic/u-boot.lds
+++ b/board/altera/nios2-generic/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	/* INIT DATA sections - "Small" data (see the gcc -G option)
diff --git a/board/amcc/acadia/u-boot-nand.lds b/board/amcc/acadia/u-boot-nand.lds
index beba978..b02b7cc 100644
--- a/board/amcc/acadia/u-boot-nand.lds
+++ b/board/amcc/acadia/u-boot-nand.lds
@@ -74,7 +74,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/amcc/bamboo/u-boot-nand.lds b/board/amcc/bamboo/u-boot-nand.lds
index 2dd00d7..7d12808 100644
--- a/board/amcc/bamboo/u-boot-nand.lds
+++ b/board/amcc/bamboo/u-boot-nand.lds
@@ -75,7 +75,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/amcc/canyonlands/u-boot-nand.lds b/board/amcc/canyonlands/u-boot-nand.lds
index 8ac5116..9fa29f0 100644
--- a/board/amcc/canyonlands/u-boot-nand.lds
+++ b/board/amcc/canyonlands/u-boot-nand.lds
@@ -75,7 +75,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/amcc/kilauea/u-boot-nand.lds b/board/amcc/kilauea/u-boot-nand.lds
index beba978..b02b7cc 100644
--- a/board/amcc/kilauea/u-boot-nand.lds
+++ b/board/amcc/kilauea/u-boot-nand.lds
@@ -74,7 +74,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/amcc/sequoia/u-boot-nand.lds b/board/amcc/sequoia/u-boot-nand.lds
index 18266ef..9ad41a0 100644
--- a/board/amcc/sequoia/u-boot-nand.lds
+++ b/board/amcc/sequoia/u-boot-nand.lds
@@ -75,7 +75,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/amcc/sequoia/u-boot-ram.lds b/board/amcc/sequoia/u-boot-ram.lds
index 6b02784..ee30dc0 100644
--- a/board/amcc/sequoia/u-boot-ram.lds
+++ b/board/amcc/sequoia/u-boot-ram.lds
@@ -66,7 +66,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/astro/mcf5373l/u-boot.lds b/board/astro/mcf5373l/u-boot.lds
index bc40fd6..dce1f13 100644
--- a/board/astro/mcf5373l/u-boot.lds
+++ b/board/astro/mcf5373l/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/cobra5272/u-boot.lds b/board/cobra5272/u-boot.lds
index d054f20..9cd5e13 100644
--- a/board/cobra5272/u-boot.lds
+++ b/board/cobra5272/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/cogent/u-boot.lds b/board/cogent/u-boot.lds
index 2a6027f..edafbba 100644
--- a/board/cogent/u-boot.lds
+++ b/board/cogent/u-boot.lds
@@ -73,7 +73,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/dave/PPChameleonEVB/u-boot.lds b/board/dave/PPChameleonEVB/u-boot.lds
index 8a306d6..34125c7 100644
--- a/board/dave/PPChameleonEVB/u-boot.lds
+++ b/board/dave/PPChameleonEVB/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/davinci/da8xxevm/u-boot-spl-da850evm.lds b/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
index c5fd93c..117b117 100644
--- a/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
+++ b/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
@@ -50,7 +50,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	} >.sram
 
 	. = ALIGN(4);
diff --git a/board/davinci/da8xxevm/u-boot-spl-hawk.lds b/board/davinci/da8xxevm/u-boot-spl-hawk.lds
index 86dc172..9ef2205 100644
--- a/board/davinci/da8xxevm/u-boot-spl-hawk.lds
+++ b/board/davinci/da8xxevm/u-boot-spl-hawk.lds
@@ -59,7 +59,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/board/dvlhost/u-boot.lds b/board/dvlhost/u-boot.lds
index 1bd1700..ce3123b 100644
--- a/board/dvlhost/u-boot.lds
+++ b/board/dvlhost/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN (4);
diff --git a/board/eltec/mhpc/u-boot.lds b/board/eltec/mhpc/u-boot.lds
index c8d3894..4d7ca31 100644
--- a/board/eltec/mhpc/u-boot.lds
+++ b/board/eltec/mhpc/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/emk/top860/u-boot.lds b/board/emk/top860/u-boot.lds
index 22626d3..0ca7082 100644
--- a/board/emk/top860/u-boot.lds
+++ b/board/emk/top860/u-boot.lds
@@ -70,7 +70,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/ep88x/u-boot.lds b/board/ep88x/u-boot.lds
index 1dcc22a..520e863 100644
--- a/board/ep88x/u-boot.lds
+++ b/board/ep88x/u-boot.lds
@@ -65,7 +65,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/esd/dasa_sim/u-boot.lds b/board/esd/dasa_sim/u-boot.lds
index 7eca183..0731921 100644
--- a/board/esd/dasa_sim/u-boot.lds
+++ b/board/esd/dasa_sim/u-boot.lds
@@ -76,7 +76,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/esd/pmc440/u-boot-nand.lds b/board/esd/pmc440/u-boot-nand.lds
index ca7df45..2edd082 100644
--- a/board/esd/pmc440/u-boot-nand.lds
+++ b/board/esd/pmc440/u-boot-nand.lds
@@ -104,7 +104,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/esd/tasreg/u-boot.lds b/board/esd/tasreg/u-boot.lds
index 0d6a0f3..23021b2 100644
--- a/board/esd/tasreg/u-boot.lds
+++ b/board/esd/tasreg/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/esteem192e/u-boot.lds b/board/esteem192e/u-boot.lds
index fe5cf09..d20b2f2 100644
--- a/board/esteem192e/u-boot.lds
+++ b/board/esteem192e/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/evb64260/u-boot.lds b/board/evb64260/u-boot.lds
index eac9c07..61c9669 100644
--- a/board/evb64260/u-boot.lds
+++ b/board/evb64260/u-boot.lds
@@ -73,7 +73,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/fads/u-boot.lds b/board/fads/u-boot.lds
index 6022dbc..4fd08a7 100644
--- a/board/fads/u-boot.lds
+++ b/board/fads/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/flagadm/u-boot.lds b/board/flagadm/u-boot.lds
index c8d3894..4d7ca31 100644
--- a/board/flagadm/u-boot.lds
+++ b/board/flagadm/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/freescale/m5208evbe/u-boot.lds b/board/freescale/m5208evbe/u-boot.lds
index 2c151f2..bd4a6bf 100644
--- a/board/freescale/m5208evbe/u-boot.lds
+++ b/board/freescale/m5208evbe/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m52277evb/u-boot.lds b/board/freescale/m52277evb/u-boot.lds
index dbd6f6a..a0f84c3 100644
--- a/board/freescale/m52277evb/u-boot.lds
+++ b/board/freescale/m52277evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5235evb/u-boot.lds b/board/freescale/m5235evb/u-boot.lds
index 00932ae..64eff29 100644
--- a/board/freescale/m5235evb/u-boot.lds
+++ b/board/freescale/m5235evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5249evb/u-boot.lds b/board/freescale/m5249evb/u-boot.lds
index d054f20..9cd5e13 100644
--- a/board/freescale/m5249evb/u-boot.lds
+++ b/board/freescale/m5249evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5253demo/u-boot.lds b/board/freescale/m5253demo/u-boot.lds
index f8116f6..e05479d 100644
--- a/board/freescale/m5253demo/u-boot.lds
+++ b/board/freescale/m5253demo/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5253evbe/u-boot.lds b/board/freescale/m5253evbe/u-boot.lds
index d054f20..9cd5e13 100644
--- a/board/freescale/m5253evbe/u-boot.lds
+++ b/board/freescale/m5253evbe/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5271evb/u-boot.lds b/board/freescale/m5271evb/u-boot.lds
index 133ec01..f877ccc 100644
--- a/board/freescale/m5271evb/u-boot.lds
+++ b/board/freescale/m5271evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5272c3/u-boot.lds b/board/freescale/m5272c3/u-boot.lds
index d054f20..9cd5e13 100644
--- a/board/freescale/m5272c3/u-boot.lds
+++ b/board/freescale/m5272c3/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5275evb/u-boot.lds b/board/freescale/m5275evb/u-boot.lds
index fc68de1..759c10f 100644
--- a/board/freescale/m5275evb/u-boot.lds
+++ b/board/freescale/m5275evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5282evb/u-boot.lds b/board/freescale/m5282evb/u-boot.lds
index ad49874..0311fbb 100644
--- a/board/freescale/m5282evb/u-boot.lds
+++ b/board/freescale/m5282evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m53017evb/u-boot.lds b/board/freescale/m53017evb/u-boot.lds
index d25a36f..b79cabd 100644
--- a/board/freescale/m53017evb/u-boot.lds
+++ b/board/freescale/m53017evb/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5329evb/u-boot.lds b/board/freescale/m5329evb/u-boot.lds
index 6616594..631ad26 100644
--- a/board/freescale/m5329evb/u-boot.lds
+++ b/board/freescale/m5329evb/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m5373evb/u-boot.lds b/board/freescale/m5373evb/u-boot.lds
index bc40fd6..dce1f13 100644
--- a/board/freescale/m5373evb/u-boot.lds
+++ b/board/freescale/m5373evb/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m54418twr/u-boot.lds b/board/freescale/m54418twr/u-boot.lds
index 36a4c26..263c7c0 100644
--- a/board/freescale/m54418twr/u-boot.lds
+++ b/board/freescale/m54418twr/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m54451evb/u-boot.lds b/board/freescale/m54451evb/u-boot.lds
index 91328a4..86d97d2 100644
--- a/board/freescale/m54451evb/u-boot.lds
+++ b/board/freescale/m54451evb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m54455evb/u-boot.lds b/board/freescale/m54455evb/u-boot.lds
index 36a4c26..263c7c0 100644
--- a/board/freescale/m54455evb/u-boot.lds
+++ b/board/freescale/m54455evb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m547xevb/u-boot.lds b/board/freescale/m547xevb/u-boot.lds
index de4d0eb..d269d93 100644
--- a/board/freescale/m547xevb/u-boot.lds
+++ b/board/freescale/m547xevb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/m548xevb/u-boot.lds b/board/freescale/m548xevb/u-boot.lds
index fbbe0c5..1c87bbc 100644
--- a/board/freescale/m548xevb/u-boot.lds
+++ b/board/freescale/m548xevb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/freescale/mx31ads/u-boot.lds b/board/freescale/mx31ads/u-boot.lds
index 5267729..cf52091 100644
--- a/board/freescale/mx31ads/u-boot.lds
+++ b/board/freescale/mx31ads/u-boot.lds
@@ -60,7 +60,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/board/gaisler/gr_cpci_ax2000/u-boot.lds b/board/gaisler/gr_cpci_ax2000/u-boot.lds
index 774c494..fc9d79d 100644
--- a/board/gaisler/gr_cpci_ax2000/u-boot.lds
+++ b/board/gaisler/gr_cpci_ax2000/u-boot.lds
@@ -88,7 +88,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	.data	:
diff --git a/board/gaisler/gr_ep2s60/u-boot.lds b/board/gaisler/gr_ep2s60/u-boot.lds
index f6d1301..33f32ea 100644
--- a/board/gaisler/gr_ep2s60/u-boot.lds
+++ b/board/gaisler/gr_ep2s60/u-boot.lds
@@ -88,7 +88,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	.data	:
diff --git a/board/gaisler/gr_xc3s_1500/u-boot.lds b/board/gaisler/gr_xc3s_1500/u-boot.lds
index 7df6e83..84859fe 100644
--- a/board/gaisler/gr_xc3s_1500/u-boot.lds
+++ b/board/gaisler/gr_xc3s_1500/u-boot.lds
@@ -88,7 +88,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	.data	:
diff --git a/board/gaisler/grsim/u-boot.lds b/board/gaisler/grsim/u-boot.lds
index b241cbc..81dc5b1 100644
--- a/board/gaisler/grsim/u-boot.lds
+++ b/board/gaisler/grsim/u-boot.lds
@@ -87,7 +87,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	.data	:
diff --git a/board/gaisler/grsim_leon2/u-boot.lds b/board/gaisler/grsim_leon2/u-boot.lds
index 63c15b9..d6ecd8b 100644
--- a/board/gaisler/grsim_leon2/u-boot.lds
+++ b/board/gaisler/grsim_leon2/u-boot.lds
@@ -87,7 +87,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	.data	:
diff --git a/board/gen860t/u-boot-flashenv.lds b/board/gen860t/u-boot-flashenv.lds
index 1cbe7e3..dad73ac 100644
--- a/board/gen860t/u-boot-flashenv.lds
+++ b/board/gen860t/u-boot-flashenv.lds
@@ -73,7 +73,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/gen860t/u-boot.lds b/board/gen860t/u-boot.lds
index dd89c70..e0a3f08 100644
--- a/board/gen860t/u-boot.lds
+++ b/board/gen860t/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/genietv/u-boot.lds b/board/genietv/u-boot.lds
index 124b183..b3dd3fc 100644
--- a/board/genietv/u-boot.lds
+++ b/board/genietv/u-boot.lds
@@ -83,7 +83,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/hermes/u-boot.lds b/board/hermes/u-boot.lds
index f02eb1c..1cdd062 100644
--- a/board/hermes/u-boot.lds
+++ b/board/hermes/u-boot.lds
@@ -75,7 +75,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/hymod/u-boot.lds b/board/hymod/u-boot.lds
index 7afae0a..28b0047 100644
--- a/board/hymod/u-boot.lds
+++ b/board/hymod/u-boot.lds
@@ -113,7 +113,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/icu862/u-boot.lds b/board/icu862/u-boot.lds
index 6778eb1..7701c64 100644
--- a/board/icu862/u-boot.lds
+++ b/board/icu862/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/idmr/u-boot.lds b/board/idmr/u-boot.lds
index 0d6a0f3..23021b2 100644
--- a/board/idmr/u-boot.lds
+++ b/board/idmr/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/ip860/u-boot.lds b/board/ip860/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/ip860/u-boot.lds
+++ b/board/ip860/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/ivm/u-boot.lds b/board/ivm/u-boot.lds
index 4cca652..0b09114 100644
--- a/board/ivm/u-boot.lds
+++ b/board/ivm/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/korat/u-boot-F7FC.lds b/board/korat/u-boot-F7FC.lds
index 033cff4..3b62328 100644
--- a/board/korat/u-boot-F7FC.lds
+++ b/board/korat/u-boot-F7FC.lds
@@ -110,7 +110,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/kup/kup4k/u-boot.lds b/board/kup/kup4k/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/kup/kup4k/u-boot.lds
+++ b/board/kup/kup4k/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/kup/kup4x/u-boot.lds b/board/kup/kup4x/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/kup/kup4x/u-boot.lds
+++ b/board/kup/kup4x/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/lwmon/u-boot.lds b/board/lwmon/u-boot.lds
index bc71b0d..49a8994 100644
--- a/board/lwmon/u-boot.lds
+++ b/board/lwmon/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/manroland/uc100/u-boot.lds b/board/manroland/uc100/u-boot.lds
index e32ae37..2eaf612 100644
--- a/board/manroland/uc100/u-boot.lds
+++ b/board/manroland/uc100/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/matrix_vision/mvsmr/u-boot.lds b/board/matrix_vision/mvsmr/u-boot.lds
index 5a3a9ea..9745e19 100644
--- a/board/matrix_vision/mvsmr/u-boot.lds
+++ b/board/matrix_vision/mvsmr/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/mbx8xx/u-boot.lds b/board/mbx8xx/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/mbx8xx/u-boot.lds
+++ b/board/mbx8xx/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/mousse/u-boot.lds b/board/mousse/u-boot.lds
index 43f91f1..cdb56b4 100644
--- a/board/mousse/u-boot.lds
+++ b/board/mousse/u-boot.lds
@@ -63,7 +63,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/mvblue/u-boot.lds b/board/mvblue/u-boot.lds
index c378564..6161b21 100644
--- a/board/mvblue/u-boot.lds
+++ b/board/mvblue/u-boot.lds
@@ -73,7 +73,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/netphone/u-boot.lds b/board/netphone/u-boot.lds
index cdc1fda..bd4822e 100644
--- a/board/netphone/u-boot.lds
+++ b/board/netphone/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/netta/u-boot.lds b/board/netta/u-boot.lds
index cdc1fda..bd4822e 100644
--- a/board/netta/u-boot.lds
+++ b/board/netta/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/netta2/u-boot.lds b/board/netta2/u-boot.lds
index cdc1fda..bd4822e 100644
--- a/board/netta2/u-boot.lds
+++ b/board/netta2/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/netvia/u-boot.lds b/board/netvia/u-boot.lds
index cdc1fda..bd4822e 100644
--- a/board/netvia/u-boot.lds
+++ b/board/netvia/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/nx823/u-boot.lds b/board/nx823/u-boot.lds
index c8d3894..4d7ca31 100644
--- a/board/nx823/u-boot.lds
+++ b/board/nx823/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/openrisc/openrisc-generic/u-boot.lds b/board/openrisc/openrisc-generic/u-boot.lds
index 4cffacb..10be54c 100644
--- a/board/openrisc/openrisc-generic/u-boot.lds
+++ b/board/openrisc/openrisc-generic/u-boot.lds
@@ -29,7 +29,7 @@ SECTIONS
 
 	 . = ALIGN(4);
 	 .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	 }
 
 	.rodata : {
diff --git a/board/quantum/u-boot.lds b/board/quantum/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/quantum/u-boot.lds
+++ b/board/quantum/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/r360mpi/u-boot.lds b/board/r360mpi/u-boot.lds
index 3ef0d9e..8eb2e11 100644
--- a/board/r360mpi/u-boot.lds
+++ b/board/r360mpi/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/rbc823/u-boot.lds b/board/rbc823/u-boot.lds
index a86b568..06e34c6 100644
--- a/board/rbc823/u-boot.lds
+++ b/board/rbc823/u-boot.lds
@@ -80,7 +80,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
   . = .;
diff --git a/board/renesas/sh7757lcr/u-boot.lds b/board/renesas/sh7757lcr/u-boot.lds
index cf406ce..2c7bae8 100644
--- a/board/renesas/sh7757lcr/u-boot.lds
+++ b/board/renesas/sh7757lcr/u-boot.lds
@@ -79,7 +79,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/board/rsdproto/u-boot.lds b/board/rsdproto/u-boot.lds
index ff95029..4cca0ad 100644
--- a/board/rsdproto/u-boot.lds
+++ b/board/rsdproto/u-boot.lds
@@ -100,7 +100,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/samsung/smdk5250/smdk5250-uboot-spl.lds b/board/samsung/smdk5250/smdk5250-uboot-spl.lds
index 951d8ce..07194bc 100644
--- a/board/samsung/smdk5250/smdk5250-uboot-spl.lds
+++ b/board/samsung/smdk5250/smdk5250-uboot-spl.lds
@@ -49,7 +49,7 @@ SECTIONS
 	. = ALIGN(4);
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	} >.sram
 	. = ALIGN(4);
 
diff --git a/board/samsung/smdk6400/u-boot-nand.lds b/board/samsung/smdk6400/u-boot-nand.lds
index fbb442a..7143b10 100644
--- a/board/samsung/smdk6400/u-boot-nand.lds
+++ b/board/samsung/smdk6400/u-boot-nand.lds
@@ -50,7 +50,7 @@ SECTIONS
 
 	. = align(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = align(4);
diff --git a/board/sandpoint/u-boot.lds b/board/sandpoint/u-boot.lds
index ae3afa1..cfab80a 100644
--- a/board/sandpoint/u-boot.lds
+++ b/board/sandpoint/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/sixnet/u-boot.lds b/board/sixnet/u-boot.lds
index 6cf7a01..d3b9c34 100644
--- a/board/sixnet/u-boot.lds
+++ b/board/sixnet/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/snmc/qs850/u-boot.lds b/board/snmc/qs850/u-boot.lds
index f57f8a0..7b9d562 100644
--- a/board/snmc/qs850/u-boot.lds
+++ b/board/snmc/qs850/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/snmc/qs860t/u-boot.lds b/board/snmc/qs860t/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/snmc/qs860t/u-boot.lds
+++ b/board/snmc/qs860t/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/spc1920/u-boot.lds b/board/spc1920/u-boot.lds
index 18f962c..9fba835 100644
--- a/board/spc1920/u-boot.lds
+++ b/board/spc1920/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/spd8xx/u-boot.lds b/board/spd8xx/u-boot.lds
index f69e39d..7016bea 100644
--- a/board/spd8xx/u-boot.lds
+++ b/board/spd8xx/u-boot.lds
@@ -78,7 +78,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/stx/stxxtc/u-boot.lds b/board/stx/stxxtc/u-boot.lds
index cdc1fda..bd4822e 100644
--- a/board/stx/stxxtc/u-boot.lds
+++ b/board/stx/stxxtc/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/svm_sc8xx/u-boot.lds b/board/svm_sc8xx/u-boot.lds
index 1635875..0024483 100644
--- a/board/svm_sc8xx/u-boot.lds
+++ b/board/svm_sc8xx/u-boot.lds
@@ -86,7 +86,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/tqc/tqm8xx/u-boot.lds b/board/tqc/tqm8xx/u-boot.lds
index e1e1ccd..530a999 100644
--- a/board/tqc/tqm8xx/u-boot.lds
+++ b/board/tqc/tqm8xx/u-boot.lds
@@ -82,7 +82,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/v37/u-boot.lds b/board/v37/u-boot.lds
index fd2d72e..191e58d 100644
--- a/board/v37/u-boot.lds
+++ b/board/v37/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
   }
 
 
diff --git a/board/vpac270/u-boot-spl.lds b/board/vpac270/u-boot-spl.lds
index 20161a4..57589cd 100644
--- a/board/vpac270/u-boot-spl.lds
+++ b/board/vpac270/u-boot-spl.lds
@@ -58,7 +58,7 @@ SECTIONS
 	}
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/common/cmd_help.c b/common/cmd_help.c
index f832a96..d9bdc4d 100644
--- a/common/cmd_help.c
+++ b/common/cmd_help.c
@@ -41,7 +41,7 @@ U_BOOT_CMD(
 );
 
 /* This does not use the U_BOOT_CMD macro as ? can't be used in symbol names */
-ll_entry_declare(cmd_tbl_t, question_mark, cmd, cmd) = {
+ll_entry_declare(cmd_tbl_t, question_mark, cmd) = {
 	"?",	CONFIG_SYS_MAXARGS,	1,	do_help,
 	"alias for 'help'",
 #ifdef  CONFIG_SYS_LONGHELP
diff --git a/common/command.c b/common/command.c
index 50c8429..6ac59e4 100644
--- a/common/command.c
+++ b/common/command.c
@@ -507,6 +507,7 @@ static int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	int result;
 
 	result = (cmdtp->cmd)(cmdtp, flag, argc, argv);
+
 	if (result)
 		debug("Command failed, result=%d", result);
 	return result;
diff --git a/config.mk b/config.mk
index b7cd481..bb5c69a 100644
--- a/config.mk
+++ b/config.mk
@@ -23,8 +23,6 @@
 
 #########################################################################
 
-include $(TOPDIR)/helper.mk
-
 ifeq ($(CURDIR),$(SRCTREE))
 dir :=
 else
diff --git a/helper.mk b/helper.mk
deleted file mode 100644
index 79a1da0..0000000
--- a/helper.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (C) 2012 Marek Vasut <marex@denx.de>
-#
-# See file CREDITS for list of people who contributed to this
-# project.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-#########################################################################
-
-##
-# make_u_boot_list - Generate contents of u_boot_list section
-# 1:		The name of the resulting file (usually u-boot.lst)
-# 2:		Files to analyze for possible u_boot_list entries
-#
-# This function generates the contents of the u_boot_list section,
-# including all the border symbols for it's subsections. The operation
-# of this function is as follows, numbering goes per lines:
-#
-# 1) Dump the ELF header sections from all files supplied via $(2)
-# 2) Filter out all other stuff that does not belong into .u_boot_list
-#    section.
-# 3) Fix up the lines so that the resulting output is is in format
-#    ".u_boot_list.*".
-# 4) Remove the last .something$, since that only contains the name
-#    of the variable to be put into a subsection. This name is irelevant
-#    for generation of border symbols, thus of no interest, remove it.
-# 5) Take each line and for every dot "." in that line, print the whole
-#    line until that dot "." . This is important so that we have all
-#    parent border symbols generated as well.
-# 6) Load every line and firstly append "\a" at the end and print the
-#    line. Next, append "@" at the end and print the line. Finally,
-#    append "~" at the end of line. This will make sense in conjunction
-#    with 6) and 7).
-# 7) Sort the lines. It is imperative to use LC_COLLATE=C here because
-#    with this, the "\a" symbol is first and "~" symbol is last. Any
-#    other symbols fall inbetween. Symbols like "@", which marks the
-#    end of current line (representing current section) and ".", which
-#    means the line continues and thus represents subsection.
-# 8) With such ordering, all lines ending with "\a" will float at the
-#    begining of all lines with the same prefix. Thus it is easy to
-#    replace "\a" with __start and make it the __start border symbol.
-#    Very similarly for "~", which will be always at the bottom and so
-#    can be replaced by "__end" and made into the __end border symbol.
-#    Finally, every line ending with "@" symbol will be transformed
-#    into " *(SORT(${line}*)); " format, which in the linker parlance
-#    will allow it to trap all symbols relevant to the subsection.
-#
-define make_u_boot_list
-$(1): $(2)
-	$(OBJDUMP) -h $(2) | \
-	sed -n -e '/.*\.u_boot_list[^ ]\+/ ! {d;n}' \
-		-e 's/.*\(\.u_boot_list[^ ]\+\).*$$$$/\1/' \
-		-e 's/\.[^\.]\+$$$$//' \
-		-e ':s /^.\+$$$$/ { p;s/^\(.*\)\.[^\.]*$$$$/\1/;b s }' | \
-	sed -n -e 'h;s/$$$$/\a/p;g;s/$$$$/@/p;g;s/$$$$/~/p;' | \
-	LC_COLLATE=C sort -u | \
-	sed -n -e '/\a$$$$/ { s/\./_/g;s/\a$$$$/__start = .;/p; }'\
-		-e '/~$$$$/ { s/\./_/g;s/~$$$$/__end = .;/p; }'\
-		-e '/@$$$$/ { s/\(.*\)@$$$$/*(SORT(\1.*));/p }' > $(1)
-endef
diff --git a/include/command.h b/include/command.h
index 476e7cf..d412c87 100644
--- a/include/command.h
+++ b/include/command.h
@@ -173,7 +173,7 @@ int cmd_process(int flag, int argc, char * const argv[],
 					_usage, _help, NULL)
 
 #define U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, _comp) \
-	ll_entry_declare(cmd_tbl_t, _name, cmd, cmd) =			\
+	ll_entry_declare(cmd_tbl_t, _name, cmd) =			\
 		U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,	\
 						_usage, _help, _comp);
 
diff --git a/include/env_callback.h b/include/env_callback.h
index c583120..afdee28 100644
--- a/include/env_callback.h
+++ b/include/env_callback.h
@@ -76,7 +76,7 @@ void env_callback_init(ENTRY *var_entry);
 	}
 #else
 #define U_BOOT_ENV_CALLBACK(name, callback) \
-	ll_entry_declare(struct env_clbk_tbl, name, env_clbk, env_clbk) = \
+	ll_entry_declare(struct env_clbk_tbl, name, env_clbk) = \
 	{#name, callback}
 #endif
 
diff --git a/include/linker_lists.h b/include/linker_lists.h
index 0b405d7..b88ac82 100644
--- a/include/linker_lists.h
+++ b/include/linker_lists.h
@@ -13,6 +13,95 @@
  * published by the Free Software Foundation; either version 2 of
  * the License, or (at your option) any later version.
  */
+
+/**
+ * There is no use in including this from ASM files, but that happens
+ * anyway, e.g. PPC kgdb.S includes command.h which incluse us.
+ * So just don't define anything when included from ASM.
+ */
+
+#if !defined(__ASSEMBLY__)
+
+/**
+ * Linker lists are constructed by grouping together linker input
+ * sections, each containning one entry of the list. Each input section
+ * contains a constant initialized variable which holds the entry's
+ * content. Linker list input sections are constructed from the list
+ * and entry names, plus a prefix which allows grouping all lists
+ * together. Assuming _list and _entry are the list and entry names,
+ * then the corresponding input section name is
+ *
+ *   _u_boot_list + _2_ + @_list + _2_ + @_entry
+ *
+ * and the C variable name is
+ *
+ *   .u_boot_list_ + 2_ + @_list + _2_ + @_entry
+ *
+ * This ensures uniqueness for both input section and C variable name.
+ *
+ * Note that the names differ only in the prefix character, "." for the
+ * setion and "_" for the variable, so that the linker cannot confuse
+ * section and symbol names. From now on, both names will be referred
+ * to as
+ *
+ *   %u_boot_list_ + 2_ + @_list + _2_ + @_entry
+ *
+ * Entry variables need never be referred to directly.
+ *
+ * The naming scheme for input sections allows grouping all linker lists
+ * into a single linker output section and grouping all entries for a
+ * single list.
+ *
+ * Note the two '_2_' constant components in the names: they are needed
+ * to be able to put start and end symbols around a list, by mapping
+ * them to sections names with components "1" (before) and "3" (after).
+ * Start and end symbols for a list can generally be defined as
+ *
+ *   %u_boot_list_2_ + @_list + _1_...
+ *   %u_boot_list_2_ + @_list + _3_...
+ *
+ * Start and end symbols for the whole of the linker lists area can be
+ * defined as
+ *
+ *   %u_boot_list_1_...
+ *   %u_boot_list_3_...
+ *
+ * Here is an example of the sorted sections which result from a list
+ * "array" made up of three entries : "first", "second" and "third",
+ * iterated at least once.
+ *
+ *   .u_boot_list_2_array_1
+ *   .u_boot_list_2_array_2_first
+ *   .u_boot_list_2_array_2_second
+ *   .u_boot_list_2_array_2_third
+ *   .u_boot_list_2_array_3
+ *
+ * If lists must be divided into sublists (e.g. for iterating only on
+ * part of a list), one can simply use the list a name of the form
+ * 'outer_2_inner', where 'outer' is the global list name and 'inner'
+ * is the sub-list name. Iterators for the whole list should use the
+ * global list name ("outer"); iterators for only a sub-list should use
+ * the full sub-list name ("outer_2_inner").
+ *
+ *  Here is an example of the sections generated from a global list
+ * named "drivers", two sub-lists named "i2c" and "pci", and iterators
+ * defined for the whole list and each sub-list:
+ *
+ *   %u_boot_list_2_drivers_1
+ *   %u_boot_list_2_drivers_2_i2c_1
+ *   %u_boot_list_2_drivers_2_i2c_2_first
+ *   %u_boot_list_2_drivers_2_i2c_2_first
+ *   %u_boot_list_2_drivers_2_i2c_2_second
+ *   %u_boot_list_2_drivers_2_i2c_2_third
+ *   %u_boot_list_2_drivers_2_i2c_3
+ *   %u_boot_list_2_drivers_2_pci_1
+ *   %u_boot_list_2_drivers_2_pci_2_first
+ *   %u_boot_list_2_drivers_2_pci_2_second
+ *   %u_boot_list_2_drivers_2_pci_2_third
+ *   %u_boot_list_2_drivers_2_pci_3
+ *   %u_boot_list_2_drivers_3
+ */
+
 #ifndef __LINKER_LISTS_H__
 #define __LINKER_LISTS_H__
 
@@ -20,43 +109,28 @@
  * ll_entry_declare() - Declare linker-generated array entry
  * @_type:	Data type of the entry
  * @_name:	Name of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
- *		(with underscores instead of dots, for name concatenation)
- * @_section_d:	Subsection of u_boot_list in which this entry is placed
- *		(with dots, for section concatenation)
+ * @_list:	name of the list. Should contain only characters allowed
+ *		in a C variable name!
  *
  * This macro declares a variable that is placed into a linker-generated
  * array. This is a basic building block for more advanced use of linker-
  * generated arrays. The user is expected to build their own macro wrapper
  * around this one.
  *
- * A variable declared using this macro must be compile-time initialized
- * and is as such placed into subsection of special section, .u_boot_list.
- * The subsection is specified by the _section_[u,d] parameter, see below.
- * The base name of the variable is _name, yet the actual variable is
- * declared as concatenation of
- *
- *   %_u_boot_list_ + @_section_u + _ + @_name
- *
- * which ensures name uniqueness. This variable shall never be refered
- * directly though.
+ * A variable declared using this macro must be compile-time initialized.
  *
  * Special precaution must be made when using this macro:
- * 1) The _type must not contain the "static" keyword, otherwise the entry
- *    is not generated.
  *
- * 2) The @_section_u and @_section_d variables must match, the only difference
- *    is that in @_section_u is every dot "." character present in @_section_d
- *    replaced by a single underscore "_" character in @_section_u. The actual
- *    purpose of these parameters is to select proper subsection in the global
- *    .u_boot_list section.
+ * 1) The _type must not contain the "static" keyword, otherwise the
+ *    entry is generated and can be iterated but is listed in the map
+ *    file and cannot be retrieved by name.
  *
- * 3) In case a section is declared that contains some array elements AND a
+ * 2) In case a section is declared that contains some array elements AND a
  *    subsection of this section is declared and contains some elements, it is
  *    imperative that the elements are of the same type.
  *
  * 4) In case an outer section is declared that contains some array elements
- *    AND am inner subsection of this section is declared and contains some
+ *    AND an inner subsection of this section is declared and contains some
  *    elements, then when traversing the outer section, even the elements of
  *    the inner sections are present in the array.
  *
@@ -66,39 +140,68 @@
  *         .y = 4,
  * };
  */
-#define ll_entry_declare(_type, _name, _section_u, _section_d)		\
-	_type _u_boot_list_##_section_u##_##_name __attribute__((	\
-			unused,	aligned(4),				\
-			section(".u_boot_list."#_section_d"."#_name)))
+#define ll_entry_declare(_type, _name, _list)				\
+	_type _u_boot_list_2_##_list##_2_##_name __aligned(4)		\
+			__attribute__((unused,				\
+			section(".u_boot_list_2_"#_list"_2_"#_name)))
+
+/**
+ * We need a zero-size type for iterator symbols, and the compiler does
+ * not allow defining objects of C type 'void'. Therefore we go for the
+ * next best thing: an empty struct.
+ */
 
 /**
  * ll_entry_start() - Point to first entry of linker-generated array
  * @_type:	Data type of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
- *		(with underscores instead of dots)
+ * @_list:	Name of the list in which this entry is placed
  *
  * This function returns (_type *) pointer to the very first entry of a
  * linker-generated array placed into subsection of .u_boot_list section
- * specified by _section_u argument.
+ * specified by _list argument.
+ *
+ * Since this macro defines an array start symbol, its leftmost index
+ * must be 2 and its rightmost index must be 1.
  *
  * Example:
  * struct my_sub_cmd *msc = ll_entry_start(struct my_sub_cmd, cmd_sub);
  */
-#define ll_entry_start(_type, _section_u)				\
-	({								\
-		extern _type _u_boot_list_##_section_u##__start;	\
-		_type *_ll_result = &_u_boot_list_##_section_u##__start;\
-		_ll_result;						\
-	})
+#define ll_entry_start(_type, _list)				\
+({									\
+	static struct {} start __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_2_"#_list"_1")));			\
+	(_type *)&start;						\
+})
 
 /**
- * ll_entry_count() - Return the number of elements in linker-generated array
+ * ll_entry_end() - Point after last entry of linker-generated array
  * @_type:	Data type of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
+ * @_list:	Name of the list in which this entry is placed
  *		(with underscores instead of dots)
  *
+ * This function returns (_type *) pointer after the very last entry of
+ * a linker-generated array placed into subsection of .u_boot_list
+ * section specified by _list argument.
+ *
+ * Since this macro defines an array end symbol, its leftmost index
+ * must be 2 and its rightmost index must be 3.
+ *
+ * Example:
+ * struct my_sub_cmd *msc = ll_entry_end(struct my_sub_cmd, cmd_sub);
+ */
+#define ll_entry_end(_type, _list)					\
+({									\
+	static struct {} end __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_2_"#_list"_3")));			\
+	(_type *)&end;							\
+})
+/**
+ * ll_entry_count() - Return the number of elements in linker-generated array
+ * @_type:	Data type of the entry
+ * @_list:	Name of the list of which the number of elements is computed
+ *
  * This function returns the number of elements of a linker-generated array
- * placed into subsection of .u_boot_list section specified by _section_u
+ * placed into subsection of .u_boot_list section specified by _list
  * argument. The result is of an unsigned int type.
  *
  * Example:
@@ -108,23 +211,19 @@
  * for (i = 0; i < count; i++, msc++)
  *         printf("Entry %i, x=%i y=%i\n", i, msc->x, msc->y);
  */
-#define ll_entry_count(_type, _section_u)				\
+#define ll_entry_count(_type, _list)					\
 	({								\
-		extern _type _u_boot_list_##_section_u##__start;	\
-		extern _type _u_boot_list_##_section_u##__end;		\
-		unsigned int _ll_result =				\
-			&_u_boot_list_##_section_u##__end -		\
-			&_u_boot_list_##_section_u##__start;		\
+		_type *start = ll_entry_start(_type, _list);		\
+		_type *end = ll_entry_end(_type, _list);		\
+		unsigned int _ll_result = end - start;			\
 		_ll_result;						\
 	})
 
-
 /**
  * ll_entry_get() - Retrieve entry from linker-generated array by name
  * @_type:	Data type of the entry
  * @_name:	Name of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
- *		(with underscores instead of dots)
+ * @_list:	Name of the list in which this entry is placed
  *
  * This function returns a pointer to a particular entry in LG-array
  * identified by the subsection of u_boot_list where the entry resides
@@ -138,11 +237,54 @@
  * ...
  * struct my_sub_cmd *c = ll_entry_get(struct my_sub_cmd, my_sub_cmd, cmd_sub);
  */
-#define ll_entry_get(_type, _name, _section_u)				\
+#define ll_entry_get(_type, _name, _list)				\
 	({								\
-		extern _type _u_boot_list_##_section_u##_##_name;	\
-		_type *_ll_result = &_u_boot_list_##_section_u##_##_name;\
+		extern _type _u_boot_list_2_##_list##_2_##_name;	\
+		_type *_ll_result =					\
+			&_u_boot_list_2_##_list##_2_##_name;	\
 		_ll_result;						\
 	})
 
+/**
+ * ll_start() - Point to first entry of first linker-generated array
+ * @_type:	Data type of the entry
+ *
+ * This function returns (_type *) pointer to the very first entry of
+ * the very first linker-generated array.
+ *
+ * Since this macro defines the start of the linker-generated arrays,
+ * its leftmost index must be 1.
+ *
+ * Example:
+ * struct my_sub_cmd *msc = ll_start(struct my_sub_cmd);
+ */
+#define ll_start(_type)							\
+({									\
+	static struct {} start __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_1")));				\
+	(_type *)&start;						\
+})
+
+/**
+ * ll_entry_end() - Point after last entry of last linker-generated array
+ * @_type:	Data type of the entry
+ *
+ * This function returns (_type *) pointer after the very last entry of
+ * the very last linker-generated array.
+ *
+ * Since this macro defines the end of the linker-generated arrays,
+ * its leftmost index must be 3.
+ *
+ * Example:
+ * struct my_sub_cmd *msc = ll_end(struct my_sub_cmd);
+ */
+#define ll_end(_type)							\
+({									\
+	static struct {} end __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_3")));				\
+	(_type *)&end;							\
+})
+
+#endif /* __ASSEMBLY__ */
+
 #endif	/* __LINKER_LISTS_H__ */
diff --git a/nand_spl/board/freescale/mpc8536ds/Makefile b/nand_spl/board/freescale/mpc8536ds/Makefile
index 9c77826..d5a71c3 100644
--- a/nand_spl/board/freescale/mpc8536ds/Makefile
+++ b/nand_spl/board/freescale/mpc8536ds/Makefile
@@ -62,11 +62,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mpc8569mds/Makefile b/nand_spl/board/freescale/mpc8569mds/Makefile
index 9c77826..d5a71c3 100644
--- a/nand_spl/board/freescale/mpc8569mds/Makefile
+++ b/nand_spl/board/freescale/mpc8569mds/Makefile
@@ -62,11 +62,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mpc8572ds/Makefile b/nand_spl/board/freescale/mpc8572ds/Makefile
index 9c77826..d5a71c3 100644
--- a/nand_spl/board/freescale/mpc8572ds/Makefile
+++ b/nand_spl/board/freescale/mpc8572ds/Makefile
@@ -62,11 +62,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mx31pdk/Makefile b/nand_spl/board/freescale/mx31pdk/Makefile
index fd0dfc1..59c46b6 100644
--- a/nand_spl/board/freescale/mx31pdk/Makefile
+++ b/nand_spl/board/freescale/mx31pdk/Makefile
@@ -38,11 +38,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $@
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mx31pdk/u-boot.lds b/nand_spl/board/freescale/mx31pdk/u-boot.lds
index a26110f..0656176 100644
--- a/nand_spl/board/freescale/mx31pdk/u-boot.lds
+++ b/nand_spl/board/freescale/mx31pdk/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/nand_spl/board/freescale/p1010rdb/Makefile b/nand_spl/board/freescale/p1010rdb/Makefile
index c3495ec..ca9be7c 100644
--- a/nand_spl/board/freescale/p1010rdb/Makefile
+++ b/nand_spl/board/freescale/p1010rdb/Makefile
@@ -62,11 +62,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)board/$(BOARDDIR) \
 		 -ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/p1023rds/Makefile b/nand_spl/board/freescale/p1023rds/Makefile
index 9b2c0d7..a873c76 100644
--- a/nand_spl/board/freescale/p1023rds/Makefile
+++ b/nand_spl/board/freescale/p1023rds/Makefile
@@ -57,11 +57,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/p1_p2_rdb/Makefile b/nand_spl/board/freescale/p1_p2_rdb/Makefile
index 9c77826..d5a71c3 100644
--- a/nand_spl/board/freescale/p1_p2_rdb/Makefile
+++ b/nand_spl/board/freescale/p1_p2_rdb/Makefile
@@ -62,11 +62,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/karo/tx25/Makefile b/nand_spl/board/karo/tx25/Makefile
index 82489d2..7b1e62e 100644
--- a/nand_spl/board/karo/tx25/Makefile
+++ b/nand_spl/board/karo/tx25/Makefile
@@ -59,11 +59,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $@
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/karo/tx25/u-boot.lds b/nand_spl/board/karo/tx25/u-boot.lds
index ee36131..ea84d64 100644
--- a/nand_spl/board/karo/tx25/u-boot.lds
+++ b/nand_spl/board/karo/tx25/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/nand_spl/board/samsung/smdk6400/u-boot.lds b/nand_spl/board/samsung/smdk6400/u-boot.lds
index 2ed6466..66b412e 100644
--- a/nand_spl/board/samsung/smdk6400/u-boot.lds
+++ b/nand_spl/board/samsung/smdk6400/u-boot.lds
@@ -53,7 +53,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/spl/Makefile b/spl/Makefile
index 6dbb105..d496811 100644
--- a/spl/Makefile
+++ b/spl/Makefile
@@ -178,11 +178,7 @@ $(START):	depend
 $(LIBS):	depend
 	$(MAKE) -C $(SRCTREE)$(dir $(subst $(SPLTREE),,$@))
 
-# The following line expands into whole rule which generates u-boot.lst,
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(obj)u-boot.lst, $(LIBS)))
-$(obj)u-boot-spl.lds: $(LDSCRIPT) $(obj)u-boot.lst depend
+$(obj)u-boot-spl.lds: $(LDSCRIPT) depend
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj). -ansi -D__ASSEMBLY__ -P - < $< > $@
 
 depend:	$(obj).depend
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
@ 2013-02-02 17:51   ` Daniel Schwierzeck
  2013-02-02 17:53     ` Marek Vasut
  2013-02-02 18:30   ` Heiko Schocher
                     ` (4 subsequent siblings)
  5 siblings, 1 reply; 25+ messages in thread
From: Daniel Schwierzeck @ 2013-02-02 17:51 UTC (permalink / raw)
  To: u-boot

Hi Albert,

2013/2/2 Albert ARIBAUD <albert.u.boot@aribaud.net>:
> Refactor linker-generated array code so that symbols
> which were previously linker-generated are now compiler-
> generated. This causes relocation records of type
> R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> code which uses LGA able to run before relocation as
> well as after.
>
> Note: this affects more than ARM targets, as linker-
> lists span possibly all target architectures, notably
> PowerPC.
>
> Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> ---

for the MIPS part:
Tested-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>


BTW: if we use

	.u_boot_list : {
		KEEP(*(SORT(.u_boot_list*)))
	}

we can get rid of the undef magic in the final link of u-boot

--- a/Makefile
+++ b/Makefile
@@ -559,10 +559,8 @@ GEN_UBOOT = \
                        $(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot
 else
 GEN_UBOOT = \
-               UNDEF_LST=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
-               sed  -n -e
's/.*\($(SYM_PREFIX)_u_boot_list_.*\)/-u\1/p'|sort|uniq`;\
                cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
-                       $$UNDEF_LST $(__OBJS) \
+                       $(__OBJS) \
                        --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
                        -Map u-boot.map -o u-boot
 endif


-- 
Best regards,
Daniel

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-02 17:51   ` Daniel Schwierzeck
@ 2013-02-02 17:53     ` Marek Vasut
  0 siblings, 0 replies; 25+ messages in thread
From: Marek Vasut @ 2013-02-02 17:53 UTC (permalink / raw)
  To: u-boot

Dear Daniel Schwierzeck,

> Hi Albert,
> 
> 2013/2/2 Albert ARIBAUD <albert.u.boot@aribaud.net>:
> > Refactor linker-generated array code so that symbols
> > which were previously linker-generated are now compiler-
> > generated. This causes relocation records of type
> > R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> > code which uses LGA able to run before relocation as
> > well as after.
> > 
> > Note: this affects more than ARM targets, as linker-
> > lists span possibly all target architectures, notably
> > PowerPC.
> > 
> > Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> > ---
> 
> for the MIPS part:
> Tested-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
> 
> 
> BTW: if we use
> 
> 	.u_boot_list : {
> 		KEEP(*(SORT(.u_boot_list*)))
> 	}
> 
> we can get rid of the undef magic in the final link of u-boot

UUuuuu, that's amazing. We're shifting from one kind of black magic onto another 
voodoo. But certainly, this KEEP() is much cleaner, I like it :)

Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
  2013-02-02 17:51   ` Daniel Schwierzeck
@ 2013-02-02 18:30   ` Heiko Schocher
  2013-02-02 18:42   ` Jeroen Hofstee
                     ` (3 subsequent siblings)
  5 siblings, 0 replies; 25+ messages in thread
From: Heiko Schocher @ 2013-02-02 18:30 UTC (permalink / raw)
  To: u-boot

Hello Albert,

On 02.02.2013 18:02, Albert ARIBAUD wrote:
> Refactor linker-generated array code so that symbols
> which were previously linker-generated are now compiler-
> generated. This causes relocation records of type
> R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> code which uses LGA able to run before relocation as
> well as after.

Just tested this patch and it solves my "ll_entry_* work
only after relocation" problem posted here:

http://lists.denx.de/pipermail/u-boot/2013-February/145711.html

Will test it deeper on monday, thanks!

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
  2013-02-02 17:51   ` Daniel Schwierzeck
  2013-02-02 18:30   ` Heiko Schocher
@ 2013-02-02 18:42   ` Jeroen Hofstee
  2013-02-04  8:21   ` Heiko Schocher
                     ` (2 subsequent siblings)
  5 siblings, 0 replies; 25+ messages in thread
From: Jeroen Hofstee @ 2013-02-02 18:42 UTC (permalink / raw)
  To: u-boot

Hello Albert,

On 02/02/2013 06:02 PM, Albert ARIBAUD wrote:
> Refactor linker-generated array code so that symbols
> which were previously linker-generated are now compiler-
> generated. This causes relocation records of type
> R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> code which uses LGA able to run before relocation as
> well as after.
>
> Note: this affects more than ARM targets, as linker-
> lists span possibly all target architectures, notably
> PowerPC.
>
> Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> ---
Command completion currently traps with U-Boot master on a
twister board, as mentioned in [1]. Depending on random,
valid changes in the code, the name pointers in the command
list can become corrupted. Although this patch shouldn't effect
code running after relocation, it does prevent the incorrect
pointers and solves mentioned problem. The exact reason is
unknown, but it might be that code running before relocation
corrupts the data used after relocation.

At least this patch fixes the behaviour for the twister and prevents
that I get completely insane, thanks!

For the twister:
Tested-by: Jeroen Hofstee <jhofstee@myspectrum.nl>

Thanks,
Jeroen

[1] http://lists.denx.de/pipermail/u-boot/2013-February/145709.html

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
                     ` (2 preceding siblings ...)
  2013-02-02 18:42   ` Jeroen Hofstee
@ 2013-02-04  8:21   ` Heiko Schocher
  2013-02-04  8:51     ` Albert ARIBAUD
  2013-02-04 12:41   ` Andreas Bießmann
  2013-02-25 10:58   ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
  5 siblings, 1 reply; 25+ messages in thread
From: Heiko Schocher @ 2013-02-04  8:21 UTC (permalink / raw)
  To: u-boot

Hello Albert,

On 02.02.2013 18:02, Albert ARIBAUD wrote:
> Refactor linker-generated array code so that symbols
> which were previously linker-generated are now compiler-
> generated. This causes relocation records of type
> R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> code which uses LGA able to run before relocation as
> well as after.
> 
> Note: this affects more than ARM targets, as linker-
> lists span possibly all target architectures, notably
> PowerPC.
> 
> Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> ---

for arm926ejs

Tested-by: Heiko Schocher <hs@denx.de>

Just one minor comment ...

[...]
> diff --git a/common/command.c b/common/command.c
> index 50c8429..6ac59e4 100644
> --- a/common/command.c
> +++ b/common/command.c
> @@ -507,6 +507,7 @@ static int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  	int result;
>  
>  	result = (cmdtp->cmd)(cmdtp, flag, argc, argv);
> +

remove this Codingstyle change please.

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-04  8:21   ` Heiko Schocher
@ 2013-02-04  8:51     ` Albert ARIBAUD
  0 siblings, 0 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-04  8:51 UTC (permalink / raw)
  To: u-boot

Hi Heiko,

On Mon, 04 Feb 2013 09:21:02 +0100, Heiko Schocher <hs@denx.de> wrote:

> Hello Albert,
> 
> On 02.02.2013 18:02, Albert ARIBAUD wrote:
> > Refactor linker-generated array code so that symbols
> > which were previously linker-generated are now compiler-
> > generated. This causes relocation records of type
> > R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> > code which uses LGA able to run before relocation as
> > well as after.
> > 
> > Note: this affects more than ARM targets, as linker-
> > lists span possibly all target architectures, notably
> > PowerPC.
> > 
> > Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> > ---
> 
> for arm926ejs
> 
> Tested-by: Heiko Schocher <hs@denx.de>

Thanks!

> Just one minor comment ...
> 
> [...]
> > diff --git a/common/command.c b/common/command.c
> > index 50c8429..6ac59e4 100644
> > --- a/common/command.c
> > +++ b/common/command.c
> > @@ -507,6 +507,7 @@ static int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> >  	int result;
> >  
> >  	result = (cmdtp->cmd)(cmdtp, flag, argc, argv);
> > +
> 
> remove this Codingstyle change please.

Sorry, should have triple-checked that -- this single blank line change
in common/command.c stems from ad hoc code I'd added here for test
purposes when the patch was only proof-of-concept. Will fix in V2.

> bye,
> Heiko

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
                     ` (3 preceding siblings ...)
  2013-02-04  8:21   ` Heiko Schocher
@ 2013-02-04 12:41   ` Andreas Bießmann
  2013-02-04 14:22     ` Albert ARIBAUD
  2013-02-16 18:20     ` Albert ARIBAUD
  2013-02-25 10:58   ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
  5 siblings, 2 replies; 25+ messages in thread
From: Andreas Bießmann @ 2013-02-04 12:41 UTC (permalink / raw)
  To: u-boot

Hi Albert,

On 02.02.2013 18:02, Albert ARIBAUD wrote:
> Refactor linker-generated array code so that symbols
> which were previously linker-generated are now compiler-
> generated. This causes relocation records of type
> R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> code which uses LGA able to run before relocation as
> well as after.
> 
> Note: this affects more than ARM targets, as linker-
> lists span possibly all target architectures, notably
> PowerPC.
> 
> Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>

Tested on avr32. The patch seems to work (basic shell testing), however
it generates an aliasing warning:

---8<---
abiessmann@azuregos % PATH=$AVR32_PATH:$PATH BUILD_DIR=/tmp/build_avr32
MAKEALL_LOGDIR=/tmp/LOG BUILD_NCPUS=4 BUILD_NBUILDS=4 ./MAKEALL atstk1002
Configuring for atstk1002 board...
   text	   data	    bss	    dec	    hex	filename
 116315	   8972	 211900	 337187	  52523	/tmp/build_avr32/atstk1002/u-boot
env_callback.c: In function 'find_env_callback':
env_callback.c:47: warning: dereferencing pointer 'clbkp' does break
strict-aliasing rules
env_callback.c:44: note: initialized from here
env_callback.c:46: note: initialized from here
--->8---

I think it has something to do with tha fact that you re-cast the
anonymous struct 'start' here:

---8<---
#define ll_entry_start(_type, _list)
({
	static struct {} start __aligned(4) __attribute__((unused,
		section(".u_boot_list_2_"#_list"_1")));
	(_type *)&start;
})
--->8---

I think other gcc-4.4 users will see the same error. Currently I have no
time to dive into this.

Best regards

Andreas Bie?mann

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-04 12:41   ` Andreas Bießmann
@ 2013-02-04 14:22     ` Albert ARIBAUD
  2013-02-16 18:20     ` Albert ARIBAUD
  1 sibling, 0 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-04 14:22 UTC (permalink / raw)
  To: u-boot

Hi Andreas,

On Mon, 04 Feb 2013 13:41:09 +0100, "Andreas Bie?mann"
<andreas.devel@googlemail.com> wrote:

> Hi Albert,
> 
> On 02.02.2013 18:02, Albert ARIBAUD wrote:
> > Refactor linker-generated array code so that symbols
> > which were previously linker-generated are now compiler-
> > generated. This causes relocation records of type
> > R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> > code which uses LGA able to run before relocation as
> > well as after.
> > 
> > Note: this affects more than ARM targets, as linker-
> > lists span possibly all target architectures, notably
> > PowerPC.
> > 
> > Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> 
> Tested on avr32. The patch seems to work (basic shell testing), however
> it generates an aliasing warning:
> 
> ---8<---
> abiessmann at azuregos % PATH=$AVR32_PATH:$PATH BUILD_DIR=/tmp/build_avr32
> MAKEALL_LOGDIR=/tmp/LOG BUILD_NCPUS=4 BUILD_NBUILDS=4 ./MAKEALL atstk1002
> Configuring for atstk1002 board...
>    text	   data	    bss	    dec	    hex	filename
>  116315	   8972	 211900	 337187	  52523	/tmp/build_avr32/atstk1002/u-boot
> env_callback.c: In function 'find_env_callback':
> env_callback.c:47: warning: dereferencing pointer 'clbkp' does break
> strict-aliasing rules
> env_callback.c:44: note: initialized from here
> env_callback.c:46: note: initialized from here
> --->8---
> 
> I think it has something to do with tha fact that you re-cast the
> anonymous struct 'start' here:
> 
> ---8<---
> #define ll_entry_start(_type, _list)
> ({
> 	static struct {} start __aligned(4) __attribute__((unused,
> 		section(".u_boot_list_2_"#_list"_1")));
> 	(_type *)&start;
> })
> --->8---

Thanks Andreas for bringing this to my attention -- I'm surprised that
there's only one such warning, though, as there are may such casts. I'll
get my hands on a 4.4 compiler and try to find a way to cleanly avoid
the warning.

> I think other gcc-4.4 users will see the same error. Currently I have no
> time to dive into this.

Don't bother. I'll do the diving. :)

> Best regards
> 
> Andreas Bie?mann

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-04 12:41   ` Andreas Bießmann
  2013-02-04 14:22     ` Albert ARIBAUD
@ 2013-02-16 18:20     ` Albert ARIBAUD
  2013-02-18 10:39       ` Andreas Bießmann
  1 sibling, 1 reply; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-16 18:20 UTC (permalink / raw)
  To: u-boot

Hi Andreas,

On Mon, 04 Feb 2013 13:41:09 +0100, "Andreas Bie?mann"
<andreas.devel@googlemail.com> wrote:

> Hi Albert,
> 
> On 02.02.2013 18:02, Albert ARIBAUD wrote:
> > Refactor linker-generated array code so that symbols
> > which were previously linker-generated are now compiler-
> > generated. This causes relocation records of type
> > R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
> > code which uses LGA able to run before relocation as
> > well as after.
> > 
> > Note: this affects more than ARM targets, as linker-
> > lists span possibly all target architectures, notably
> > PowerPC.
> > 
> > Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> 
> Tested on avr32. The patch seems to work (basic shell testing), however
> it generates an aliasing warning:
> 
> ---8<---
> abiessmann at azuregos % PATH=$AVR32_PATH:$PATH BUILD_DIR=/tmp/build_avr32
> MAKEALL_LOGDIR=/tmp/LOG BUILD_NCPUS=4 BUILD_NBUILDS=4 ./MAKEALL atstk1002
> Configuring for atstk1002 board...
>    text	   data	    bss	    dec	    hex	filename
>  116315	   8972	 211900	 337187	  52523	/tmp/build_avr32/atstk1002/u-boot
> env_callback.c: In function 'find_env_callback':
> env_callback.c:47: warning: dereferencing pointer 'clbkp' does break
> strict-aliasing rules
> env_callback.c:44: note: initialized from here
> env_callback.c:46: note: initialized from here
> --->8---
> 
> I think it has something to do with tha fact that you re-cast the
> anonymous struct 'start' here:
> 
> ---8<---
> #define ll_entry_start(_type, _list)
> ({
> 	static struct {} start __aligned(4) __attribute__((unused,
> 		section(".u_boot_list_2_"#_list"_1")));
> 	(_type *)&start;
> })
> --->8---
> 
> I think other gcc-4.4 users will see the same error. Currently I have no
> time to dive into this.

I have dug into it and found a way to avoid GCC 4.4 or below to warn
about aliasing, by replacing 'struct {}' with 'char[0]' as the
0-byte-size type.

I still have some warnings through, regarding some regions not being
declared:

avr32-ld:built in linker script:15: warning: memory region `FLASH' not
declared
avr32-ld:built in linker script:69: warning: memory region
`CPUSRAM' not declared

It appears 'normal' in that without my patch, the same error occurs;
but I'd prefer that you confirm whether you have the same warnings on
your side.

> Best regards
> 
> Andreas Bie?mann

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-16 18:20     ` Albert ARIBAUD
@ 2013-02-18 10:39       ` Andreas Bießmann
  2013-02-18 10:42         ` Andreas Bießmann
  0 siblings, 1 reply; 25+ messages in thread
From: Andreas Bießmann @ 2013-02-18 10:39 UTC (permalink / raw)
  To: u-boot

Hi Albert,

On 02/16/2013 07:20 PM, Albert ARIBAUD wrote:
> Hi Andreas,
> 
> On Mon, 04 Feb 2013 13:41:09 +0100, "Andreas Bie?mann"
> <andreas.devel@googlemail.com> wrote:
> 
>> Hi Albert,
>>
>> On 02.02.2013 18:02, Albert ARIBAUD wrote:

<snip strict aliasing error on gcc-4.4>

> I have dug into it and found a way to avoid GCC 4.4 or below to warn
> about aliasing, by replacing 'struct {}' with 'char[0]' as the
> 0-byte-size type.
> 
> I still have some warnings through, regarding some regions not being
> declared:
> 
> avr32-ld:built in linker script:15: warning: memory region `FLASH' not
> declared
> avr32-ld:built in linker script:69: warning: memory region
> `CPUSRAM' not declared

I assume you use Mike Frysingers precompiled avr32 toolchain. I know
about that warnings and beware, these toolchain produce defective
binaries! The u-boot does not relocate itself properly with these newlib
toolchains (also the atmel provided one).

> It appears 'normal' in that without my patch, the same error occurs;
> but I'd prefer that you confirm whether you have the same warnings on
> your side.

It's ok so far, the arm-linux toolchain I have do not produce these
warnings. Kan you provide the patch so I will do a runtime test.

Best regards

Andreas Bie?mann

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-18 10:39       ` Andreas Bießmann
@ 2013-02-18 10:42         ` Andreas Bießmann
  2013-02-18 16:48           ` Albert ARIBAUD
  0 siblings, 1 reply; 25+ messages in thread
From: Andreas Bießmann @ 2013-02-18 10:42 UTC (permalink / raw)
  To: u-boot

On 02/18/2013 11:39 AM, Andreas Bie?mann wrote:
> Hi Albert,
> 
> On 02/16/2013 07:20 PM, Albert ARIBAUD wrote:

<snip>

> It's ok so far, the arm-linux toolchain I have do not produce these

I mean avr32-linux ... damn weekend ...

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v1] Refactor linker-generated arrays
  2013-02-18 10:42         ` Andreas Bießmann
@ 2013-02-18 16:48           ` Albert ARIBAUD
  0 siblings, 0 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-18 16:48 UTC (permalink / raw)
  To: u-boot

Hi Andreas,

On Mon, 18 Feb 2013 11:42:07 +0100, "Andreas Bie?mann"
<andreas.devel@googlemail.com> wrote:

> On 02/18/2013 11:39 AM, Andreas Bie?mann wrote:
> > Hi Albert,
> > 
> > On 02/16/2013 07:20 PM, Albert ARIBAUD wrote:
> 
> <snip>
> 
> > It's ok so far, the arm-linux toolchain I have do not produce these
> 
> I mean avr32-linux ... damn weekend ...

Thanks Andreas for the feedback. I am currently testing V2 locally
and will send it out in a few hours hopefully.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records
  2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
                     ` (4 preceding siblings ...)
  2013-02-04 12:41   ` Andreas Bießmann
@ 2013-02-25 10:58   ` Albert ARIBAUD
  2013-02-25 10:58     ` [U-Boot] [PATCH v2 1/4] arm: omap: map u_boot_lists section to .sram Albert ARIBAUD
                       ` (3 more replies)
  5 siblings, 4 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-25 10:58 UTC (permalink / raw)
  To: u-boot

R_ARM_ABS32 relocation records cause symbol references
to be zero before relocation, and become correct only
after relocation. On the other hand, R_ARM_RELATIVE
records make references correct before as well as
after relocation.

This patch series aims at removing all R_ARM_ABS32
relocations from ARM targets.

the main contributor of R_ARM_ABS32 relocations is the
support code for linker-lists, aka Linker-Generated
Arrays. This is due to the fact that LGA start and end
symbols, used for ranging these arrays, are linker-
generated symbols, which always relocate as R_ARM_ABS32
even though they are supposed *not* to be absolute.

V1 of this patch series fixed LGAs so that start or
end symbols are actually compiler-generated, and thus
their references are relocated using R_ARM_RELATIVE;
V2 also fixes crt0 so that BSS start and end references
do not produce R_ARM_ABS32 relocations either.

With V2, none of the targets built with MAKEALL -a arm
produces any R_ARM_ABS32 relocation.

This series has been build-tested with ARM (295 targets
clean) and powerpc (634 targets clean)

Changes in v2:
- fixed missing .sram memory mapping in OMAP lds
- removed useless linker script sections in SPL lds files
- made BSS start and end compiler-generated
- moved SPL linker script changes to their own commit
- added KEEP() to all linker files
- removed spurious change to common/command.c
- changed empty type from struct {} to char[0]
- dropped patch to removed board/micronas/vct/u-boot.lds
- removed all references to u-boot.lst

Albert ARIBAUD (4):
  arm: omap: map u_boot_lists section to .sram
  Remove linker lists (LGAs) from SPL linker scripts
  arm: make __bss_start and __bss_end__ compiler-generated
  Refactor linker-generated arrays

 .gitignore                                       |    1 -
 Makefile                                         |   13 +-
 arch/arm/cpu/arm920t/ep93xx/u-boot.lds           |    2 +-
 arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds        |    6 -
 arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds      |    6 -
 arch/arm/cpu/armv7/am33xx/u-boot-spl.lds         |   67 ++++++
 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds    |    4 -
 arch/arm/cpu/ixp/u-boot.lds                      |   14 +-
 arch/arm/cpu/u-boot-spl.lds                      |   93 ++++++++
 arch/arm/cpu/u-boot.lds                          |   14 +-
 arch/arm/lib/Makefile                            |    1 +
 arch/arm/lib/bss.c                               |   39 ++++
 arch/avr32/cpu/u-boot.lds                        |    2 +-
 arch/blackfin/cpu/u-boot.lds                     |    2 +-
 arch/microblaze/cpu/u-boot.lds                   |    2 +-
 arch/mips/cpu/u-boot.lds                         |    2 +-
 arch/nds32/cpu/n1213/u-boot.lds                  |    2 +-
 arch/nios2/cpu/u-boot.lds                        |    2 +-
 arch/powerpc/cpu/74xx_7xx/u-boot.lds             |    2 +-
 arch/powerpc/cpu/mpc512x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc5xx/u-boot.lds               |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8220/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc824x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8260/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc83xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand.lds         |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds     |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc86xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/ppc4xx/u-boot.lds               |    2 +-
 arch/sandbox/cpu/u-boot.lds                      |    2 +-
 arch/sh/cpu/sh2/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh3/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh4/u-boot.lds                       |    2 +-
 arch/x86/cpu/u-boot.lds                          |    2 +-
 board/BuS/eb_cpu5282/u-boot.lds                  |    2 +-
 board/LEOX/elpt860/u-boot.lds                    |    2 +-
 board/RPXClassic/u-boot.lds                      |    2 +-
 board/RPXClassic/u-boot.lds.debug                |    2 +-
 board/RPXlite/u-boot.lds                         |    2 +-
 board/RPXlite/u-boot.lds.debug                   |    2 +-
 board/RPXlite_dw/u-boot.lds                      |    2 +-
 board/RPXlite_dw/u-boot.lds.debug                |    2 +-
 board/RRvision/u-boot.lds                        |    2 +-
 board/actux1/u-boot.lds                          |   24 ++-
 board/actux2/u-boot.lds                          |   24 ++-
 board/actux3/u-boot.lds                          |   18 +-
 board/adder/u-boot.lds                           |    2 +-
 board/ait/cam_enc_4xx/u-boot-spl.lds             |    4 -
 board/altera/nios2-generic/u-boot.lds            |    2 +-
 board/amcc/acadia/u-boot-nand.lds                |    2 +-
 board/amcc/bamboo/u-boot-nand.lds                |    2 +-
 board/amcc/canyonlands/u-boot-nand.lds           |    2 +-
 board/amcc/kilauea/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-ram.lds                |    2 +-
 board/astro/mcf5373l/u-boot.lds                  |    2 +-
 board/cobra5272/u-boot.lds                       |    2 +-
 board/cogent/u-boot.lds                          |    2 +-
 board/cogent/u-boot.lds.debug                    |    2 +-
 board/cray/L1/u-boot.lds.debug                   |    2 +-
 board/dave/PPChameleonEVB/u-boot.lds             |    2 +-
 board/davinci/da8xxevm/u-boot-spl-da850evm.lds   |    5 -
 board/davinci/da8xxevm/u-boot-spl-hawk.lds       |    5 -
 board/dvlhost/u-boot.lds                         |   18 +-
 board/eltec/mhpc/u-boot.lds                      |    2 +-
 board/eltec/mhpc/u-boot.lds.debug                |    2 +-
 board/emk/top860/u-boot.lds                      |    2 +-
 board/ep88x/u-boot.lds                           |    2 +-
 board/esd/dasa_sim/u-boot.lds                    |    2 +-
 board/esd/pmc440/u-boot-nand.lds                 |    2 +-
 board/esd/tasreg/u-boot.lds                      |    2 +-
 board/esteem192e/u-boot.lds                      |    2 +-
 board/evb64260/u-boot.lds                        |    2 +-
 board/fads/u-boot.lds                            |    2 +-
 board/flagadm/u-boot.lds                         |    2 +-
 board/flagadm/u-boot.lds.debug                   |    2 +-
 board/freescale/m5208evbe/u-boot.lds             |    2 +-
 board/freescale/m52277evb/u-boot.lds             |    2 +-
 board/freescale/m5235evb/u-boot.lds              |    2 +-
 board/freescale/m5249evb/u-boot.lds              |    2 +-
 board/freescale/m5253demo/u-boot.lds             |    2 +-
 board/freescale/m5253evbe/u-boot.lds             |    2 +-
 board/freescale/m5271evb/u-boot.lds              |    2 +-
 board/freescale/m5272c3/u-boot.lds               |    2 +-
 board/freescale/m5275evb/u-boot.lds              |    2 +-
 board/freescale/m5282evb/u-boot.lds              |    2 +-
 board/freescale/m53017evb/u-boot.lds             |    2 +-
 board/freescale/m5329evb/u-boot.lds              |    2 +-
 board/freescale/m5373evb/u-boot.lds              |    2 +-
 board/freescale/m54418twr/u-boot.lds             |    2 +-
 board/freescale/m54451evb/u-boot.lds             |    2 +-
 board/freescale/m54455evb/u-boot.lds             |    2 +-
 board/freescale/m547xevb/u-boot.lds              |    2 +-
 board/freescale/m548xevb/u-boot.lds              |    2 +-
 board/freescale/mx31ads/u-boot.lds               |   16 +-
 board/gaisler/gr_cpci_ax2000/u-boot.lds          |    2 +-
 board/gaisler/gr_ep2s60/u-boot.lds               |    2 +-
 board/gaisler/gr_xc3s_1500/u-boot.lds            |    2 +-
 board/gaisler/grsim/u-boot.lds                   |    2 +-
 board/gaisler/grsim_leon2/u-boot.lds             |    2 +-
 board/gen860t/u-boot-flashenv.lds                |    2 +-
 board/gen860t/u-boot.lds                         |    2 +-
 board/genietv/u-boot.lds                         |    2 +-
 board/genietv/u-boot.lds.debug                   |    2 +-
 board/hermes/u-boot.lds                          |    2 +-
 board/hermes/u-boot.lds.debug                    |    2 +-
 board/hymod/u-boot.lds                           |    2 +-
 board/hymod/u-boot.lds.debug                     |    2 +-
 board/icu862/u-boot.lds                          |    2 +-
 board/icu862/u-boot.lds.debug                    |    2 +-
 board/idmr/u-boot.lds                            |    2 +-
 board/ip860/u-boot.lds                           |    2 +-
 board/ip860/u-boot.lds.debug                     |    2 +-
 board/ivm/u-boot.lds                             |    2 +-
 board/ivm/u-boot.lds.debug                       |    2 +-
 board/korat/u-boot-F7FC.lds                      |    2 +-
 board/kup/kup4k/u-boot.lds                       |    2 +-
 board/kup/kup4k/u-boot.lds.debug                 |    2 +-
 board/kup/kup4x/u-boot.lds                       |    2 +-
 board/kup/kup4x/u-boot.lds.debug                 |    2 +-
 board/lwmon/u-boot.lds                           |    2 +-
 board/lwmon/u-boot.lds.debug                     |    2 +-
 board/manroland/uc100/u-boot.lds                 |    2 +-
 board/matrix_vision/mvsmr/u-boot.lds             |    2 +-
 board/mbx8xx/u-boot.lds                          |    2 +-
 board/mbx8xx/u-boot.lds.debug                    |    2 +-
 board/mousse/u-boot.lds                          |    2 +-
 board/mpl/pip405/u-boot.lds.debug                |    2 +-
 board/mvblue/u-boot.lds                          |    2 +-
 board/netphone/u-boot.lds                        |    2 +-
 board/netphone/u-boot.lds.debug                  |    2 +-
 board/netta/u-boot.lds                           |    2 +-
 board/netta/u-boot.lds.debug                     |    2 +-
 board/netta2/u-boot.lds                          |    2 +-
 board/netta2/u-boot.lds.debug                    |    2 +-
 board/netvia/u-boot.lds                          |    2 +-
 board/netvia/u-boot.lds.debug                    |    2 +-
 board/nx823/u-boot.lds                           |    2 +-
 board/nx823/u-boot.lds.debug                     |    2 +-
 board/openrisc/openrisc-generic/u-boot.lds       |    2 +-
 board/quantum/u-boot.lds                         |    2 +-
 board/r360mpi/u-boot.lds                         |    2 +-
 board/rbc823/u-boot.lds                          |    2 +-
 board/renesas/sh7752evb/u-boot.lds               |    2 +-
 board/renesas/sh7757lcr/u-boot.lds               |    2 +-
 board/rsdproto/u-boot.lds                        |    2 +-
 board/samsung/smdk5250/smdk5250-uboot-spl.lds    |    2 +-
 board/samsung/smdk6400/u-boot-nand.lds           |    2 +-
 board/sandburst/karef/u-boot.lds.debug           |    2 +-
 board/sandburst/metrobox/u-boot.lds.debug        |    2 +-
 board/sandpoint/u-boot.lds                       |    2 +-
 board/sixnet/u-boot.lds                          |    2 +-
 board/snmc/qs850/u-boot.lds                      |    2 +-
 board/snmc/qs860t/u-boot.lds                     |    2 +-
 board/spc1920/u-boot.lds                         |    2 +-
 board/spd8xx/u-boot.lds                          |    2 +-
 board/spd8xx/u-boot.lds.debug                    |    2 +-
 board/stx/stxxtc/u-boot.lds                      |    2 +-
 board/stx/stxxtc/u-boot.lds.debug                |    2 +-
 board/svm_sc8xx/u-boot.lds                       |    2 +-
 board/tqc/tqm8xx/u-boot.lds                      |    2 +-
 board/v37/u-boot.lds                             |    2 +-
 board/vpac270/u-boot-spl.lds                     |    4 -
 board/w7o/u-boot.lds.debug                       |    2 +-
 board/xes/xpedite1000/u-boot.lds.debug           |    2 +-
 common/cmd_help.c                                |    2 +-
 config.mk                                        |    2 -
 doc/README.commands                              |   18 +-
 helper.mk                                        |   64 ------
 include/command.h                                |    2 +-
 include/configs/am335x_evm.h                     |    2 +-
 include/configs/pcm051.h                         |    2 +-
 include/env_callback.h                           |    2 +-
 include/linker_lists.h                           |  252 +++++++++++++++++-----
 nand_spl/board/freescale/mpc8536ds/Makefile      |    7 +-
 nand_spl/board/freescale/mpc8569mds/Makefile     |    7 +-
 nand_spl/board/freescale/mpc8572ds/Makefile      |    7 +-
 nand_spl/board/freescale/mx31pdk/Makefile        |    7 +-
 nand_spl/board/freescale/mx31pdk/u-boot.lds      |    2 +-
 nand_spl/board/freescale/p1010rdb/Makefile       |    7 +-
 nand_spl/board/freescale/p1023rds/Makefile       |    7 +-
 nand_spl/board/freescale/p1_p2_rdb/Makefile      |    7 +-
 nand_spl/board/karo/tx25/Makefile                |    7 +-
 nand_spl/board/karo/tx25/u-boot.lds              |    2 +-
 nand_spl/board/samsung/smdk6400/u-boot.lds       |    2 +-
 spl/.gitignore                                   |    1 -
 spl/Makefile                                     |    8 +-
 190 files changed, 665 insertions(+), 424 deletions(-)
 create mode 100644 arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
 create mode 100644 arch/arm/cpu/u-boot-spl.lds
 create mode 100644 arch/arm/lib/bss.c
 delete mode 100644 helper.mk

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 1/4] arm: omap: map u_boot_lists section to .sram
  2013-02-25 10:58   ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
@ 2013-02-25 10:58     ` Albert ARIBAUD
  2013-02-25 10:58       ` [U-Boot] [PATCH v2 2/4] Remove linker lists (LGAs) from SPL linker scripts Albert ARIBAUD
  2013-02-25 11:32     ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Marek Vasut
                       ` (2 subsequent siblings)
  3 siblings, 1 reply; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-25 10:58 UTC (permalink / raw)
  To: u-boot

Output section .u_boot_list was left unmapped in
u-boot-spl.lds for omap-common, causing the location
counter to roll back to bteween .rodata and .data,
making __image_copy_end and _end symbols wrong.

Mapping output section .u_boot_list to memory .sram
fixes these symbols' mapping.

This modifies the SPL binary but has no functional
impact, as __image_copy_end and _end are never used
in SPLs and u_boot_list is empty for all 29 boards
affected (omap4_sdp4430 eco5pk igep0030 am335x_evm_uart3
omap3_beagle am3517_crane igep0032 mt_ventoux pcm051
am3517_evm omap3_evm_quick_mmc am335x_evm_uart2
am335x_evm_spiboot am335x_evm_uart1 omap3_evm igep0030_nand
omap3_overo igep0020 am335x_evm omap4_panda omap5_evm
am335x_evm_uart4 devkit8000 tricorder mcx twister
omap3_evm_quick_nand am335x_evm_uart5 igep0020_nand).

Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
---
Changes in v2:
- fixed missing .sram memory mapping in OMAP lds

 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
index 9979c30..6755628 100644
--- a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
+++ b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
@@ -50,7 +50,7 @@ SECTIONS
 
 	.u_boot_list : {
 		#include <u-boot.lst>
-	}
+	} > .sram
 
 	. = ALIGN(4);
 	__image_copy_end = .;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 2/4] Remove linker lists (LGAs) from SPL linker scripts
  2013-02-25 10:58     ` [U-Boot] [PATCH v2 1/4] arm: omap: map u_boot_lists section to .sram Albert ARIBAUD
@ 2013-02-25 10:58       ` Albert ARIBAUD
  2013-02-25 10:58         ` [U-Boot] [PATCH v2 3/4] arm: make __bss_start and __bss_end__ compiler-generated Albert ARIBAUD
  0 siblings, 1 reply; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-25 10:58 UTC (permalink / raw)
  To: u-boot

Many SPL linker scripts needlessly include linker lists (aka LGAs).
Remove them whenever possible; keep it only in the seven am335x_evm
variants (am335x_evm, am335x_evm_uart[1-5], am335x_evm_spiboot),
where there is actual content in output section .u_boot_list.

This commit keeps all u-boot.bin and u-boot-spl.bin in ARM targets
byte-identical.

Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
---
Changes in v2:
- removed useless linker script sections in SPL lds files

 arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds      |    6 --
 arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds    |    6 --
 arch/arm/cpu/armv7/am33xx/u-boot-spl.lds       |   67 +++++++++++++++++
 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds  |    4 -
 arch/arm/cpu/u-boot-spl.lds                    |   93 ++++++++++++++++++++++++
 board/ait/cam_enc_4xx/u-boot-spl.lds           |    4 -
 board/davinci/da8xxevm/u-boot-spl-da850evm.lds |    5 --
 board/davinci/da8xxevm/u-boot-spl-hawk.lds     |    5 --
 board/vpac270/u-boot-spl.lds                   |    4 -
 include/configs/am335x_evm.h                   |    2 +-
 include/configs/pcm051.h                       |    2 +-
 spl/Makefile                                   |    8 +-
 12 files changed, 164 insertions(+), 42 deletions(-)
 create mode 100644 arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
 create mode 100644 arch/arm/cpu/u-boot-spl.lds

diff --git a/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds b/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
index 6dc681a..0f3222c 100644
--- a/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
+++ b/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
@@ -51,12 +51,6 @@ SECTIONS
 
 	. = ALIGN(4);
 
-	.u_boot_list : {
-		#include <u-boot.lst>
-	}
-
-	. = ALIGN(4);
-
 	.rel.dyn : {
 		__rel_dyn_start = .;
 		*(.rel*)
diff --git a/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds b/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
index f3bd5e7..0af3e0a 100644
--- a/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
+++ b/arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
@@ -51,12 +51,6 @@ SECTIONS
 
 	. = ALIGN(4);
 
-	.u_boot_list : {
-		#include <u-boot.lst>
-	}
-
-	. = ALIGN(4);
-
 	.rel.dyn : {
 		__rel_dyn_start = .;
 		*(.rel*)
diff --git a/arch/arm/cpu/armv7/am33xx/u-boot-spl.lds b/arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
new file mode 100644
index 0000000..1c3deef
--- /dev/null
+++ b/arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
@@ -0,0 +1,67 @@
+/*
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *	Aneesh V <aneesh@ti.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
+		LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
+		LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+	.text      :
+	{
+		__start = .;
+		arch/arm/cpu/armv7/start.o	(.text)
+		*(.text*)
+	} >.sram
+
+	. = ALIGN(4);
+	.rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram
+
+	. = ALIGN(4);
+	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
+
+	.u_boot_list : {
+		#include <u-boot.lst>
+	} >.sram
+
+	. = ALIGN(4);
+	__image_copy_end = .;
+	_end = .;
+
+	.bss :
+	{
+		. = ALIGN(4);
+		__bss_start = .;
+		*(.bss*)
+		. = ALIGN(4);
+		__bss_end__ = .;
+	} >.sdram
+}
diff --git a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
index 6755628..88f4069 100644
--- a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
+++ b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
@@ -48,10 +48,6 @@ SECTIONS
 	. = ALIGN(4);
 	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
 
-	.u_boot_list : {
-		#include <u-boot.lst>
-	} > .sram
-
 	. = ALIGN(4);
 	__image_copy_end = .;
 	_end = .;
diff --git a/arch/arm/cpu/u-boot-spl.lds b/arch/arm/cpu/u-boot-spl.lds
new file mode 100644
index 0000000..8321afb
--- /dev/null
+++ b/arch/arm/cpu/u-boot-spl.lds
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2004-2008 Texas Instruments
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+	. = 0x00000000;
+
+	. = ALIGN(4);
+	.text :
+	{
+		__image_copy_start = .;
+		CPUDIR/start.o (.text*)
+		*(.text*)
+	}
+
+	. = ALIGN(4);
+	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+
+	. = ALIGN(4);
+	.data : {
+		*(.data*)
+	}
+
+	. = ALIGN(4);
+
+	. = .;
+
+	__image_copy_end = .;
+
+	.rel.dyn : {
+		__rel_dyn_start = .;
+		*(.rel*)
+		__rel_dyn_end = .;
+	}
+
+	.dynsym : {
+		__dynsym_start = .;
+		*(.dynsym)
+	}
+
+	_end = .;
+
+	/*
+	 * Deprecated: this MMU section is used by pxa at present but
+	 * should not be used by new boards/CPUs.
+	 */
+	. = ALIGN(4096);
+	.mmutable : {
+		*(.mmutable)
+	}
+
+	.bss __rel_dyn_start (OVERLAY) : {
+		__bss_start = .;
+		*(.bss*)
+		 . = ALIGN(4);
+		__bss_end__ = .;
+	}
+
+	/DISCARD/ : { *(.dynstr*) }
+	/DISCARD/ : { *(.dynamic*) }
+	/DISCARD/ : { *(.plt*) }
+	/DISCARD/ : { *(.interp*) }
+	/DISCARD/ : { *(.gnu*) }
+}
+
+#if defined(CONFIG_SPL_TEXT_BASE) && defined(CONFIG_SPL_MAX_SIZE)
+ASSERT(__bss_end__ < (CONFIG_SPL_TEXT_BASE + CONFIG_SPL_MAX_SIZE), "SPL image too big");
+#endif
diff --git a/board/ait/cam_enc_4xx/u-boot-spl.lds b/board/ait/cam_enc_4xx/u-boot-spl.lds
index 656b2fb..52c986e 100644
--- a/board/ait/cam_enc_4xx/u-boot-spl.lds
+++ b/board/ait/cam_enc_4xx/u-boot-spl.lds
@@ -48,10 +48,6 @@ SECTIONS
 	. = ALIGN(4);
 	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
 	. = ALIGN(4);
-	.u_boot_list : {
-		#include <u-boot.lst>
-	} >.sram
-	. = ALIGN(4);
 	.rel.dyn : {
 		__rel_dyn_start = .;
 		*(.rel*)
diff --git a/board/davinci/da8xxevm/u-boot-spl-da850evm.lds b/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
index c5fd93c..dd5f266 100644
--- a/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
+++ b/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
@@ -49,11 +49,6 @@ SECTIONS
 	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
 
 	. = ALIGN(4);
-	.u_boot_list : {
-		#include <u-boot.lst>
-	} >.sram
-
-	. = ALIGN(4);
 	.rel.dyn : {
 		__rel_dyn_start = .;
 		*(.rel*)
diff --git a/board/davinci/da8xxevm/u-boot-spl-hawk.lds b/board/davinci/da8xxevm/u-boot-spl-hawk.lds
index 86dc172..b3a41af 100644
--- a/board/davinci/da8xxevm/u-boot-spl-hawk.lds
+++ b/board/davinci/da8xxevm/u-boot-spl-hawk.lds
@@ -58,11 +58,6 @@ SECTIONS
 	}
 
 	. = ALIGN(4);
-	.u_boot_list : {
-		#include <u-boot.lst>
-	}
-
-	. = ALIGN(4);
 	__rel_dyn_start = .;
 	__rel_dyn_end = .;
 	__dynsym_start = .;
diff --git a/board/vpac270/u-boot-spl.lds b/board/vpac270/u-boot-spl.lds
index 20161a4..1958c2f 100644
--- a/board/vpac270/u-boot-spl.lds
+++ b/board/vpac270/u-boot-spl.lds
@@ -57,10 +57,6 @@ SECTIONS
 		*(.data)
 	}
 
-	.u_boot_list : {
-		#include <u-boot.lst>
-	}
-
 	. = ALIGN(4);
 
 	.rel.dyn : {
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
index 0dc2a50..78054b0 100644
--- a/include/configs/am335x_evm.h
+++ b/include/configs/am335x_evm.h
@@ -282,7 +282,7 @@
 #define CONFIG_SPL_SPI_CS		0
 #define CONFIG_SYS_SPI_U_BOOT_OFFS	0x80000
 #define CONFIG_SPL_MUSB_NEW_SUPPORT
-#define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/omap-common/u-boot-spl.lds"
+#define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/am33xx/u-boot-spl.lds"
 
 #define CONFIG_SPL_BOARD_INIT
 #define CONFIG_SPL_NAND_AM33XX_BCH
diff --git a/include/configs/pcm051.h b/include/configs/pcm051.h
index aa90ba9..63ab123 100644
--- a/include/configs/pcm051.h
+++ b/include/configs/pcm051.h
@@ -234,7 +234,7 @@
 #define CONFIG_SPL_SPI_CS		0
 #define CONFIG_SYS_SPI_U_BOOT_OFFS	0x20000
 #define CONFIG_SYS_SPI_U_BOOT_SIZE	0x40000
-#define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/omap-common/u-boot-spl.lds"
+#define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/am33xx/u-boot-spl.lds"
 
 /*
  * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
diff --git a/spl/Makefile b/spl/Makefile
index aac6146..14095c8 100644
--- a/spl/Makefile
+++ b/spl/Makefile
@@ -119,7 +119,7 @@ ifeq ($(wildcard $(LDSCRIPT)),)
 	LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-spl.lds
 endif
 ifeq ($(wildcard $(LDSCRIPT)),)
-	LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot.lds
+	LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot-spl.lds
 endif
 ifeq ($(wildcard $(LDSCRIPT)),)
 $(error could not find linker script)
@@ -177,11 +177,7 @@ $(START):	depend
 $(LIBS):	depend
 	$(MAKE) -C $(SRCTREE)$(dir $(subst $(SPLTREE),,$@))
 
-# The following line expands into whole rule which generates u-boot.lst,
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(obj)u-boot.lst, $(LIBS)))
-$(obj)u-boot-spl.lds: $(LDSCRIPT) $(obj)u-boot.lst depend
+$(obj)u-boot-spl.lds: $(LDSCRIPT) depend
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj). -ansi -D__ASSEMBLY__ -P - < $< > $@
 
 depend:	$(obj).depend
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 3/4] arm: make __bss_start and __bss_end__ compiler-generated
  2013-02-25 10:58       ` [U-Boot] [PATCH v2 2/4] Remove linker lists (LGAs) from SPL linker scripts Albert ARIBAUD
@ 2013-02-25 10:58         ` Albert ARIBAUD
  2013-02-25 10:59           ` [U-Boot] [PATCH v2 4/4] Refactor linker-generated arrays Albert ARIBAUD
  0 siblings, 1 reply; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-25 10:58 UTC (permalink / raw)
  To: u-boot

Turn __bss_start and __bss_end__ from linker-generated
to compiler-generated symbols, causing relocations for
these symbols to change type, from R_ARM_ABS32 to
R_ARM_RELATIVE.

This should have no functional impact, as it affects
references to __bss_start and __bss_end__ only before
relocation, and no such references are done.

Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
---
Changes in v2:
- made BSS start and end compiler-generated

 arch/arm/cpu/ixp/u-boot.lds        |   12 ++++++++---
 arch/arm/cpu/u-boot.lds            |   12 ++++++++---
 arch/arm/lib/Makefile              |    1 +
 arch/arm/lib/bss.c                 |   39 ++++++++++++++++++++++++++++++++++++
 board/actux1/u-boot.lds            |   22 +++++++++++++-------
 board/actux2/u-boot.lds            |   22 +++++++++++++-------
 board/actux3/u-boot.lds            |   16 +++++++++++----
 board/dvlhost/u-boot.lds           |   16 +++++++++++----
 board/freescale/mx31ads/u-boot.lds |   14 +++++++++----
 9 files changed, 122 insertions(+), 32 deletions(-)
 create mode 100644 arch/arm/lib/bss.c

diff --git a/arch/arm/cpu/ixp/u-boot.lds b/arch/arm/cpu/ixp/u-boot.lds
index 81d954f..bba91d5 100644
--- a/arch/arm/cpu/ixp/u-boot.lds
+++ b/arch/arm/cpu/ixp/u-boot.lds
@@ -67,11 +67,17 @@ SECTIONS
 
 	_end = .;
 
-	.bss __rel_dyn_start (OVERLAY) : {
-		__bss_start = .;
+	.bss_start __rel_dyn_start (OVERLAY) : {
+		KEEP(*(.__bss_start));
+	}
+
+	.bss __bss_start (OVERLAY) : {
 		*(.bss*)
 		 . = ALIGN(4);
-		__bss_end__ = .;
+		 ___bssend___ = .;
+	}
+	.bss_end ___bssend___ (OVERLAY) : {
+		KEEP(*(.__bss_end__));
 	}
 
 	/DISCARD/ : { *(.dynstr*) }
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
index e6b202b..e1bc8e7 100644
--- a/arch/arm/cpu/u-boot.lds
+++ b/arch/arm/cpu/u-boot.lds
@@ -81,11 +81,17 @@ SECTIONS
 		*(.mmutable)
 	}
 
-	.bss __rel_dyn_start (OVERLAY) : {
-		__bss_start = .;
+	.bss_start __rel_dyn_start (OVERLAY) : {
+		KEEP(*(.__bss_start));
+	}
+
+	.bss __bss_start (OVERLAY) : {
 		*(.bss*)
 		 . = ALIGN(4);
-		__bss_end__ = .;
+		 ___bssend___ = .;
+	}
+	.bss_end ___bssend___ (OVERLAY) : {
+		KEEP(*(.__bss_end__));
 	}
 
 	/DISCARD/ : { *(.dynstr*) }
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index 57111af..11c2674 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -39,6 +39,7 @@ GLCOBJS	+= div0.o
 SOBJS-y += crt0.o
 
 ifndef CONFIG_SPL_BUILD
+COBJS-y += bss.o
 COBJS-y	+= board.o
 COBJS-y	+= bootm.o
 COBJS-$(CONFIG_SYS_L2_PL310) += cache-pl310.o
diff --git a/arch/arm/lib/bss.c b/arch/arm/lib/bss.c
new file mode 100644
index 0000000..7c0b154
--- /dev/null
+++ b/arch/arm/lib/bss.c
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2013 Albert ARIBAUD <albert.u.boot@aribaud.net>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/**
+ * These two symbols are declared in a C file so that the linker
+ * uses R_ARM_RELATIVE relocation, rather than the R_ARM_ABS32 one
+ * it would use if the symbols were defined in the linker file.
+ * Using only R_ARM_RELATIVE relocation ensures that references to
+ * the symbols are correct after as well as before relocation.
+ *
+ * We need a 0-byte-size type for these symbols, and the compiler
+ * does not allow defining objects of C type 'void'. Using an empty
+ * struct is allowed by the compiler, but causes gcc versions 4.4 and
+ * below to complain about aliasing. Therefore we use the next best
+ * thing: zero-sized arrays, which are both 0-byte-size and exempt from
+ * aliasing warnings.
+ */
+
+char __bss_start[0] __attribute__((used, section(".__bss_start")));
+char __bss_end__[0] __attribute__((used, section(".__bss_end__")));
diff --git a/board/actux1/u-boot.lds b/board/actux1/u-boot.lds
index c41eed0..572bcea 100644
--- a/board/actux1/u-boot.lds
+++ b/board/actux1/u-boot.lds
@@ -41,15 +41,15 @@ SECTIONS
 		*(.text*)
 	}
 
-	. = ALIGN (4);
+	. = ALIGN(4);
 	.rodata : {
 		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
 	}
-	. = ALIGN (4);
+	. = ALIGN(4);
 	.data : {
 		*(.data*)
 	}
-	. = ALIGN (4);
+	. = ALIGN(4);
 	.got : {
 		*(.got)
 	}
@@ -72,13 +72,21 @@ SECTIONS
 		*(.dynsym)
 	}
 
-	.bss __rel_dyn_start (OVERLAY) : {
-		__bss_start = .;
+	_end = .;
+
+	.bss_start __rel_dyn_start (OVERLAY) : {
+		KEEP(*(.__bss_start));
+	}
+
+	.bss __bss_start (OVERLAY) : {
 		*(.bss*)
 		 . = ALIGN(4);
-		_end = .;
+		 ___bssend___ = .;
 	}
-	__bss_end__ =.;
+	.bss_end ___bssend___ (OVERLAY) : {
+		KEEP(*(.__bss_end__));
+	}
+
 	/DISCARD/ : { *(.dynstr*) }
 	/DISCARD/ : { *(.dynamic*) }
 	/DISCARD/ : { *(.plt*) }
diff --git a/board/actux2/u-boot.lds b/board/actux2/u-boot.lds
index 8409984..6272a10 100644
--- a/board/actux2/u-boot.lds
+++ b/board/actux2/u-boot.lds
@@ -41,15 +41,15 @@ SECTIONS
 		*(.text*)
 	}
 
-	. = ALIGN (4);
+	. = ALIGN(4);
 	.rodata : {
 		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
 	}
-	. = ALIGN (4);
+	. = ALIGN(4);
 	.data : {
 		*(.data*)
 	}
-	. = ALIGN (4);
+	. = ALIGN(4);
 	.got : {
 		*(.got)
 	}
@@ -72,13 +72,21 @@ SECTIONS
 		*(.dynsym)
 	}
 
-	.bss __rel_dyn_start (OVERLAY) : {
-		__bss_start = .;
+	_end = .;
+
+	.bss_start __rel_dyn_start (OVERLAY) : {
+		KEEP(*(.__bss_start));
+	}
+
+	.bss __bss_start (OVERLAY) : {
 		*(.bss*)
 		 . = ALIGN(4);
-		_end = .;
+		 ___bssend___ = .;
 	}
-	__bss_end__ =.;
+	.bss_end ___bssend___ (OVERLAY) : {
+		KEEP(*(.__bss_end__));
+	}
+
 	/DISCARD/ : { *(.dynstr*) }
 	/DISCARD/ : { *(.dynamic*) }
 	/DISCARD/ : { *(.plt*) }
diff --git a/board/actux3/u-boot.lds b/board/actux3/u-boot.lds
index a3bd02b..488e1e7 100644
--- a/board/actux3/u-boot.lds
+++ b/board/actux3/u-boot.lds
@@ -72,13 +72,21 @@ SECTIONS
 		*(.dynsym)
 	}
 
-	.bss __rel_dyn_start (OVERLAY) : {
-		__bss_start = .;
+	_end = .;
+
+	.bss_start __rel_dyn_start (OVERLAY) : {
+		KEEP(*(.__bss_start));
+	}
+
+	.bss __bss_start (OVERLAY) : {
 		*(.bss*)
 		 . = ALIGN(4);
-		_end = .;
+		 ___bssend___ = .;
 	}
-	__bss_end__ =.;
+	.bss_end ___bssend___ (OVERLAY) : {
+		KEEP(*(.__bss_end__));
+	}
+
 	/DISCARD/ : { *(.dynstr*) }
 	/DISCARD/ : { *(.dynamic*) }
 	/DISCARD/ : { *(.plt*) }
diff --git a/board/dvlhost/u-boot.lds b/board/dvlhost/u-boot.lds
index 1bd1700..6dc26c8 100644
--- a/board/dvlhost/u-boot.lds
+++ b/board/dvlhost/u-boot.lds
@@ -72,13 +72,21 @@ SECTIONS
 		*(.dynsym)
 	}
 
-	.bss __rel_dyn_start (OVERLAY) : {
-		__bss_start = .;
+	_end = .;
+
+	.bss_start __rel_dyn_start (OVERLAY) : {
+		KEEP(*(.__bss_start));
+	}
+
+	.bss __bss_start (OVERLAY) : {
 		*(.bss*)
 		 . = ALIGN(4);
-		_end = .;
+		 ___bssend___ = .;
 	}
-	__bss_end__ =.;
+	.bss_end ___bssend___ (OVERLAY) : {
+		KEEP(*(.__bss_end__));
+	}
+
 	/DISCARD/ : { *(.dynstr*) }
 	/DISCARD/ : { *(.dynamic*) }
 	/DISCARD/ : { *(.plt*) }
diff --git a/board/freescale/mx31ads/u-boot.lds b/board/freescale/mx31ads/u-boot.lds
index 5267729..12d7c12 100644
--- a/board/freescale/mx31ads/u-boot.lds
+++ b/board/freescale/mx31ads/u-boot.lds
@@ -80,11 +80,17 @@ SECTIONS
 
 	_end = .;
 
-	.bss __rel_dyn_start (OVERLAY) : {
-		__bss_start = .;
-		*(.bss)
+	.bss_start __rel_dyn_start (OVERLAY) : {
+		KEEP(*(.__bss_start));
+	}
+
+	.bss __bss_start (OVERLAY) : {
+		*(.bss*)
 		 . = ALIGN(4);
-		__bss_end__ = .;
+		 ___bssend___ = .;
+	}
+	.bss_end ___bssend___ (OVERLAY) : {
+		KEEP(*(.__bss_end__));
 	}
 
 	/DISCARD/ : { *(.bss*) }
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 4/4] Refactor linker-generated arrays
  2013-02-25 10:58         ` [U-Boot] [PATCH v2 3/4] arm: make __bss_start and __bss_end__ compiler-generated Albert ARIBAUD
@ 2013-02-25 10:59           ` Albert ARIBAUD
  0 siblings, 0 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-25 10:59 UTC (permalink / raw)
  To: u-boot

Refactor linker-generated array code so that symbols
which were previously linker-generated are now compiler-
generated. This causes relocation records of type
R_ARM_ABS32 to become R_ARM_RELATIVE, which makes
code which uses LGA able to run before relocation as
well as after.

Note: this affects more than ARM targets, as linker-
lists span possibly all target architectures, notably
PowerPC.

Conflicts:
	arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
	arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
	arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
	board/ait/cam_enc_4xx/u-boot-spl.lds
	board/davinci/da8xxevm/u-boot-spl-da850evm.lds
	board/davinci/da8xxevm/u-boot-spl-hawk.lds
	board/vpac270/u-boot-spl.lds

Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
---
Changes in v2:
- moved SPL linker script changes to their own commit
- added KEEP() to all linker files
- removed spurious change to common/command.c
- changed empty type from struct {} to char[0]
- dropped patch to removed board/micronas/vct/u-boot.lds
- removed all references to u-boot.lst

 .gitignore                                       |    1 -
 Makefile                                         |   13 +-
 arch/arm/cpu/arm920t/ep93xx/u-boot.lds           |    2 +-
 arch/arm/cpu/armv7/am33xx/u-boot-spl.lds         |    2 +-
 arch/arm/cpu/ixp/u-boot.lds                      |    2 +-
 arch/arm/cpu/u-boot.lds                          |    2 +-
 arch/avr32/cpu/u-boot.lds                        |    2 +-
 arch/blackfin/cpu/u-boot.lds                     |    2 +-
 arch/microblaze/cpu/u-boot.lds                   |    2 +-
 arch/mips/cpu/u-boot.lds                         |    2 +-
 arch/nds32/cpu/n1213/u-boot.lds                  |    2 +-
 arch/nios2/cpu/u-boot.lds                        |    2 +-
 arch/powerpc/cpu/74xx_7xx/u-boot.lds             |    2 +-
 arch/powerpc/cpu/mpc512x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc5xx/u-boot.lds               |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds |    2 +-
 arch/powerpc/cpu/mpc5xxx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8220/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc824x/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc8260/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc83xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand.lds         |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds     |    2 +-
 arch/powerpc/cpu/mpc85xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/mpc86xx/u-boot.lds              |    2 +-
 arch/powerpc/cpu/ppc4xx/u-boot.lds               |    2 +-
 arch/sandbox/cpu/u-boot.lds                      |    2 +-
 arch/sh/cpu/sh2/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh3/u-boot.lds                       |    2 +-
 arch/sh/cpu/sh4/u-boot.lds                       |    2 +-
 arch/x86/cpu/u-boot.lds                          |    2 +-
 board/BuS/eb_cpu5282/u-boot.lds                  |    2 +-
 board/LEOX/elpt860/u-boot.lds                    |    2 +-
 board/RPXClassic/u-boot.lds                      |    2 +-
 board/RPXClassic/u-boot.lds.debug                |    2 +-
 board/RPXlite/u-boot.lds                         |    2 +-
 board/RPXlite/u-boot.lds.debug                   |    2 +-
 board/RPXlite_dw/u-boot.lds                      |    2 +-
 board/RPXlite_dw/u-boot.lds.debug                |    2 +-
 board/RRvision/u-boot.lds                        |    2 +-
 board/actux1/u-boot.lds                          |    2 +-
 board/actux2/u-boot.lds                          |    2 +-
 board/actux3/u-boot.lds                          |    2 +-
 board/adder/u-boot.lds                           |    2 +-
 board/altera/nios2-generic/u-boot.lds            |    2 +-
 board/amcc/acadia/u-boot-nand.lds                |    2 +-
 board/amcc/bamboo/u-boot-nand.lds                |    2 +-
 board/amcc/canyonlands/u-boot-nand.lds           |    2 +-
 board/amcc/kilauea/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-nand.lds               |    2 +-
 board/amcc/sequoia/u-boot-ram.lds                |    2 +-
 board/astro/mcf5373l/u-boot.lds                  |    2 +-
 board/cobra5272/u-boot.lds                       |    2 +-
 board/cogent/u-boot.lds                          |    2 +-
 board/cogent/u-boot.lds.debug                    |    2 +-
 board/cray/L1/u-boot.lds.debug                   |    2 +-
 board/dave/PPChameleonEVB/u-boot.lds             |    2 +-
 board/dvlhost/u-boot.lds                         |    2 +-
 board/eltec/mhpc/u-boot.lds                      |    2 +-
 board/eltec/mhpc/u-boot.lds.debug                |    2 +-
 board/emk/top860/u-boot.lds                      |    2 +-
 board/ep88x/u-boot.lds                           |    2 +-
 board/esd/dasa_sim/u-boot.lds                    |    2 +-
 board/esd/pmc440/u-boot-nand.lds                 |    2 +-
 board/esd/tasreg/u-boot.lds                      |    2 +-
 board/esteem192e/u-boot.lds                      |    2 +-
 board/evb64260/u-boot.lds                        |    2 +-
 board/fads/u-boot.lds                            |    2 +-
 board/flagadm/u-boot.lds                         |    2 +-
 board/flagadm/u-boot.lds.debug                   |    2 +-
 board/freescale/m5208evbe/u-boot.lds             |    2 +-
 board/freescale/m52277evb/u-boot.lds             |    2 +-
 board/freescale/m5235evb/u-boot.lds              |    2 +-
 board/freescale/m5249evb/u-boot.lds              |    2 +-
 board/freescale/m5253demo/u-boot.lds             |    2 +-
 board/freescale/m5253evbe/u-boot.lds             |    2 +-
 board/freescale/m5271evb/u-boot.lds              |    2 +-
 board/freescale/m5272c3/u-boot.lds               |    2 +-
 board/freescale/m5275evb/u-boot.lds              |    2 +-
 board/freescale/m5282evb/u-boot.lds              |    2 +-
 board/freescale/m53017evb/u-boot.lds             |    2 +-
 board/freescale/m5329evb/u-boot.lds              |    2 +-
 board/freescale/m5373evb/u-boot.lds              |    2 +-
 board/freescale/m54418twr/u-boot.lds             |    2 +-
 board/freescale/m54451evb/u-boot.lds             |    2 +-
 board/freescale/m54455evb/u-boot.lds             |    2 +-
 board/freescale/m547xevb/u-boot.lds              |    2 +-
 board/freescale/m548xevb/u-boot.lds              |    2 +-
 board/freescale/mx31ads/u-boot.lds               |    2 +-
 board/gaisler/gr_cpci_ax2000/u-boot.lds          |    2 +-
 board/gaisler/gr_ep2s60/u-boot.lds               |    2 +-
 board/gaisler/gr_xc3s_1500/u-boot.lds            |    2 +-
 board/gaisler/grsim/u-boot.lds                   |    2 +-
 board/gaisler/grsim_leon2/u-boot.lds             |    2 +-
 board/gen860t/u-boot-flashenv.lds                |    2 +-
 board/gen860t/u-boot.lds                         |    2 +-
 board/genietv/u-boot.lds                         |    2 +-
 board/genietv/u-boot.lds.debug                   |    2 +-
 board/hermes/u-boot.lds                          |    2 +-
 board/hermes/u-boot.lds.debug                    |    2 +-
 board/hymod/u-boot.lds                           |    2 +-
 board/hymod/u-boot.lds.debug                     |    2 +-
 board/icu862/u-boot.lds                          |    2 +-
 board/icu862/u-boot.lds.debug                    |    2 +-
 board/idmr/u-boot.lds                            |    2 +-
 board/ip860/u-boot.lds                           |    2 +-
 board/ip860/u-boot.lds.debug                     |    2 +-
 board/ivm/u-boot.lds                             |    2 +-
 board/ivm/u-boot.lds.debug                       |    2 +-
 board/korat/u-boot-F7FC.lds                      |    2 +-
 board/kup/kup4k/u-boot.lds                       |    2 +-
 board/kup/kup4k/u-boot.lds.debug                 |    2 +-
 board/kup/kup4x/u-boot.lds                       |    2 +-
 board/kup/kup4x/u-boot.lds.debug                 |    2 +-
 board/lwmon/u-boot.lds                           |    2 +-
 board/lwmon/u-boot.lds.debug                     |    2 +-
 board/manroland/uc100/u-boot.lds                 |    2 +-
 board/matrix_vision/mvsmr/u-boot.lds             |    2 +-
 board/mbx8xx/u-boot.lds                          |    2 +-
 board/mbx8xx/u-boot.lds.debug                    |    2 +-
 board/mousse/u-boot.lds                          |    2 +-
 board/mpl/pip405/u-boot.lds.debug                |    2 +-
 board/mvblue/u-boot.lds                          |    2 +-
 board/netphone/u-boot.lds                        |    2 +-
 board/netphone/u-boot.lds.debug                  |    2 +-
 board/netta/u-boot.lds                           |    2 +-
 board/netta/u-boot.lds.debug                     |    2 +-
 board/netta2/u-boot.lds                          |    2 +-
 board/netta2/u-boot.lds.debug                    |    2 +-
 board/netvia/u-boot.lds                          |    2 +-
 board/netvia/u-boot.lds.debug                    |    2 +-
 board/nx823/u-boot.lds                           |    2 +-
 board/nx823/u-boot.lds.debug                     |    2 +-
 board/openrisc/openrisc-generic/u-boot.lds       |    2 +-
 board/quantum/u-boot.lds                         |    2 +-
 board/r360mpi/u-boot.lds                         |    2 +-
 board/rbc823/u-boot.lds                          |    2 +-
 board/renesas/sh7752evb/u-boot.lds               |    2 +-
 board/renesas/sh7757lcr/u-boot.lds               |    2 +-
 board/rsdproto/u-boot.lds                        |    2 +-
 board/samsung/smdk5250/smdk5250-uboot-spl.lds    |    2 +-
 board/samsung/smdk6400/u-boot-nand.lds           |    2 +-
 board/sandburst/karef/u-boot.lds.debug           |    2 +-
 board/sandburst/metrobox/u-boot.lds.debug        |    2 +-
 board/sandpoint/u-boot.lds                       |    2 +-
 board/sixnet/u-boot.lds                          |    2 +-
 board/snmc/qs850/u-boot.lds                      |    2 +-
 board/snmc/qs860t/u-boot.lds                     |    2 +-
 board/spc1920/u-boot.lds                         |    2 +-
 board/spd8xx/u-boot.lds                          |    2 +-
 board/spd8xx/u-boot.lds.debug                    |    2 +-
 board/stx/stxxtc/u-boot.lds                      |    2 +-
 board/stx/stxxtc/u-boot.lds.debug                |    2 +-
 board/svm_sc8xx/u-boot.lds                       |    2 +-
 board/tqc/tqm8xx/u-boot.lds                      |    2 +-
 board/v37/u-boot.lds                             |    2 +-
 board/w7o/u-boot.lds.debug                       |    2 +-
 board/xes/xpedite1000/u-boot.lds.debug           |    2 +-
 common/cmd_help.c                                |    2 +-
 config.mk                                        |    2 -
 doc/README.commands                              |   18 +-
 helper.mk                                        |   64 ------
 include/command.h                                |    2 +-
 include/env_callback.h                           |    2 +-
 include/linker_lists.h                           |  252 +++++++++++++++++-----
 nand_spl/board/freescale/mpc8536ds/Makefile      |    7 +-
 nand_spl/board/freescale/mpc8569mds/Makefile     |    7 +-
 nand_spl/board/freescale/mpc8572ds/Makefile      |    7 +-
 nand_spl/board/freescale/mx31pdk/Makefile        |    7 +-
 nand_spl/board/freescale/mx31pdk/u-boot.lds      |    2 +-
 nand_spl/board/freescale/p1010rdb/Makefile       |    7 +-
 nand_spl/board/freescale/p1023rds/Makefile       |    7 +-
 nand_spl/board/freescale/p1_p2_rdb/Makefile      |    7 +-
 nand_spl/board/karo/tx25/Makefile                |    7 +-
 nand_spl/board/karo/tx25/u-boot.lds              |    2 +-
 nand_spl/board/samsung/smdk6400/u-boot.lds       |    2 +-
 spl/.gitignore                                   |    1 -
 177 files changed, 380 insertions(+), 351 deletions(-)
 delete mode 100644 helper.mk

diff --git a/.gitignore b/.gitignore
index e40eb7b..be09894 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,7 +44,6 @@
 /u-boot.dtb
 /u-boot.sb
 /u-boot.geany
-/include/u-boot.lst
 
 #
 # Generated files
diff --git a/Makefile b/Makefile
index fc18dd4..ee6e609 100644
--- a/Makefile
+++ b/Makefile
@@ -555,10 +555,8 @@ GEN_UBOOT = \
 			$(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot
 else
 GEN_UBOOT = \
-		UNDEF_LST=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
-		sed  -n -e 's/.*\($(SYM_PREFIX)_u_boot_list_.*\)/-u\1/p'|sort|uniq`;\
 		cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
-			$$UNDEF_LST $(__OBJS) \
+			$(__OBJS) \
 			--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
 			-Map u-boot.map -o u-boot
 endif
@@ -591,11 +589,7 @@ $(SUBDIR_EXAMPLES): $(obj)u-boot
 $(LDSCRIPT):	depend
 		$(MAKE) -C $(dir $@) $(notdir $@)
 
-# The following line expands into whole rule which generates u-boot.lst,
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(obj)include/u-boot.lst, $(LIBBOARD) $(LIBS)))
-$(obj)u-boot.lds: $(LDSCRIPT) $(obj)include/u-boot.lst
+$(obj)u-boot.lds: $(LDSCRIPT)
 		$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 nand_spl:	$(TIMESTAMP_FILE) $(VERSION_FILE) depend
@@ -831,7 +825,6 @@ clean:
 	       $(obj)board/matrix_vision/*/bootscript.img		  \
 	       $(obj)board/voiceblue/eeprom 				  \
 	       $(obj)u-boot.lds						  \
-	       $(obj)include/u-boot.lst			  		  \
 	       $(obj)arch/blackfin/cpu/bootrom-asm-offsets.[chs]	  \
 	       $(obj)arch/blackfin/cpu/init.{lds,elf}
 	@rm -f $(obj)include/bmp_logo.h
@@ -869,7 +862,7 @@ clobber:	tidy
 	@rm -f $(obj)nand_spl/{u-boot.{lds,lst},System.map}
 	@rm -f $(obj)nand_spl/{u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map}
 	@rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map}
-	@rm -f $(obj)spl/{u-boot-spl.lds,u-boot.lst}
+	@rm -f $(obj)spl/u-boot-spl.lds
 	@rm -f $(obj)MLO MLO.byteswap
 	@rm -f $(obj)SPL
 	@rm -f $(obj)tools/xway-swap-bytes
diff --git a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
index 008ae89..c19285d 100644
--- a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
+++ b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
@@ -51,7 +51,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/armv7/am33xx/u-boot-spl.lds b/arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
index 1c3deef..69f6d48 100644
--- a/arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
+++ b/arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
@@ -49,7 +49,7 @@ SECTIONS
 	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	} >.sram
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/ixp/u-boot.lds b/arch/arm/cpu/ixp/u-boot.lds
index bba91d5..5e66dd1 100644
--- a/arch/arm/cpu/ixp/u-boot.lds
+++ b/arch/arm/cpu/ixp/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
index e1bc8e7..d4ad352 100644
--- a/arch/arm/cpu/u-boot.lds
+++ b/arch/arm/cpu/u-boot.lds
@@ -52,7 +52,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/avr32/cpu/u-boot.lds b/arch/avr32/cpu/u-boot.lds
index 0b16d2a..4a3fc2a 100644
--- a/arch/avr32/cpu/u-boot.lds
+++ b/arch/avr32/cpu/u-boot.lds
@@ -50,7 +50,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/blackfin/cpu/u-boot.lds b/arch/blackfin/cpu/u-boot.lds
index 58db838..77f48c1 100644
--- a/arch/blackfin/cpu/u-boot.lds
+++ b/arch/blackfin/cpu/u-boot.lds
@@ -114,7 +114,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	} >ram_data
 
 	.text_l1 :
diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
index fe3d97d..1ae4184 100644
--- a/arch/microblaze/cpu/u-boot.lds
+++ b/arch/microblaze/cpu/u-boot.lds
@@ -54,7 +54,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	.bss ALIGN(0x4):
diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds
index 10513ab..ca18d46 100644
--- a/arch/mips/cpu/u-boot.lds
+++ b/arch/mips/cpu/u-boot.lds
@@ -64,7 +64,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/nds32/cpu/n1213/u-boot.lds b/arch/nds32/cpu/n1213/u-boot.lds
index cef19c5..5790948 100644
--- a/arch/nds32/cpu/n1213/u-boot.lds
+++ b/arch/nds32/cpu/n1213/u-boot.lds
@@ -55,7 +55,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/arch/nios2/cpu/u-boot.lds b/arch/nios2/cpu/u-boot.lds
index d0eb80d..f937396 100644
--- a/arch/nios2/cpu/u-boot.lds
+++ b/arch/nios2/cpu/u-boot.lds
@@ -48,7 +48,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	/* INIT DATA sections - "Small" data (see the gcc -G option)
diff --git a/arch/powerpc/cpu/74xx_7xx/u-boot.lds b/arch/powerpc/cpu/74xx_7xx/u-boot.lds
index ecee439..c58d979 100644
--- a/arch/powerpc/cpu/74xx_7xx/u-boot.lds
+++ b/arch/powerpc/cpu/74xx_7xx/u-boot.lds
@@ -65,7 +65,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc512x/u-boot.lds b/arch/powerpc/cpu/mpc512x/u-boot.lds
index 7faefba..a34501b 100644
--- a/arch/powerpc/cpu/mpc512x/u-boot.lds
+++ b/arch/powerpc/cpu/mpc512x/u-boot.lds
@@ -60,7 +60,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc5xx/u-boot.lds b/arch/powerpc/cpu/mpc5xx/u-boot.lds
index c91e146..0d87c8c 100644
--- a/arch/powerpc/cpu/mpc5xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc5xx/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds b/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
index ac7844d..cdb36c0 100644
--- a/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
+++ b/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
@@ -68,7 +68,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/mpc5xxx/u-boot.lds b/arch/powerpc/cpu/mpc5xxx/u-boot.lds
index 1f46ead..6bd646b 100644
--- a/arch/powerpc/cpu/mpc5xxx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc5xxx/u-boot.lds
@@ -63,7 +63,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc8220/u-boot.lds b/arch/powerpc/cpu/mpc8220/u-boot.lds
index c147954..6e9967c 100644
--- a/arch/powerpc/cpu/mpc8220/u-boot.lds
+++ b/arch/powerpc/cpu/mpc8220/u-boot.lds
@@ -62,7 +62,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc824x/u-boot.lds b/arch/powerpc/cpu/mpc824x/u-boot.lds
index a713012..699fb85 100644
--- a/arch/powerpc/cpu/mpc824x/u-boot.lds
+++ b/arch/powerpc/cpu/mpc824x/u-boot.lds
@@ -63,7 +63,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc8260/u-boot.lds b/arch/powerpc/cpu/mpc8260/u-boot.lds
index 42385fc..2709f37 100644
--- a/arch/powerpc/cpu/mpc8260/u-boot.lds
+++ b/arch/powerpc/cpu/mpc8260/u-boot.lds
@@ -62,7 +62,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc83xx/u-boot.lds b/arch/powerpc/cpu/mpc83xx/u-boot.lds
index d699def..905823c 100644
--- a/arch/powerpc/cpu/mpc83xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc83xx/u-boot.lds
@@ -61,7 +61,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
index f7c4a22..3bb7572 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
@@ -72,7 +72,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds b/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
index 46dbaed..87522b8 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
@@ -54,7 +54,7 @@ SECTIONS
 	_edata  =  .;
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(8);
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot.lds b/arch/powerpc/cpu/mpc85xx/u-boot.lds
index 4a40a1f..8c6e66e 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot.lds
@@ -80,7 +80,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/mpc86xx/u-boot.lds b/arch/powerpc/cpu/mpc86xx/u-boot.lds
index 8bfadf2..81804e3 100644
--- a/arch/powerpc/cpu/mpc86xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc86xx/u-boot.lds
@@ -67,7 +67,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/arch/powerpc/cpu/ppc4xx/u-boot.lds b/arch/powerpc/cpu/ppc4xx/u-boot.lds
index a96ddd5..2cadcc9 100644
--- a/arch/powerpc/cpu/ppc4xx/u-boot.lds
+++ b/arch/powerpc/cpu/ppc4xx/u-boot.lds
@@ -81,7 +81,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/arch/sandbox/cpu/u-boot.lds b/arch/sandbox/cpu/u-boot.lds
index 1b781eb..94c26f1 100644
--- a/arch/sandbox/cpu/u-boot.lds
+++ b/arch/sandbox/cpu/u-boot.lds
@@ -27,7 +27,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	__u_boot_sandbox_option_start = .;
diff --git a/arch/sh/cpu/sh2/u-boot.lds b/arch/sh/cpu/sh2/u-boot.lds
index 17f8091..9bf1d85 100644
--- a/arch/sh/cpu/sh2/u-boot.lds
+++ b/arch/sh/cpu/sh2/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/arch/sh/cpu/sh3/u-boot.lds b/arch/sh/cpu/sh3/u-boot.lds
index c831961..29352ad 100644
--- a/arch/sh/cpu/sh3/u-boot.lds
+++ b/arch/sh/cpu/sh3/u-boot.lds
@@ -80,7 +80,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/arch/sh/cpu/sh4/u-boot.lds b/arch/sh/cpu/sh4/u-boot.lds
index 0ecafcf..cf3da0d 100644
--- a/arch/sh/cpu/sh4/u-boot.lds
+++ b/arch/sh/cpu/sh4/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/arch/x86/cpu/u-boot.lds b/arch/x86/cpu/u-boot.lds
index 2313cd7..e2c5627 100644
--- a/arch/x86/cpu/u-boot.lds
+++ b/arch/x86/cpu/u-boot.lds
@@ -36,7 +36,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/board/BuS/eb_cpu5282/u-boot.lds b/board/BuS/eb_cpu5282/u-boot.lds
index 0c92d31..43bd9b7 100644
--- a/board/BuS/eb_cpu5282/u-boot.lds
+++ b/board/BuS/eb_cpu5282/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/LEOX/elpt860/u-boot.lds b/board/LEOX/elpt860/u-boot.lds
index 2bb876d..3ff3871 100644
--- a/board/LEOX/elpt860/u-boot.lds
+++ b/board/LEOX/elpt860/u-boot.lds
@@ -89,7 +89,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/RPXClassic/u-boot.lds b/board/RPXClassic/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/RPXClassic/u-boot.lds
+++ b/board/RPXClassic/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/RPXClassic/u-boot.lds.debug b/board/RPXClassic/u-boot.lds.debug
index dc8c4e9..e88bd97 100644
--- a/board/RPXClassic/u-boot.lds.debug
+++ b/board/RPXClassic/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/RPXlite/u-boot.lds b/board/RPXlite/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/RPXlite/u-boot.lds
+++ b/board/RPXlite/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/RPXlite/u-boot.lds.debug b/board/RPXlite/u-boot.lds.debug
index dc8c4e9..e88bd97 100644
--- a/board/RPXlite/u-boot.lds.debug
+++ b/board/RPXlite/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/RPXlite_dw/u-boot.lds b/board/RPXlite_dw/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/RPXlite_dw/u-boot.lds
+++ b/board/RPXlite_dw/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/RPXlite_dw/u-boot.lds.debug b/board/RPXlite_dw/u-boot.lds.debug
index b43a1e4..88c410c 100644
--- a/board/RPXlite_dw/u-boot.lds.debug
+++ b/board/RPXlite_dw/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/RRvision/u-boot.lds b/board/RRvision/u-boot.lds
index 748e511..f9d2ec2 100644
--- a/board/RRvision/u-boot.lds
+++ b/board/RRvision/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/actux1/u-boot.lds b/board/actux1/u-boot.lds
index 572bcea..7cf5b46 100644
--- a/board/actux1/u-boot.lds
+++ b/board/actux1/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN (4);
diff --git a/board/actux2/u-boot.lds b/board/actux2/u-boot.lds
index 6272a10..e9b5547 100644
--- a/board/actux2/u-boot.lds
+++ b/board/actux2/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN (4);
diff --git a/board/actux3/u-boot.lds b/board/actux3/u-boot.lds
index 488e1e7..b79ea3c 100644
--- a/board/actux3/u-boot.lds
+++ b/board/actux3/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN (4);
diff --git a/board/adder/u-boot.lds b/board/adder/u-boot.lds
index 73e2f3f..5e0ed00 100644
--- a/board/adder/u-boot.lds
+++ b/board/adder/u-boot.lds
@@ -65,7 +65,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/altera/nios2-generic/u-boot.lds b/board/altera/nios2-generic/u-boot.lds
index 289386b..900fe65 100644
--- a/board/altera/nios2-generic/u-boot.lds
+++ b/board/altera/nios2-generic/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	/* INIT DATA sections - "Small" data (see the gcc -G option)
diff --git a/board/amcc/acadia/u-boot-nand.lds b/board/amcc/acadia/u-boot-nand.lds
index beba978..3861b67 100644
--- a/board/amcc/acadia/u-boot-nand.lds
+++ b/board/amcc/acadia/u-boot-nand.lds
@@ -74,7 +74,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/amcc/bamboo/u-boot-nand.lds b/board/amcc/bamboo/u-boot-nand.lds
index 2dd00d7..6308d49 100644
--- a/board/amcc/bamboo/u-boot-nand.lds
+++ b/board/amcc/bamboo/u-boot-nand.lds
@@ -75,7 +75,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/amcc/canyonlands/u-boot-nand.lds b/board/amcc/canyonlands/u-boot-nand.lds
index 8ac5116..5fc9062 100644
--- a/board/amcc/canyonlands/u-boot-nand.lds
+++ b/board/amcc/canyonlands/u-boot-nand.lds
@@ -75,7 +75,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/amcc/kilauea/u-boot-nand.lds b/board/amcc/kilauea/u-boot-nand.lds
index beba978..3861b67 100644
--- a/board/amcc/kilauea/u-boot-nand.lds
+++ b/board/amcc/kilauea/u-boot-nand.lds
@@ -74,7 +74,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/amcc/sequoia/u-boot-nand.lds b/board/amcc/sequoia/u-boot-nand.lds
index 18266ef..b4600de 100644
--- a/board/amcc/sequoia/u-boot-nand.lds
+++ b/board/amcc/sequoia/u-boot-nand.lds
@@ -75,7 +75,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/amcc/sequoia/u-boot-ram.lds b/board/amcc/sequoia/u-boot-ram.lds
index 6b02784..521d12a 100644
--- a/board/amcc/sequoia/u-boot-ram.lds
+++ b/board/amcc/sequoia/u-boot-ram.lds
@@ -66,7 +66,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/astro/mcf5373l/u-boot.lds b/board/astro/mcf5373l/u-boot.lds
index bc40fd6..5ee8fcc 100644
--- a/board/astro/mcf5373l/u-boot.lds
+++ b/board/astro/mcf5373l/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/cobra5272/u-boot.lds b/board/cobra5272/u-boot.lds
index d054f20..7421eec 100644
--- a/board/cobra5272/u-boot.lds
+++ b/board/cobra5272/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/cogent/u-boot.lds b/board/cogent/u-boot.lds
index 2a6027f..357f59d 100644
--- a/board/cogent/u-boot.lds
+++ b/board/cogent/u-boot.lds
@@ -73,7 +73,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/cogent/u-boot.lds.debug b/board/cogent/u-boot.lds.debug
index dc8c4e9..e88bd97 100644
--- a/board/cogent/u-boot.lds.debug
+++ b/board/cogent/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/cray/L1/u-boot.lds.debug b/board/cray/L1/u-boot.lds.debug
index d7a2e56..99cbed4 100644
--- a/board/cray/L1/u-boot.lds.debug
+++ b/board/cray/L1/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/dave/PPChameleonEVB/u-boot.lds b/board/dave/PPChameleonEVB/u-boot.lds
index 8a306d6..987b52d 100644
--- a/board/dave/PPChameleonEVB/u-boot.lds
+++ b/board/dave/PPChameleonEVB/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/dvlhost/u-boot.lds b/board/dvlhost/u-boot.lds
index 6dc26c8..eb83b6f 100644
--- a/board/dvlhost/u-boot.lds
+++ b/board/dvlhost/u-boot.lds
@@ -57,7 +57,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN (4);
diff --git a/board/eltec/mhpc/u-boot.lds b/board/eltec/mhpc/u-boot.lds
index c8d3894..bd74d74 100644
--- a/board/eltec/mhpc/u-boot.lds
+++ b/board/eltec/mhpc/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/eltec/mhpc/u-boot.lds.debug b/board/eltec/mhpc/u-boot.lds.debug
index 92796e6..614bbb2 100644
--- a/board/eltec/mhpc/u-boot.lds.debug
+++ b/board/eltec/mhpc/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/emk/top860/u-boot.lds b/board/emk/top860/u-boot.lds
index 22626d3..ea04eca 100644
--- a/board/emk/top860/u-boot.lds
+++ b/board/emk/top860/u-boot.lds
@@ -70,7 +70,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/ep88x/u-boot.lds b/board/ep88x/u-boot.lds
index 1dcc22a..e5fa63e 100644
--- a/board/ep88x/u-boot.lds
+++ b/board/ep88x/u-boot.lds
@@ -65,7 +65,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/esd/dasa_sim/u-boot.lds b/board/esd/dasa_sim/u-boot.lds
index 7eca183..cca527f 100644
--- a/board/esd/dasa_sim/u-boot.lds
+++ b/board/esd/dasa_sim/u-boot.lds
@@ -76,7 +76,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/esd/pmc440/u-boot-nand.lds b/board/esd/pmc440/u-boot-nand.lds
index ca7df45..4469b80 100644
--- a/board/esd/pmc440/u-boot-nand.lds
+++ b/board/esd/pmc440/u-boot-nand.lds
@@ -104,7 +104,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/esd/tasreg/u-boot.lds b/board/esd/tasreg/u-boot.lds
index 0d6a0f3..7642bba 100644
--- a/board/esd/tasreg/u-boot.lds
+++ b/board/esd/tasreg/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/esteem192e/u-boot.lds b/board/esteem192e/u-boot.lds
index fe5cf09..357a794 100644
--- a/board/esteem192e/u-boot.lds
+++ b/board/esteem192e/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/evb64260/u-boot.lds b/board/evb64260/u-boot.lds
index eac9c07..e2cfcfe 100644
--- a/board/evb64260/u-boot.lds
+++ b/board/evb64260/u-boot.lds
@@ -73,7 +73,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/fads/u-boot.lds b/board/fads/u-boot.lds
index 6022dbc..450103d 100644
--- a/board/fads/u-boot.lds
+++ b/board/fads/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/flagadm/u-boot.lds b/board/flagadm/u-boot.lds
index c8d3894..bd74d74 100644
--- a/board/flagadm/u-boot.lds
+++ b/board/flagadm/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/flagadm/u-boot.lds.debug b/board/flagadm/u-boot.lds.debug
index 92796e6..614bbb2 100644
--- a/board/flagadm/u-boot.lds.debug
+++ b/board/flagadm/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/freescale/m5208evbe/u-boot.lds b/board/freescale/m5208evbe/u-boot.lds
index 2c151f2..f3c9ed8 100644
--- a/board/freescale/m5208evbe/u-boot.lds
+++ b/board/freescale/m5208evbe/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m52277evb/u-boot.lds b/board/freescale/m52277evb/u-boot.lds
index dbd6f6a..ae0a48d 100644
--- a/board/freescale/m52277evb/u-boot.lds
+++ b/board/freescale/m52277evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5235evb/u-boot.lds b/board/freescale/m5235evb/u-boot.lds
index 00932ae..603858b 100644
--- a/board/freescale/m5235evb/u-boot.lds
+++ b/board/freescale/m5235evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5249evb/u-boot.lds b/board/freescale/m5249evb/u-boot.lds
index d054f20..7421eec 100644
--- a/board/freescale/m5249evb/u-boot.lds
+++ b/board/freescale/m5249evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5253demo/u-boot.lds b/board/freescale/m5253demo/u-boot.lds
index f8116f6..6838247 100644
--- a/board/freescale/m5253demo/u-boot.lds
+++ b/board/freescale/m5253demo/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5253evbe/u-boot.lds b/board/freescale/m5253evbe/u-boot.lds
index d054f20..7421eec 100644
--- a/board/freescale/m5253evbe/u-boot.lds
+++ b/board/freescale/m5253evbe/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5271evb/u-boot.lds b/board/freescale/m5271evb/u-boot.lds
index 133ec01..e222e80 100644
--- a/board/freescale/m5271evb/u-boot.lds
+++ b/board/freescale/m5271evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5272c3/u-boot.lds b/board/freescale/m5272c3/u-boot.lds
index d054f20..7421eec 100644
--- a/board/freescale/m5272c3/u-boot.lds
+++ b/board/freescale/m5272c3/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5275evb/u-boot.lds b/board/freescale/m5275evb/u-boot.lds
index fc68de1..c18758a 100644
--- a/board/freescale/m5275evb/u-boot.lds
+++ b/board/freescale/m5275evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5282evb/u-boot.lds b/board/freescale/m5282evb/u-boot.lds
index ad49874..20f6c47 100644
--- a/board/freescale/m5282evb/u-boot.lds
+++ b/board/freescale/m5282evb/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m53017evb/u-boot.lds b/board/freescale/m53017evb/u-boot.lds
index d25a36f..15dfa7d 100644
--- a/board/freescale/m53017evb/u-boot.lds
+++ b/board/freescale/m53017evb/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5329evb/u-boot.lds b/board/freescale/m5329evb/u-boot.lds
index 6616594..5013ff4 100644
--- a/board/freescale/m5329evb/u-boot.lds
+++ b/board/freescale/m5329evb/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m5373evb/u-boot.lds b/board/freescale/m5373evb/u-boot.lds
index bc40fd6..5ee8fcc 100644
--- a/board/freescale/m5373evb/u-boot.lds
+++ b/board/freescale/m5373evb/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m54418twr/u-boot.lds b/board/freescale/m54418twr/u-boot.lds
index 36a4c26..2df386b 100644
--- a/board/freescale/m54418twr/u-boot.lds
+++ b/board/freescale/m54418twr/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m54451evb/u-boot.lds b/board/freescale/m54451evb/u-boot.lds
index 91328a4..4440d61 100644
--- a/board/freescale/m54451evb/u-boot.lds
+++ b/board/freescale/m54451evb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m54455evb/u-boot.lds b/board/freescale/m54455evb/u-boot.lds
index 36a4c26..2df386b 100644
--- a/board/freescale/m54455evb/u-boot.lds
+++ b/board/freescale/m54455evb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m547xevb/u-boot.lds b/board/freescale/m547xevb/u-boot.lds
index de4d0eb..269bf8a 100644
--- a/board/freescale/m547xevb/u-boot.lds
+++ b/board/freescale/m547xevb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/m548xevb/u-boot.lds b/board/freescale/m548xevb/u-boot.lds
index fbbe0c5..68bdad4 100644
--- a/board/freescale/m548xevb/u-boot.lds
+++ b/board/freescale/m548xevb/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/freescale/mx31ads/u-boot.lds b/board/freescale/mx31ads/u-boot.lds
index 12d7c12..2d08fea 100644
--- a/board/freescale/mx31ads/u-boot.lds
+++ b/board/freescale/mx31ads/u-boot.lds
@@ -60,7 +60,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = ALIGN(4);
diff --git a/board/gaisler/gr_cpci_ax2000/u-boot.lds b/board/gaisler/gr_cpci_ax2000/u-boot.lds
index 774c494..dac87db 100644
--- a/board/gaisler/gr_cpci_ax2000/u-boot.lds
+++ b/board/gaisler/gr_cpci_ax2000/u-boot.lds
@@ -88,7 +88,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	.data	:
diff --git a/board/gaisler/gr_ep2s60/u-boot.lds b/board/gaisler/gr_ep2s60/u-boot.lds
index f6d1301..78e0e2d 100644
--- a/board/gaisler/gr_ep2s60/u-boot.lds
+++ b/board/gaisler/gr_ep2s60/u-boot.lds
@@ -88,7 +88,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	.data	:
diff --git a/board/gaisler/gr_xc3s_1500/u-boot.lds b/board/gaisler/gr_xc3s_1500/u-boot.lds
index 7df6e83..87ea473 100644
--- a/board/gaisler/gr_xc3s_1500/u-boot.lds
+++ b/board/gaisler/gr_xc3s_1500/u-boot.lds
@@ -88,7 +88,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	.data	:
diff --git a/board/gaisler/grsim/u-boot.lds b/board/gaisler/grsim/u-boot.lds
index b241cbc..e854a16 100644
--- a/board/gaisler/grsim/u-boot.lds
+++ b/board/gaisler/grsim/u-boot.lds
@@ -87,7 +87,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	.data	:
diff --git a/board/gaisler/grsim_leon2/u-boot.lds b/board/gaisler/grsim_leon2/u-boot.lds
index 63c15b9..f247e56 100644
--- a/board/gaisler/grsim_leon2/u-boot.lds
+++ b/board/gaisler/grsim_leon2/u-boot.lds
@@ -87,7 +87,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	.data	:
diff --git a/board/gen860t/u-boot-flashenv.lds b/board/gen860t/u-boot-flashenv.lds
index 1cbe7e3..b061441 100644
--- a/board/gen860t/u-boot-flashenv.lds
+++ b/board/gen860t/u-boot-flashenv.lds
@@ -73,7 +73,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-		#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/gen860t/u-boot.lds b/board/gen860t/u-boot.lds
index dd89c70..9e9449d 100644
--- a/board/gen860t/u-boot.lds
+++ b/board/gen860t/u-boot.lds
@@ -74,7 +74,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/genietv/u-boot.lds b/board/genietv/u-boot.lds
index 124b183..958dd84 100644
--- a/board/genietv/u-boot.lds
+++ b/board/genietv/u-boot.lds
@@ -83,7 +83,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/genietv/u-boot.lds.debug b/board/genietv/u-boot.lds.debug
index e1cf249..a3aeb60 100644
--- a/board/genietv/u-boot.lds.debug
+++ b/board/genietv/u-boot.lds.debug
@@ -110,7 +110,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/hermes/u-boot.lds b/board/hermes/u-boot.lds
index f02eb1c..b2bb50d 100644
--- a/board/hermes/u-boot.lds
+++ b/board/hermes/u-boot.lds
@@ -75,7 +75,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/hermes/u-boot.lds.debug b/board/hermes/u-boot.lds.debug
index e84cc79..4383c49 100644
--- a/board/hermes/u-boot.lds.debug
+++ b/board/hermes/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/hymod/u-boot.lds b/board/hymod/u-boot.lds
index 7afae0a..3133c55 100644
--- a/board/hymod/u-boot.lds
+++ b/board/hymod/u-boot.lds
@@ -113,7 +113,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/hymod/u-boot.lds.debug b/board/hymod/u-boot.lds.debug
index dc8c4e9..e88bd97 100644
--- a/board/hymod/u-boot.lds.debug
+++ b/board/hymod/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/icu862/u-boot.lds b/board/icu862/u-boot.lds
index 6778eb1..40f4a38 100644
--- a/board/icu862/u-boot.lds
+++ b/board/icu862/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/icu862/u-boot.lds.debug b/board/icu862/u-boot.lds.debug
index 3e075a8..9995288 100644
--- a/board/icu862/u-boot.lds.debug
+++ b/board/icu862/u-boot.lds.debug
@@ -110,7 +110,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/idmr/u-boot.lds b/board/idmr/u-boot.lds
index 0d6a0f3..6d13831 100644
--- a/board/idmr/u-boot.lds
+++ b/board/idmr/u-boot.lds
@@ -68,7 +68,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/ip860/u-boot.lds b/board/ip860/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/ip860/u-boot.lds
+++ b/board/ip860/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/ip860/u-boot.lds.debug b/board/ip860/u-boot.lds.debug
index e47aff0..0b34177 100644
--- a/board/ip860/u-boot.lds.debug
+++ b/board/ip860/u-boot.lds.debug
@@ -110,7 +110,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/ivm/u-boot.lds b/board/ivm/u-boot.lds
index 4cca652..dcd53ec 100644
--- a/board/ivm/u-boot.lds
+++ b/board/ivm/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/ivm/u-boot.lds.debug b/board/ivm/u-boot.lds.debug
index 53a19b2..bae9fb2 100644
--- a/board/ivm/u-boot.lds.debug
+++ b/board/ivm/u-boot.lds.debug
@@ -110,7 +110,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/korat/u-boot-F7FC.lds b/board/korat/u-boot-F7FC.lds
index 033cff4..b6fa79f 100644
--- a/board/korat/u-boot-F7FC.lds
+++ b/board/korat/u-boot-F7FC.lds
@@ -110,7 +110,7 @@ SECTIONS
   . = .;
 
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/kup/kup4k/u-boot.lds b/board/kup/kup4k/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/kup/kup4k/u-boot.lds
+++ b/board/kup/kup4k/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/kup/kup4k/u-boot.lds.debug b/board/kup/kup4k/u-boot.lds.debug
index b43a1e4..88c410c 100644
--- a/board/kup/kup4k/u-boot.lds.debug
+++ b/board/kup/kup4k/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/kup/kup4x/u-boot.lds b/board/kup/kup4x/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/kup/kup4x/u-boot.lds
+++ b/board/kup/kup4x/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/kup/kup4x/u-boot.lds.debug b/board/kup/kup4x/u-boot.lds.debug
index b43a1e4..88c410c 100644
--- a/board/kup/kup4x/u-boot.lds.debug
+++ b/board/kup/kup4x/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/lwmon/u-boot.lds b/board/lwmon/u-boot.lds
index bc71b0d..30523dc 100644
--- a/board/lwmon/u-boot.lds
+++ b/board/lwmon/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/lwmon/u-boot.lds.debug b/board/lwmon/u-boot.lds.debug
index 0a3e646..1d1b76a 100644
--- a/board/lwmon/u-boot.lds.debug
+++ b/board/lwmon/u-boot.lds.debug
@@ -110,7 +110,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/manroland/uc100/u-boot.lds b/board/manroland/uc100/u-boot.lds
index e32ae37..8c75dea 100644
--- a/board/manroland/uc100/u-boot.lds
+++ b/board/manroland/uc100/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/matrix_vision/mvsmr/u-boot.lds b/board/matrix_vision/mvsmr/u-boot.lds
index 5a3a9ea..5707770 100644
--- a/board/matrix_vision/mvsmr/u-boot.lds
+++ b/board/matrix_vision/mvsmr/u-boot.lds
@@ -77,7 +77,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/mbx8xx/u-boot.lds b/board/mbx8xx/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/mbx8xx/u-boot.lds
+++ b/board/mbx8xx/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/mbx8xx/u-boot.lds.debug b/board/mbx8xx/u-boot.lds.debug
index 4155b60..063f2cc 100644
--- a/board/mbx8xx/u-boot.lds.debug
+++ b/board/mbx8xx/u-boot.lds.debug
@@ -110,7 +110,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/mousse/u-boot.lds b/board/mousse/u-boot.lds
index 43f91f1..080829b 100644
--- a/board/mousse/u-boot.lds
+++ b/board/mousse/u-boot.lds
@@ -63,7 +63,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/mpl/pip405/u-boot.lds.debug b/board/mpl/pip405/u-boot.lds.debug
index d7a2e56..99cbed4 100644
--- a/board/mpl/pip405/u-boot.lds.debug
+++ b/board/mpl/pip405/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/mvblue/u-boot.lds b/board/mvblue/u-boot.lds
index c378564..e186ee6 100644
--- a/board/mvblue/u-boot.lds
+++ b/board/mvblue/u-boot.lds
@@ -73,7 +73,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netphone/u-boot.lds b/board/netphone/u-boot.lds
index cdc1fda..ddb5a72 100644
--- a/board/netphone/u-boot.lds
+++ b/board/netphone/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netphone/u-boot.lds.debug b/board/netphone/u-boot.lds.debug
index 900da64..e1fe052 100644
--- a/board/netphone/u-boot.lds.debug
+++ b/board/netphone/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netta/u-boot.lds b/board/netta/u-boot.lds
index cdc1fda..ddb5a72 100644
--- a/board/netta/u-boot.lds
+++ b/board/netta/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netta/u-boot.lds.debug b/board/netta/u-boot.lds.debug
index 900da64..e1fe052 100644
--- a/board/netta/u-boot.lds.debug
+++ b/board/netta/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netta2/u-boot.lds b/board/netta2/u-boot.lds
index cdc1fda..ddb5a72 100644
--- a/board/netta2/u-boot.lds
+++ b/board/netta2/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netta2/u-boot.lds.debug b/board/netta2/u-boot.lds.debug
index 900da64..e1fe052 100644
--- a/board/netta2/u-boot.lds.debug
+++ b/board/netta2/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netvia/u-boot.lds b/board/netvia/u-boot.lds
index cdc1fda..ddb5a72 100644
--- a/board/netvia/u-boot.lds
+++ b/board/netvia/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/netvia/u-boot.lds.debug b/board/netvia/u-boot.lds.debug
index 6cbf4dc..3243fc0 100644
--- a/board/netvia/u-boot.lds.debug
+++ b/board/netvia/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/nx823/u-boot.lds b/board/nx823/u-boot.lds
index c8d3894..bd74d74 100644
--- a/board/nx823/u-boot.lds
+++ b/board/nx823/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/nx823/u-boot.lds.debug b/board/nx823/u-boot.lds.debug
index 92796e6..614bbb2 100644
--- a/board/nx823/u-boot.lds.debug
+++ b/board/nx823/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/openrisc/openrisc-generic/u-boot.lds b/board/openrisc/openrisc-generic/u-boot.lds
index 4cffacb..9024f30 100644
--- a/board/openrisc/openrisc-generic/u-boot.lds
+++ b/board/openrisc/openrisc-generic/u-boot.lds
@@ -29,7 +29,7 @@ SECTIONS
 
 	 . = ALIGN(4);
 	 .u_boot_list : {
-	#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	 }
 
 	.rodata : {
diff --git a/board/quantum/u-boot.lds b/board/quantum/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/quantum/u-boot.lds
+++ b/board/quantum/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/r360mpi/u-boot.lds b/board/r360mpi/u-boot.lds
index 3ef0d9e..9262aa5 100644
--- a/board/r360mpi/u-boot.lds
+++ b/board/r360mpi/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/rbc823/u-boot.lds b/board/rbc823/u-boot.lds
index a86b568..c6560c6 100644
--- a/board/rbc823/u-boot.lds
+++ b/board/rbc823/u-boot.lds
@@ -80,7 +80,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
   . = .;
diff --git a/board/renesas/sh7752evb/u-boot.lds b/board/renesas/sh7752evb/u-boot.lds
index 28449b6..5bbb63f 100644
--- a/board/renesas/sh7752evb/u-boot.lds
+++ b/board/renesas/sh7752evb/u-boot.lds
@@ -78,7 +78,7 @@ SECTIONS
 	PROVIDE (_egot = .);
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/board/renesas/sh7757lcr/u-boot.lds b/board/renesas/sh7757lcr/u-boot.lds
index cf406ce..0717d04 100644
--- a/board/renesas/sh7757lcr/u-boot.lds
+++ b/board/renesas/sh7757lcr/u-boot.lds
@@ -79,7 +79,7 @@ SECTIONS
 
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	PROVIDE (reloc_dst_end = .);
diff --git a/board/rsdproto/u-boot.lds b/board/rsdproto/u-boot.lds
index ff95029..4662546 100644
--- a/board/rsdproto/u-boot.lds
+++ b/board/rsdproto/u-boot.lds
@@ -100,7 +100,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/samsung/smdk5250/smdk5250-uboot-spl.lds b/board/samsung/smdk5250/smdk5250-uboot-spl.lds
index 951d8ce..4ef6a51 100644
--- a/board/samsung/smdk5250/smdk5250-uboot-spl.lds
+++ b/board/samsung/smdk5250/smdk5250-uboot-spl.lds
@@ -49,7 +49,7 @@ SECTIONS
 	. = ALIGN(4);
 
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	} >.sram
 	. = ALIGN(4);
 
diff --git a/board/samsung/smdk6400/u-boot-nand.lds b/board/samsung/smdk6400/u-boot-nand.lds
index fbb442a..ae32b16 100644
--- a/board/samsung/smdk6400/u-boot-nand.lds
+++ b/board/samsung/smdk6400/u-boot-nand.lds
@@ -50,7 +50,7 @@ SECTIONS
 
 	. = align(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		KEEP(*(SORT(.u_boot_list*)));
 	}
 
 	. = align(4);
diff --git a/board/sandburst/karef/u-boot.lds.debug b/board/sandburst/karef/u-boot.lds.debug
index 7a0757f..6b99f13 100644
--- a/board/sandburst/karef/u-boot.lds.debug
+++ b/board/sandburst/karef/u-boot.lds.debug
@@ -118,7 +118,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/sandburst/metrobox/u-boot.lds.debug b/board/sandburst/metrobox/u-boot.lds.debug
index 07bd6fe..0b4192e 100644
--- a/board/sandburst/metrobox/u-boot.lds.debug
+++ b/board/sandburst/metrobox/u-boot.lds.debug
@@ -118,7 +118,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/sandpoint/u-boot.lds b/board/sandpoint/u-boot.lds
index ae3afa1..ca13619 100644
--- a/board/sandpoint/u-boot.lds
+++ b/board/sandpoint/u-boot.lds
@@ -71,7 +71,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/sixnet/u-boot.lds b/board/sixnet/u-boot.lds
index 6cf7a01..fa4de9d 100644
--- a/board/sixnet/u-boot.lds
+++ b/board/sixnet/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/snmc/qs850/u-boot.lds b/board/snmc/qs850/u-boot.lds
index f57f8a0..5929335 100644
--- a/board/snmc/qs850/u-boot.lds
+++ b/board/snmc/qs850/u-boot.lds
@@ -72,7 +72,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/snmc/qs860t/u-boot.lds b/board/snmc/qs860t/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/snmc/qs860t/u-boot.lds
+++ b/board/snmc/qs860t/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/spc1920/u-boot.lds b/board/spc1920/u-boot.lds
index 18f962c..c2ec827 100644
--- a/board/spc1920/u-boot.lds
+++ b/board/spc1920/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/spd8xx/u-boot.lds b/board/spd8xx/u-boot.lds
index f69e39d..b2ad343 100644
--- a/board/spd8xx/u-boot.lds
+++ b/board/spd8xx/u-boot.lds
@@ -78,7 +78,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/spd8xx/u-boot.lds.debug b/board/spd8xx/u-boot.lds.debug
index 4155b60..063f2cc 100644
--- a/board/spd8xx/u-boot.lds.debug
+++ b/board/spd8xx/u-boot.lds.debug
@@ -110,7 +110,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/stx/stxxtc/u-boot.lds b/board/stx/stxxtc/u-boot.lds
index cdc1fda..ddb5a72 100644
--- a/board/stx/stxxtc/u-boot.lds
+++ b/board/stx/stxxtc/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/stx/stxxtc/u-boot.lds.debug b/board/stx/stxxtc/u-boot.lds.debug
index 900da64..e1fe052 100644
--- a/board/stx/stxxtc/u-boot.lds.debug
+++ b/board/stx/stxxtc/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/svm_sc8xx/u-boot.lds b/board/svm_sc8xx/u-boot.lds
index 1635875..ebfa890 100644
--- a/board/svm_sc8xx/u-boot.lds
+++ b/board/svm_sc8xx/u-boot.lds
@@ -86,7 +86,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/tqc/tqm8xx/u-boot.lds b/board/tqc/tqm8xx/u-boot.lds
index e1e1ccd..bab452c 100644
--- a/board/tqc/tqm8xx/u-boot.lds
+++ b/board/tqc/tqm8xx/u-boot.lds
@@ -82,7 +82,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/v37/u-boot.lds b/board/v37/u-boot.lds
index fd2d72e..9504fcd 100644
--- a/board/v37/u-boot.lds
+++ b/board/v37/u-boot.lds
@@ -69,7 +69,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/w7o/u-boot.lds.debug b/board/w7o/u-boot.lds.debug
index 2ce5a9a..18b7752 100644
--- a/board/w7o/u-boot.lds.debug
+++ b/board/w7o/u-boot.lds.debug
@@ -109,7 +109,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/board/xes/xpedite1000/u-boot.lds.debug b/board/xes/xpedite1000/u-boot.lds.debug
index c4e5706..c02581d 100644
--- a/board/xes/xpedite1000/u-boot.lds.debug
+++ b/board/xes/xpedite1000/u-boot.lds.debug
@@ -114,7 +114,7 @@ SECTIONS
 
   . = ALIGN(4);
   .u_boot_list : {
-	#include <u-boot.lst>
+	KEEP(*(SORT(.u_boot_list*)));
   }
 
 
diff --git a/common/cmd_help.c b/common/cmd_help.c
index f832a96..d9bdc4d 100644
--- a/common/cmd_help.c
+++ b/common/cmd_help.c
@@ -41,7 +41,7 @@ U_BOOT_CMD(
 );
 
 /* This does not use the U_BOOT_CMD macro as ? can't be used in symbol names */
-ll_entry_declare(cmd_tbl_t, question_mark, cmd, cmd) = {
+ll_entry_declare(cmd_tbl_t, question_mark, cmd) = {
 	"?",	CONFIG_SYS_MAXARGS,	1,	do_help,
 	"alias for 'help'",
 #ifdef  CONFIG_SYS_LONGHELP
diff --git a/config.mk b/config.mk
index b7cd481..bb5c69a 100644
--- a/config.mk
+++ b/config.mk
@@ -23,8 +23,6 @@
 
 #########################################################################
 
-include $(TOPDIR)/helper.mk
-
 ifeq ($(CURDIR),$(SRCTREE))
 dir :=
 else
diff --git a/doc/README.commands b/doc/README.commands
index 923418b..9eb3671 100644
--- a/doc/README.commands
+++ b/doc/README.commands
@@ -15,24 +15,22 @@ help:	 Long description. This is a string
 
 **** Behind the scene ******
 
-The structure created is named with a special prefix (__u_boot_list_cmd_)
-and placed by the linker in a special section.
+The structure created is named with a special prefix and placed by
+the linker in a special section using the linker lists mechanism
+(see include/linker_lists.h)
 
 This makes it possible for the final link to extract all commands
 compiled into any object code and construct a static array so the
-command can be found in an array starting at _u_boot_list_cmd__start.
+command array can be iterated over using the linker lists macros.
 
-To ensure that the linker does not discard these symbols when linking
-full U-Boot we generate a list of all the commands we have built (based
-on the sections mentioned above) and use that to force the linker to
-first enter the symbol as undefined in the output object so that there
-is then a need for the symbol to be kept (this is the UNDEF_SYM logic in
-the Makefile).
+The linker lists feature ensures that the linker does not discard
+these symbols when linking full U-Boot even though they are not
+referenced in the source code as such.
 
 If a new board is defined do not forget to define the command section
 by writing in u-boot.lds ($(TOPDIR)/board/boardname/u-boot.lds) these
 3 lines:
 
 	.u_boot_list : {
-	#include "u-boot.lst";
+		KEEP(*(SORT(.u_boot_list*)));
 	}
diff --git a/helper.mk b/helper.mk
deleted file mode 100644
index 79a1da0..0000000
--- a/helper.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (C) 2012 Marek Vasut <marex@denx.de>
-#
-# See file CREDITS for list of people who contributed to this
-# project.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-#########################################################################
-
-##
-# make_u_boot_list - Generate contents of u_boot_list section
-# 1:		The name of the resulting file (usually u-boot.lst)
-# 2:		Files to analyze for possible u_boot_list entries
-#
-# This function generates the contents of the u_boot_list section,
-# including all the border symbols for it's subsections. The operation
-# of this function is as follows, numbering goes per lines:
-#
-# 1) Dump the ELF header sections from all files supplied via $(2)
-# 2) Filter out all other stuff that does not belong into .u_boot_list
-#    section.
-# 3) Fix up the lines so that the resulting output is is in format
-#    ".u_boot_list.*".
-# 4) Remove the last .something$, since that only contains the name
-#    of the variable to be put into a subsection. This name is irelevant
-#    for generation of border symbols, thus of no interest, remove it.
-# 5) Take each line and for every dot "." in that line, print the whole
-#    line until that dot "." . This is important so that we have all
-#    parent border symbols generated as well.
-# 6) Load every line and firstly append "\a" at the end and print the
-#    line. Next, append "@" at the end and print the line. Finally,
-#    append "~" at the end of line. This will make sense in conjunction
-#    with 6) and 7).
-# 7) Sort the lines. It is imperative to use LC_COLLATE=C here because
-#    with this, the "\a" symbol is first and "~" symbol is last. Any
-#    other symbols fall inbetween. Symbols like "@", which marks the
-#    end of current line (representing current section) and ".", which
-#    means the line continues and thus represents subsection.
-# 8) With such ordering, all lines ending with "\a" will float at the
-#    begining of all lines with the same prefix. Thus it is easy to
-#    replace "\a" with __start and make it the __start border symbol.
-#    Very similarly for "~", which will be always at the bottom and so
-#    can be replaced by "__end" and made into the __end border symbol.
-#    Finally, every line ending with "@" symbol will be transformed
-#    into " *(SORT(${line}*)); " format, which in the linker parlance
-#    will allow it to trap all symbols relevant to the subsection.
-#
-define make_u_boot_list
-$(1): $(2)
-	$(OBJDUMP) -h $(2) | \
-	sed -n -e '/.*\.u_boot_list[^ ]\+/ ! {d;n}' \
-		-e 's/.*\(\.u_boot_list[^ ]\+\).*$$$$/\1/' \
-		-e 's/\.[^\.]\+$$$$//' \
-		-e ':s /^.\+$$$$/ { p;s/^\(.*\)\.[^\.]*$$$$/\1/;b s }' | \
-	sed -n -e 'h;s/$$$$/\a/p;g;s/$$$$/@/p;g;s/$$$$/~/p;' | \
-	LC_COLLATE=C sort -u | \
-	sed -n -e '/\a$$$$/ { s/\./_/g;s/\a$$$$/__start = .;/p; }'\
-		-e '/~$$$$/ { s/\./_/g;s/~$$$$/__end = .;/p; }'\
-		-e '/@$$$$/ { s/\(.*\)@$$$$/*(SORT(\1.*));/p }' > $(1)
-endef
diff --git a/include/command.h b/include/command.h
index 3785eb9..65692fd 100644
--- a/include/command.h
+++ b/include/command.h
@@ -175,7 +175,7 @@ int cmd_process(int flag, int argc, char * const argv[],
 					_usage, _help, NULL)
 
 #define U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, _comp) \
-	ll_entry_declare(cmd_tbl_t, _name, cmd, cmd) =			\
+	ll_entry_declare(cmd_tbl_t, _name, cmd) =			\
 		U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,	\
 						_usage, _help, _comp);
 
diff --git a/include/env_callback.h b/include/env_callback.h
index c583120..afdee28 100644
--- a/include/env_callback.h
+++ b/include/env_callback.h
@@ -76,7 +76,7 @@ void env_callback_init(ENTRY *var_entry);
 	}
 #else
 #define U_BOOT_ENV_CALLBACK(name, callback) \
-	ll_entry_declare(struct env_clbk_tbl, name, env_clbk, env_clbk) = \
+	ll_entry_declare(struct env_clbk_tbl, name, env_clbk) = \
 	{#name, callback}
 #endif
 
diff --git a/include/linker_lists.h b/include/linker_lists.h
index 0b405d7..6c28bf9 100644
--- a/include/linker_lists.h
+++ b/include/linker_lists.h
@@ -13,6 +13,96 @@
  * published by the Free Software Foundation; either version 2 of
  * the License, or (at your option) any later version.
  */
+
+/*
+ * There is no use in including this from ASM files, but that happens
+ * anyway, e.g. PPC kgdb.S includes command.h which incluse us.
+ * So just don't define anything when included from ASM.
+ */
+
+#if !defined(__ASSEMBLY__)
+
+/**
+ * A linker list is constructed by grouping together linker input
+ * sections, each containning one entry of the list. Each input section
+ * contains a constant initialized variable which holds the entry's
+ * content. Linker list input sections are constructed from the list
+ * and entry names, plus a prefix which allows grouping all lists
+ * together. Assuming _list and _entry are the list and entry names,
+ * then the corresponding input section name is
+ *
+ *   _u_boot_list + _2_ + @_list + _2_ + @_entry
+ *
+ * and the C variable name is
+ *
+ *   .u_boot_list_ + 2_ + @_list + _2_ + @_entry
+ *
+ * This ensures uniqueness for both input section and C variable name.
+ *
+ * Note that the names differ only in the first character, "." for the
+ * setion and "_" for the variable, so that the linker cannot confuse
+ * section and symbol names. From now on, both names will be referred
+ * to as
+ *
+ *   %u_boot_list_ + 2_ + @_list + _2_ + @_entry
+ *
+ * Entry variables need never be referred to directly.
+ *
+ * The naming scheme for input sections allows grouping all linker lists
+ * into a single linker output section and grouping all entries for a
+ * single list.
+ *
+ * Note the two '_2_' constant components in the names: their presence
+ * allows putting a start and end symbols around a list, by mapping
+ * these symbols to sections names with components "1" (before) and
+ * "3" (after) instead of "2" (within).
+ * Start and end symbols for a list can generally be defined as
+ *
+ *   %u_boot_list_2_ + @_list + _1_...
+ *   %u_boot_list_2_ + @_list + _3_...
+ *
+ * Start and end symbols for the whole of the linker lists area can be
+ * defined as
+ *
+ *   %u_boot_list_1_...
+ *   %u_boot_list_3_...
+ *
+ * Here is an example of the sorted sections which result from a list
+ * "array" made up of three entries : "first", "second" and "third",
+ * iterated at least once.
+ *
+ *   .u_boot_list_2_array_1
+ *   .u_boot_list_2_array_2_first
+ *   .u_boot_list_2_array_2_second
+ *   .u_boot_list_2_array_2_third
+ *   .u_boot_list_2_array_3
+ *
+ * If lists must be divided into sublists (e.g. for iterating only on
+ * part of a list), one can simply give the list a name of the form
+ * 'outer_2_inner', where 'outer' is the global list name and 'inner'
+ * is the sub-list name. Iterators for the whole list should use the
+ * global list name ("outer"); iterators for only a sub-list should use
+ * the full sub-list name ("outer_2_inner").
+ *
+ *  Here is an example of the sections generated from a global list
+ * named "drivers", two sub-lists named "i2c" and "pci", and iterators
+ * defined for the whole list and each sub-list:
+ *
+ *   %u_boot_list_2_drivers_1
+ *   %u_boot_list_2_drivers_2_i2c_1
+ *   %u_boot_list_2_drivers_2_i2c_2_first
+ *   %u_boot_list_2_drivers_2_i2c_2_first
+ *   %u_boot_list_2_drivers_2_i2c_2_second
+ *   %u_boot_list_2_drivers_2_i2c_2_third
+ *   %u_boot_list_2_drivers_2_i2c_3
+ *   %u_boot_list_2_drivers_2_pci_1
+ *   %u_boot_list_2_drivers_2_pci_2_first
+ *   %u_boot_list_2_drivers_2_pci_2_second
+ *   %u_boot_list_2_drivers_2_pci_2_third
+ *   %u_boot_list_2_drivers_2_pci_3
+ *   %u_boot_list_2_drivers_3
+ */
+
 #ifndef __LINKER_LISTS_H__
 #define __LINKER_LISTS_H__
 
@@ -20,43 +110,28 @@
  * ll_entry_declare() - Declare linker-generated array entry
  * @_type:	Data type of the entry
  * @_name:	Name of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
- *		(with underscores instead of dots, for name concatenation)
- * @_section_d:	Subsection of u_boot_list in which this entry is placed
- *		(with dots, for section concatenation)
+ * @_list:	name of the list. Should contain only characters allowed
+ *		in a C variable name!
  *
  * This macro declares a variable that is placed into a linker-generated
  * array. This is a basic building block for more advanced use of linker-
  * generated arrays. The user is expected to build their own macro wrapper
  * around this one.
  *
- * A variable declared using this macro must be compile-time initialized
- * and is as such placed into subsection of special section, .u_boot_list.
- * The subsection is specified by the _section_[u,d] parameter, see below.
- * The base name of the variable is _name, yet the actual variable is
- * declared as concatenation of
- *
- *   %_u_boot_list_ + @_section_u + _ + @_name
- *
- * which ensures name uniqueness. This variable shall never be refered
- * directly though.
+ * A variable declared using this macro must be compile-time initialized.
  *
  * Special precaution must be made when using this macro:
- * 1) The _type must not contain the "static" keyword, otherwise the entry
- *    is not generated.
  *
- * 2) The @_section_u and @_section_d variables must match, the only difference
- *    is that in @_section_u is every dot "." character present in @_section_d
- *    replaced by a single underscore "_" character in @_section_u. The actual
- *    purpose of these parameters is to select proper subsection in the global
- *    .u_boot_list section.
+ * 1) The _type must not contain the "static" keyword, otherwise the
+ *    entry is generated and can be iterated but is listed in the map
+ *    file and cannot be retrieved by name.
  *
- * 3) In case a section is declared that contains some array elements AND a
- *    subsection of this section is declared and contains some elements, it is
- *    imperative that the elements are of the same type.
+ * 2) In case a section is declared that contains some array elements AND
+ *    a subsection of this section is declared and contains some elements,
+ *    it is imperative that the elements are of the same type.
  *
  * 4) In case an outer section is declared that contains some array elements
- *    AND am inner subsection of this section is declared and contains some
+ *    AND an inner subsection of this section is declared and contains some
  *    elements, then when traversing the outer section, even the elements of
  *    the inner sections are present in the array.
  *
@@ -66,39 +141,71 @@
  *         .y = 4,
  * };
  */
-#define ll_entry_declare(_type, _name, _section_u, _section_d)		\
-	_type _u_boot_list_##_section_u##_##_name __attribute__((	\
-			unused,	aligned(4),				\
-			section(".u_boot_list."#_section_d"."#_name)))
+#define ll_entry_declare(_type, _name, _list)				\
+	_type _u_boot_list_2_##_list##_2_##_name __aligned(4)		\
+			__attribute__((unused,				\
+			section(".u_boot_list_2_"#_list"_2_"#_name)))
+
+/**
+ * We need a 0-byte-size type for iterator symbols, and the compiler
+ * does not allow defining objects of C type 'void'. Using an empty
+ * struct is allowed by the compiler, but causes gcc versions 4.4 and
+ * below to complain about aliasing. Therefore we use the next best
+ * thing: zero-sized arrays, which are both 0-byte-size and exempt from
+ * aliasing warnings.
+ */
 
 /**
  * ll_entry_start() - Point to first entry of linker-generated array
  * @_type:	Data type of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
- *		(with underscores instead of dots)
+ * @_list:	Name of the list in which this entry is placed
  *
  * This function returns (_type *) pointer to the very first entry of a
  * linker-generated array placed into subsection of .u_boot_list section
- * specified by _section_u argument.
+ * specified by _list argument.
+ *
+ * Since this macro defines an array start symbol, its leftmost index
+ * must be 2 and its rightmost index must be 1.
  *
  * Example:
  * struct my_sub_cmd *msc = ll_entry_start(struct my_sub_cmd, cmd_sub);
  */
-#define ll_entry_start(_type, _section_u)				\
-	({								\
-		extern _type _u_boot_list_##_section_u##__start;	\
-		_type *_ll_result = &_u_boot_list_##_section_u##__start;\
-		_ll_result;						\
-	})
+#define ll_entry_start(_type, _list)					\
+({									\
+	static char start[0] __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_2_"#_list"_1")));			\
+	(_type *)&start;						\
+})
 
 /**
- * ll_entry_count() - Return the number of elements in linker-generated array
+ * ll_entry_end() - Point after last entry of linker-generated array
  * @_type:	Data type of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
+ * @_list:	Name of the list in which this entry is placed
  *		(with underscores instead of dots)
  *
+ * This function returns (_type *) pointer after the very last entry of
+ * a linker-generated array placed into subsection of .u_boot_list
+ * section specified by _list argument.
+ *
+ * Since this macro defines an array end symbol, its leftmost index
+ * must be 2 and its rightmost index must be 3.
+ *
+ * Example:
+ * struct my_sub_cmd *msc = ll_entry_end(struct my_sub_cmd, cmd_sub);
+ */
+#define ll_entry_end(_type, _list)					\
+({									\
+	static char end[0] __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_2_"#_list"_3")));			\
+	(_type *)&end;							\
+})
+/**
+ * ll_entry_count() - Return the number of elements in linker-generated array
+ * @_type:	Data type of the entry
+ * @_list:	Name of the list of which the number of elements is computed
+ *
  * This function returns the number of elements of a linker-generated array
- * placed into subsection of .u_boot_list section specified by _section_u
+ * placed into subsection of .u_boot_list section specified by _list
  * argument. The result is of an unsigned int type.
  *
  * Example:
@@ -108,23 +215,19 @@
  * for (i = 0; i < count; i++, msc++)
  *         printf("Entry %i, x=%i y=%i\n", i, msc->x, msc->y);
  */
-#define ll_entry_count(_type, _section_u)				\
+#define ll_entry_count(_type, _list)					\
 	({								\
-		extern _type _u_boot_list_##_section_u##__start;	\
-		extern _type _u_boot_list_##_section_u##__end;		\
-		unsigned int _ll_result =				\
-			&_u_boot_list_##_section_u##__end -		\
-			&_u_boot_list_##_section_u##__start;		\
+		_type *start = ll_entry_start(_type, _list);		\
+		_type *end = ll_entry_end(_type, _list);		\
+		unsigned int _ll_result = end - start;			\
 		_ll_result;						\
 	})
 
-
 /**
  * ll_entry_get() - Retrieve entry from linker-generated array by name
  * @_type:	Data type of the entry
  * @_name:	Name of the entry
- * @_section_u:	Subsection of u_boot_list in which this entry is placed
- *		(with underscores instead of dots)
+ * @_list:	Name of the list in which this entry is placed
  *
  * This function returns a pointer to a particular entry in LG-array
  * identified by the subsection of u_boot_list where the entry resides
@@ -138,11 +241,54 @@
  * ...
  * struct my_sub_cmd *c = ll_entry_get(struct my_sub_cmd, my_sub_cmd, cmd_sub);
  */
-#define ll_entry_get(_type, _name, _section_u)				\
+#define ll_entry_get(_type, _name, _list)				\
 	({								\
-		extern _type _u_boot_list_##_section_u##_##_name;	\
-		_type *_ll_result = &_u_boot_list_##_section_u##_##_name;\
+		extern _type _u_boot_list_2_##_list##_2_##_name;	\
+		_type *_ll_result =					\
+			&_u_boot_list_2_##_list##_2_##_name;	\
 		_ll_result;						\
 	})
 
+/**
+ * ll_start() - Point to first entry of first linker-generated array
+ * @_type:	Data type of the entry
+ *
+ * This function returns (_type *) pointer to the very first entry of
+ * the very first linker-generated array.
+ *
+ * Since this macro defines the start of the linker-generated arrays,
+ * its leftmost index must be 1.
+ *
+ * Example:
+ * struct my_sub_cmd *msc = ll_start(struct my_sub_cmd);
+ */
+#define ll_start(_type)							\
+({									\
+	static char start[0] __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_1")));				\
+	(_type *)&start;						\
+})
+
+/**
+ * ll_entry_end() - Point after last entry of last linker-generated array
+ * @_type:	Data type of the entry
+ *
+ * This function returns (_type *) pointer after the very last entry of
+ * the very last linker-generated array.
+ *
+ * Since this macro defines the end of the linker-generated arrays,
+ * its leftmost index must be 3.
+ *
+ * Example:
+ * struct my_sub_cmd *msc = ll_end(struct my_sub_cmd);
+ */
+#define ll_end(_type)							\
+({									\
+	static char end[0] __aligned(4) __attribute__((unused,	\
+		section(".u_boot_list_3")));				\
+	(_type *)&end;							\
+})
+
+#endif /* __ASSEMBLY__ */
+
 #endif	/* __LINKER_LISTS_H__ */
diff --git a/nand_spl/board/freescale/mpc8536ds/Makefile b/nand_spl/board/freescale/mpc8536ds/Makefile
index 9c77826..3a2a2d4 100644
--- a/nand_spl/board/freescale/mpc8536ds/Makefile
+++ b/nand_spl/board/freescale/mpc8536ds/Makefile
@@ -32,7 +32,6 @@ include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
 		$(LDFLAGS) $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_NAND_SPL
@@ -62,11 +61,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mpc8569mds/Makefile b/nand_spl/board/freescale/mpc8569mds/Makefile
index 9c77826..3a2a2d4 100644
--- a/nand_spl/board/freescale/mpc8569mds/Makefile
+++ b/nand_spl/board/freescale/mpc8569mds/Makefile
@@ -32,7 +32,6 @@ include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
 		$(LDFLAGS) $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_NAND_SPL
@@ -62,11 +61,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mpc8572ds/Makefile b/nand_spl/board/freescale/mpc8572ds/Makefile
index 9c77826..3a2a2d4 100644
--- a/nand_spl/board/freescale/mpc8572ds/Makefile
+++ b/nand_spl/board/freescale/mpc8572ds/Makefile
@@ -32,7 +32,6 @@ include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
 		$(LDFLAGS) $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_NAND_SPL
@@ -62,11 +61,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mx31pdk/Makefile b/nand_spl/board/freescale/mx31pdk/Makefile
index fd0dfc1..3d57059 100644
--- a/nand_spl/board/freescale/mx31pdk/Makefile
+++ b/nand_spl/board/freescale/mx31pdk/Makefile
@@ -6,7 +6,6 @@ include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
 	   $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
@@ -38,11 +37,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $@
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/mx31pdk/u-boot.lds b/nand_spl/board/freescale/mx31pdk/u-boot.lds
index a26110f..0656176 100644
--- a/nand_spl/board/freescale/mx31pdk/u-boot.lds
+++ b/nand_spl/board/freescale/mx31pdk/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-		#include <u-boot.lst>
+		*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/nand_spl/board/freescale/p1010rdb/Makefile b/nand_spl/board/freescale/p1010rdb/Makefile
index c3495ec..f7bdf92 100644
--- a/nand_spl/board/freescale/p1010rdb/Makefile
+++ b/nand_spl/board/freescale/p1010rdb/Makefile
@@ -32,7 +32,6 @@ include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) $(LDFLAGS) \
 	   $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_NAND_SPL
@@ -62,11 +61,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)board/$(BOARDDIR) \
 		 -ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/p1023rds/Makefile b/nand_spl/board/freescale/p1023rds/Makefile
index 9b2c0d7..fb7d561 100644
--- a/nand_spl/board/freescale/p1023rds/Makefile
+++ b/nand_spl/board/freescale/p1023rds/Makefile
@@ -27,7 +27,6 @@ include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
 		$(LDFLAGS) $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_NAND_SPL
@@ -57,11 +56,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/freescale/p1_p2_rdb/Makefile b/nand_spl/board/freescale/p1_p2_rdb/Makefile
index 9c77826..3a2a2d4 100644
--- a/nand_spl/board/freescale/p1_p2_rdb/Makefile
+++ b/nand_spl/board/freescale/p1_p2_rdb/Makefile
@@ -32,7 +32,6 @@ include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
 		$(LDFLAGS) $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_NAND_SPL
@@ -62,11 +61,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot-nand_spl.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $(nandobj)u-boot-spl
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/karo/tx25/Makefile b/nand_spl/board/karo/tx25/Makefile
index 82489d2..9f9c589 100644
--- a/nand_spl/board/karo/tx25/Makefile
+++ b/nand_spl/board/karo/tx25/Makefile
@@ -27,7 +27,6 @@ include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
-LSTSCRIPT= $(nandobj)/board/$(BOARDDIR)/u-boot.lst
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
 	   $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
@@ -59,11 +58,7 @@ $(nandobj)u-boot-spl:	$(OBJS) $(nandobj)u-boot.lds
 		-Map $(nandobj)u-boot-spl.map \
 		-o $@
 
-# The following line expands into whole rule which generates $(LSTSCRIPT),
-# the file containing u-boots LG-array linker section. This is included into
-# $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
-$(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
-$(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT)
+$(nandobj)u-boot.lds: $(LDSCRIPT)
 	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
 		-ansi -D__ASSEMBLY__ -P - <$< >$@
 
diff --git a/nand_spl/board/karo/tx25/u-boot.lds b/nand_spl/board/karo/tx25/u-boot.lds
index ee36131..ea84d64 100644
--- a/nand_spl/board/karo/tx25/u-boot.lds
+++ b/nand_spl/board/karo/tx25/u-boot.lds
@@ -49,7 +49,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/nand_spl/board/samsung/smdk6400/u-boot.lds b/nand_spl/board/samsung/smdk6400/u-boot.lds
index 2ed6466..66b412e 100644
--- a/nand_spl/board/samsung/smdk6400/u-boot.lds
+++ b/nand_spl/board/samsung/smdk6400/u-boot.lds
@@ -53,7 +53,7 @@ SECTIONS
 
 	. = ALIGN(4);
 	.u_boot_list : {
-	#include <u-boot.lst>
+	*(SORT(.u_boot_list*));
 	}
 
 	. = ALIGN(4);
diff --git a/spl/.gitignore b/spl/.gitignore
index 8cf487e..7c88147 100644
--- a/spl/.gitignore
+++ b/spl/.gitignore
@@ -2,4 +2,3 @@ u-boot-spl
 u-boot-spl.bin
 u-boot-spl.lds
 u-boot-spl.map
-u-boot.lst
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records
  2013-02-25 10:58   ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
  2013-02-25 10:58     ` [U-Boot] [PATCH v2 1/4] arm: omap: map u_boot_lists section to .sram Albert ARIBAUD
@ 2013-02-25 11:32     ` Marek Vasut
  2013-02-25 15:19     ` Tom Rini
  2013-03-13 21:15     ` Albert ARIBAUD
  3 siblings, 0 replies; 25+ messages in thread
From: Marek Vasut @ 2013-02-25 11:32 UTC (permalink / raw)
  To: u-boot

Dear Albert ARIBAUD,

> R_ARM_ABS32 relocation records cause symbol references
> to be zero before relocation, and become correct only
> after relocation. On the other hand, R_ARM_RELATIVE
> records make references correct before as well as
> after relocation.
> 
> This patch series aims at removing all R_ARM_ABS32
> relocations from ARM targets.
> 
> the main contributor of R_ARM_ABS32 relocations is the
> support code for linker-lists, aka Linker-Generated
> Arrays. This is due to the fact that LGA start and end
> symbols, used for ranging these arrays, are linker-
> generated symbols, which always relocate as R_ARM_ABS32
> even though they are supposed *not* to be absolute.
> 
> V1 of this patch series fixed LGAs so that start or
> end symbols are actually compiler-generated, and thus
> their references are relocated using R_ARM_RELATIVE;
> V2 also fixes crt0 so that BSS start and end references
> do not produce R_ARM_ABS32 relocations either.
> 
> With V2, none of the targets built with MAKEALL -a arm
> produces any R_ARM_ABS32 relocation.
> 
> This series has been build-tested with ARM (295 targets
> clean) and powerpc (634 targets clean)
> 
> Changes in v2:
> - fixed missing .sram memory mapping in OMAP lds
> - removed useless linker script sections in SPL lds files
> - made BSS start and end compiler-generated
> - moved SPL linker script changes to their own commit
> - added KEEP() to all linker files
> - removed spurious change to common/command.c
> - changed empty type from struct {} to char[0]
> - dropped patch to removed board/micronas/vct/u-boot.lds
> - removed all references to u-boot.lst
> 
> Albert ARIBAUD (4):
>   arm: omap: map u_boot_lists section to .sram
>   Remove linker lists (LGAs) from SPL linker scripts
>   arm: make __bss_start and __bss_end__ compiler-generated
>   Refactor linker-generated arrays

[...]

Reviewed-by: Marek Vasut <marex@denx.de>

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records
  2013-02-25 10:58   ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
  2013-02-25 10:58     ` [U-Boot] [PATCH v2 1/4] arm: omap: map u_boot_lists section to .sram Albert ARIBAUD
  2013-02-25 11:32     ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Marek Vasut
@ 2013-02-25 15:19     ` Tom Rini
  2013-02-25 16:20       ` Daniel Schwierzeck
  2013-02-25 17:22       ` Albert ARIBAUD
  2013-03-13 21:15     ` Albert ARIBAUD
  3 siblings, 2 replies; 25+ messages in thread
From: Tom Rini @ 2013-02-25 15:19 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 25, 2013 at 11:58:56AM +0100, Albert ARIBAUD wrote:

> R_ARM_ABS32 relocation records cause symbol references
> to be zero before relocation, and become correct only
> after relocation. On the other hand, R_ARM_RELATIVE
> records make references correct before as well as
> after relocation.
> 
> This patch series aims at removing all R_ARM_ABS32
> relocations from ARM targets.
> 
> the main contributor of R_ARM_ABS32 relocations is the
> support code for linker-lists, aka Linker-Generated
> Arrays. This is due to the fact that LGA start and end
> symbols, used for ranging these arrays, are linker-
> generated symbols, which always relocate as R_ARM_ABS32
> even though they are supposed *not* to be absolute.
> 
> V1 of this patch series fixed LGAs so that start or
> end symbols are actually compiler-generated, and thus
> their references are relocated using R_ARM_RELATIVE;
> V2 also fixes crt0 so that BSS start and end references
> do not produce R_ARM_ABS32 relocations either.
> 
> With V2, none of the targets built with MAKEALL -a arm
> produces any R_ARM_ABS32 relocation.
> 
> This series has been build-tested with ARM (295 targets
> clean) and powerpc (634 targets clean)
> 
> Changes in v2:
> - fixed missing .sram memory mapping in OMAP lds
> - removed useless linker script sections in SPL lds files
> - made BSS start and end compiler-generated
> - moved SPL linker script changes to their own commit
> - added KEEP() to all linker files
> - removed spurious change to common/command.c
> - changed empty type from struct {} to char[0]
> - dropped patch to removed board/micronas/vct/u-boot.lds
> - removed all references to u-boot.lst
> 
> Albert ARIBAUD (4):
>   arm: omap: map u_boot_lists section to .sram
>   Remove linker lists (LGAs) from SPL linker scripts
>   arm: make __bss_start and __bss_end__ compiler-generated
>   Refactor linker-generated arrays

Reviewed-by: Tom Rini <trini@ti.com>

Aside from ARM and I assume Sandbox, has this been runtime tested on
other arches yet?

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130225/93edbd7e/attachment.pgp>

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records
  2013-02-25 15:19     ` Tom Rini
@ 2013-02-25 16:20       ` Daniel Schwierzeck
  2013-03-13 18:39         ` Tom Rini
  2013-02-25 17:22       ` Albert ARIBAUD
  1 sibling, 1 reply; 25+ messages in thread
From: Daniel Schwierzeck @ 2013-02-25 16:20 UTC (permalink / raw)
  To: u-boot

Hi Albert, Tom,

2013/2/25 Tom Rini <trini@ti.com>:
> On Mon, Feb 25, 2013 at 11:58:56AM +0100, Albert ARIBAUD wrote:
>
>> R_ARM_ABS32 relocation records cause symbol references
>> to be zero before relocation, and become correct only
>> after relocation. On the other hand, R_ARM_RELATIVE
>> records make references correct before as well as
>> after relocation.
>>
>> This patch series aims at removing all R_ARM_ABS32
>> relocations from ARM targets.
>>
>> the main contributor of R_ARM_ABS32 relocations is the
>> support code for linker-lists, aka Linker-Generated
>> Arrays. This is due to the fact that LGA start and end
>> symbols, used for ranging these arrays, are linker-
>> generated symbols, which always relocate as R_ARM_ABS32
>> even though they are supposed *not* to be absolute.
>>
>> V1 of this patch series fixed LGAs so that start or
>> end symbols are actually compiler-generated, and thus
>> their references are relocated using R_ARM_RELATIVE;
>> V2 also fixes crt0 so that BSS start and end references
>> do not produce R_ARM_ABS32 relocations either.
>>
>> With V2, none of the targets built with MAKEALL -a arm
>> produces any R_ARM_ABS32 relocation.
>>
>> This series has been build-tested with ARM (295 targets
>> clean) and powerpc (634 targets clean)
>>
>> Changes in v2:
>> - fixed missing .sram memory mapping in OMAP lds
>> - removed useless linker script sections in SPL lds files
>> - made BSS start and end compiler-generated
>> - moved SPL linker script changes to their own commit
>> - added KEEP() to all linker files
>> - removed spurious change to common/command.c
>> - changed empty type from struct {} to char[0]
>> - dropped patch to removed board/micronas/vct/u-boot.lds
>> - removed all references to u-boot.lst
>>
>> Albert ARIBAUD (4):
>>   arm: omap: map u_boot_lists section to .sram
>>   Remove linker lists (LGAs) from SPL linker scripts
>>   arm: make __bss_start and __bss_end__ compiler-generated
>>   Refactor linker-generated arrays
>
> Reviewed-by: Tom Rini <trini@ti.com>
>
> Aside from ARM and I assume Sandbox, has this been runtime tested on
> other arches yet?
>

I've runtime tested the refactored LGA on MIPS, so

Tested-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

-- 
Best regards,
Daniel

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records
  2013-02-25 15:19     ` Tom Rini
  2013-02-25 16:20       ` Daniel Schwierzeck
@ 2013-02-25 17:22       ` Albert ARIBAUD
  1 sibling, 0 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-02-25 17:22 UTC (permalink / raw)
  To: u-boot

Hi Tom,

On Mon, 25 Feb 2013 10:19:13 -0500, Tom Rini <trini@ti.com> wrote:

> On Mon, Feb 25, 2013 at 11:58:56AM +0100, Albert ARIBAUD wrote:
> 
> > R_ARM_ABS32 relocation records cause symbol references
> > to be zero before relocation, and become correct only
> > after relocation. On the other hand, R_ARM_RELATIVE
> > records make references correct before as well as
> > after relocation.
> > 
> > This patch series aims at removing all R_ARM_ABS32
> > relocations from ARM targets.
> > 
> > the main contributor of R_ARM_ABS32 relocations is the
> > support code for linker-lists, aka Linker-Generated
> > Arrays. This is due to the fact that LGA start and end
> > symbols, used for ranging these arrays, are linker-
> > generated symbols, which always relocate as R_ARM_ABS32
> > even though they are supposed *not* to be absolute.
> > 
> > V1 of this patch series fixed LGAs so that start or
> > end symbols are actually compiler-generated, and thus
> > their references are relocated using R_ARM_RELATIVE;
> > V2 also fixes crt0 so that BSS start and end references
> > do not produce R_ARM_ABS32 relocations either.
> > 
> > With V2, none of the targets built with MAKEALL -a arm
> > produces any R_ARM_ABS32 relocation.
> > 
> > This series has been build-tested with ARM (295 targets
> > clean) and powerpc (634 targets clean)
> > 
> > Changes in v2:
> > - fixed missing .sram memory mapping in OMAP lds
> > - removed useless linker script sections in SPL lds files
> > - made BSS start and end compiler-generated
> > - moved SPL linker script changes to their own commit
> > - added KEEP() to all linker files
> > - removed spurious change to common/command.c
> > - changed empty type from struct {} to char[0]
> > - dropped patch to removed board/micronas/vct/u-boot.lds
> > - removed all references to u-boot.lst
> > 
> > Albert ARIBAUD (4):
> >   arm: omap: map u_boot_lists section to .sram
> >   Remove linker lists (LGAs) from SPL linker scripts
> >   arm: make __bss_start and __bss_end__ compiler-generated
> >   Refactor linker-generated arrays
> 
> Reviewed-by: Tom Rini <trini@ti.com>
> 
> Aside from ARM and I assume Sandbox, has this been runtime tested on
> other arches yet?

None other on my side.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records
  2013-02-25 16:20       ` Daniel Schwierzeck
@ 2013-03-13 18:39         ` Tom Rini
  0 siblings, 0 replies; 25+ messages in thread
From: Tom Rini @ 2013-03-13 18:39 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 25, 2013 at 05:20:34PM +0100, Daniel Schwierzeck wrote:

> Hi Albert, Tom,
> 
> 2013/2/25 Tom Rini <trini@ti.com>:
> > On Mon, Feb 25, 2013 at 11:58:56AM +0100, Albert ARIBAUD wrote:
> >
> >> R_ARM_ABS32 relocation records cause symbol references
> >> to be zero before relocation, and become correct only
> >> after relocation. On the other hand, R_ARM_RELATIVE
> >> records make references correct before as well as
> >> after relocation.
> >>
> >> This patch series aims at removing all R_ARM_ABS32
> >> relocations from ARM targets.
> >>
> >> the main contributor of R_ARM_ABS32 relocations is the
> >> support code for linker-lists, aka Linker-Generated
> >> Arrays. This is due to the fact that LGA start and end
> >> symbols, used for ranging these arrays, are linker-
> >> generated symbols, which always relocate as R_ARM_ABS32
> >> even though they are supposed *not* to be absolute.
> >>
> >> V1 of this patch series fixed LGAs so that start or
> >> end symbols are actually compiler-generated, and thus
> >> their references are relocated using R_ARM_RELATIVE;
> >> V2 also fixes crt0 so that BSS start and end references
> >> do not produce R_ARM_ABS32 relocations either.
> >>
> >> With V2, none of the targets built with MAKEALL -a arm
> >> produces any R_ARM_ABS32 relocation.
> >>
> >> This series has been build-tested with ARM (295 targets
> >> clean) and powerpc (634 targets clean)
> >>
> >> Changes in v2:
> >> - fixed missing .sram memory mapping in OMAP lds
> >> - removed useless linker script sections in SPL lds files
> >> - made BSS start and end compiler-generated
> >> - moved SPL linker script changes to their own commit
> >> - added KEEP() to all linker files
> >> - removed spurious change to common/command.c
> >> - changed empty type from struct {} to char[0]
> >> - dropped patch to removed board/micronas/vct/u-boot.lds
> >> - removed all references to u-boot.lst
> >>
> >> Albert ARIBAUD (4):
> >>   arm: omap: map u_boot_lists section to .sram
> >>   Remove linker lists (LGAs) from SPL linker scripts
> >>   arm: make __bss_start and __bss_end__ compiler-generated
> >>   Refactor linker-generated arrays
> >
> > Reviewed-by: Tom Rini <trini@ti.com>
> >
> > Aside from ARM and I assume Sandbox, has this been runtime tested on
> > other arches yet?
> >
> 
> I've runtime tested the refactored LGA on MIPS, so
> 
> Tested-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

I've also now tested this on am335x_evm as part of seeing if it resolved
another issue:

Tested-by: Tom Rini <trini@ti.com>

Lets bring this in please, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130313/89cc4cb4/attachment.pgp>

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records
  2013-02-25 10:58   ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
                       ` (2 preceding siblings ...)
  2013-02-25 15:19     ` Tom Rini
@ 2013-03-13 21:15     ` Albert ARIBAUD
  3 siblings, 0 replies; 25+ messages in thread
From: Albert ARIBAUD @ 2013-03-13 21:15 UTC (permalink / raw)
  To: u-boot

On Mon, 25 Feb 2013 11:58:56 +0100, Albert ARIBAUD
<albert.u.boot@aribaud.net> wrote:

> R_ARM_ABS32 relocation records cause symbol references
> to be zero before relocation, and become correct only
> after relocation. On the other hand, R_ARM_RELATIVE
> records make references correct before as well as
> after relocation.
> 
> This patch series aims at removing all R_ARM_ABS32
> relocations from ARM targets.
> 
> the main contributor of R_ARM_ABS32 relocations is the
> support code for linker-lists, aka Linker-Generated
> Arrays. This is due to the fact that LGA start and end
> symbols, used for ranging these arrays, are linker-
> generated symbols, which always relocate as R_ARM_ABS32
> even though they are supposed *not* to be absolute.
> 
> V1 of this patch series fixed LGAs so that start or
> end symbols are actually compiler-generated, and thus
> their references are relocated using R_ARM_RELATIVE;
> V2 also fixes crt0 so that BSS start and end references
> do not produce R_ARM_ABS32 relocations either.
> 
> With V2, none of the targets built with MAKEALL -a arm
> produces any R_ARM_ABS32 relocation.
> 
> This series has been build-tested with ARM (295 targets
> clean) and powerpc (634 targets clean)
> 
> Changes in v2:
> - fixed missing .sram memory mapping in OMAP lds
> - removed useless linker script sections in SPL lds files
> - made BSS start and end compiler-generated
> - moved SPL linker script changes to their own commit
> - added KEEP() to all linker files
> - removed spurious change to common/command.c
> - changed empty type from struct {} to char[0]
> - dropped patch to removed board/micronas/vct/u-boot.lds
> - removed all references to u-boot.lst
> 
> Albert ARIBAUD (4):
>   arm: omap: map u_boot_lists section to .sram
>   Remove linker lists (LGAs) from SPL linker scripts
>   arm: make __bss_start and __bss_end__ compiler-generated
>   Refactor linker-generated arrays
> 
>  .gitignore                                       |    1 -
>  Makefile                                         |   13 +-
>  arch/arm/cpu/arm920t/ep93xx/u-boot.lds           |    2 +-
>  arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds        |    6 -
>  arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds      |    6 -
>  arch/arm/cpu/armv7/am33xx/u-boot-spl.lds         |   67 ++++++
>  arch/arm/cpu/armv7/omap-common/u-boot-spl.lds    |    4 -
>  arch/arm/cpu/ixp/u-boot.lds                      |   14 +-
>  arch/arm/cpu/u-boot-spl.lds                      |   93 ++++++++
>  arch/arm/cpu/u-boot.lds                          |   14 +-
>  arch/arm/lib/Makefile                            |    1 +
>  arch/arm/lib/bss.c                               |   39 ++++
>  arch/avr32/cpu/u-boot.lds                        |    2 +-
>  arch/blackfin/cpu/u-boot.lds                     |    2 +-
>  arch/microblaze/cpu/u-boot.lds                   |    2 +-
>  arch/mips/cpu/u-boot.lds                         |    2 +-
>  arch/nds32/cpu/n1213/u-boot.lds                  |    2 +-
>  arch/nios2/cpu/u-boot.lds                        |    2 +-
>  arch/powerpc/cpu/74xx_7xx/u-boot.lds             |    2 +-
>  arch/powerpc/cpu/mpc512x/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/mpc5xx/u-boot.lds               |    2 +-
>  arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds |    2 +-
>  arch/powerpc/cpu/mpc5xxx/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/mpc8220/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/mpc824x/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/mpc8260/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/mpc83xx/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/mpc85xx/u-boot-nand.lds         |    2 +-
>  arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds     |    2 +-
>  arch/powerpc/cpu/mpc85xx/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/mpc86xx/u-boot.lds              |    2 +-
>  arch/powerpc/cpu/ppc4xx/u-boot.lds               |    2 +-
>  arch/sandbox/cpu/u-boot.lds                      |    2 +-
>  arch/sh/cpu/sh2/u-boot.lds                       |    2 +-
>  arch/sh/cpu/sh3/u-boot.lds                       |    2 +-
>  arch/sh/cpu/sh4/u-boot.lds                       |    2 +-
>  arch/x86/cpu/u-boot.lds                          |    2 +-
>  board/BuS/eb_cpu5282/u-boot.lds                  |    2 +-
>  board/LEOX/elpt860/u-boot.lds                    |    2 +-
>  board/RPXClassic/u-boot.lds                      |    2 +-
>  board/RPXClassic/u-boot.lds.debug                |    2 +-
>  board/RPXlite/u-boot.lds                         |    2 +-
>  board/RPXlite/u-boot.lds.debug                   |    2 +-
>  board/RPXlite_dw/u-boot.lds                      |    2 +-
>  board/RPXlite_dw/u-boot.lds.debug                |    2 +-
>  board/RRvision/u-boot.lds                        |    2 +-
>  board/actux1/u-boot.lds                          |   24 ++-
>  board/actux2/u-boot.lds                          |   24 ++-
>  board/actux3/u-boot.lds                          |   18 +-
>  board/adder/u-boot.lds                           |    2 +-
>  board/ait/cam_enc_4xx/u-boot-spl.lds             |    4 -
>  board/altera/nios2-generic/u-boot.lds            |    2 +-
>  board/amcc/acadia/u-boot-nand.lds                |    2 +-
>  board/amcc/bamboo/u-boot-nand.lds                |    2 +-
>  board/amcc/canyonlands/u-boot-nand.lds           |    2 +-
>  board/amcc/kilauea/u-boot-nand.lds               |    2 +-
>  board/amcc/sequoia/u-boot-nand.lds               |    2 +-
>  board/amcc/sequoia/u-boot-ram.lds                |    2 +-
>  board/astro/mcf5373l/u-boot.lds                  |    2 +-
>  board/cobra5272/u-boot.lds                       |    2 +-
>  board/cogent/u-boot.lds                          |    2 +-
>  board/cogent/u-boot.lds.debug                    |    2 +-
>  board/cray/L1/u-boot.lds.debug                   |    2 +-
>  board/dave/PPChameleonEVB/u-boot.lds             |    2 +-
>  board/davinci/da8xxevm/u-boot-spl-da850evm.lds   |    5 -
>  board/davinci/da8xxevm/u-boot-spl-hawk.lds       |    5 -
>  board/dvlhost/u-boot.lds                         |   18 +-
>  board/eltec/mhpc/u-boot.lds                      |    2 +-
>  board/eltec/mhpc/u-boot.lds.debug                |    2 +-
>  board/emk/top860/u-boot.lds                      |    2 +-
>  board/ep88x/u-boot.lds                           |    2 +-
>  board/esd/dasa_sim/u-boot.lds                    |    2 +-
>  board/esd/pmc440/u-boot-nand.lds                 |    2 +-
>  board/esd/tasreg/u-boot.lds                      |    2 +-
>  board/esteem192e/u-boot.lds                      |    2 +-
>  board/evb64260/u-boot.lds                        |    2 +-
>  board/fads/u-boot.lds                            |    2 +-
>  board/flagadm/u-boot.lds                         |    2 +-
>  board/flagadm/u-boot.lds.debug                   |    2 +-
>  board/freescale/m5208evbe/u-boot.lds             |    2 +-
>  board/freescale/m52277evb/u-boot.lds             |    2 +-
>  board/freescale/m5235evb/u-boot.lds              |    2 +-
>  board/freescale/m5249evb/u-boot.lds              |    2 +-
>  board/freescale/m5253demo/u-boot.lds             |    2 +-
>  board/freescale/m5253evbe/u-boot.lds             |    2 +-
>  board/freescale/m5271evb/u-boot.lds              |    2 +-
>  board/freescale/m5272c3/u-boot.lds               |    2 +-
>  board/freescale/m5275evb/u-boot.lds              |    2 +-
>  board/freescale/m5282evb/u-boot.lds              |    2 +-
>  board/freescale/m53017evb/u-boot.lds             |    2 +-
>  board/freescale/m5329evb/u-boot.lds              |    2 +-
>  board/freescale/m5373evb/u-boot.lds              |    2 +-
>  board/freescale/m54418twr/u-boot.lds             |    2 +-
>  board/freescale/m54451evb/u-boot.lds             |    2 +-
>  board/freescale/m54455evb/u-boot.lds             |    2 +-
>  board/freescale/m547xevb/u-boot.lds              |    2 +-
>  board/freescale/m548xevb/u-boot.lds              |    2 +-
>  board/freescale/mx31ads/u-boot.lds               |   16 +-
>  board/gaisler/gr_cpci_ax2000/u-boot.lds          |    2 +-
>  board/gaisler/gr_ep2s60/u-boot.lds               |    2 +-
>  board/gaisler/gr_xc3s_1500/u-boot.lds            |    2 +-
>  board/gaisler/grsim/u-boot.lds                   |    2 +-
>  board/gaisler/grsim_leon2/u-boot.lds             |    2 +-
>  board/gen860t/u-boot-flashenv.lds                |    2 +-
>  board/gen860t/u-boot.lds                         |    2 +-
>  board/genietv/u-boot.lds                         |    2 +-
>  board/genietv/u-boot.lds.debug                   |    2 +-
>  board/hermes/u-boot.lds                          |    2 +-
>  board/hermes/u-boot.lds.debug                    |    2 +-
>  board/hymod/u-boot.lds                           |    2 +-
>  board/hymod/u-boot.lds.debug                     |    2 +-
>  board/icu862/u-boot.lds                          |    2 +-
>  board/icu862/u-boot.lds.debug                    |    2 +-
>  board/idmr/u-boot.lds                            |    2 +-
>  board/ip860/u-boot.lds                           |    2 +-
>  board/ip860/u-boot.lds.debug                     |    2 +-
>  board/ivm/u-boot.lds                             |    2 +-
>  board/ivm/u-boot.lds.debug                       |    2 +-
>  board/korat/u-boot-F7FC.lds                      |    2 +-
>  board/kup/kup4k/u-boot.lds                       |    2 +-
>  board/kup/kup4k/u-boot.lds.debug                 |    2 +-
>  board/kup/kup4x/u-boot.lds                       |    2 +-
>  board/kup/kup4x/u-boot.lds.debug                 |    2 +-
>  board/lwmon/u-boot.lds                           |    2 +-
>  board/lwmon/u-boot.lds.debug                     |    2 +-
>  board/manroland/uc100/u-boot.lds                 |    2 +-
>  board/matrix_vision/mvsmr/u-boot.lds             |    2 +-
>  board/mbx8xx/u-boot.lds                          |    2 +-
>  board/mbx8xx/u-boot.lds.debug                    |    2 +-
>  board/mousse/u-boot.lds                          |    2 +-
>  board/mpl/pip405/u-boot.lds.debug                |    2 +-
>  board/mvblue/u-boot.lds                          |    2 +-
>  board/netphone/u-boot.lds                        |    2 +-
>  board/netphone/u-boot.lds.debug                  |    2 +-
>  board/netta/u-boot.lds                           |    2 +-
>  board/netta/u-boot.lds.debug                     |    2 +-
>  board/netta2/u-boot.lds                          |    2 +-
>  board/netta2/u-boot.lds.debug                    |    2 +-
>  board/netvia/u-boot.lds                          |    2 +-
>  board/netvia/u-boot.lds.debug                    |    2 +-
>  board/nx823/u-boot.lds                           |    2 +-
>  board/nx823/u-boot.lds.debug                     |    2 +-
>  board/openrisc/openrisc-generic/u-boot.lds       |    2 +-
>  board/quantum/u-boot.lds                         |    2 +-
>  board/r360mpi/u-boot.lds                         |    2 +-
>  board/rbc823/u-boot.lds                          |    2 +-
>  board/renesas/sh7752evb/u-boot.lds               |    2 +-
>  board/renesas/sh7757lcr/u-boot.lds               |    2 +-
>  board/rsdproto/u-boot.lds                        |    2 +-
>  board/samsung/smdk5250/smdk5250-uboot-spl.lds    |    2 +-
>  board/samsung/smdk6400/u-boot-nand.lds           |    2 +-
>  board/sandburst/karef/u-boot.lds.debug           |    2 +-
>  board/sandburst/metrobox/u-boot.lds.debug        |    2 +-
>  board/sandpoint/u-boot.lds                       |    2 +-
>  board/sixnet/u-boot.lds                          |    2 +-
>  board/snmc/qs850/u-boot.lds                      |    2 +-
>  board/snmc/qs860t/u-boot.lds                     |    2 +-
>  board/spc1920/u-boot.lds                         |    2 +-
>  board/spd8xx/u-boot.lds                          |    2 +-
>  board/spd8xx/u-boot.lds.debug                    |    2 +-
>  board/stx/stxxtc/u-boot.lds                      |    2 +-
>  board/stx/stxxtc/u-boot.lds.debug                |    2 +-
>  board/svm_sc8xx/u-boot.lds                       |    2 +-
>  board/tqc/tqm8xx/u-boot.lds                      |    2 +-
>  board/v37/u-boot.lds                             |    2 +-
>  board/vpac270/u-boot-spl.lds                     |    4 -
>  board/w7o/u-boot.lds.debug                       |    2 +-
>  board/xes/xpedite1000/u-boot.lds.debug           |    2 +-
>  common/cmd_help.c                                |    2 +-
>  config.mk                                        |    2 -
>  doc/README.commands                              |   18 +-
>  helper.mk                                        |   64 ------
>  include/command.h                                |    2 +-
>  include/configs/am335x_evm.h                     |    2 +-
>  include/configs/pcm051.h                         |    2 +-
>  include/env_callback.h                           |    2 +-
>  include/linker_lists.h                           |  252 +++++++++++++++++-----
>  nand_spl/board/freescale/mpc8536ds/Makefile      |    7 +-
>  nand_spl/board/freescale/mpc8569mds/Makefile     |    7 +-
>  nand_spl/board/freescale/mpc8572ds/Makefile      |    7 +-
>  nand_spl/board/freescale/mx31pdk/Makefile        |    7 +-
>  nand_spl/board/freescale/mx31pdk/u-boot.lds      |    2 +-
>  nand_spl/board/freescale/p1010rdb/Makefile       |    7 +-
>  nand_spl/board/freescale/p1023rds/Makefile       |    7 +-
>  nand_spl/board/freescale/p1_p2_rdb/Makefile      |    7 +-
>  nand_spl/board/karo/tx25/Makefile                |    7 +-
>  nand_spl/board/karo/tx25/u-boot.lds              |    2 +-
>  nand_spl/board/samsung/smdk6400/u-boot.lds       |    2 +-
>  spl/.gitignore                                   |    1 -
>  spl/Makefile                                     |    8 +-
>  190 files changed, 665 insertions(+), 424 deletions(-)
>  create mode 100644 arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
>  create mode 100644 arch/arm/cpu/u-boot-spl.lds
>  create mode 100644 arch/arm/lib/bss.c
>  delete mode 100644 helper.mk

Applied to u-boot-arm/master.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2013-03-13 21:15 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-02 17:02 [U-Boot] [PATCH v1 0/1] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
2013-02-02 17:02 ` [U-Boot] [PATCH v1] Refactor linker-generated arrays Albert ARIBAUD
2013-02-02 17:51   ` Daniel Schwierzeck
2013-02-02 17:53     ` Marek Vasut
2013-02-02 18:30   ` Heiko Schocher
2013-02-02 18:42   ` Jeroen Hofstee
2013-02-04  8:21   ` Heiko Schocher
2013-02-04  8:51     ` Albert ARIBAUD
2013-02-04 12:41   ` Andreas Bießmann
2013-02-04 14:22     ` Albert ARIBAUD
2013-02-16 18:20     ` Albert ARIBAUD
2013-02-18 10:39       ` Andreas Bießmann
2013-02-18 10:42         ` Andreas Bießmann
2013-02-18 16:48           ` Albert ARIBAUD
2013-02-25 10:58   ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Albert ARIBAUD
2013-02-25 10:58     ` [U-Boot] [PATCH v2 1/4] arm: omap: map u_boot_lists section to .sram Albert ARIBAUD
2013-02-25 10:58       ` [U-Boot] [PATCH v2 2/4] Remove linker lists (LGAs) from SPL linker scripts Albert ARIBAUD
2013-02-25 10:58         ` [U-Boot] [PATCH v2 3/4] arm: make __bss_start and __bss_end__ compiler-generated Albert ARIBAUD
2013-02-25 10:59           ` [U-Boot] [PATCH v2 4/4] Refactor linker-generated arrays Albert ARIBAUD
2013-02-25 11:32     ` [U-Boot] [PATCH v2 0/4] Get rid of R_ARM_ABS32 relocation records Marek Vasut
2013-02-25 15:19     ` Tom Rini
2013-02-25 16:20       ` Daniel Schwierzeck
2013-03-13 18:39         ` Tom Rini
2013-02-25 17:22       ` Albert ARIBAUD
2013-03-13 21:15     ` Albert ARIBAUD

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.