MemoryBuffer: Don't use mmap when FileSize is multiple of 4k on Cygwin.
authorNAKAMURA Takumi <geek4civic@gmail.com>
Mon, 4 Aug 2014 01:43:37 +0000 (01:43 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Mon, 4 Aug 2014 01:43:37 +0000 (01:43 +0000)
On Cygwin, getpagesize() returns 64k(AllocationGranularity).

In r214580, the size of X86GenInstrInfo.inc became 1499136.

FIXME: We should reorganize again getPageSize() on Win32.
MapFile allocates address along AllocationGranularity but view is mapped by physical page.

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

lib/Support/MemoryBuffer.cpp

index 5f4b7daae53d162affc9dd71d9cccaba140b4312..522c365f3d526a0d0bcfdf3c0dd7e6cdc4ba5d3d 100644 (file)
@@ -305,6 +305,14 @@ static bool shouldUseMmap(int FD,
   if ((FileSize & (PageSize -1)) == 0)
     return false;
 
+#if defined(__CYGWIN__)
+  // Don't try to map files that are exactly a multiple of the physical page size
+  // if we need a null terminator.
+  // FIXME: We should reorganize again getPageSize() on Win32.
+  if ((FileSize & (4096 - 1)) == 0)
+    return false;
+#endif
+
   return true;
 }