Date: Sun, 18 Oct 2009 22:10:11 +0200 From: Juergen Lock <nox@jelal.kn-bremen.de> To: Blue Swirl <blauwirbel@gmail.com> Cc: freebsd-emulation@freebsd.org, Toni <tonygio04@gmail.com>, Juergen Lock <nox@jelal.kn-bremen.de>, Aleksej Saushev <asau@inbox.ru>, qemu-devel@nongnu.org Subject: Re: [Qemu-devel] Re: playing with qemu usermode emulation on FreeBSD... Message-ID: <20091018201011.GA52533@triton8.kn-bremen.de> In-Reply-To: <f43fc5580910181126l4b8eeefbj215a13d7e6b71b59@mail.gmail.com> References: <20091007220549.GA65997@triton8.kn-bremen.de> <20091011221840.GA55502@triton8.kn-bremen.de> <f43fc5580910121255i626e8c53t3ada32be0aa25a8f@mail.gmail.com> <20091012222058.GA43121@triton8.kn-bremen.de> <20091013221932.GA32808@triton8.kn-bremen.de> <20091016223426.GA54110@triton8.kn-bremen.de> <f43fc5580910181126l4b8eeefbj215a13d7e6b71b59@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Oct 18, 2009 at 09:26:00PM +0300, Blue Swirl wrote: > On Sat, Oct 17, 2009 at 1:34 AM, Juergen Lock <nox@jelal.kn-bremen.de> 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 <nox@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 > > > > 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20091018201011.GA52533>