Hi,
I am using QEMU from Arch Linux x86_64 official repo. I need to test my
built u-boot payload, so I tried to build a QEMU ARM coreboot image.
However, it failed to run and had the following output.
qemu: fatal: Trying to execute code outside RAM or ROM at 0xfffffffe
R00=00000000 R01=00011b70 R02=00000000 R03=ffffffff
R04=00c51878 R05=00000147 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000002 R13=000fffd8 R14=ffffffff R15=fffffffe
PSR=600000ff -ZC- T sys32
s00=00000000 s01=00000000 d00=0000000000000000
s02=00000000 s03=00000000 d01=0000000000000000
s04=00000000 s05=00000000 d02=0000000000000000
s06=00000000 s07=00000000 d03=0000000000000000
s08=00000000 s09=00000000 d04=0000000000000000
s10=00000000 s11=00000000 d05=0000000000000000
s12=00000000 s13=00000000 d06=0000000000000000
s14=00000000 s15=00000000 d07=0000000000000000
s16=00000000 s17=00000000 d08=0000000000000000
s18=00000000 s19=00000000 d09=0000000000000000
s20=00000000 s21=00000000 d10=0000000000000000
s22=00000000 s23=00000000 d11=0000000000000000
s24=00000000 s25=00000000 d12=0000000000000000
s26=00000000 s27=00000000 d13=0000000000000000
s28=00000000 s29=00000000 d14=0000000000000000
s30=00000000 s31=00000000 d15=0000000000000000
s32=00000000 s33=00000000 d16=0000000000000000
s34=00000000 s35=00000000 d17=0000000000000000
s36=00000000 s37=00000000 d18=0000000000000000
s38=00000000 s39=00000000 d19=0000000000000000
s40=00000000 s41=00000000 d20=0000000000000000
s42=00000000 s43=00000000 d21=0000000000000000
s44=00000000 s45=00000000 d22=0000000000000000
s46=00000000 s47=00000000 d23=0000000000000000
s48=00000000 s49=00000000 d24=0000000000000000
s50=00000000 s51=00000000 d25=0000000000000000
s52=00000000 s53=00000000 d26=0000000000000000
s54=00000000 s55=00000000 d27=0000000000000000
s56=00000000 s57=00000000 d28=0000000000000000
s58=00000000 s59=00000000 d29=0000000000000000
s60=00000000 s61=00000000 d30=0000000000000000
s62=00000000 s63=00000000 d31=0000000000000000
FPSCR: 00000000
After I add '-S -s' option to QEMU, I found the problem is in
bootblock_simple.c, and the `main()' function in gdb is:
0x00000192 in ?? ()
=> 0x00000192: 08 b5 push {r3, lr}
(gdb) disas $pc,+50
Dump of assembler code from 0x192 to 0x1c4:
=> 0x00000192: push {r3, lr}
0x00000194: bl 0x1704
0x00000198: bl 0x18c
0x0000019c: bl 0xd10
0x000001a0: bl 0x634
0x000001a4: bl 0x18e
0x000001a8: bl 0x190
0x000001ac: ldmia.w sp!, {r3, lr}
0x000001b0: b.w 0x159c
0x000001b4: push {r3, lr}
0x000001b6: mrc 15, 0, r3, cr1, cr0, {0}
0x000001ba: lsls r2, r3, #29
0x000001bc: bpl.n 0x1c4
0x000001be: bl 0x2ac
0x000001c2: b.n 0x1cc
End of assembler dump.
(gdb) si
0x00000194 in ?? ()
=> 0x00000194: 01 f0 b6 fa bl 0x1704
(gdb) b *0x198
Breakpoint 3 at 0x198
(gdb) c
Continuing.
Breakpoint 3, 0x00000198 in ?? ()
=> 0x00000198: ff f7 f8 ff bl 0x18c
(gdb) b *0x19c
Breakpoint 4 at 0x19c
(gdb) c
Continuing.
Breakpoint 4, 0x0000019c in ?? ()
=> 0x0000019c: 00 f0 b8 fd bl 0xd10
(gdb) b *0x1a0
Breakpoint 5 at 0x1a0
(gdb) c
Continuing.
Remote connection closed
So there may be something wrong when setting up the console, however I'm
not so familiar with debugging the ROM so I don't know which function call
raise the problem.
Thanks,
Iru