aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-04-01 06:16:24 +0000
committerChris Lattner <sabre@nondot.org>2008-04-01 06:16:24 +0000
commit9ffd19af2e2a17ccd0c7ad7b4cf6d8c3e9a56bae (patch)
treefbc1fda95e3f12a01ff466a9648cf74e34138f21 /lib
parent11da4cf25c3de590ecf434316973e9f25eec34c3 (diff)
downloadexternal_llvm-9ffd19af2e2a17ccd0c7ad7b4cf6d8c3e9a56bae.zip
external_llvm-9ffd19af2e2a17ccd0c7ad7b4cf6d8c3e9a56bae.tar.gz
external_llvm-9ffd19af2e2a17ccd0c7ad7b4cf6d8c3e9a56bae.tar.bz2
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
Diffstat (limited to 'lib')
-rw-r--r--lib/System/Unix/MappedFile.inc3
-rw-r--r--lib/System/Unix/Path.inc15
2 files changed, 11 insertions, 7 deletions
diff --git a/lib/System/Unix/MappedFile.inc b/lib/System/Unix/MappedFile.inc
index 35efaa6..c85a53d 100644
--- a/lib/System/Unix/MappedFile.inc
+++ b/lib/System/Unix/MappedFile.inc
@@ -75,7 +75,6 @@ const void* MappedFile::map(std::string* ErrMsg) {
assert(MapInfo && "MappedFile not initialized");
if (isMapped()) return BasePtr;
- int prot = PROT_READ;
int flags = MAP_PRIVATE;
#ifdef MAP_FILE
flags |= MAP_FILE;
@@ -83,7 +82,7 @@ const void* MappedFile::map(std::string* ErrMsg) {
size_t PageSize = Process::GetPageSize();
size_t map_size = ((MapInfo->Size / PageSize)+1) * PageSize;
- BasePtr = ::mmap(0, map_size, prot, flags, MapInfo->FD, 0);
+ BasePtr = ::mmap(0, map_size, PROT_READ, flags, MapInfo->FD, 0);
if (BasePtr == MAP_FAILED) {
MakeErrMsg(ErrMsg, "Can't map file:" + Path.toString());
return 0;
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 @@ Path::makeUnique(bool reuse_current, std::string* ErrMsg) {
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