summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/COFFObjectFile.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-01-24 21:32:21 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-01-24 21:32:21 +0000
commitafcc3df7f4db85832b13a6f4d58e24ac9e7ccc43 (patch)
treee608147b8d62c19296d96c7e00de10c220811fe4 /llvm/lib/Object/COFFObjectFile.cpp
parent1b392619907d1b5bed4d8533ea8c0cf7e19c5b48 (diff)
downloadbcm5719-llvm-afcc3df7f4db85832b13a6f4d58e24ac9e7ccc43.tar.gz
bcm5719-llvm-afcc3df7f4db85832b13a6f4d58e24ac9e7ccc43.zip
Make ObjectFile ownership of the MemoryBuffer optional.
This allows llvm-ar to mmap the input files only once. llvm-svn: 200040
Diffstat (limited to 'llvm/lib/Object/COFFObjectFile.cpp')
-rw-r--r--llvm/lib/Object/COFFObjectFile.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp
index a7b06885008..c28f88484fb 100644
--- a/llvm/lib/Object/COFFObjectFile.cpp
+++ b/llvm/lib/Object/COFFObjectFile.cpp
@@ -463,11 +463,12 @@ error_code COFFObjectFile::initExportTablePtr() {
return object_error::success;
}
-COFFObjectFile::COFFObjectFile(MemoryBuffer *Object, error_code &EC)
- : ObjectFile(Binary::ID_COFF, Object), COFFHeader(0), PE32Header(0),
- DataDirectory(0), SectionTable(0), SymbolTable(0), StringTable(0),
- StringTableSize(0), ImportDirectory(0), NumberOfImportDirectory(0),
- ExportDirectory(0) {
+COFFObjectFile::COFFObjectFile(MemoryBuffer *Object, error_code &EC,
+ bool BufferOwned)
+ : ObjectFile(Binary::ID_COFF, Object, BufferOwned), COFFHeader(0),
+ PE32Header(0), DataDirectory(0), SectionTable(0), SymbolTable(0),
+ StringTable(0), StringTableSize(0), ImportDirectory(0),
+ NumberOfImportDirectory(0), ExportDirectory(0) {
// Check that we at least have enough room for a header.
if (!checkSize(Data, EC, sizeof(coff_file_header))) return;
@@ -1015,9 +1016,10 @@ error_code ExportDirectoryEntryRef::getSymbolName(StringRef &Result) const {
return object_error::success;
}
-ErrorOr<ObjectFile *> ObjectFile::createCOFFObjectFile(MemoryBuffer *Object) {
+ErrorOr<ObjectFile *> ObjectFile::createCOFFObjectFile(MemoryBuffer *Object,
+ bool BufferOwned) {
error_code EC;
- OwningPtr<COFFObjectFile> Ret(new COFFObjectFile(Object, EC));
+ OwningPtr<COFFObjectFile> Ret(new COFFObjectFile(Object, EC, BufferOwned));
if (EC)
return EC;
return Ret.take();
OpenPOWER on IntegriCloud