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.
llvm-svn: 189939
This commit is contained in:
NAKAMURA Takumi 2013-09-04 14:12:19 +00:00
parent 9542678508
commit 65fc51bbe2
1 changed files with 9 additions and 0 deletions

View File

@ -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)