summaryrefslogtreecommitdiff
path: root/tools/lto/LTOModule.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-02-08 22:40:47 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-02-08 22:40:47 +0000
commitb4cc031a3e1306fea74c9211d50c5cde6d9a8cd5 (patch)
tree80f2d7365cd402e9040ed85abf3b06a17d59f423 /tools/lto/LTOModule.cpp
parent971b83b67a9812556cdb97bb58aa96fb37af458d (diff)
downloadllvm-b4cc031a3e1306fea74c9211d50c5cde6d9a8cd5.tar.gz
llvm-b4cc031a3e1306fea74c9211d50c5cde6d9a8cd5.tar.bz2
llvm-b4cc031a3e1306fea74c9211d50c5cde6d9a8cd5.tar.xz
Don't open the file again in the gold plugin. To be able to do this, update
MemoryBuffer::getOpenFile to not close the file descriptor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125128 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/lto/LTOModule.cpp')
-rw-r--r--tools/lto/LTOModule.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/tools/lto/LTOModule.cpp b/tools/lto/LTOModule.cpp
index e2ecabcc1c..ca937bf2ff 100644
--- a/tools/lto/LTOModule.cpp
+++ b/tools/lto/LTOModule.cpp
@@ -87,6 +87,17 @@ LTOModule *LTOModule::makeLTOModule(const char *path,
return makeLTOModule(buffer.get(), errMsg);
}
+LTOModule *LTOModule::makeLTOModule(int fd, const char *path,
+ off_t size,
+ std::string &errMsg) {
+ OwningPtr<MemoryBuffer> buffer;
+ if (error_code ec = MemoryBuffer::getOpenFile(fd, path, buffer, size)) {
+ errMsg = ec.message();
+ return NULL;
+ }
+ return makeLTOModule(buffer.get(), errMsg);
+}
+
/// makeBuffer - Create a MemoryBuffer from a memory range. MemoryBuffer
/// requires the byte past end of the buffer to be a zero. We might get lucky
/// and already be that way, otherwise make a copy. Also if next byte is on a