[Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot

2011-07-05 Thread Wesley W. Terpstra
I also recently tried to get a mipsel debian/sid chroot running under my
amd64/squeeze system. As posted by Lisandro earlier this month, it didn't
work. ;-) There are several problems, the most glaring of which the attached
patch fixes. I'll break down the changes:

1. Return -TARGET_ENOSYS instead of -ENOSYS from linux-user/main.c
   * Caused the strange 'Level 2 synchronization messages' instead of
correctly reporting the syscall was missing.
   * Made glibc simply fail instead of using older syscalls (one important
example is the new setrlimit syscall which qemu lacks and gnupg/apt needs)

2. The mips syscall table wasn't kept in-sync with syscall.c
   * utimensat was missing (and the cause of the ENOSYS error Lisandro was
seeing)
   * Although I didn't run into problems with any other syscalls, I updated
the table to match syscall.c as well I could anyway

3. Dereferencing a null pointer causes an exception 0xC (EXCP_AdEL) instead
of EXCP_TLBL. This should also trigger a segfault.

4. The codes for get/setrlimit do not stay constant between linux target
platforms. I added a conversion method. This is important else programs
(rsyslog, python, ...) can go into a near infinite loop trying to close all
the file descriptors from 0 to -1.

5. 64-bit file system calls were failing on mipsel (ftruncate 888 created
files 888*4GB large). arm had already work-around code for EABI which also
worked for mipsel, so I just added the same code path for mips everywhere
arm eabi has it. Works for both little and big endian.

These changes were enough to get a mostly working debian chroot for me. I
did have to install squeeze first and then dist-upgrade to sid, however, as
debootstrap seems to have problems with the new multilib glibc (dist-upgrade
will install it fine, though).

To setup a mipsel chroot in /media with the patch applied:
apt-get install qemu-user-static binfmt-support debootstrap
debootstrap --foreign --arch=mipsel squeeze /media/mipsel-sid
compile qemu with patch
cp qemu-srcdir/mipsel-user-static /media/mipsel-sid/usr/bin
chroot /media/mipsel-sid
/debootstrap/debootstrap --second-stage
echo deb http://ftp.de.debian.org/debian sid main  /etc/apt/sources.list
apt-get update
apt-get install locales
mount devpts /dev/pts -t devpts
mount proc /proc -t proc
mount sys /sys -t sysfs
dpkg-reconfigure locales
apt-get dist-upgrade
... install whatever else you need ...

There is still some problem where gcc 4.6.1 in the chroot can ICE when
handling floating point code. I'm looking into it.

I would appreciate it if these fixes could be merged upstream. Thanks.
*
*


qemu-mipsel-debian-rootfs.patch.gz
Description: GNU Zip compressed data


Re: [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot

2011-07-05 Thread Peter Maydell
On 5 July 2011 11:08, Wesley W. Terpstra terps...@debian.org wrote:
 I also recently tried to get a mipsel debian/sid chroot running under my
 amd64/squeeze system. As posted by Lisandro earlier this month, it didn't
 work. ;-) There are several problems, the most glaring of which the attached
 patch fixes.

Thanks for this patch. To get it merged upstream it would be helpful
if you could resubmit it in line with the guidelines at
http://wiki.qemu.org/Contribute/SubmitAPatch
(in particular it needs a Signed-off-by: line, it should be one patch
per bug fix, and it needs to be against current head of qemu git).

In the meantime, some minor initial review comments:

 @@ -1985,6 +1985,20 @@
   MIPS_SYS(sys_epoll_pwait, 6)
   MIPS_SYS(sys_ioprio_set, 3)
   MIPS_SYS(sys_ioprio_get, 2)
 + MIPS_SYS(sys_utimensat, 4)
 + MIPS_SYS(sys_ni_syscall, 0) /* signalfd */
 + MIPS_SYS(sys_ni_syscall, 0) /* timerfd */
 + MIPS_SYS(sys_eventfd, 1)
 + MIPS_SYS(sys_fallocate, 4)
 + MIPS_SYS(sys_ni_syscall, 0) /* timerfd_create */
 + MIPS_SYS(sys_ni_syscall, 0) /* timerfd_gettime */
 + MIPS_SYS(sys_ni_syscall, 0) /* timerfd_settime */
 + MIPS_SYS(sys_ni_syscall, 0) /* signalfd4 */
 + MIPS_SYS(sys_eventfd2, 2)
 + MIPS_SYS(sys_epoll_create1, 1)
 + MIPS_SYS(sys_dup3, 3)
 + MIPS_SYS(sys_pipe2, 2)
 + MIPS_SYS(sys_inotify_init1, 1)
  };

You can drop this bit as there's already a patch in the works
which adds the new syscall numbers:
http://patchwork.ozlabs.org/patch/102241/

(the earlier fix for sigaltstack is still needed).

There are also some bits of your patch which use hardcoded tabs;
these should be spaces. (Yes, existing code is sometimes not
consistent; we tend to convert gradually as we touch code.)

Otherwise I think it looks good.

Thanks again
-- PMM



Re: [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot

2011-07-05 Thread Lisandro Damián Nicanor Pérez Meyer
On Mar 05 Jul 2011 07:08:23 Wesley W. Terpstra escribió:
 I also recently tried to get a mipsel debian/sid chroot running under my
 amd64/squeeze system. As posted by Lisandro earlier this month, it didn't
 work. ;-) There are several problems, the most glaring of which the
 attached patch fixes. I'll break down the changes:

Hi! I tried this patch (patched the current qemu in Debian) and I can happily 
say it works :-)

Thanks everyone :-)

-- 
rata hmm, el enchufe hace chispas...
-- rata ha dejado este servidor (Leaving).
marga ouch
  Visto en #lugfi, irc.freenode.net

Lisandro Damián Nicanor Pérez Meyer
http://perezmeyer.com.ar/
http://perezmeyer.blogspot.com/


signature.asc
Description: This is a digitally signed message part.