summaryrefslogtreecommitdiff
path: root/lib/Support/MemoryBuffer.cpp
diff options
context:
space:
mode:
authorNAKAMURA Takumi <geek4civic@gmail.com>2013-09-04 14:12:19 +0000
committerNAKAMURA Takumi <geek4civic@gmail.com>2013-09-04 14:12:19 +0000
commit81b135cc1e6578dba0fb6daed425f556db368034 (patch)
tree5c997329a06b20ab2fce6970ec5ff8eb76e42453 /lib/Support/MemoryBuffer.cpp
parenta53ee67e5eff17c1bb56a1a86ea628806e1bb29d (diff)
downloadllvm-81b135cc1e6578dba0fb6daed425f556db368034.tar.gz
llvm-81b135cc1e6578dba0fb6daed425f556db368034.tar.bz2
llvm-81b135cc1e6578dba0fb6daed425f556db368034.tar.xz
MemoryBuffer.cpp: Don't peek the next page if file is multiple of *physical* pagesize(4k) but is not multiple of AllocationGranularity(64k), when a null terminator is required, on cygwin and win32.
For example, r189780's SparcISelLowering.cpp has the size 98304. It crashed clang to touch a null terminator on cygwin. FIXME: It's not good to hardcode 4096 here. dwPageSize shows 4096. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189939 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/MemoryBuffer.cpp')
-rw-r--r--lib/Support/MemoryBuffer.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/Support/MemoryBuffer.cpp b/lib/Support/MemoryBuffer.cpp
index 1134f5bb53..e018ad4ecc 100644
--- a/lib/Support/MemoryBuffer.cpp
+++ b/lib/Support/MemoryBuffer.cpp
@@ -302,6 +302,15 @@ static bool shouldUseMmap(int FD,
if (End != FileSize)
return false;
+#if defined(_WIN32) || defined(__CYGWIN__)
+ // Don't peek the next page if file is multiple of *physical* pagesize(4k)
+ // but is not multiple of AllocationGranularity(64k),
+ // when a null terminator is required.
+ // FIXME: It's not good to hardcode 4096 here. dwPageSize shows 4096.
+ if ((FileSize & (4096 - 1)) == 0)
+ return false;
+#endif
+
// Don't try to map files that are exactly a multiple of the system page size
// if we need a null terminator.
if ((FileSize & (PageSize -1)) == 0)