[ports/emulators/qemu-devel] Fix BSD User space emulator issue

Juergen Lock nox at jelal.kn-bremen.de
Mon Jul 19 17:36:25 UTC 2010


On Tue, Jul 20, 2010 at 01:31:59AM +0900, Norikatsu Shigemura wrote:
> Hi nox.
Hi!
> 
> 	I found a minor issue on qemu-devel.  We can't use BSD User space
> 	emulator by default.  Because default bsd-type is OpenBSD:-(.
> 
> 	In this time, we run always qemu-* with -bsd freebsd option, like
> 	qemu-x86_64 -bsd freebsd /bin/ls.  But following patch fix default
> 	behavior.
> 
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> --- bsd-user/main.c.orig	2010-05-05 00:27:48.000000000 +0900
> +++ bsd-user/main.c	2010-07-19 00:49:30.020088803 +0900
> @@ -740,7 +740,7 @@
>      int gdbstub_port = 0;
>      char **target_environ, **wrk;
>      envlist_t *envlist = NULL;
> -    bsd_type = target_openbsd;
> +    bsd_type = target_freebsd;
>  
>      if (argc <= 1)
>          usage();
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> 
> 	BTW, do you have any idea to support ARM?
> 
> 	And, JFYI, I tried to test sparc64, i386, x86_64 on FreeBSD/amd64.
> 	But I confirmed that x86_64 is only OK like following:
> 
> $ qemu-x86_64 -bsd freebsd /rescue/ls -lF /
> -r--r--r--   1 root  wheel  6196 Jan  3  2010 COPYRIGHT
> drwxr-xr-x   2 root  wheel    47 Jul 18 01:49 bin/
> drwxr-xr-x   9 root  wheel    36 Jul 18 01:49 boot/
>   :
> 
> $ make world TARGET_ARCH=sparc64 DESTDIR=/tmp/sparc64
> $ qemu-sparc64 -bsd freebsd -L /tmp/sparc64 /tmp/sparc64/rescue/ls -lF /
>  (in this case, qemu-sparc64 is cpu eater.)

 I'm indifferent as to whether we should change the default for -bsd,
maybe we should...  But before worrying about that I think the
userspace emulation needs to work better, like there are still a
lot of syscalls that need to be handled properly at the very least,
before that is done emulating diffent archs than the host can't
really work well enough to be useful.

 And about arm, I think all that's needed is someone to do the work...
(Just like adding the missing syscall handling etc to get the other
bsd-user targets working.)

 Cheers,
	Juergen

PS:  As an example what is to do wrt syscalls, here is one of my
bsd-user updates that got committed to qemu upstream a while ago:

	http://git.savannah.gnu.org/cgit/qemu.git/commit/?id=78cfb07fe0dc556cae662a0fab5fe1bd33daabdb

(the commitlog is incomplete since I forgot to submit one myself in
the thread where I submitted the patch...)

 As you can see, syscall parameters may need to be converted to the
target endianness/wordsize, memory they point to may need to be
locked/unlocked...  The good news is probably a lot of the missing
code can be copied/adapted from the linux-user target like I did
for e.g. TARGET_FREEBSD_NR_writev there.


More information about the freebsd-emulation mailing list