This is the second patch series aiming to unify the various board.c files in each architecture into a single one. This series creates a libboard library and implements relocation in it. It then moves ARM over to use this framework, as an example.
On ARM the relocation code is duplicated for each CPU yet it is the same. We can bring this up to the arch level. But since (I believe) Elf relocation is basically the same process for all archs, there is no reason not to bring it up to the generic level. This series establishes a new libboard library in the board/ subdir and puts some relocation code in it. Each architecture which uses this framework needs to provide a function called arch_elf_relocate_entry() which processes a single relocation entry. If there is concern about calling a function for all 2000-odd relocations then I can change this. For ARM, a new arch/arm/lib/proc.S file is created, which holds generic ARM assembler code (things that cannot be written in C and are common functions used by all ARM CPUs). This helps reduce duplication. Interrupt handling code and perhaps even some startup code can move there later. It may be useful for other architectures to have a similar file. This series moves ARM over to use this framework. Overall this means that two new files are required 'early' in boot: board/reloc.c and arch/arm/lib/proc.S. This is tricky mainly due to SPL. I believe that we may need to adjust link scripts to put these two files early in the link scripts also. But I am not sure about this and can't actually find a problem as yet. I would much prefer to solve this with a new section name like .text.early if we can. (I should really cc all arch maintainers but I think in that case I get an error from the list server. Not sure what the limit is.) Comments please... Simon Glass (7): reboard: define CONFIG_SYS_LEGACY_BOARD everywhere reboard: Add generic link symbols reboard: Add generic relocation feature reboard: arm: Add relocation function reboard: arm: Add processor function library reboard: arm: Move over to generic relocation reboard: arm: Remove unused code in start.S Makefile | 1 + README | 5 + arch/arm/cpu/arm1136/start.S | 121 ---------------- arch/arm/cpu/arm1176/start.S | 202 --------------------------- arch/arm/cpu/arm720t/start.S | 115 --------------- arch/arm/cpu/arm920t/start.S | 123 ---------------- arch/arm/cpu/arm925t/start.S | 123 ---------------- arch/arm/cpu/arm926ejs/start.S | 130 ----------------- arch/arm/cpu/arm946es/start.S | 118 ---------------- arch/arm/cpu/arm_intcm/start.S | 123 ---------------- arch/arm/cpu/armv7/start.S | 126 ----------------- arch/arm/cpu/ixp/start.S | 115 --------------- arch/arm/cpu/lh7a40x/start.S | 112 --------------- arch/arm/cpu/pxa/start.S | 122 ---------------- arch/arm/cpu/s3c44b0/start.S | 115 --------------- arch/arm/cpu/sa1100/start.S | 112 --------------- arch/arm/lib/Makefile | 5 + arch/arm/lib/arch_reloc.c | 47 ++++++ arch/arm/lib/proc.S | 35 +++++ arch/avr32/config.mk | 3 + arch/blackfin/config.mk | 3 + arch/m68k/config.mk | 3 + arch/microblaze/config.mk | 3 + arch/mips/config.mk | 3 + arch/nds32/config.mk | 3 + arch/nios2/config.mk | 3 + arch/powerpc/config.mk | 3 + arch/sandbox/config.mk | 3 + arch/sh/config.mk | 3 + arch/sparc/config.mk | 3 + arch/x86/config.mk | 3 + board/Makefile | 45 ++++++ board/reloc.c | 101 +++++++++++++ include/asm-generic/link_symbols.h | 38 +++++ include/common.h | 2 +- include/reloc.h | 37 +++++ nand_spl/board/freescale/mx31pdk/Makefile | 8 +- nand_spl/board/freescale/mx31pdk/u-boot.lds | 1 + nand_spl/board/karo/tx25/Makefile | 8 +- nand_spl/board/karo/tx25/u-boot.lds | 1 + spl/Makefile | 1 + 41 files changed, 368 insertions(+), 1760 deletions(-) create mode 100644 arch/arm/lib/arch_reloc.c create mode 100644 arch/arm/lib/proc.S create mode 100644 board/Makefile create mode 100644 board/reloc.c create mode 100644 include/asm-generic/link_symbols.h create mode 100644 include/reloc.h -- 1.7.3.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot