x86: Do relocation before clearing BSS
authorSimon Glass <sjg@chromium.org>
Mon, 16 Jan 2017 14:03:52 +0000 (07:03 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 6 Feb 2017 03:38:46 +0000 (11:38 +0800)
The BSS region may overlap with relocations. If we clear BSS we will
overwrite the start of the relocation area. This doesn't matter when running
from SPI flash, since it is read-only. But when relocating 64-bit U-Boot
from one place in RAM to another, relocation will fail because some of its
relocations have been zeroed.

To fix this, put the ELF fixup call before the BSS clearing call.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
common/board_f.c

index 62cdd8cf8f050a7341a3374aec72dfff36840c29..ae6cd8528c60a7652421afab2e20a78339e9316e 100644 (file)
@@ -1033,8 +1033,8 @@ static const init_fnc_t init_sequence_f[] = {
        setup_reloc,
 #if defined(CONFIG_X86) || defined(CONFIG_ARC)
        copy_uboot_to_ram,
-       clear_bss,
        do_elf_reloc_fixups,
+       clear_bss,
 #endif
 #if defined(CONFIG_XTENSA)
        clear_bss,