qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot
@ 2011-07-05 10:08 Wesley W. Terpstra
  2011-07-05 14:18 ` Peter Maydell
  2011-07-05 21:30 ` Lisandro Damián Nicanor Pérez Meyer
  0 siblings, 2 replies; 3+ messages in thread
From: Wesley W. Terpstra @ 2011-07-05 10:08 UTC (permalink / raw)
  To: qemu-devel; +Cc: perezmeyer, pkg-qemu-devel


[-- Attachment #1.1: Type: text/plain, Size: 2608 bytes --]

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.
*
*

[-- Attachment #1.2: Type: text/html, Size: 2850 bytes --]

[-- Attachment #2: qemu-mipsel-debian-rootfs.patch.gz --]
[-- Type: application/x-gzip, Size: 1748 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot
  2011-07-05 10:08 [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot Wesley W. Terpstra
@ 2011-07-05 14:18 ` Peter Maydell
  2011-07-05 21:30 ` Lisandro Damián Nicanor Pérez Meyer
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2011-07-05 14:18 UTC (permalink / raw)
  To: Wesley W. Terpstra; +Cc: perezmeyer, Riku Voipio, qemu-devel, pkg-qemu-devel

On 5 July 2011 11:08, Wesley W. Terpstra <terpstra@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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot
  2011-07-05 10:08 [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot Wesley W. Terpstra
  2011-07-05 14:18 ` Peter Maydell
@ 2011-07-05 21:30 ` Lisandro Damián Nicanor Pérez Meyer
  1 sibling, 0 replies; 3+ messages in thread
From: Lisandro Damián Nicanor Pérez Meyer @ 2011-07-05 21:30 UTC (permalink / raw)
  To: qemu-devel; +Cc: pkg-qemu-devel, Wesley W. Terpstra

[-- Attachment #1: Type: Text/Plain, Size: 703 bytes --]

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/

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-07-05 21:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-05 10:08 [Qemu-devel] PATCH: fix qemu-mips[el]-static to work with debian squeeze/sid chroot Wesley W. Terpstra
2011-07-05 14:18 ` Peter Maydell
2011-07-05 21:30 ` Lisandro Damián Nicanor Pérez Meyer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).