diff options
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/Atoms.h | 117 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/EdataPass.h | 10 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h | 2 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/IdataPass.h | 16 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/LoadConfigPass.h | 10 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp | 26 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp | 26 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/SetSubsystemPass.h | 2 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp | 24 |
9 files changed, 117 insertions, 116 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/Atoms.h b/lld/lib/ReaderWriter/PECOFF/Atoms.h index 911e45cfa7d..a7477ddffa6 100644 --- a/lld/lib/ReaderWriter/PECOFF/Atoms.h +++ b/lld/lib/ReaderWriter/PECOFF/Atoms.h @@ -33,17 +33,16 @@ public: : Reference(ns, arch, relocType), _target(target), _offsetInAtom(offsetInAtom) {} - virtual const Atom *target() const { return _target; } - virtual void setTarget(const Atom *newAtom) { _target = newAtom; } + const Atom *target() const override { return _target; } + void setTarget(const Atom *newAtom) override { _target = newAtom; } // Addend is a value to be added to the relocation target. For example, if // target=AtomX and addend=4, the relocation address will become the address // of AtomX + 4. COFF does not support that sort of relocation, thus addend // is always zero. - virtual Addend addend() const { return 0; } - virtual void setAddend(Addend) {} - - virtual uint64_t offsetInAtom() const { return _offsetInAtom; } + Addend addend() const override { return 0; } + void setAddend(Addend) override {} + uint64_t offsetInAtom() const override { return _offsetInAtom; } private: const Atom *_target; @@ -55,10 +54,10 @@ public: COFFAbsoluteAtom(const File &f, StringRef name, Scope scope, uint64_t value) : _owningFile(f), _name(name), _scope(scope), _value(value) {} - virtual const File &file() const { return _owningFile; } - virtual Scope scope() const { return _scope; } - virtual StringRef name() const { return _name; } - virtual uint64_t value() const { return _value; } + const File &file() const override { return _owningFile; } + Scope scope() const override { return _scope; } + StringRef name() const override { return _name; } + uint64_t value() const override { return _value; } private: const File &_owningFile; @@ -73,10 +72,10 @@ public: const UndefinedAtom *fallback = nullptr) : _owningFile(file), _name(name), _fallback(fallback) {} - virtual const File &file() const { return _owningFile; } - virtual StringRef name() const { return _name; } - virtual CanBeNull canBeNull() const { return CanBeNull::canBeNullNever; } - virtual const UndefinedAtom *fallback() const { return _fallback; } + const File &file() const override { return _owningFile; } + StringRef name() const override { return _name; } + CanBeNull canBeNull() const override { return CanBeNull::canBeNullNever; } + const UndefinedAtom *fallback() const override { return _fallback; } private: const File &_owningFile; @@ -95,16 +94,18 @@ public: Internal }; - virtual const File &file() const { return _file; } - virtual StringRef name() const { return _name; } - virtual Interposable interposable() const { return interposeNo; } - virtual Merge merge() const { return mergeNo; } - virtual Alignment alignment() const { return Alignment(0); } - virtual SectionChoice sectionChoice() const = 0; - virtual StringRef customSectionName() const { return ""; } - virtual SectionPosition sectionPosition() const { return sectionPositionAny; } - virtual DeadStripKind deadStrip() const { return deadStripNormal; } - virtual bool isAlias() const { return false; } + const File &file() const override { return _file; } + StringRef name() const override { return _name; } + Interposable interposable() const override { return interposeNo; } + Merge merge() const override { return mergeNo; } + Alignment alignment() const override { return Alignment(0); } + SectionChoice sectionChoice() const = 0; + StringRef customSectionName() const override { return ""; } + SectionPosition sectionPosition() const override { + return sectionPositionAny; + } + DeadStripKind deadStrip() const override { return deadStripNormal; } + bool isAlias() const override { return false; } Kind getKind() const { return _kind; } @@ -112,11 +113,11 @@ public: _references.push_back(std::move(reference)); } - virtual reference_iterator begin() const { + reference_iterator begin() const override { return reference_iterator(*this, reinterpret_cast<const void *>(0)); } - virtual reference_iterator end() const { + reference_iterator end() const override { return reference_iterator( *this, reinterpret_cast<const void *>(_references.size())); } @@ -126,12 +127,12 @@ protected: : _file(file), _name(name), _kind(kind) {} private: - virtual const Reference *derefIterator(const void *iter) const { + const Reference *derefIterator(const void *iter) const override { size_t index = reinterpret_cast<size_t>(iter); return _references[index].get(); } - virtual void incrementIterator(const void *&iter) const { + void incrementIterator(const void *&iter) const override { size_t index = reinterpret_cast<size_t>(iter); iter = reinterpret_cast<const void *>(index + 1); } @@ -159,13 +160,13 @@ public: void setAlignment(Alignment val) { _alignment = val; } - virtual SectionChoice sectionChoice() const { return sectionCustomRequired; } - virtual StringRef customSectionName() const { return _sectionName; } - virtual Scope scope() const { return _scope; } - virtual ContentType contentType() const { return _contentType; } - virtual ContentPermissions permissions() const { return _permissions; } - virtual uint64_t ordinal() const { return _ordinal; } - virtual Alignment alignment() const { return _alignment; } + SectionChoice sectionChoice() const override { return sectionCustomRequired; } + StringRef customSectionName() const override { return _sectionName; } + Scope scope() const override { return _scope; } + ContentType contentType() const override { return _contentType; } + ContentPermissions permissions() const override { return _permissions; } + uint64_t ordinal() const override { return _ordinal; } + Alignment alignment() const override { return _alignment; } private: StringRef _sectionName; @@ -188,11 +189,11 @@ public: ordinal), _isComdat(isComdat), _merge(merge), _dataref(data) {} - virtual Merge merge() const { return _merge; } - virtual uint64_t size() const { return _dataref.size(); } - virtual ArrayRef<uint8_t> rawContent() const { return _dataref; } + Merge merge() const override { return _merge; } + uint64_t size() const override { return _dataref.size(); } + ArrayRef<uint8_t> rawContent() const override { return _dataref; } - virtual DeadStripKind deadStrip() const { + DeadStripKind deadStrip() const override { // Only COMDAT symbols would be dead-stripped. return _isComdat ? deadStripNormal : deadStripNever; } @@ -213,9 +214,9 @@ public: ordinal), _merge(merge), _size(size) {} - virtual Merge merge() const { return _merge; } - virtual uint64_t size() const { return _size; } - virtual ArrayRef<uint8_t> rawContent() const { return _contents; } + Merge merge() const override { return _merge; } + uint64_t size() const override { return _size; } + ArrayRef<uint8_t> rawContent() const override { return _contents; } private: Merge _merge; @@ -227,12 +228,12 @@ private: /// not read from file. class COFFLinkerInternalAtom : public COFFBaseDefinedAtom { public: - virtual SectionChoice sectionChoice() const { return sectionBasedOnContent; } - virtual uint64_t ordinal() const { return _ordinal; } - virtual Scope scope() const { return scopeGlobal; } - virtual Alignment alignment() const { return Alignment(0); } - virtual uint64_t size() const { return _data.size(); } - virtual ArrayRef<uint8_t> rawContent() const { return _data; } + SectionChoice sectionChoice() const override { return sectionBasedOnContent; } + uint64_t ordinal() const override { return _ordinal; } + Scope scope() const override { return scopeGlobal; } + Alignment alignment() const override { return Alignment(0); } + uint64_t size() const override { return _data.size(); } + ArrayRef<uint8_t> rawContent() const override { return _data; } protected: COFFLinkerInternalAtom(const File &file, uint64_t ordinal, @@ -252,10 +253,10 @@ public: : COFFLinkerInternalAtom(file, ordinal, stringRefToVector(contents)), _sectionName(sectionName) {} - virtual SectionChoice sectionChoice() const { return sectionCustomRequired; } - virtual StringRef customSectionName() const { return _sectionName; } - virtual ContentType contentType() const { return typeData; } - virtual ContentPermissions permissions() const { return permR__; } + SectionChoice sectionChoice() const override { return sectionCustomRequired; } + StringRef customSectionName() const override { return _sectionName; } + ContentType contentType() const override { return typeData; } + ContentPermissions permissions() const override { return permR__; } private: StringRef _sectionName; @@ -279,20 +280,20 @@ public: _importName(importName), _dllName(dllName), _importTableEntry(nullptr) { } - virtual const File &file() const { return _file; } + const File &file() const override { return _file; } uint16_t hint() const { return _hint; } /// Returns the symbol name to be used by the core linker. - virtual StringRef name() const { return _mangledName; } + StringRef name() const override { return _mangledName; } /// Returns the symbol name to be used in the import description table in the /// COFF header. virtual StringRef importName() const { return _importName; } - virtual StringRef loadName() const { return _dllName; } - virtual bool canBeNullAtRuntime() const { return false; } - virtual Type type() const { return Type::Unknown; } - virtual uint64_t size() const { return 0; } + StringRef loadName() const override { return _dllName; } + bool canBeNullAtRuntime() const override { return false; } + Type type() const override { return Type::Unknown; } + uint64_t size() const override { return 0; } void setImportTableEntry(const DefinedAtom *atom) { _importTableEntry = atom; diff --git a/lld/lib/ReaderWriter/PECOFF/EdataPass.h b/lld/lib/ReaderWriter/PECOFF/EdataPass.h index 4239f889fae..0bdaf8d4367 100644 --- a/lld/lib/ReaderWriter/PECOFF/EdataPass.h +++ b/lld/lib/ReaderWriter/PECOFF/EdataPass.h @@ -51,10 +51,10 @@ public: : COFFLinkerInternalAtom(file, file.getNextOrdinal(), std::vector<uint8_t>(size)) {} - virtual SectionChoice sectionChoice() const { return sectionCustomRequired; } - virtual StringRef customSectionName() const { return ".edata"; } - virtual ContentType contentType() const { return typeData; } - virtual ContentPermissions permissions() const { return permR__; } + SectionChoice sectionChoice() const override { return sectionCustomRequired; } + StringRef customSectionName() const override { return ".edata"; } + ContentType contentType() const override { return typeData; } + ContentPermissions permissions() const override { return permR__; } template <typename T> T *getContents() const { return (T *)rawContent().data(); @@ -68,7 +68,7 @@ public: EdataPass(PECOFFLinkingContext &ctx) : _ctx(ctx), _file(ctx), _stringOrdinal(1024) {} - virtual void perform(std::unique_ptr<MutableFile> &file); + void perform(std::unique_ptr<MutableFile> &file) override; private: edata::EdataAtom * diff --git a/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h b/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h index f4f1e8dd66c..f5c2231405a 100644 --- a/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h +++ b/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h @@ -48,7 +48,7 @@ static bool compare(const DefinedAtom *left, const DefinedAtom *right) { class GroupedSectionsPass : public lld::Pass { public: - virtual void perform(std::unique_ptr<MutableFile> &file) { + void perform(std::unique_ptr<MutableFile> &file) override { auto definedAtoms = file->definedAtoms(); std::stable_sort(definedAtoms.begin(), definedAtoms.end(), compare); } diff --git a/lld/lib/ReaderWriter/PECOFF/IdataPass.h b/lld/lib/ReaderWriter/PECOFF/IdataPass.h index 0e11cbd6019..979840042bc 100644 --- a/lld/lib/ReaderWriter/PECOFF/IdataPass.h +++ b/lld/lib/ReaderWriter/PECOFF/IdataPass.h @@ -49,10 +49,10 @@ struct Context { /// The root class of all idata atoms. class IdataAtom : public COFFLinkerInternalAtom { public: - virtual SectionChoice sectionChoice() const { return sectionCustomRequired; } - virtual StringRef customSectionName() const { return ".idata"; } - virtual ContentType contentType() const { return typeData; } - virtual ContentPermissions permissions() const { return permR__; } + SectionChoice sectionChoice() const override { return sectionCustomRequired; } + StringRef customSectionName() const override { return ".idata"; } + ContentType contentType() const override { return typeData; } + ContentPermissions permissions() const override { return permR__; } protected: IdataAtom(Context &context, std::vector<uint8_t> data); @@ -84,7 +84,7 @@ public: : IdataAtom(context, assembleRawContent(contents)), _sectionName(sectionName) {} - virtual StringRef customSectionName() const { + StringRef customSectionName() const override { return _sectionName; }; @@ -105,7 +105,7 @@ public: addRelocations(context, loadName, sharedAtoms); } - virtual StringRef customSectionName() const { return ".idata.d"; } + StringRef customSectionName() const override { return ".idata.d"; } private: void addRelocations(Context &context, StringRef loadName, @@ -124,7 +124,7 @@ public: explicit NullImportDirectoryAtom(Context &context) : IdataAtom(context, std::vector<uint8_t>(20, 0)) {} - virtual StringRef customSectionName() const { return ".idata.d"; } + StringRef customSectionName() const override { return ".idata.d"; } }; } // namespace idata @@ -133,7 +133,7 @@ class IdataPass : public lld::Pass { public: IdataPass(const LinkingContext &ctx) : _dummyFile(ctx) {} - virtual void perform(std::unique_ptr<MutableFile> &file); + void perform(std::unique_ptr<MutableFile> &file) override; private: std::map<StringRef, std::vector<COFFSharedLibraryAtom *> > diff --git a/lld/lib/ReaderWriter/PECOFF/LoadConfigPass.h b/lld/lib/ReaderWriter/PECOFF/LoadConfigPass.h index a8106234b73..ba942d31469 100644 --- a/lld/lib/ReaderWriter/PECOFF/LoadConfigPass.h +++ b/lld/lib/ReaderWriter/PECOFF/LoadConfigPass.h @@ -35,10 +35,10 @@ class LoadConfigAtom : public COFFLinkerInternalAtom { public: LoadConfigAtom(VirtualFile &file, const DefinedAtom *sxdata, int count); - virtual SectionChoice sectionChoice() const { return sectionCustomRequired; } - virtual StringRef customSectionName() const { return ".loadcfg"; } - virtual ContentType contentType() const { return typeData; } - virtual ContentPermissions permissions() const { return permR__; } + SectionChoice sectionChoice() const override { return sectionCustomRequired; } + StringRef customSectionName() const override { return ".loadcfg"; } + ContentType contentType() const override { return typeData; } + ContentPermissions permissions() const override { return permR__; } template <typename T> T *getContents() const { return (T *)rawContent().data(); @@ -51,7 +51,7 @@ class LoadConfigPass : public lld::Pass { public: LoadConfigPass(PECOFFLinkingContext &ctx) : _ctx(ctx), _file(ctx) {} - virtual void perform(std::unique_ptr<MutableFile> &file); + void perform(std::unique_ptr<MutableFile> &file) override; private: PECOFFLinkingContext &_ctx; diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp index 8da16d8e610..4fb045664b4 100644 --- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp @@ -72,19 +72,19 @@ public: StringRef getLinkerDirectives() const { return _directives; } bool isCompatibleWithSEH() const { return _compatibleWithSEH; } - virtual const atom_collection<DefinedAtom> &defined() const { + const atom_collection<DefinedAtom> &defined() const override { return _definedAtoms; } - virtual const atom_collection<UndefinedAtom> &undefined() const { + const atom_collection<UndefinedAtom> &undefined() const override { return _undefinedAtoms; } - virtual const atom_collection<SharedLibraryAtom> &sharedLibrary() const { + const atom_collection<SharedLibraryAtom> &sharedLibrary() const override { return _sharedLibraryAtoms; } - virtual const atom_collection<AbsoluteAtom> &absolute() const { + const atom_collection<AbsoluteAtom> &absolute() const override { return _absoluteAtoms; } @@ -176,7 +176,7 @@ private: class BumpPtrStringSaver : public llvm::cl::StringSaver { public: - virtual const char *SaveString(const char *str) { + const char *SaveString(const char *str) override { size_t len = strlen(str); char *copy = _alloc.Allocate<char>(len + 1); memcpy(copy, str, len + 1); @@ -892,14 +892,14 @@ StringRef FileCOFF::ArrayRefToString(ArrayRef<uint8_t> array) { // cvtres.exe on RC files and then then link its outputs. class ResourceFileReader : public Reader { public: - virtual bool canParse(file_magic magic, StringRef ext, - const MemoryBuffer &) const { + bool canParse(file_magic magic, StringRef ext, + const MemoryBuffer &) const override { return (magic == llvm::sys::fs::file_magic::windows_resource); } - virtual error_code + error_code parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &, - std::vector<std::unique_ptr<File>> &result) const { + std::vector<std::unique_ptr<File> > &result) const override { // Convert RC file to COFF ErrorOr<std::string> coffPath = convertResourceFileToCOFF(std::move(mb)); if (error_code ec = coffPath.getError()) @@ -994,14 +994,14 @@ class COFFObjectReader : public Reader { public: COFFObjectReader(PECOFFLinkingContext &ctx) : _context(ctx) {} - virtual bool canParse(file_magic magic, StringRef ext, - const MemoryBuffer &) const { + bool canParse(file_magic magic, StringRef ext, + const MemoryBuffer &) const override { return (magic == llvm::sys::fs::file_magic::coff_object); } - virtual error_code + error_code parseFile(std::unique_ptr<MemoryBuffer> &mb, const Registry ®istry, - std::vector<std::unique_ptr<File>> &result) const { + std::vector<std::unique_ptr<File> > &result) const override { // Parse the memory buffer as PECOFF file. const char *mbName = mb->getBufferIdentifier(); error_code ec; diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp index 10312c48671..704898b003e 100644 --- a/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp +++ b/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp @@ -165,11 +165,11 @@ public: FuncAtomContent + sizeof(FuncAtomContent)), symbolName) {} - virtual uint64_t ordinal() const { return 0; } - virtual Scope scope() const { return scopeGlobal; } - virtual ContentType contentType() const { return typeCode; } - virtual Alignment alignment() const { return Alignment(1); } - virtual ContentPermissions permissions() const { return permR_X; } + uint64_t ordinal() const override { return 0; } + Scope scope() const override { return scopeGlobal; } + ContentType contentType() const override { return typeCode; } + Alignment alignment() const override { return Alignment(1); } + ContentPermissions permissions() const override { return permR_X; } }; class FileImportLibrary : public File { @@ -214,19 +214,19 @@ public: ec = error_code::success(); } - virtual const atom_collection<DefinedAtom> &defined() const { + const atom_collection<DefinedAtom> &defined() const override { return _definedAtoms; } - virtual const atom_collection<UndefinedAtom> &undefined() const { + const atom_collection<UndefinedAtom> &undefined() const override { return _noUndefinedAtoms; } - virtual const atom_collection<SharedLibraryAtom> &sharedLibrary() const { + const atom_collection<SharedLibraryAtom> &sharedLibrary() const override { return _sharedLibraryAtoms; } - virtual const atom_collection<AbsoluteAtom> &absolute() const { + const atom_collection<AbsoluteAtom> &absolute() const override { return _noAbsoluteAtoms; } @@ -292,16 +292,16 @@ private: class COFFImportLibraryReader : public Reader { public: - virtual bool canParse(file_magic magic, StringRef, - const MemoryBuffer &mb) const { + bool canParse(file_magic magic, StringRef, + const MemoryBuffer &mb) const override { if (mb.getBufferSize() < sizeof(COFF::ImportHeader)) return false; return (magic == llvm::sys::fs::file_magic::coff_import_library); } - virtual error_code + error_code parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &, - std::vector<std::unique_ptr<File>> &result) const { + std::vector<std::unique_ptr<File> > &result) const override { error_code ec; auto file = std::unique_ptr<File>(new FileImportLibrary(std::move(mb), ec)); if (ec) diff --git a/lld/lib/ReaderWriter/PECOFF/SetSubsystemPass.h b/lld/lib/ReaderWriter/PECOFF/SetSubsystemPass.h index 8371449ea4f..bf5721c951c 100644 --- a/lld/lib/ReaderWriter/PECOFF/SetSubsystemPass.h +++ b/lld/lib/ReaderWriter/PECOFF/SetSubsystemPass.h @@ -23,7 +23,7 @@ class SetSubsystemPass : public lld::Pass { public: SetSubsystemPass(PECOFFLinkingContext &ctx) : _ctx(ctx) {} - virtual void perform(std::unique_ptr<MutableFile> &file) { + void perform(std::unique_ptr<MutableFile> &file) override { if (_ctx.getSubsystem() != WindowsSubsystem::IMAGE_SUBSYSTEM_UNKNOWN) return; StringRef main = _ctx.decorateSymbol("main"); diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp index eff3fed88ca..a61a4556284 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -114,7 +114,7 @@ public: _size = llvm::RoundUpToAlignment(size, 8); } - virtual void write(uint8_t *buffer) { + void write(uint8_t *buffer) override { ArrayRef<uint8_t> array = _context.getDosStub(); std::memcpy(buffer, array.data(), array.size()); auto *header = reinterpret_cast<llvm::object::dos_header *>(buffer); @@ -131,7 +131,7 @@ class PEHeaderChunk : public HeaderChunk { public: explicit PEHeaderChunk(const PECOFFLinkingContext &ctx); - virtual void write(uint8_t *buffer); + void write(uint8_t *buffer) override; void setSizeOfHeaders(uint64_t size) { // Must be multiple of FileAlignment. @@ -168,8 +168,8 @@ class SectionHeaderTableChunk : public HeaderChunk { public: SectionHeaderTableChunk() : HeaderChunk() {} void addSection(SectionChunk *chunk); - virtual uint64_t size() const; - virtual void write(uint8_t *buffer); + uint64_t size() const override; + void write(uint8_t *buffer) override; private: static llvm::object::coff_section createSectionHeader(SectionChunk *chunk); @@ -179,7 +179,7 @@ private: class SectionChunk : public Chunk { public: - virtual uint64_t align() const { return SECTOR_SIZE; } + uint64_t align() const override { return SECTOR_SIZE; } uint32_t getCharacteristics() const { return _characteristics; } StringRef getSectionName() const { return _sectionName; } @@ -208,7 +208,7 @@ public: AtomChunk(const PECOFFLinkingContext &ctx, StringRef name, const std::vector<const DefinedAtom *> &atoms); - virtual void write(uint8_t *buffer); + void write(uint8_t *buffer) override; void appendAtom(const DefinedAtom *atom); void buildAtomRvaMap(std::map<const Atom *, uint64_t> &atomRva) const; @@ -225,7 +225,7 @@ public: void printAtomAddresses(uint64_t baseAddr) const; void addBaseRelocations(std::vector<uint64_t> &relocSites) const; - virtual void setVirtualAddress(uint32_t rva); + void setVirtualAddress(uint32_t rva) override; uint64_t getAtomVirtualAddress(StringRef name) const; static bool classof(const Chunk *c) { return c->getKind() == kindAtomChunk; } @@ -257,12 +257,12 @@ public: DataDirectoryChunk() : HeaderChunk(), _data(std::vector<llvm::object::data_directory>(16)) {} - virtual uint64_t size() const { + uint64_t size() const override { return sizeof(llvm::object::data_directory) * _data.size(); } void setField(DataDirectoryIndex index, uint32_t addr, uint32_t size); - virtual void write(uint8_t *buffer); + void write(uint8_t *buffer) override; private: std::vector<llvm::object::data_directory> _data; @@ -290,11 +290,11 @@ public: : SectionChunk(kindSection, ".reloc", characteristics), _contents(createContents(chunks)) {} - virtual void write(uint8_t *buffer) { + void write(uint8_t *buffer) override { std::memcpy(buffer, &_contents[0], _contents.size()); } - virtual uint64_t size() const { return _contents.size(); } + uint64_t size() const override { return _contents.size(); } private: // When loaded into memory, reloc section should be readable and writable. @@ -832,7 +832,7 @@ public: _imageSizeOnDisk(0) {} template <class PEHeader> void build(const File &linkedFile); - virtual error_code writeFile(const File &linkedFile, StringRef path); + error_code writeFile(const File &linkedFile, StringRef path) override; private: void applyAllRelocations(uint8_t *bufferStart); |