forked from OSchip/llvm-project
Add "override" to member functions where appropriate.
llvm-svn: 202998
This commit is contained in:
parent
061d147f74
commit
d6ad741e5e
|
@ -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;
|
||||
|
|
|
@ -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 *
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 *> >
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue