[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit
From: |
Kirill A. Shutemov |
Subject: |
Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets |
Date: |
Tue, 9 Dec 2008 15:26:50 +0200 |
User-agent: |
Mutt/1.5.18 (2008-10-30) |
On Tue, Dec 09, 2008 at 07:25:25AM -0500, Robert Reif wrote:
> Martin Mohring wrote:
> > Kirill A. Shutemov wrote:
> >
> >> On Wed, Dec 03, 2008 at 02:50:57PM +0200, Kirill A. Shutemov wrote:
> >>
> >>
> >>> On Wed, Dec 03, 2008 at 12:34:18PM +0000, Paul Brook wrote:
> >>>
> >>>
> >>>> On Wednesday 03 December 2008, Kirill A. Shutemov wrote:
> >>>>
> >>>>
> >>>>> qemu's page table can be incomple if /proc/self/maps is unavailable or
> >>>>> host allocating a memory with mmap(), so we can't use it to find free
> >>>>> memory area.
> >>>>>
> >>>>>
> >>>> Do we really care? Do such systems exist?
> >>>>
> >>>>
> >>> I use qemu-arm to build packages in restricted environment -- in
> >>> hasher[1].
> >>> hasher mounts /proc only for packages that really need it for building
> >>> (java, for example).
> >>>
> >>> [1] http://en.altlinux.org/Hasher
> >>>
> >>>
> >> Paul, do you have any objection or not? I really want to see it into
> >> upstream.
> >>
> >>
> > And last, but not least: what if I have a very old Debian Etch, where
> > the kernel does not have MREMAP defined? E.g.:
> >
> > gcc -I. -I.. -I/usr/src/packages/BUILD/target-i386
> > -I/usr/src/packages/BUILD -MMD -MT mmap.o -MP -DNEED_CPU_H -D_GNU_SOURCE
> > -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I/usr/src/packages/BUILD/tcg
> > -I/usr/src/packages/BUILD/tcg/i386 -I/usr/src/packages/BUILD/fpu
> > -I/usr/src/packages/BUILD/linux-user
> > -I/usr/src/packages/BUILD/linux-user/i386 -O2 -g -fno-strict-aliasing
> > -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes
> > -Wstrict-prototypes -Wredundant-decls -m32 -c -o mmap.o
> > /usr/src/packages/BUILD/linux-user/mmap.c
> > /usr/src/packages/BUILD/linux-user/mmap.c:265: warning: no previous
> > prototype for 'mmap_find_vma'
> > /usr/src/packages/BUILD/linux-user/mmap.c: In function 'target_mremap':
> > /usr/src/packages/BUILD/linux-user/mmap.c:556: error: 'MREMAP_FIXED'
> > undeclared (first use in this function)
> > /usr/src/packages/BUILD/linux-user/mmap.c:556: error: (Each undeclared
> > identifier is reported only once
> > /usr/src/packages/BUILD/linux-user/mmap.c:556: error: for each function
> > it appears in.)
> > /usr/src/packages/BUILD/linux-user/mmap.c:558: error: too many arguments
> > to function 'mremap'
> > /usr/src/packages/BUILD/linux-user/mmap.c:569: error: too many arguments
> > to function 'mremap'
> >
> >
> > Martin
> >
> >
> >
> >
> >
> I get this same build error now with RedHat 9.
Please, try it:
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index 89254ae..b632bee 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -24,6 +24,8 @@
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
+#include <linux/mman.h>
+#include <linux/unistd.h>
#include "qemu.h"
#include "qemu-common.h"
@@ -564,9 +566,11 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong
old_size,
if (mmap_start == -1) {
errno = ENOMEM;
host_addr = MAP_FAILED;
- } else
- host_addr = mremap(g2h(old_addr), old_size, new_size,
- flags | MREMAP_FIXED, g2h(mmap_start));
+ } else {
+ host_addr = (void *) syscall(__NR_mremap, g2h(old_addr),
+ old_size, new_size, flags | MREMAP_FIXED,
+ g2h(mmap_start));
+ }
} else {
host_addr = mremap(g2h(old_addr), old_size, new_size, flags);
/* Check if address fits target address space */
signature.asc
Description: Digital signature
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, (continued)
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Kirill A. Shutemov, 2008/12/03
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Kirill A. Shutemov, 2008/12/08
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Martin Mohring, 2008/12/08
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Martin Mohring, 2008/12/08
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Kirill A. Shutemov, 2008/12/08
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Martin Mohring, 2008/12/08
- [Qemu-devel] qemu and glibc version, Kirill A. Shutemov, 2008/12/08
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Robert Reif, 2008/12/09
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets,
Kirill A. Shutemov <=
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Paul Brook, 2008/12/08
- Re: [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, Kirill A. Shutemov, 2008/12/09
- Re: [Qemu-devel] [PATCH] linux-user: Fix h2g usage in page_find_alloc, Edgar E. Iglesias, 2008/12/06
- Re: [Qemu-devel] [PATCH] linux-user: Fix h2g usage in page_find_alloc, Kirill A. Shutemov, 2008/12/06
- Re: [Qemu-devel] [PATCH] linux-user: Fix h2g usage in page_find_alloc, Aurelien Jarno, 2008/12/08
- Re: [Qemu-devel] [PATCH] linux-user: Introduce h2g_valid, Aurelien Jarno, 2008/12/08
- Re: [Qemu-devel] [PATCH] linux-user: Safety belt for h2g, Edgar E. Iglesias, 2008/12/06
- Re: [Qemu-devel] [PATCH] linux-user: Safety belt for h2g, Aurelien Jarno, 2008/12/08
- Re: [Qemu-devel] [PATCH] linux-user: Safety belt for h2g, Andreas Färber, 2008/12/08
- Re: [Qemu-devel] [PATCH] linux-user: Safety belt for h2g, Jan Kiszka, 2008/12/09