diff options
author | Reid Kleckner <rnk@google.com> | 2019-07-11 20:29:32 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2019-07-11 20:29:32 +0000 |
commit | f002fcb2ad64a75a2f0aea3eb067614f4681284b (patch) | |
tree | e13291958d4eaad57805ed119666bb5c52d04969 /llvm/lib/XRay/InstrumentationMap.cpp | |
parent | f4af9a9d806f0471a94d9c803c581e9ef1ea9424 (diff) | |
download | bcm5719-llvm-f002fcb2ad64a75a2f0aea3eb067614f4681284b.tar.gz bcm5719-llvm-f002fcb2ad64a75a2f0aea3eb067614f4681284b.zip |
Open native file handles to avoid converting from FDs, NFC
Follow up to r365588.
llvm-svn: 365820
Diffstat (limited to 'llvm/lib/XRay/InstrumentationMap.cpp')
-rw-r--r-- | llvm/lib/XRay/InstrumentationMap.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/llvm/lib/XRay/InstrumentationMap.cpp b/llvm/lib/XRay/InstrumentationMap.cpp index 5b90c5a7ebd..fe5e941f7ea 100644 --- a/llvm/lib/XRay/InstrumentationMap.cpp +++ b/llvm/lib/XRay/InstrumentationMap.cpp @@ -172,14 +172,14 @@ loadObj(StringRef Filename, object::OwningBinary<object::ObjectFile> &ObjFile, } static Error -loadYAML(int Fd, size_t FileSize, StringRef Filename, +loadYAML(sys::fs::file_t Fd, size_t FileSize, StringRef Filename, InstrumentationMap::SledContainer &Sleds, InstrumentationMap::FunctionAddressMap &FunctionAddresses, InstrumentationMap::FunctionAddressReverseMap &FunctionIds) { std::error_code EC; sys::fs::mapped_file_region MappedFile( - sys::fs::convertFDToNativeFile(Fd), - sys::fs::mapped_file_region::mapmode::readonly, FileSize, 0, EC); + Fd, sys::fs::mapped_file_region::mapmode::readonly, FileSize, 0, EC); + sys::fs::closeFile(Fd); if (EC) return make_error<StringError>( Twine("Failed memory-mapping file '") + Filename + "'.", EC); @@ -215,9 +215,12 @@ llvm::xray::loadInstrumentationMap(StringRef Filename) { if (!ObjectFileOrError) { auto E = ObjectFileOrError.takeError(); // We try to load it as YAML if the ELF load didn't work. - int Fd; - if (sys::fs::openFileForRead(Filename, Fd)) + Expected<sys::fs::file_t> FdOrErr = sys::fs::openNativeFileForRead(Filename); + if (!FdOrErr) { + // Report the ELF load error if YAML failed. + consumeError(FdOrErr.takeError()); return std::move(E); + } uint64_t FileSize; if (sys::fs::file_size(Filename, FileSize)) @@ -230,7 +233,7 @@ llvm::xray::loadInstrumentationMap(StringRef Filename) { // From this point on the errors will be only for the YAML parts, so we // consume the errors at this point. consumeError(std::move(E)); - if (auto E = loadYAML(Fd, FileSize, Filename, Map.Sleds, + if (auto E = loadYAML(*FdOrErr, FileSize, Filename, Map.Sleds, Map.FunctionAddresses, Map.FunctionIds)) return std::move(E); } else if (auto E = loadObj(Filename, *ObjectFileOrError, Map.Sleds, |