Commit 3af72a4d98dca033492102603734cbc63cd2694a

Authored by blueswir1
1 parent d445bde7

Fix mremap, based on patch by Kirill A. Shutemov

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6056 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 11 additions and 8 deletions
linux-user/mmap.c
... ... @@ -24,6 +24,8 @@
24 24 #include <unistd.h>
25 25 #include <errno.h>
26 26 #include <sys/mman.h>
  27 +#include <linux/mman.h>
  28 +#include <linux/unistd.h>
27 29  
28 30 #include "qemu.h"
29 31 #include "qemu-common.h"
... ... @@ -546,10 +548,11 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size,
546 548  
547 549 mmap_lock();
548 550  
549   -#if defined(MREMAP_FIXED)
550 551 if (flags & MREMAP_FIXED)
551   - host_addr = mremap(g2h(old_addr), old_size, new_size,
552   - flags, new_addr);
  552 + host_addr = (void *) syscall(__NR_mremap, g2h(old_addr),
  553 + old_size, new_size,
  554 + flags,
  555 + new_addr);
553 556 else if (flags & MREMAP_MAYMOVE) {
554 557 abi_ulong mmap_start;
555 558  
... ... @@ -559,11 +562,11 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size,
559 562 errno = ENOMEM;
560 563 host_addr = MAP_FAILED;
561 564 } else
562   - host_addr = mremap(g2h(old_addr), old_size, new_size,
563   - flags | MREMAP_FIXED, g2h(mmap_start));
564   - } else
565   -#endif
566   - {
  565 + host_addr = (void *) syscall(__NR_mremap, g2h(old_addr),
  566 + old_size, new_size,
  567 + flags | MREMAP_FIXED,
  568 + g2h(mmap_start));
  569 + } else {
567 570 host_addr = mremap(g2h(old_addr), old_size, new_size, flags);
568 571 /* Check if address fits target address space */
569 572 if ((unsigned long)host_addr + new_size > (abi_ulong)-1) {
... ...