
In message Pine.CYG.4.55.0311121116060.828@sniper.ultra.si you wrote:
There is no real limit on the size of the image's segments, but due to the broken memory layout of the ARM you have to be careful where you place your image in RAM, and for other memory mapping details like stack size.
memory map for this board:
...
0xA000 0000 - 0xA1FF FFFF (32 MiB) SD-RAM - 0xA3FF FFFF (64 MiB)
And where did you place the U-Boot image? What's the stack size?
That tells me it's in _undefined_instruction, if I'm not mistaken. But 0xa1fe003c is making me confused since it's _fiq. Does that mean that the interrupt has been raised ?
Another explanation is that you're attempting to run bogus code as a result of stack corruption.
I set a breakpoint at run_command, restarted and U-boot stopped correctly.
$sp was 0x0 and info frame showed that local variables were located at 0xa1fbdf2c. The question here is: is $sp supposed to point to some location or is it OK if it's 0x0 ?
Answer this question yourself: is a C function supposed to have a valid stack pointer or not?
I'm used to debug regular programs and if I enter a function, backtrace will always show all the stack frames. Am I missing something here or is that saying that the stack is corrupt ?
2 x yes.
Best regards,
Wolfgang Denk