diff options
author | Graeme Russ <graeme.russ@gmail.com> | 2012-01-01 15:57:02 +1100 |
---|---|---|
committer | Graeme Russ <graeme.russ@gmail.com> | 2012-01-04 22:17:22 +1100 |
commit | 240ab5aa2161df500e8950c2a4f392e84324f78a (patch) | |
tree | 8a1bf59b2f6fa60ea8145fe16735d88c60b0d33f /arch/x86/lib | |
parent | f48dd6fc6cc9fdf15408e98132dc5575a31026cf (diff) | |
download | u-boot-imx-240ab5aa2161df500e8950c2a4f392e84324f78a.zip u-boot-imx-240ab5aa2161df500e8950c2a4f392e84324f78a.tar.gz u-boot-imx-240ab5aa2161df500e8950c2a4f392e84324f78a.tar.bz2 |
x86: Rework relocation calculations
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
Diffstat (limited to 'arch/x86/lib')
-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; } |