]> git.sur5r.net Git - u-boot/commit
x86: Add error checking to x86 relocation code
authorSimon Glass <sjg@chromium.org>
Thu, 28 Feb 2013 19:26:16 +0000 (19:26 +0000)
committerSimon Glass <sjg@chromium.org>
Mon, 4 Mar 2013 23:57:48 +0000 (15:57 -0800)
commit62f7970a5a063991a00fb426704bfcf7c9dc9c11
treea2cb8d5477777c4be93a2c8bb788bc5737406b96
parentf697d528caba0c30382b7269fd36f1111e51810d
x86: Add error checking to x86 relocation code

This does not actually change normal behaviour, but adds a check that
should detect corruption of relocation data (e.g. by using BSS data
prior to relocation).

Also add additional debugging output when enabled.

During this investigation, two situations have been seen:
1. calculate_relocation_address():
uintptr_t size = (uintptr_t)&__bss_end - (uintptr_t)&__text_start;

turns into
     111166f: b8 83 c4 17 01        mov    $0x117c483,%eax

whih is beyond the end of bss:

0117b484 g       .bss 00000000 __bss_end

Somehow the __bss_end here is 255 bytes ahead.

2. do_elf_reloc_fixups():

uintptr_t size = (uintptr_t)&__bss_end - (uintptr_t)&__text_start;

Here the __text_start is 0 in the file:

 1111d9f: bb a0 e0 13 01        mov    $0x113e0a0,%ebx
1111da4: 81 ef 00 00 00 00     sub    $0x0,%edi

As it happens, both of these are in pre-relocation code.

For these reasons we silent check and ignore bad relocations.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/x86/lib/relocate.c