Date: Mon, 12 Oct 2009 22:55:24 +0300 From: Blue Swirl <blauwirbel@gmail.com> To: Juergen Lock <nox@jelal.kn-bremen.de> Cc: freebsd-emulation@freebsd.org, qemu-devel@nongnu.org, Aleksej Saushev <asau@inbox.ru>, Toni <tonygio04@gmail.com> Subject: Re: [Qemu-devel] Re: playing with qemu usermode emulation on FreeBSD... Message-ID: <f43fc5580910121255i626e8c53t3ada32be0aa25a8f@mail.gmail.com> In-Reply-To: <20091011221840.GA55502@triton8.kn-bremen.de> References: <20091007220549.GA65997@triton8.kn-bremen.de> <20091011221840.GA55502@triton8.kn-bremen.de>
index | next in thread | previous in thread | raw e-mail
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). > + 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. > 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. > +/* XXX this needs to be emulated on non-FreeBSD hosts... */ > +static abi_long do_freebsd_sysctl(abi_ulong namep, int32_t namelen, abi_ulong oldp, > + abi_ulong oldlenp, abi_ulong newp, abi_ulong newlen) What kind of call is this, is it possible to emulate on other BSDs? Is it important? I'm just wondering if the cross-BSD emulation makes sense after all. It would make the emulator much simpler if we could assume that host_bsdness == target_bsdness.home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f43fc5580910121255i626e8c53t3ada32be0aa25a8f>
