[Qemu-devel] Re: playing with qemu usermode emulation on FreeBSD...

Juergen Lock nox at jelal.kn-bremen.de
Tue Oct 13 22:21:06 UTC 2009


On Tue, Oct 13, 2009 at 12:20:58AM +0200, Juergen Lock wrote:
> On Mon, Oct 12, 2009 at 10:55:24PM +0300, Blue Swirl wrote:
> > On Mon, Oct 12, 2009 at 1:18 AM, Juergen Lock <nox at jelal.kn-bremen.de> wrote:
> > > On Thu, Oct 08, 2009 at 12:05:49AM +0200, Juergen Lock wrote:
> > >> I recently noticed there are x86 bsd-user targets now (yeah I totally
> > >> missed those commits...) and now got it working a tiny little bit:
> > >> I can run
> > >>       qemu-x86_64 -bsd freebsd /rescue/echo foo bar
> > >> here on FreeBSD 8/amd64 and it echoes foo bar as expected, but
> > >> segfaults afterwards. :)  (in pthread_setcancelstate() invoked from
> > >> a guest write() syscall, in case anyone is wondering.)  Other things
> > >> I tried either exit with errors or segfault as well, and i386 hosts
> > >> probably still don't work at all yet.  (qemu-i386 here on amd64 does
> > >> at least something, but probably needs lock_user() treatment for all
> > >> kinds of syscalls, I only tried adding that for sysctl so far.)
> > >>
> > >>  Anyway, here is an emulators/qemu-devel git head snapshot port
> > >> update with my current patches (files/patch-bsd-user), feel free to
> > >> test/debug/improve:
> > >>       http://people.freebsd.org/~nox/qemu/qemu-devel-20091007.patch
> > >> (For the folks reading this on the qemu list:  I shall start doing
> > >> `proper' patch submissions later, this is more for the FreeBSD folks
> > >> and because I was asked to send what I have...)
> > >
> > > New version at the same place, which now runs FreeBSD/{i386,sparc64}
> > > /rescue/echo on FreeBSD/amd64, the FreeBSD/amd64 target now segfaults
> > > in pthread_setcancelstate() invoked from the final writev() tho.
> > > Oh and I also uploaded the snapshot tarball so others can now actually
> > > build the port too... :)  And I have switched to the cpu-exec.c patch
> > > posted by Aleksej Saushev on the qemu list and added back amd64
> > > code there.
> > >
> > >  Here is the bsd-user patch again:
> > 
> > Please add Signed-off-by: line and use 'diff -u' (or preferably git diff).
> > 
> Well I wasn't expecting this diff to be committed just yet anyway,
> it's still more a wip version...
> 
> > > +    if (1 /* bsd_type == target_freebsd */)
> > > +        regs->rdi = infop->start_stack;
> > 
> > Why the if and comment?
> > 
> > > +        if (1 /* bsd_type == target_freebsd */) {
> > > +            regs->u_regs[8] = infop->start_stack;
> > > +            regs->u_regs[11] = infop->start_stack;
> > 
> > Same here.
> > 
>  Because bsd_type isn't available at these places in the code but
> probably should be checked, I still wanted to fix that.  (Maybe
> make it global?)
> 
I still haven't fixed this...

> > >         case 0x100:
> > > +        /* FreeBSD uses 0x141 for syscalls too */
> > > +        case 0x141:
> > > +            if (bsd_type != target_freebsd)
> > > +                goto badtrap;
> > 
> > You are now also trapping on case 0x100 if bsd_type != target_freebsd,
> > which probably breaks other BSDs.
> > 
>  Right, thats broken, the 0x141 case should come before the 0x100
> here of course.
> 
 ...but this I just fixed, and I added the multiboot.S patch, and
fixed the port's cdrom dma disable knob (files/cdrom-dma-patch).
(And I added the cpu-exec.c whitspace fix that was already in the
patch I posted in the BSD support thread.)

 New version at the same place,
	http://people.freebsd.org/~nox/qemu/qemu-devel-20091007.patch
and I now also made a shar of the patched port:
	http://people.freebsd.org/~nox/qemu/qemu-devel-20091007.shar

 Cheers,
	Juergen


More information about the freebsd-emulation mailing list