From cc418a3af45adbe740f868a31bde6155083f0b9d Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 10 Jul 2019 00:34:13 +0000 Subject: [Support] Move llvm::MemoryBuffer to sys::fs::file_t Summary: On Windows, Posix integer file descriptors are a compatibility layer over native file handles provided by the C runtime. There is a hard limit on the maximum number of file descriptors that a process can open, and the limit is 8192. LLD typically doesn't run into this limit because it opens input files, maps them into memory, and then immediately closes the file descriptor. This prevents it from running out of FDs. For various reasons, I'd like to open handles to every input file and keep them open during linking. That requires migrating MemoryBuffer over to taking open native file handles instead of integer FDs. Reviewers: aganea, Bigcheese Reviewed By: aganea Subscribers: smeenai, silvas, mehdi_amini, hiraditya, steven_wu, dexonsmith, dang, llvm-commits, zturner Tags: #llvm Differential Revision: https://reviews.llvm.org/D63453 llvm-svn: 365588 --- llvm/lib/LTO/Caching.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'llvm/lib/LTO/Caching.cpp') diff --git a/llvm/lib/LTO/Caching.cpp b/llvm/lib/LTO/Caching.cpp index 9971a28aed4..7b3fc020d6e 100644 --- a/llvm/lib/LTO/Caching.cpp +++ b/llvm/lib/LTO/Caching.cpp @@ -44,7 +44,8 @@ Expected lto::localCache(StringRef CacheDirectoryPath, Twine(EntryPath), FD, sys::fs::OF_UpdateAtime, &ResultPath); if (!EC) { ErrorOr> MBOrErr = - MemoryBuffer::getOpenFile(FD, EntryPath, + MemoryBuffer::getOpenFile(sys::fs::convertFDToNativeFile(FD), + EntryPath, /*FileSize*/ -1, /*RequiresNullTerminator*/ false); close(FD); @@ -86,9 +87,9 @@ Expected lto::localCache(StringRef CacheDirectoryPath, // Open the file first to avoid racing with a cache pruner. ErrorOr> MBOrErr = - MemoryBuffer::getOpenFile(TempFile.FD, TempFile.TmpName, - /*FileSize*/ -1, - /*RequiresNullTerminator*/ false); + MemoryBuffer::getOpenFile( + sys::fs::convertFDToNativeFile(TempFile.FD), TempFile.TmpName, + /*FileSize=*/-1, /*RequiresNullTerminator=*/false); if (!MBOrErr) report_fatal_error(Twine("Failed to open new cache file ") + TempFile.TmpName + ": " + -- cgit v1.2.3