For PR351:
authorReid Spencer <rspencer@reidspencer.com>
Mon, 27 Dec 2004 06:15:57 +0000 (06:15 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 27 Dec 2004 06:15:57 +0000 (06:15 +0000)
* Consolidate implementation for Unix systems into Unix/Memory.cpp
* Avoid use of symbolic link to #include platform-specific implementation.

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

lib/System/AIX/Memory.cpp [deleted file]
lib/System/Cygwin/Memory.cpp [deleted file]
lib/System/Darwin/Memory.cpp [deleted file]
lib/System/FreeBSD/Memory.cpp [deleted file]
lib/System/Interix/Memory.cpp [deleted file]
lib/System/Linux/Memory.cpp [deleted file]
lib/System/Memory.cpp
lib/System/SunOS/Memory.cpp [deleted file]

diff --git a/lib/System/AIX/Memory.cpp b/lib/System/AIX/Memory.cpp
deleted file mode 100644 (file)
index dc8f2d1..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-//===- AIX/Memory.cpp - AIX Memory Implementation ---------------*- C++ -*-===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the 
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file provides the AIX specific implementation of various Memory
-// management utilities
-//
-//===----------------------------------------------------------------------===//
-
-// Include the generic unix implementation
-#include "../Unix/Memory.cpp"
-#include "llvm/System/Process.h"
-#include <sys/types.h>
-#include <sys/mman.h>
-
-namespace llvm {
-using namespace sys;
-
-//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only AIX specific code 
-//===          and must not be generic UNIX code (see ../Unix/Memory.cpp)
-//===----------------------------------------------------------------------===//
-
-MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
-  if (NumBytes == 0) return MemoryBlock();
-
-  static const long pageSize = Process::GetPageSize();
-  unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
-
-  void *pa = mmap(0, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC,
-                  MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-  if (pa == (void*)-1) {
-    throw std::string("Can't allocate RWX Memory: ") + strerror(errno);
-  }
-  MemoryBlock result;
-  result.Address = pa;
-  result.Size = NumPages*pageSize;
-  return result;
-}
-
-void Memory::ReleaseRWX(MemoryBlock& M) {
-  if (M.Address == 0 || M.Size == 0) return;
-  if (0 != munmap(M.Address, M.Size)) {
-    throw std::string("Can't release RWX Memory: ") + strerror(errno);
-  }
-}
-
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
diff --git a/lib/System/Cygwin/Memory.cpp b/lib/System/Cygwin/Memory.cpp
deleted file mode 100644 (file)
index 39d87e2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-//===- Cygwin/Memory.cpp - Cygwin Memory Implementation ---------*- C++ -*-===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the 
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file provides the Cygwin specific implementation of various Memory
-// management utilities
-//
-//===----------------------------------------------------------------------===//
-
-// Include the generic unix implementation
-#include "Unix/Memory.cpp"
-#include "llvm/System/Process.h"
-#include <sys/types.h>
-#include <sys/mman.h>
-
-namespace llvm {
-using namespace sys;
-
-//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only Cygwin specific code 
-//===          and must not be generic UNIX code (see ../Unix/Memory.cpp)
-//===----------------------------------------------------------------------===//
-
-MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
-  if (NumBytes == 0) return MemoryBlock();
-
-  static const long pageSize = Process::GetPageSize();
-  unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
-
-  void *pa = mmap(0, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC,
-                  MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-  if (pa == (void*)-1) {
-    throw std::string("Can't allocate RWX Memory: ") + strerror(errno);
-  }
-  MemoryBlock result;
-  result.Address = pa;
-  result.Size = NumPages*pageSize;
-  return result;
-}
-
-void Memory::ReleaseRWX(MemoryBlock& M) {
-  if (M.Address == 0 || M.Size == 0) return;
-  if (0 != munmap(M.Address, M.Size)) {
-    throw std::string("Can't release RWX Memory: ") + strerror(errno);
-  }
-}
-
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
diff --git a/lib/System/Darwin/Memory.cpp b/lib/System/Darwin/Memory.cpp
deleted file mode 100644 (file)
index 5735eba..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-//===- Darwin/Memory.cpp - Darwin Memory Implementation ---------*- C++ -*-===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the 
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file provides the Darwin specific implementation of various Memory
-// management utilities
-//
-//===----------------------------------------------------------------------===//
-
-// Include the generic unix implementation
-#include "../Unix/Memory.cpp"
-#include "llvm/System/Process.h"
-#include <sys/mman.h>
-
-namespace llvm {
-using namespace sys;
-
-//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only Darwin-specific code 
-//===          and must not be generic UNIX code (see ../Unix/Memory.cpp)
-//===----------------------------------------------------------------------===//
-
-/// AllocateRWXMemory - Allocate a slab of memory with read/write/execute
-/// permissions.  This is typically used for JIT applications where we want
-/// to emit code to the memory and then jump to it.  Getting this type of memory
-/// is very OS-specific.
-///
-MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
-  if (NumBytes == 0) return MemoryBlock();
-
-  static const long pageSize = Process::GetPageSize();
-  unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
-
-  void *pa = mmap(0, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC,
-                  MAP_PRIVATE|MAP_ANON, -1, 0);
-  if (pa == MAP_FAILED) {
-    char msg[MAXPATHLEN];
-    strerror_r(errno, msg, MAXPATHLEN-1);
-    throw std::string("Can't allocate RWX Memory: ") + msg;
-  }
-  MemoryBlock result;
-  result.Address = pa;
-  result.Size = NumPages*pageSize;
-  return result;
-}
-
-void Memory::ReleaseRWX(MemoryBlock& M) {
-  if (M.Address == 0 || M.Size == 0) return;
-  if (0 != munmap(M.Address, M.Size)) {
-    char msg[MAXPATHLEN];
-    strerror_r(errno, msg, MAXPATHLEN-1);
-    throw std::string("Can't release RWX Memory: ") + msg;
-  }
-}
-
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
diff --git a/lib/System/FreeBSD/Memory.cpp b/lib/System/FreeBSD/Memory.cpp
deleted file mode 100644 (file)
index 4f8dea5..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-//===- FreeBSD/Memory.cpp - FreeBSD Memory Implementation -------*- C++ -*-===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the 
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file provides the FreeBSD specific implementation of various Memory
-// management utilities
-//
-//===----------------------------------------------------------------------===//
-
-// Include the generic unix implementation
-#include "../Unix/Memory.cpp"
-#include "llvm/System/Process.h"
-#include <sys/mman.h>
-
-namespace llvm {
-using namespace sys;
-
-//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only FreeBSD specific code 
-//===          and must not be generic UNIX code (see ../Unix/Memory.cpp)
-//===----------------------------------------------------------------------===//
-
-MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
-  if (NumBytes == 0) return MemoryBlock();
-
-  static const long pageSize = Process::GetPageSize();
-  unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
-
-  void *pa = mmap(0, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC,
-                  MAP_PRIVATE|MAP_ANON|MAP_NOCORE, -1, 0);
-  if (pa == (void*)-1) {
-    throw std::string("Can't allocate RWX Memory: ") + strerror(errno);
-  }
-
-  MemoryBlock result;
-  result.Address = pa;
-  result.Size = NumPages*pageSize;
-  return result;
-}
-
-void Memory::ReleaseRWX(MemoryBlock& M) {
-  if (M.Address == 0 || M.Size == 0) return;
-  if (0 != munmap(M.Address, M.Size)) {
-    throw std::string("Can't release RWX Memory: ") + strerror(errno);
-  }
-}
-
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
diff --git a/lib/System/Interix/Memory.cpp b/lib/System/Interix/Memory.cpp
deleted file mode 100644 (file)
index 771c99d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-//===- Interix/Memory.cpp - Interix Memory Implementation -------*- C++ -*-===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the 
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file provides the Interix specific implementation of various Memory
-// management utilities
-//
-//===----------------------------------------------------------------------===//
-
-// Include the generic unix implementation
-#include "../Unix/Memory.cpp"
-#include "llvm/System/Process.h"
-#include <fcntl.h>
-#include <sys/mman.h>
-
-namespace llvm {
-using namespace sys;
-
-//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only Interix specific code 
-//===          and must not be generic UNIX code (see ../Unix/Memory.cpp)
-//===----------------------------------------------------------------------===//
-
-MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
-  if (NumBytes == 0) return MemoryBlock();
-
-  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_SHARED, fd, 0);
-  if (pa == (void*)-1) {
-    throw std::string("Can't allocate RWX Memory: ") + strerror(errno);
-  }
-  MemoryBlock result;
-  result.Address = pa;
-  result.Size = NumPages*pageSize;
-  return result;
-}
-
-void Memory::ReleaseRWX(MemoryBlock& M) {
-  if (M.Address == 0 || M.Size == 0) return;
-  if (0 != munmap(M.Address, M.Size)) {
-    throw std::string("Can't release RWX Memory: ") + strerror(errno);
-  }
-}
-
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
diff --git a/lib/System/Linux/Memory.cpp b/lib/System/Linux/Memory.cpp
deleted file mode 100644 (file)
index 1a55ad8..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-//===- Linux/Memory.cpp - Linux Memory Implementation -----*- C++ -*-===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the 
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file provides the Linux specific implementation of various Memory
-// management utilities
-//
-//===----------------------------------------------------------------------===//
-
-// Include the generic unix implementation
-#include "../Unix/Memory.cpp"
-#include "llvm/System/Process.h"
-#include <sys/mman.h>
-
-namespace llvm {
-using namespace sys;
-
-//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only Linux specific code 
-//===          and must not be generic UNIX code (see ../Unix/Memory.cpp)
-//===----------------------------------------------------------------------===//
-
-/// AllocateRWXMemory - Allocate a slab of memory with read/write/execute
-/// permissions.  This is typically used for JIT applications where we want
-/// to emit code to the memory then jump to it.  Getting this type of memory
-/// is very OS specific.
-///
-MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
-  if (NumBytes == 0) return MemoryBlock();
-
-  static const long pageSize = Process::GetPageSize();
-  unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
-
-  void *pa = mmap(0, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC,
-                  MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, 0, 0);
-  if (pa == MAP_FAILED) {
-    char msg[MAXPATHLEN];
-    strerror_r(errno, msg, MAXPATHLEN-1);
-    throw std::string("Can't allocate RWX Memory: ") + msg;
-  }
-  MemoryBlock result;
-  result.Address = pa;
-  result.Size = NumPages*pageSize;
-  return result;
-}
-
-void Memory::ReleaseRWX(MemoryBlock& M) {
-  if (M.Address == 0 || M.Size == 0) return;
-  if (0 != munmap(M.Address, M.Size)) {
-    char msg[MAXPATHLEN];
-    strerror_r(errno, msg, MAXPATHLEN-1);
-    throw std::string("Can't release RWX Memory: ") + msg;
-  }
-}
-
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
index 6aa5cbc73ee464ad9164f2b06a4f2116f2876287..1ced1e6f0f04ec5812732b621a6ddf396bb67920 100644 (file)
@@ -13,6 +13,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/System/Memory.h"
+#include "llvm/Config/config.h"
 
 namespace llvm {
 using namespace sys;
@@ -25,6 +26,11 @@ using namespace sys;
 }
 
 // Include the platform-specific parts of this class.
-#include "platform/Memory.cpp"
+#ifdef LLVM_ON_UNIX
+#include "Unix/Memory.cpp"
+#endif
+#ifdef LLVM_ON_WIN32
+#include "Win32/Memory.cpp"
+#endif
 
 // vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
diff --git a/lib/System/SunOS/Memory.cpp b/lib/System/SunOS/Memory.cpp
deleted file mode 100644 (file)
index 4f88b32..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-//===- SunOS/Memory.cpp - SunOS Memory Implementation -----------*- C++ -*-===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the 
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file provides the SunOS specific implementation of various Memory
-// management utilities
-//
-//===----------------------------------------------------------------------===//
-
-// Include the generic unix implementation
-#include "../Unix/Memory.cpp"
-#include "llvm/System/Process.h"
-#include <sys/types.h>
-#include <sys/mman.h>
-
-namespace llvm {
-using namespace sys;
-
-//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only SunOS specific code 
-//===          and must not be generic UNIX code (see ../Unix/Memory.cpp)
-//===----------------------------------------------------------------------===//
-
-MemoryBlock Memory::AllocateRWX(unsigned NumBytes) {
-  if (NumBytes == 0) return MemoryBlock();
-
-  static const long pageSize = Process::GetPageSize();
-  unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
-
-  void *pa = mmap(0, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC,
-                  MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-  if (pa == (void*)-1) {
-    throw std::string("Can't allocate RWX Memory: ") + strerror(errno);
-  }
-  MemoryBlock result;
-  result.Address = pa;
-  result.Size = NumPages*pageSize;
-  return result;
-}
-
-void Memory::ReleaseRWX(MemoryBlock& M) {
-  if (M.Address == 0 || M.Size == 0) return;
-  if (0 != munmap(M.Address, M.Size)) {
-    throw std::string("Can't release RWX Memory: ") + strerror(errno);
-  }
-}
-
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab