]> granicus.if.org Git - llvm/commitdiff
Don't require a null terminator when loading objects
authorDavid Major <dmajor@mozilla.com>
Wed, 9 Jan 2019 23:36:32 +0000 (23:36 +0000)
committerDavid Major <dmajor@mozilla.com>
Wed, 9 Jan 2019 23:36:32 +0000 (23:36 +0000)
When a null terminator is required and the file size is a multiple of the system page size, MemoryBuffer will prefer pread() over mmap(), which can result in excessive memory usage.

Patch by Mike Hommey!

Differential Revision: https://reviews.llvm.org/D56475

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

lib/Object/Binary.cpp

index d7c25921ec36ec2f47fd0329b3aeb6748944778f..fe41987f5c277c66e39388819071f40476d2c63e 100644 (file)
@@ -88,7 +88,8 @@ Expected<std::unique_ptr<Binary>> object::createBinary(MemoryBufferRef Buffer,
 
 Expected<OwningBinary<Binary>> object::createBinary(StringRef Path) {
   ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr =
-      MemoryBuffer::getFileOrSTDIN(Path);
+      MemoryBuffer::getFileOrSTDIN(Path, /*FileSize=*/-1,
+                                   /*RequiresNullTerminator=*/false);
   if (std::error_code EC = FileOrErr.getError())
     return errorCodeToError(EC);
   std::unique_ptr<MemoryBuffer> &Buffer = FileOrErr.get();