/// to be fixed up so that the address points to atom Y's address.
class COFFReference LLVM_FINAL : public Reference {
public:
- explicit COFFReference(Kind kind) { _kind = kind; }
+ explicit COFFReference(Kind kind) : _target(nullptr), _offsetInAtom(0) {
+ _kind = kind;
+ }
COFFReference(const Atom *target, uint32_t offsetInAtom, uint16_t relocType)
: _target(target), _offsetInAtom(offsetInAtom) {
virtual uint64_t offsetInAtom() const { return _offsetInAtom; }
private:
- const Atom *_target = nullptr;
- uint32_t _offsetInAtom = 0;
+ const Atom *_target;
+ uint32_t _offsetInAtom;
};
class COFFAbsoluteAtom : public AbsoluteAtom {
ContentPermissions perms, uint64_t ordinal)
: COFFBaseDefinedAtom(file, name, Kind::File), _sectionName(sectionName),
_scope(scope), _contentType(contentType), _permissions(perms),
- _ordinal(ordinal) {}
+ _ordinal(ordinal), _alignment(0) {}
static bool classof(const COFFBaseDefinedAtom *atom) {
return atom->getKind() == Kind::File;
ContentType _contentType;
ContentPermissions _permissions;
uint64_t _ordinal;
- Alignment _alignment = 0;
+ Alignment _alignment;
std::vector<std::unique_ptr<COFFReference>> _references;
};
COFFSharedLibraryAtom(const File &file, uint16_t hint, StringRef symbolName,
StringRef importName, StringRef dllName)
: _file(file), _hint(hint), _mangledName(addImpPrefix(symbolName)),
- _importName(importName), _dllName(dllName) {}
+ _importName(importName), _dllName(dllName),
+ _importTableEntry(nullptr) {}
virtual const File &file() const { return _file; }
uint16_t hint() const { return _hint; }
kindDataDirectory
};
- explicit Chunk(Kind kind) : _kind(kind) {}
+ explicit Chunk(Kind kind) : _kind(kind), _size(0), _align(1) {}
virtual ~Chunk() {};
virtual void write(uint8_t *fileBuffer) = 0;
protected:
Kind _kind;
- uint64_t _size = 0;
+ uint64_t _size;
uint64_t _fileOffset;
- uint64_t _align = 1;
+ uint64_t _align;
};
/// A HeaderChunk is an abstract class to represent a file header for
class ExecutableWriter : public Writer {
public:
explicit ExecutableWriter(const PECOFFLinkingContext &context)
- : _PECOFFLinkingContext(context) {}
+ : _PECOFFLinkingContext(context), _numSections(0),
+ _imageSizeInMemory(PAGE_SIZE), _imageSizeOnDisk(0) {}
// Create all chunks that consist of the output file.
void build(const File &linkedFile) {
std::vector<std::unique_ptr<Chunk>> _chunks;
const PECOFFLinkingContext &_PECOFFLinkingContext;
- uint32_t _numSections = 0;
+ uint32_t _numSections;
// The size of the image in memory. This is initialized with PAGE_SIZE, as the
// first page starting at ImageBase is usually left unmapped. IIUC there's no
// technical reason to do so, but we'll follow that convention so that we
// don't produce odd-looking binary.
- uint32_t _imageSizeInMemory = PAGE_SIZE;
+ uint32_t _imageSizeInMemory;
// The size of the image on disk. This is basically the sum of all chunks in
// the output file with paddings between them.
- uint32_t _imageSizeOnDisk = 0;
+ uint32_t _imageSizeOnDisk;
// The map from defined atoms to its RVAs. Will be used for relocation.
std::map<const Atom *, uint64_t> atomRva;