Implement Path::MapInFilePages/UnMapFilePages on unix, which 
provides fast MappedFile::getFile for large files.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49034 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index b0578dc..0707de6 100644
--- a/lib/System/Unix/Path.inc
+++ b/lib/System/Unix/Path.inc
@@ -745,14 +745,19 @@
   return false;
 }
 
-/// MapInFilePages - Not yet implemented on win32.
 const char *Path::MapInFilePages(int FD, uint64_t FileSize) {
-  return 0;
+  int Flags = MAP_PRIVATE;
+#ifdef MAP_FILE
+  Flags |= MAP_FILE;
+#endif
+  void *BasePtr = ::mmap(0, FileSize, PROT_READ, Flags, FD, 0);
+  if (BasePtr == MAP_FAILED)
+    return 0;
+  return BasePtr;
 }
 
-/// MapInFilePages - Not yet implemented on win32.
-void Path::UnMapFilePages(const char *Base, uint64_t FileSize) {
-  assert(0 && "NOT IMPLEMENTED");
+void Path::UnMapFilePages(const char *BasePtr, uint64_t FileSize) {
+  ::munmap(BasePtr, FileSize);
 }
 
 } // end llvm namespace