avoid unaligned file offset in anonymous mapping
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 9 Jun 2003 15:24:18 +0000 (15:24 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 9 Jun 2003 15:24:18 +0000 (15:24 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@215 c046a42c-6fe2-441c-8c8c-71466251a162

linux-user/mmap.c

index 1c3eb35..0c2fe8d 100644 (file)
@@ -188,7 +188,7 @@ long target_mmap(unsigned long start, unsigned long len, int prot,
     host_start = start & host_page_mask;
 
     if (!(flags & MAP_FIXED)) {
-#ifdef __alpha__
+#if defined(__alpha__) || defined(__sparc__)
         /* tell the kenel to search at the same place as i386 */
         if (host_start == 0)
             host_start = 0x40000000;
@@ -282,8 +282,13 @@ long target_mmap(unsigned long start, unsigned long len, int prot,
     
     /* map the middle (easier) */
     if (host_start < host_end) {
+        unsigned long offset1;
+       if (flags & MAP_ANONYMOUS)
+         offset1 = 0;
+       else
+         offset1 = offset + host_start - start;
         ret = (long)mmap((void *)host_start, host_end - host_start, 
-                         prot, flags, fd, offset + host_start - start);
+                         prot, flags, fd, offset1);
         if (ret == -1)
             return ret;
     }