From: Michael J. Spencer Date: Tue, 29 Jan 2013 01:00:21 +0000 (+0000) Subject: [ELF] Remove OwningPtr from the Chunk::write interface. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=adfb7eb211e7003ac639217e27886aeabaf063ea;p=platform%2Fupstream%2Fllvm.git [ELF] Remove OwningPtr from the Chunk::write interface. llvm-svn: 173741 --- diff --git a/lld/lib/ReaderWriter/ELF/ELFChunk.h b/lld/lib/ReaderWriter/ELF/ELFChunk.h index 22dcc1b..5045a91 100644 --- a/lld/lib/ReaderWriter/ELF/ELFChunk.h +++ b/lld/lib/ReaderWriter/ELF/ELFChunk.h @@ -76,8 +76,7 @@ public: uint64_t memSize() const { return _msize; } void setMemSize(uint64_t msize) { _msize = msize; } // Writer the chunk - virtual void write(ELFWriter *writer, - llvm::OwningPtr &buffer) = 0; + virtual void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer) = 0; // Finalize the chunk before writing virtual void finalize() = 0; diff --git a/lld/lib/ReaderWriter/ELF/ELFHeaderChunks.h b/lld/lib/ReaderWriter/ELF/ELFHeaderChunks.h index 3204119..f93e398 100644 --- a/lld/lib/ReaderWriter/ELF/ELFHeaderChunks.h +++ b/lld/lib/ReaderWriter/ELF/ELFHeaderChunks.h @@ -52,7 +52,7 @@ public: return c->Kind() == Chunk::K_ELFHeader; } - void write(ELFWriter *writer, llvm::OwningPtr &buffer); + void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); void finalize() { } @@ -75,11 +75,9 @@ ELFHeader::ELFHeader() e_flags(2); } -template -void -ELFHeader::write(ELFWriter *writer, - llvm::OwningPtr &buffer) { - uint8_t *chunkBuffer = buffer->getBufferStart(); +template +void ELFHeader::write(ELFWriter *writer, llvm::FileOutputBuffer &buffer) { + uint8_t *chunkBuffer = buffer.getBufferStart(); uint8_t *atomContent = chunkBuffer + this->fileOffset(); memcpy(atomContent, &_eh, fileSize()); } @@ -133,7 +131,7 @@ public: return c->Kind() == Chunk::K_ELFProgramHeader; } - void write(ELFWriter *writer, llvm::OwningPtr &buffer); + void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); /// \brief find a program header entry in the list of program headers PhIterT findProgramHeader(uint64_t type, uint64_t flags, uint64_t flagClear) { @@ -197,11 +195,10 @@ ELFProgramHeader::addSegment(Segment *segment) { return ret; } -template -void -ELFProgramHeader::write(ELFWriter *writer, - llvm::OwningPtr &buffer) { - uint8_t *chunkBuffer = buffer->getBufferStart(); +template +void ELFProgramHeader::write(ELFWriter *writer, + llvm::FileOutputBuffer &buffer) { + uint8_t *chunkBuffer = buffer.getBufferStart(); uint8_t *dest = chunkBuffer + this->fileOffset(); for (auto phi : _ph) { memcpy(dest, phi, sizeof(Elf_Phdr)); @@ -229,8 +226,8 @@ public: void setStringSection(ELFStringTable *s) { _stringSection = s; } - - void write(ELFWriter *writer, llvm::OwningPtr &buffer); + + void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); void finalize() { } @@ -297,11 +294,10 @@ ELFSectionHeader::updateSection(Section *section) { shdr->sh_entsize = section->entsize(); } -template -void -ELFSectionHeader::write(ELFWriter *writer, - llvm::OwningPtr &buffer) { - uint8_t *chunkBuffer = buffer->getBufferStart(); +template +void ELFSectionHeader::write(ELFWriter *writer, + llvm::FileOutputBuffer &buffer) { + uint8_t *chunkBuffer = buffer.getBufferStart(); uint8_t *dest = chunkBuffer + this->fileOffset(); for (auto shi : _sectionInfo) { memcpy(dest, shi, sizeof(Elf_Shdr)); diff --git a/lld/lib/ReaderWriter/ELF/ELFSectionChunks.h b/lld/lib/ReaderWriter/ELF/ELFSectionChunks.h index ec07df7..8318787 100644 --- a/lld/lib/ReaderWriter/ELF/ELFSectionChunks.h +++ b/lld/lib/ReaderWriter/ELF/ELFSectionChunks.h @@ -159,8 +159,7 @@ public: inline void finalize() { } /// \brief Write the section and the atom contents to the buffer - void write(ELFWriter *writer, - llvm::OwningPtr &buffer); + void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); /// Atom Iterators typedef typename std::vector::iterator atom_iter; @@ -336,11 +335,9 @@ Section::segmentKindToStr() const { } /// \brief Write the section and the atom contents to the buffer -template -void -Section::write(ELFWriter *writer, - llvm::OwningPtr &buffer) { - uint8_t *chunkBuffer = buffer->getBufferStart(); +template +void Section::write(ELFWriter *writer, llvm::FileOutputBuffer &buffer) { + uint8_t *chunkBuffer = buffer.getBufferStart(); for (auto &ai : _atoms) { const DefinedAtom *definedAtom = cast(ai._atom); if (definedAtom->contentType() == DefinedAtom::typeZeroFill) @@ -509,8 +506,7 @@ public: uint64_t addString(const llvm::StringRef symname); - void write(ELFWriter *writer, - llvm::OwningPtr &buffer); + void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); inline void finalize() { } @@ -544,11 +540,10 @@ ELFStringTable::addString(const StringRef symname) { return offset; } -template -void -ELFStringTable::write(ELFWriter *writer, - llvm::OwningPtr &buffer) { - uint8_t *chunkBuffer = buffer->getBufferStart(); +template +void ELFStringTable::write(ELFWriter *writer, + llvm::FileOutputBuffer &buffer) { + uint8_t *chunkBuffer = buffer.getBufferStart(); uint8_t *dest = chunkBuffer + this->fileOffset(); for (auto si : _strings) { memcpy(dest, si.data(), si.size()); @@ -570,8 +565,7 @@ public: void finalize(); - void write(ELFWriter *writer, - llvm::OwningPtr &buffer); + void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); static inline bool classof(const Chunk *c) { return c->kind() == Section::K_SymbolTable; @@ -688,11 +682,10 @@ ELFSymbolTable::finalize() { this->setLink(_stringSection->ordinal()); } -template -void -ELFSymbolTable::write(ELFWriter *writer, - llvm::OwningPtr &buffer) { - uint8_t *chunkBuffer = buffer->getBufferStart(); +template +void ELFSymbolTable::write(ELFWriter *writer, + llvm::FileOutputBuffer &buffer) { + uint8_t *chunkBuffer = buffer.getBufferStart(); uint8_t *dest = chunkBuffer + this->fileOffset(); for (auto sti : _symbolTable) { memcpy(dest, sti, sizeof(Elf_Sym)); diff --git a/lld/lib/ReaderWriter/ELF/ELFSegmentChunks.h b/lld/lib/ReaderWriter/ELF/ELFSegmentChunks.h index 1773137..75ad701 100644 --- a/lld/lib/ReaderWriter/ELF/ELFSegmentChunks.h +++ b/lld/lib/ReaderWriter/ELF/ELFSegmentChunks.h @@ -144,7 +144,7 @@ public: void assignVirtualAddress(uint64_t &addr); // Write the Segment - void write(ELFWriter *writer, OwningPtr &buffer); + void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); int64_t flags() const; @@ -356,9 +356,8 @@ Segment::assignVirtualAddress(uint64_t &addr) { } // Write the Segment -template -void -Segment::write(ELFWriter *writer, OwningPtr &buffer) { +template +void Segment::write(ELFWriter *writer, llvm::FileOutputBuffer &buffer) { for (auto slice : slices()) for (auto section : slice->sections()) section->write(writer, buffer); diff --git a/lld/lib/ReaderWriter/ELF/WriterELF.cpp b/lld/lib/ReaderWriter/ELF/WriterELF.cpp index ecefa19..fd7baca 100644 --- a/lld/lib/ReaderWriter/ELF/WriterELF.cpp +++ b/lld/lib/ReaderWriter/ELF/WriterELF.cpp @@ -274,11 +274,11 @@ ELFExecutableWriter::writeFile(const lld::File &file, StringRef path) { // HACK: We have to write out the header and program header here even though // they are a member of a segment because only sections are written in the // following loop. - _elfHeader->write(this, buffer); - _programHeader->write(this, buffer); + _elfHeader->write(this, *buffer); + _programHeader->write(this, *buffer); for (auto section : _layout->sections()) - section->write(this, buffer); + section->write(this, *buffer); return buffer->commit(); }