summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/ELF/ELFChunk.h3
-rw-r--r--lld/lib/ReaderWriter/ELF/ELFHeaderChunks.h34
-rw-r--r--lld/lib/ReaderWriter/ELF/ELFSectionChunks.h35
-rw-r--r--lld/lib/ReaderWriter/ELF/ELFSegmentChunks.h7
-rw-r--r--lld/lib/ReaderWriter/ELF/WriterELF.cpp6
5 files changed, 36 insertions, 49 deletions
diff --git a/lld/lib/ReaderWriter/ELF/ELFChunk.h b/lld/lib/ReaderWriter/ELF/ELFChunk.h
index 22dcc1b0411..5045a91a1ee 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<llvm::FileOutputBuffer> &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 32041199f89..f93e398e5e5 100644
--- a/lld/lib/ReaderWriter/ELF/ELFHeaderChunks.h
+++ b/lld/lib/ReaderWriter/ELF/ELFHeaderChunks.h
@@ -52,7 +52,7 @@ public:
return c->Kind() == Chunk<ELFT>::K_ELFHeader;
}
- void write(ELFWriter *writer, llvm::OwningPtr<llvm::FileOutputBuffer> &buffer);
+ void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer);
void finalize() { }
@@ -75,11 +75,9 @@ ELFHeader<ELFT>::ELFHeader()
e_flags(2);
}
-template<class ELFT>
-void
-ELFHeader<ELFT>::write(ELFWriter *writer,
- llvm::OwningPtr<llvm::FileOutputBuffer> &buffer) {
- uint8_t *chunkBuffer = buffer->getBufferStart();
+template <class ELFT>
+void ELFHeader<ELFT>::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<ELFT>::K_ELFProgramHeader;
}
- void write(ELFWriter *writer, llvm::OwningPtr<llvm::FileOutputBuffer> &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<ELFT>::addSegment(Segment<ELFT> *segment) {
return ret;
}
-template<class ELFT>
-void
-ELFProgramHeader<ELFT>::write(ELFWriter *writer,
- llvm::OwningPtr<llvm::FileOutputBuffer> &buffer) {
- uint8_t *chunkBuffer = buffer->getBufferStart();
+template <class ELFT>
+void ELFProgramHeader<ELFT>::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<ELFT> *s) {
_stringSection = s;
}
-
- void write(ELFWriter *writer, llvm::OwningPtr<llvm::FileOutputBuffer> &buffer);
+
+ void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer);
void finalize() { }
@@ -297,11 +294,10 @@ ELFSectionHeader<ELFT>::updateSection(Section<ELFT> *section) {
shdr->sh_entsize = section->entsize();
}
-template<class ELFT>
-void
-ELFSectionHeader<ELFT>::write(ELFWriter *writer,
- llvm::OwningPtr<llvm::FileOutputBuffer> &buffer) {
- uint8_t *chunkBuffer = buffer->getBufferStart();
+template <class ELFT>
+void ELFSectionHeader<ELFT>::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 ec07df776c0..8318787abb0 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<llvm::FileOutputBuffer> &buffer);
+ void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer);
/// Atom Iterators
typedef typename std::vector<AtomLayout>::iterator atom_iter;
@@ -336,11 +335,9 @@ Section<ELFT>::segmentKindToStr() const {
}
/// \brief Write the section and the atom contents to the buffer
-template<class ELFT>
-void
-Section<ELFT>::write(ELFWriter *writer,
- llvm::OwningPtr<llvm::FileOutputBuffer> &buffer) {
- uint8_t *chunkBuffer = buffer->getBufferStart();
+template <class ELFT>
+void Section<ELFT>::write(ELFWriter *writer, llvm::FileOutputBuffer &buffer) {
+ uint8_t *chunkBuffer = buffer.getBufferStart();
for (auto &ai : _atoms) {
const DefinedAtom *definedAtom = cast<DefinedAtom>(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<llvm::FileOutputBuffer> &buffer);
+ void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer);
inline void finalize() { }
@@ -544,11 +540,10 @@ ELFStringTable<ELFT>::addString(const StringRef symname) {
return offset;
}
-template<class ELFT>
-void
-ELFStringTable<ELFT>::write(ELFWriter *writer,
- llvm::OwningPtr<llvm::FileOutputBuffer> &buffer) {
- uint8_t *chunkBuffer = buffer->getBufferStart();
+template <class ELFT>
+void ELFStringTable<ELFT>::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<llvm::FileOutputBuffer> &buffer);
+ void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer);
static inline bool classof(const Chunk<ELFT> *c) {
return c->kind() == Section<ELFT>::K_SymbolTable;
@@ -688,11 +682,10 @@ ELFSymbolTable<ELFT>::finalize() {
this->setLink(_stringSection->ordinal());
}
-template<class ELFT>
-void
-ELFSymbolTable<ELFT>::write(ELFWriter *writer,
- llvm::OwningPtr<llvm::FileOutputBuffer> &buffer) {
- uint8_t *chunkBuffer = buffer->getBufferStart();
+template <class ELFT>
+void ELFSymbolTable<ELFT>::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 177313776b9..75ad7019dfe 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<llvm::FileOutputBuffer> &buffer);
+ void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer);
int64_t flags() const;
@@ -356,9 +356,8 @@ Segment<ELFT>::assignVirtualAddress(uint64_t &addr) {
}
// Write the Segment
-template<class ELFT>
-void
-Segment<ELFT>::write(ELFWriter *writer, OwningPtr<llvm::FileOutputBuffer> &buffer) {
+template <class ELFT>
+void Segment<ELFT>::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 ecefa19b8b8..fd7baca0811 100644
--- a/lld/lib/ReaderWriter/ELF/WriterELF.cpp
+++ b/lld/lib/ReaderWriter/ELF/WriterELF.cpp
@@ -274,11 +274,11 @@ ELFExecutableWriter<ELFT>::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();
}
OpenPOWER on IntegriCloud