diff options
-rw-r--r-- | lld/COFF/Chunks.cpp | 22 | ||||
-rw-r--r-- | lld/COFF/Chunks.h | 24 | ||||
-rw-r--r-- | lld/COFF/DLL.cpp | 24 |
3 files changed, 35 insertions, 35 deletions
diff --git a/lld/COFF/Chunks.cpp b/lld/COFF/Chunks.cpp index 7168a034e0f..ebf35fa5d9b 100644 --- a/lld/COFF/Chunks.cpp +++ b/lld/COFF/Chunks.cpp @@ -49,7 +49,7 @@ static void add64(uint8_t *P, int64_t V) { write64le(P, read64le(P) + V); } static void or16(uint8_t *P, uint16_t V) { write16le(P, read16le(P) | V); } void SectionChunk::applyRelX64(uint8_t *Off, uint16_t Type, Defined *Sym, - uint64_t P) { + uint64_t P) const { uint64_t S = Sym->getRVA(); switch (Type) { case IMAGE_REL_AMD64_ADDR32: add32(Off, S + Config->ImageBase); break; @@ -69,7 +69,7 @@ void SectionChunk::applyRelX64(uint8_t *Off, uint16_t Type, Defined *Sym, } void SectionChunk::applyRelX86(uint8_t *Off, uint16_t Type, Defined *Sym, - uint64_t P) { + uint64_t P) const { uint64_t S = Sym->getRVA(); switch (Type) { case IMAGE_REL_I386_ABSOLUTE: break; @@ -110,7 +110,7 @@ static void applyBranch24T(uint8_t *Off, int32_t V) { } void SectionChunk::applyRelARM(uint8_t *Off, uint16_t Type, Defined *Sym, - uint64_t P) { + uint64_t P) const { uint64_t S = Sym->getRVA(); // Pointer to thumb code must have the LSB set. if (Sym->isExecutable()) @@ -127,7 +127,7 @@ void SectionChunk::applyRelARM(uint8_t *Off, uint16_t Type, Defined *Sym, } } -void SectionChunk::writeTo(uint8_t *Buf) { +void SectionChunk::writeTo(uint8_t *Buf) const { if (!hasData()) return; // Copy section contents from source object file to output file. @@ -244,7 +244,7 @@ uint32_t CommonChunk::getPermissions() const { IMAGE_SCN_MEM_WRITE; } -void StringChunk::writeTo(uint8_t *Buf) { +void StringChunk::writeTo(uint8_t *Buf) const { memcpy(Buf + OutputSectionOff, Str.data(), Str.size()); } @@ -254,7 +254,7 @@ ImportThunkChunkX64::ImportThunkChunkX64(Defined *S) : ImpSymbol(S) { Align = 16; } -void ImportThunkChunkX64::writeTo(uint8_t *Buf) { +void ImportThunkChunkX64::writeTo(uint8_t *Buf) const { memcpy(Buf + OutputSectionOff, ImportThunkX86, sizeof(ImportThunkX86)); // The first two bytes is a JMP instruction. Fill its operand. write32le(Buf + OutputSectionOff + 2, ImpSymbol->getRVA() - RVA - getSize()); @@ -264,7 +264,7 @@ void ImportThunkChunkX86::getBaserels(std::vector<Baserel> *Res) { Res->emplace_back(getRVA() + 2); } -void ImportThunkChunkX86::writeTo(uint8_t *Buf) { +void ImportThunkChunkX86::writeTo(uint8_t *Buf) const { memcpy(Buf + OutputSectionOff, ImportThunkX86, sizeof(ImportThunkX86)); // The first two bytes is a JMP instruction. Fill its operand. write32le(Buf + OutputSectionOff + 2, @@ -275,7 +275,7 @@ void ImportThunkChunkARM::getBaserels(std::vector<Baserel> *Res) { Res->emplace_back(getRVA(), IMAGE_REL_BASED_ARM_MOV32T); } -void ImportThunkChunkARM::writeTo(uint8_t *Buf) { +void ImportThunkChunkARM::writeTo(uint8_t *Buf) const { memcpy(Buf + OutputSectionOff, ImportThunkARM, sizeof(ImportThunkARM)); // Fix mov.w and mov.t operands. applyMOV32T(Buf + OutputSectionOff, ImpSymbol->getRVA() + Config->ImageBase); @@ -289,7 +289,7 @@ size_t LocalImportChunk::getSize() const { return Config->is64() ? 8 : 4; } -void LocalImportChunk::writeTo(uint8_t *Buf) { +void LocalImportChunk::writeTo(uint8_t *Buf) const { if (Config->is64()) { write64le(Buf + OutputSectionOff, Sym->getRVA() + Config->ImageBase); } else { @@ -297,7 +297,7 @@ void LocalImportChunk::writeTo(uint8_t *Buf) { } } -void SEHTableChunk::writeTo(uint8_t *Buf) { +void SEHTableChunk::writeTo(uint8_t *Buf) const { ulittle32_t *Begin = reinterpret_cast<ulittle32_t *>(Buf + OutputSectionOff); size_t Cnt = 0; for (Defined *D : Syms) @@ -321,7 +321,7 @@ BaserelChunk::BaserelChunk(uint32_t Page, Baserel *Begin, Baserel *End) { } } -void BaserelChunk::writeTo(uint8_t *Buf) { +void BaserelChunk::writeTo(uint8_t *Buf) const { memcpy(Buf + OutputSectionOff, Data.data(), Data.size()); } diff --git a/lld/COFF/Chunks.h b/lld/COFF/Chunks.h index 521b6be51f5..c3129ef31a2 100644 --- a/lld/COFF/Chunks.h +++ b/lld/COFF/Chunks.h @@ -59,7 +59,7 @@ public: // beginning of the file. Because this function may use RVA values // of other chunks for relocations, you need to set them properly // before calling this function. - virtual void writeTo(uint8_t *Buf) {} + virtual void writeTo(uint8_t *Buf) const {} // The writer sets and uses the addresses. uint64_t getRVA() { return RVA; } @@ -139,15 +139,15 @@ public: SectionChunk(ObjectFile *File, const coff_section *Header); static bool classof(const Chunk *C) { return C->kind() == SectionKind; } size_t getSize() const override { return Header->SizeOfRawData; } - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; bool hasData() const override; uint32_t getPermissions() const override; StringRef getSectionName() const override { return SectionName; } void getBaserels(std::vector<Baserel> *Res) override; bool isCOMDAT() const; - void applyRelX64(uint8_t *Off, uint16_t Type, Defined *Sym, uint64_t P); - void applyRelX86(uint8_t *Off, uint16_t Type, Defined *Sym, uint64_t P); - void applyRelARM(uint8_t *Off, uint16_t Type, Defined *Sym, uint64_t P); + void applyRelX64(uint8_t *Off, uint16_t Type, Defined *Sym, uint64_t P) const; + void applyRelX86(uint8_t *Off, uint16_t Type, Defined *Sym, uint64_t P) const; + void applyRelARM(uint8_t *Off, uint16_t Type, Defined *Sym, uint64_t P) const; // Called if the garbage collector decides to not include this chunk // in a final output. It's supposed to print out a log message to stdout. @@ -228,7 +228,7 @@ class StringChunk : public Chunk { public: explicit StringChunk(StringRef S) : Str(S) {} size_t getSize() const override { return Str.size() + 1; } - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; private: StringRef Str; @@ -251,7 +251,7 @@ class ImportThunkChunkX64 : public Chunk { public: explicit ImportThunkChunkX64(Defined *S); size_t getSize() const override { return sizeof(ImportThunkX86); } - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; private: Defined *ImpSymbol; @@ -262,7 +262,7 @@ public: explicit ImportThunkChunkX86(Defined *S) : ImpSymbol(S) {} size_t getSize() const override { return sizeof(ImportThunkX86); } void getBaserels(std::vector<Baserel> *Res) override; - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; private: Defined *ImpSymbol; @@ -273,7 +273,7 @@ public: explicit ImportThunkChunkARM(Defined *S) : ImpSymbol(S) {} size_t getSize() const override { return sizeof(ImportThunkARM); } void getBaserels(std::vector<Baserel> *Res) override; - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; private: Defined *ImpSymbol; @@ -286,7 +286,7 @@ public: explicit LocalImportChunk(Defined *S) : Sym(S) {} size_t getSize() const override; void getBaserels(std::vector<Baserel> *Res) override; - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; private: Defined *Sym; @@ -299,7 +299,7 @@ class SEHTableChunk : public Chunk { public: explicit SEHTableChunk(std::set<Defined *> S) : Syms(S) {} size_t getSize() const override { return Syms.size() * 4; } - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; private: std::set<Defined *> Syms; @@ -312,7 +312,7 @@ class BaserelChunk : public Chunk { public: BaserelChunk(uint32_t Page, Baserel *Begin, Baserel *End); size_t getSize() const override { return Data.size(); } - void writeTo(uint8_t *Buf) override; + void writeTo(uint8_t *Buf) const override; private: std::vector<uint8_t> Data; diff --git a/lld/COFF/DLL.cpp b/lld/COFF/DLL.cpp index 32c1558e398..40ca5cf61dc 100644 --- a/lld/COFF/DLL.cpp +++ b/lld/COFF/DLL.cpp @@ -48,7 +48,7 @@ public: return RoundUpToAlignment(Name.size() + 3, 2); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { write16le(Buf + OutputSectionOff, Hint); memcpy(Buf + OutputSectionOff + 2, Name.data(), Name.size()); } @@ -64,7 +64,7 @@ public: explicit LookupChunk(Chunk *C) : HintName(C) {} size_t getSize() const override { return ptrSize(); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { write32le(Buf + OutputSectionOff, HintName->getRVA()); } @@ -79,7 +79,7 @@ public: explicit OrdinalOnlyChunk(uint16_t V) : Ordinal(V) {} size_t getSize() const override { return ptrSize(); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { // An import-by-ordinal slot has MSB 1 to indicate that // this is import-by-ordinal (and not import-by-name). if (Config->is64()) { @@ -98,7 +98,7 @@ public: explicit ImportDirectoryChunk(Chunk *N) : DLLName(N) {} size_t getSize() const override { return sizeof(ImportDirectoryTableEntry); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { auto *E = (coff_import_directory_table_entry *)(Buf + OutputSectionOff); E->ImportLookupTableRVA = LookupTab->getRVA(); E->NameRVA = DLLName->getRVA(); @@ -160,7 +160,7 @@ public: return sizeof(delay_import_directory_table_entry); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { auto *E = (delay_import_directory_table_entry *)(Buf + OutputSectionOff); E->Attributes = 1; E->Name = DLLName->getRVA(); @@ -223,7 +223,7 @@ public: size_t getSize() const override { return sizeof(ThunkX64); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { memcpy(Buf + OutputSectionOff, ThunkX64, sizeof(ThunkX64)); write32le(Buf + OutputSectionOff + 36, Imp->getRVA() - RVA - 40); write32le(Buf + OutputSectionOff + 43, Desc->getRVA() - RVA - 47); @@ -242,7 +242,7 @@ public: size_t getSize() const override { return sizeof(ThunkX86); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { memcpy(Buf + OutputSectionOff, ThunkX86, sizeof(ThunkX86)); write32le(Buf + OutputSectionOff + 3, Imp->getRVA() + Config->ImageBase); write32le(Buf + OutputSectionOff + 8, Desc->getRVA() + Config->ImageBase); @@ -265,7 +265,7 @@ public: explicit DelayAddressChunk(Chunk *C) : Thunk(C) {} size_t getSize() const override { return ptrSize(); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { if (Config->is64()) { write64le(Buf + OutputSectionOff, Thunk->getRVA() + Config->ImageBase); } else { @@ -294,7 +294,7 @@ public: return sizeof(export_directory_table_entry); } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { auto *E = (export_directory_table_entry *)(Buf + OutputSectionOff); E->NameRVA = DLLName->getRVA(); E->OrdinalBase = 0; @@ -318,7 +318,7 @@ public: explicit AddressTableChunk(size_t MaxOrdinal) : Size(MaxOrdinal + 1) {} size_t getSize() const override { return Size * 4; } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { for (Export &E : Config->Exports) { auto *D = cast<Defined>(E.Sym->repl()); write32le(Buf + OutputSectionOff + E.Ordinal * 4, D->getRVA()); @@ -334,7 +334,7 @@ public: explicit NamePointersChunk(std::vector<Chunk *> &V) : Chunks(V) {} size_t getSize() const override { return Chunks.size() * 4; } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { uint8_t *P = Buf + OutputSectionOff; for (Chunk *C : Chunks) { write32le(P, C->getRVA()); @@ -351,7 +351,7 @@ public: explicit ExportOrdinalChunk(size_t I) : Size(I) {} size_t getSize() const override { return Size * 2; } - void writeTo(uint8_t *Buf) override { + void writeTo(uint8_t *Buf) const override { uint8_t *P = Buf + OutputSectionOff; for (Export &E : Config->Exports) { if (E.Noname) |