qemu-devel
[Top][All Lists]
Advanced

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

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


From: Juergen Lock
Subject: Re: [Qemu-devel] Re: playing with qemu usermode emulation on FreeBSD...
Date: Sun, 18 Oct 2009 22:10:11 +0200
User-agent: Mutt/1.5.20 (2009-06-14)

On Sun, Oct 18, 2009 at 09:26:00PM +0300, Blue Swirl wrote:
> On Sat, Oct 17, 2009 at 1:34 AM, Juergen Lock <address@hidden> wrote:
> > On Wed, Oct 14, 2009 at 12:19:32AM +0200, Juergen Lock wrote:
> >> 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 <address@hidden> 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
> >
> > Updated again, among other things I added basic FreeBSD sysarch(2)
> > handling, fixed syscall errno return (I had added code to set the
> > carry bit for the x86 target before but the sign of the returned errno
> > was still wrong), and I finally fixed the if (1) above (made bsd_type
> > global.)
> >
> >  And, I now can run FreeBSD/amd64 /bin/sh and vim on same! :)  (zsh
> > not yet tho.)
> >
> >  Oh and Toni tested taking FreeBSD/i386's default linker script,
> > changing only the load address to 0x60000000 as in qemu's and,
> > using that as i386.ld, he now can run qemu-i386 on FreeBSD/i386 with
> > simple executables too...  See files/patch-bsd-user-ld in the shar,
> > which I also now moved the x86_64.ld patch to that I had talked about
> > earlier.  It probably can't be used everywhere as is tho since it has:
> >        OUTPUT_FORMAT("elf32-i386-freebsd", "elf32-i386-freebsd",
> >                      "elf32-i386-freebsd")
> > (and I also don't know if the one currently in the tree has other
> > features that are needed at least on Linux, any linker gurus care
> > to comment?)
> >
> >  Here is the rest of the bsd-user patches again (files/patch-bsd-user
> > in the shar), if you think they are ready to commit I'm not against it
> > anymore :), comments are also welcome of course.
> 
> Thanks, applied. I made up a short commit message.

Sorry, my fault, I should have supplied a `proper' one... :/
(sysarch(2) and errno were only the things I fixed since the last
iteration, I guess its too late to add the rest now?)

 In other news...  I have made another port update from today's git:
        http://people.freebsd.org/~nox/qemu/qemu-devel-20091018.patch
resp.
        http://people.freebsd.org/~nox/qemu/qemu-devel-20091018.shar

 Enjoy,
        Juergen




reply via email to

[Prev in Thread] Current Thread [Next in Thread]