OSDN Git Service

Use the /dev/zero device as the device on which the pages are mapped.
authorReid Spencer <rspencer@reidspencer.com>
Sat, 18 Sep 2004 19:34:09 +0000 (19:34 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Sat, 18 Sep 2004 19:34:09 +0000 (19:34 +0000)
Patch contributed by Henrik Bach. Thanks Henrik!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16397 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Interix/Memory.cpp

index 94e5893..771c99d 100644 (file)
@@ -15,6 +15,7 @@
 // Include the generic unix implementation
 #include "../Unix/Memory.cpp"
 #include "llvm/System/Process.h"
+#include <fcntl.h>
 #include <sys/mman.h>
 
 namespace llvm {
@@ -30,9 +31,14 @@ MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
 
   static const long pageSize = Process::GetPageSize();
   unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
+  
+  int fd = open("/dev/zero", O_RDWR);
+  if (fd == -1) {
+    throw std::string("Can't open /dev/zero device: ") + strerror(errno);
+  }
 
   void *pa = mmap(0, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC,
-                  MAP_PRIVATE|MAP_ANON|MAP_NOCORE, -1, 0);
+                  MAP_SHARED, fd, 0);
   if (pa == (void*)-1) {
     throw std::string("Can't allocate RWX Memory: ") + strerror(errno);
   }