Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Oct 2009 21:26:00 +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:  <f43fc5580910181126l4b8eeefbj215a13d7e6b71b59@mail.gmail.com>
In-Reply-To: <20091016223426.GA54110@triton8.kn-bremen.de>
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>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Oct 17, 2009 at 1:34 AM, Juergen Lock <nox@jelal.kn-bremen.de> wrot=
e:
> 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.d=
e> 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 tot=
ally
>> > > >> missed those commits...) and now got it working a tiny little bit=
:
>> > > >> I can run
>> > > >> =C2=A0 =C2=A0 =C2=A0 qemu-x86_64 -bsd freebsd /rescue/echo foo ba=
r
>> > > >> here on FreeBSD 8/amd64 and it echoes foo bar as expected, but
>> > > >> segfaults afterwards. :) =C2=A0(in pthread_setcancelstate() invok=
ed from
>> > > >> a guest write() syscall, in case anyone is wondering.) =C2=A0Othe=
r things
>> > > >> I tried either exit with errors or segfault as well, and i386 hos=
ts
>> > > >> probably still don't work at all yet. =C2=A0(qemu-i386 here on am=
d64 does
>> > > >> at least something, but probably needs lock_user() treatment for =
all
>> > > >> kinds of syscalls, I only tried adding that for sysctl so far.)
>> > > >>
>> > > >> =C2=A0Anyway, here is an emulators/qemu-devel git head snapshot p=
ort
>> > > >> update with my current patches (files/patch-bsd-user), feel free =
to
>> > > >> test/debug/improve:
>> > > >> =C2=A0 =C2=A0 =C2=A0 http://people.freebsd.org/~nox/qemu/qemu-dev=
el-20091007.patch
>> > > >> (For the folks reading this on the qemu list: =C2=A0I shall start=
 doing
>> > > >> `proper' patch submissions later, this is more for the FreeBSD fo=
lks
>> > > >> and because I was asked to send what I have...)
>> > > >
>> > > > New version at the same place, which now runs FreeBSD/{i386,sparc6=
4}
>> > > > /rescue/echo on FreeBSD/amd64, the FreeBSD/amd64 target now segfau=
lts
>> > > > in pthread_setcancelstate() invoked from the final writev() tho.
>> > > > Oh and I also uploaded the snapshot tarball so others can now actu=
ally
>> > > > build the port too... :) =C2=A0And I have switched to the cpu-exec=
.c patch
>> > > > posted by Aleksej Saushev on the qemu list and added back amd64
>> > > > code there.
>> > > >
>> > > > =C2=A0Here 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...
>> >
>> > > > + =C2=A0 =C2=A0if (1 /* bsd_type =3D=3D target_freebsd */)
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0regs->rdi =3D infop->start_stack;
>> > >
>> > > Why the if and comment?
>> > >
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0if (1 /* bsd_type =3D=3D target_freeb=
sd */) {
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0regs->u_regs[8] =3D inf=
op->start_stack;
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0regs->u_regs[11] =3D in=
fop->start_stack;
>> > >
>> > > Same here.
>> > >
>> > =C2=A0Because bsd_type isn't available at these places in the code but
>> > probably should be checked, I still wanted to fix that. =C2=A0(Maybe
>> > make it global?)
>> >
>> I still haven't fixed this...
>>
>> > > > =C2=A0 =C2=A0 =C2=A0 =C2=A0 case 0x100:
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0/* FreeBSD uses 0x141 for syscalls to=
o */
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x141:
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (bsd_type !=3D targe=
t_freebsd)
>> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto badt=
rap;
>> > >
>> > > You are now also trapping on case 0x100 if bsd_type !=3D target_free=
bsd,
>> > > which probably breaks other BSDs.
>> > >
>> > =C2=A0Right, thats broken, the 0x141 case should come before the 0x100
>> > here of course.
>> >
>> =C2=A0...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.)
>>
>> =C2=A0New version at the same place,
>> =C2=A0 =C2=A0 =C2=A0 http://people.freebsd.org/~nox/qemu/qemu-devel-2009=
1007.patch
>> and I now also made a shar of the patched port:
>> =C2=A0 =C2=A0 =C2=A0 http://people.freebsd.org/~nox/qemu/qemu-devel-2009=
1007.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.)
>
> =C2=A0And, I now can run FreeBSD/amd64 /bin/sh and vim on same! :) =C2=A0=
(zsh
> not yet tho.)
>
> =C2=A0Oh 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... =C2=A0See 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. =C2=A0It probably can't be used everywhere as is tho since it ha=
s:
> =C2=A0 =C2=A0 =C2=A0 =C2=A0OUTPUT_FORMAT("elf32-i386-freebsd", "elf32-i38=
6-freebsd",
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0"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?)
>
> =C2=A0Here is the rest of the bsd-user patches again (files/patch-bsd-use=
r
> 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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f43fc5580910181126l4b8eeefbj215a13d7e6b71b59>