Re: Troubles running qemu64 target

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Guillaume:

I haven't used QEMU ARM64 version of the code, but I have spent some
time on i.MX8M which is ARM64 as well. See my comments below.

On Thu, Jun 28, 2018 at 6:46 AM ranquet guillaume
<ranquet.guillaume@xxxxxxxxx> wrote:
>
> Hello.
>
> I'm pretty new to barebox and I'm having some troubles running the
> qemu64 target.
> to top it off, I'm also new to the ARM world... and this is my first
> attempt at looking at a bootloader...
>
> I'm having trouble porting some hardware to barebox... and while I'm
> waiting for a JTAG probe, I though I could have some fun with qemu64
> :)
>
> The boot stops pretty early in the flow. way before anything can be
> printed on the serial. I have attached gdb to the qemu-system.
> The "qemu-system" seems to be stuck when trying to execute an stp with
> the stack pointer as the destination.
>
> I'm having the feeling that I have a configuration issue because sp = 0x0
>
> x27            0x0      0
> x28            0x0      0
> x29            0x0      0
> x30            0x0      0
> sp             0x0      0x0
> pc             0x40000000       0x40000000 <start>
> cpsr           0x400003c5       1073742789
> fpsr           0x0      0
> fpcr           0x0      0
> (gdb) disassemble
> Dump of assembler code for function start:
> => 0x0000000040000000 <+0>:     b       0x40000048 <start+72>
>    0x0000000040000004 <+4>:     nop
>    0x0000000040000008 <+8>:     nop
>    0x000000004000000c <+12>:    nop
> ...
>   0x0000000040000048 <+72>:    b       0x40013444 <barebox_arm_reset_vector>
>
>
> then we are branching to <barebox_arm_reset_vector>
> Dump of assembler code for function barebox_arm_reset_vector:
> => 0x0000000040013444 <+0>:     stp     x29, x30, [sp, #-16]!
>    0x0000000040013448 <+4>:     mov     x29, sp

The above looks like barebox_arm_reset_vector's preamble to me, which
it would have since:

a) It is not declared as __naked

b) AFAIK, __naked is not supported on AArch64 version of GCC, so even
if it was it wouldn't help

>    0x000000004001344c <+8>:     bl      0x40000050 <arm_cpu_lowlevel_init>
>
> with sp still equals to 0x0.
>
> stepping from there seems to get me "stuck"...
> when interrupting gdb (Ctrl-C) and dumping the registers, I'm getting
> the feeling I'm out of barebox code with pc equals 0x200
>
> x29            0x0      0
> x30            0x0      0
> sp             0x0      0x0
> pc             0x200    0x200
> cpsr           0x3c5    965
> fpsr           0x0      0
>
>
> It's probably some kind of configuration issue...? though I see no
> code to set sp before that stp instruction.

IMHO this doesn't look like a configuration issue and I agree there's
no code to set SP up.

> I tried toying with the memory map, setting stack and text base
> addresses, but it doesn't seem to fix my issue.
> Or maybe it's okay to decrement sp while it's equal to 0x0?

AFAIK, it would be OK if underlying emulated hardware had any kind of
memory mapped at the end of address space (sp would wrap in that
case), but as far as I can tell QEMU ARM64 virt platform doesn't,
which I think is the reason you are seeing the result you are seeing.

> Any ideas? comments?

I am not sure about the proper way to resolve this, I'd be curious to
hear from Raphael (original author, CC'd in this reply) and how this
worked for him first. However you can very quickly verify/disprove
your bad SP value theory by doing:

set $sp=0xBFFFFFF0

before letting the processor hit those SP instructions when you step
through it and see if barebox runs fine after that.

Thanks,
Andrey Smirnov

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux