1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 16:52:14 +02:00

Refactor linker-generated arrays

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>
This commit is contained in:
Albert ARIBAUD
2013-02-25 00:59:00 +00:00
parent 3ebd1cbc49
commit ef123c5253
177 changed files with 380 additions and 351 deletions

View File

@@ -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*)));
}