qemu-devel
[Top][All Lists]
Advanced

[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 */

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]