[U-Boot] [PATCH 06/17] x86: Rework relocation calcuations

Graeme Russ graeme.russ at gmail.com
Mon Jan 2 05:09:23 CET 2012


Signed-off-by: Graeme Russ <graeme.russ at gmail.com>
---
 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 978beaa..bc5027b 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;
 }
-- 
1.7.5.2.317.g391b14



More information about the U-Boot mailing list