x86: Rework relocation calculations
authorGraeme Russ <graeme.russ@gmail.com>
Sun, 1 Jan 2012 04:57:02 +0000 (15:57 +1100)
committerGraeme Russ <graeme.russ@gmail.com>
Wed, 4 Jan 2012 11:17:22 +0000 (22:17 +1100)
This commit introduces no functional changes - It simply re-arranges the
calculations so that adding to them in future commits will be cleaner

--
Changes for v2:
 - Fixed typo in title
 - Added commit message

arch/x86/lib/board.c

index 382ada7..6f075b7 100644 (file)
@@ -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 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->relocaddr = dest_addr;
-       gd->reloc_off = rel_offset;
+       gd->reloc_off = (dest_addr - text_start);
 
        return 0;
 }
 
        return 0;
 }