[U-Boot] [PATCH 14/26 v2][NEXT] ARM: implement relocation for ARM V7 (OMAP)

John Rigby
2010-09-17T21:40:58Z

On Fri, Sep 17, 2010 at 5:10 AM, Heiko Schocher <hs@denx.de> wrote:
> Change the implementation for ARM V7 to relocate the code to an
> arbitrary address in RAM.
>
> Adapt the Beagle board (Cortex A8) to test the changes.
>
Heiko,

I'm running -next on a Beagle board (first version of arm reloc not v2).

I noticed that when I wrote to ram in the range where u-boot runs
before being relocated sometimes the board hangs. I then narrowed it
down to being able to reproduce the hang by writing to a single byte.
Turns out that __aeabi_uidiv gets called in its original location
after relocation. I believe the culprit is ____aeabi_uidiv_veneer.

Here is a disassembly of my u-boot elf file:
80035c98 <____aeabi_uidiv_veneer>:
80035c98: e51ff004 ldr pc, [pc, #-4] ; 80035c9c
<_end+0xfffc2498>
80035c9c: 800356f1 .word 0x800356f1

My relocaton offset is 0x07f7c000 so the relocated
____aeabi_uidiv_veneer is at 0x80035c98+0x07f7c000 or 0x87fb1c98. If
I dump memory there:

OMAP3 beagleboard.org # md 0x87fb1c98
87fb1c98: e51ff004 800356f1 e51ff004 80035bfd .....V.......[..

The original 800356f1 is still there.

Looks like these *veneer routines need to be relocated.

Please disregard if this is fixed in v2.

Regards,
John