Make ObjectFile ownership of the MemoryBuffer optional.

This allows llvm-ar to mmap the input files only once.

llvm-svn: 200040
This commit is contained in:
Rafael Espindola
2014-01-24 21:32:21 +00:00
parent 1b39261990
commit afcc3df7f4
11 changed files with 98 additions and 85 deletions

View File

@@ -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();