diff options
| author | Shankar Easwaran <shankare@codeaurora.org> | 2013-02-24 03:09:10 +0000 |
|---|---|---|
| committer | Shankar Easwaran <shankare@codeaurora.org> | 2013-02-24 03:09:10 +0000 |
| commit | db74ffbe72d3d343c05e815d77163cfbbc7a3070 (patch) | |
| tree | d9da7e20dae53facd043a5620db2f6f875f54fb5 /lld/lib/ReaderWriter/ELF/SectionChunks.h | |
| parent | 2847b2202978cbe5b4e1fb7799e71176410ccb40 (diff) | |
| download | bcm5719-llvm-db74ffbe72d3d343c05e815d77163cfbbc7a3070.tar.gz bcm5719-llvm-db74ffbe72d3d343c05e815d77163cfbbc7a3070.zip | |
[ELF][Hexagon]add typeZeroFillFast
llvm-svn: 175983
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/SectionChunks.h')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/SectionChunks.h | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/lld/lib/ReaderWriter/ELF/SectionChunks.h b/lld/lib/ReaderWriter/ELF/SectionChunks.h index 00dcbd19519..24d6f946690 100644 --- a/lld/lib/ReaderWriter/ELF/SectionChunks.h +++ b/lld/lib/ReaderWriter/ELF/SectionChunks.h @@ -128,8 +128,10 @@ public: case DefinedAtom::typeTLVInitialData: this->_type = SHT_PROGBITS; break; - case DefinedAtom::typeZeroFill: + case DefinedAtom::typeTLVInitialZeroFill: + case DefinedAtom::typeZeroFillFast: + case DefinedAtom::typeZeroFill: this->_type = SHT_NOBITS; break; } @@ -194,7 +196,8 @@ public: /// \brief Does the Atom occupy any disk space bool occupiesNoDiskSpace() const { - return _contentType == DefinedAtom::typeZeroFill; + return ((_contentType == DefinedAtom::typeZeroFill) || + (_contentType == DefinedAtom::typeZeroFillFast)); } /// \brief The permission of the section is the most permissive permission @@ -262,13 +265,13 @@ const AtomLayout &AtomSection<ELFT>::appendAtom(const Atom *atom) { case Atom::definitionRegular: switch(definedAtom->contentType()) { case DefinedAtom::typeCode: - case DefinedAtom::typeData: case DefinedAtom::typeConstant: + case DefinedAtom::typeData: + case DefinedAtom::typeDataFast: case DefinedAtom::typeGOT: case DefinedAtom::typeStub: case DefinedAtom::typeResolver: case DefinedAtom::typeTLVInitialData: - case DefinedAtom::typeDataFast: _atoms.push_back(new (_alloc) AtomLayout(atom, fOffset, 0)); this->_fsize = fOffset + definedAtom->size(); this->_msize = mOffset + definedAtom->size(); @@ -277,8 +280,9 @@ const AtomLayout &AtomSection<ELFT>::appendAtom(const Atom *atom) { << "Adding atom: " << atom->name() << "@" << fOffset << "\n"); break; - case DefinedAtom::typeZeroFill: case DefinedAtom::typeTLVInitialZeroFill: + case DefinedAtom::typeZeroFill: + case DefinedAtom::typeZeroFillFast: _atoms.push_back(new (_alloc) AtomLayout(atom, mOffset, 0)); this->_msize = mOffset + definedAtom->size(); break; @@ -303,18 +307,18 @@ const AtomLayout &AtomSection<ELFT>::appendAtom(const Atom *atom) { /// and printing purposes template <class ELFT> StringRef Section<ELFT>::segmentKindToStr() const { switch(_segmentType) { + case llvm::ELF::PT_DYNAMIC: + return "DYNAMIC"; case llvm::ELF::PT_INTERP: return "INTERP"; case llvm::ELF::PT_LOAD: return "LOAD"; case llvm::ELF::PT_GNU_EH_FRAME: return "EH_FRAME"; - case llvm::ELF::PT_NOTE: - return "NOTE"; - case llvm::ELF::PT_DYNAMIC: - return "DYNAMIC"; case llvm::ELF::PT_GNU_RELRO: return "RELRO"; + case llvm::ELF::PT_NOTE: + return "NOTE"; case llvm::ELF::PT_NULL: return "NULL"; default: @@ -332,7 +336,8 @@ void AtomSection<ELFT>::write(ELFWriter *writer, llvm::dbgs() << "Writing atom: " << ai->_atom->name() << " | " << ai->_fileOffset << "\n"); const DefinedAtom *definedAtom = cast<DefinedAtom>(ai->_atom); - if (definedAtom->contentType() == DefinedAtom::typeZeroFill) + if ((definedAtom->contentType() == DefinedAtom::typeZeroFill) || + (definedAtom->contentType() == DefinedAtom::typeZeroFillFast)) continue; // Copy raw content of atom to file buffer. llvm::ArrayRef<uint8_t> content = definedAtom->rawContent(); @@ -640,6 +645,7 @@ void SymbolTable<ELFT>::addSymbol(const Atom *atom, int32_t sectionIndex, type = llvm::ELF::STT_OBJECT; break; case DefinedAtom::typeZeroFill: + case DefinedAtom::typeZeroFillFast: type = llvm::ELF::STT_OBJECT; symbol.st_value = addr; break; |

