diff options
-rw-r--r-- | arch/x86/lib/board.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c index 382ada7..6f075b7 100644 --- a/arch/x86/lib/board.c +++ b/arch/x86/lib/board.c @@ -164,24 +164,23 @@ static int calculate_relocation_address(void) ulong text_start = (ulong)&__text_start; ulong bss_end = (ulong)&__bss_end; ulong dest_addr; - ulong rel_offset; - - /* Calculate destination RAM Address and relocation offset */ - dest_addr = gd->ram_size; - dest_addr -= CONFIG_SYS_STACK_SIZE; - dest_addr -= (bss_end - text_start); /* - * Round destination address down to 16-byte boundary to keep - * IDT and GDT 16-byte aligned + * NOTE: All destination address are rounded down to 16-byte + * boundary to satisfy various worst-case alignment + * requirements */ - dest_addr &= ~15; - rel_offset = dest_addr - text_start; + /* Stack is at top of available memory */ + dest_addr = gd->ram_size; + gd->start_addr_sp = dest_addr; - gd->start_addr_sp = gd->ram_size; + /* U-Boot is below the stack */ + dest_addr -= CONFIG_SYS_STACK_SIZE; + dest_addr -= (bss_end - text_start); + dest_addr &= ~15; gd->relocaddr = dest_addr; - gd->reloc_off = rel_offset; + gd->reloc_off = (dest_addr - text_start); return 0; } |