FreeBSD and qemu-neo1973 (was: Re: Comment bug in locore.S?)

Marius Nuennerich marius.nuennerich at
Fri Sep 28 03:17:16 PDT 2007

On Fri, 28 Sep 2007 12:23:32 +0200
Olivier Houchard <mlfbsd at> wrote:

> On Fri, Sep 28, 2007 at 11:30:44AM +0200, Marius Nuennerich wrote:
> > On Thu, 27 Sep 2007 18:51:00 -0500 (CDT)
> > Mark Tinguely <tinguely at> wrote:
> > 
> > > 
> > > How about saving the jump address in another register also before the jump:
> > > 
> > > 	ldr	r10, .Lvirt_done
> > > 	ldr	pc, .Lvirt_done
> > 
> > I tried this but used r9, anyway the register isn't used otherwise and
> > it's contents is R09=c00002a4 after qemu crashes. Is it possible that
> > this would be the right address if the kernel would start at 0x30000000
> > and not on 0x30008000 physical address? 
> Ah good point. KERNVIRTADDR should be 0xc0008000, not 0xc0000000.
> As we're mapping it with sections, we don't have enough granularity to map it
> to 0xc0000000.

OK, I changed KERNVIRTADDR in the kernel config. qemu still crashes with
qemu: fatal: Trying to execute code outside RAM or ROM at 0xc00082ac

which should be mapped. But now it doesn't print an A as the last
letter over serial line, it's an f. What I don't understand is the the
jump to 0xc00082a4 seems to be OK now but a few instructions later it
goes boom. Maybe this is the strb instruction for printing chars. Could
it be that this won't work after jumping to 0xc... ?
Why does the printing of f still work before the ldr?

Is there a description available what KERNVIRTADDR, KERNPHYSADDR,
PHYSADDR, KERNBASE, et al. mean?

More information about the freebsd-arm mailing list