Use the /dev/zero device as the device on which the pages are mapped.

Patch contributed by Henrik Bach. Thanks Henrik!

llvm-svn: 16397
This commit is contained in:
Reid Spencer 2004-09-18 19:34:09 +00:00
parent 0e86336edc
commit 91e6f5e975
1 changed files with 7 additions and 1 deletions

View 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);
}