summaryrefslogtreecommitdiffstats
path: root/lld/COFF/DLL.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-08-14 03:30:59 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-08-14 03:30:59 +0000
commit5c546a1437eb67a7a72fc157ff9da21849d4efbf (patch)
tree02e84f3900b200cba9a63de020907fa2a96cf562 /lld/COFF/DLL.cpp
parentf9cbd039bdb8e19478afd822efd7060c8fa0228e (diff)
downloadbcm5719-llvm-5c546a1437eb67a7a72fc157ff9da21849d4efbf.tar.gz
bcm5719-llvm-5c546a1437eb67a7a72fc157ff9da21849d4efbf.zip
COFF: In chunks, store the offset from the start of the output section. NFC.
This is more convenient than the offset from the start of the file as we don't have to worry about it changing when we move the output section. This is a port of r245008 from ELF. llvm-svn: 245018
Diffstat (limited to 'lld/COFF/DLL.cpp')
-rw-r--r--lld/COFF/DLL.cpp42
1 files changed, 21 insertions, 21 deletions
diff --git a/lld/COFF/DLL.cpp b/lld/COFF/DLL.cpp
index 3b2e368bebe..5d6c136bc92 100644
--- a/lld/COFF/DLL.cpp
+++ b/lld/COFF/DLL.cpp
@@ -50,8 +50,8 @@ public:
}
void writeTo(uint8_t *Buf) override {
- write16le(Buf + FileOff, Hint);
- memcpy(Buf + FileOff + 2, Name.data(), Name.size());
+ write16le(Buf + OutputSectionOff, Hint);
+ memcpy(Buf + OutputSectionOff + 2, Name.data(), Name.size());
}
private:
@@ -66,7 +66,7 @@ public:
size_t getSize() const override { return ptrSize(); }
void writeTo(uint8_t *Buf) override {
- write32le(Buf + FileOff, HintName->getRVA());
+ write32le(Buf + OutputSectionOff, HintName->getRVA());
}
Chunk *HintName;
@@ -84,9 +84,9 @@ public:
// An import-by-ordinal slot has MSB 1 to indicate that
// this is import-by-ordinal (and not import-by-name).
if (Config->is64()) {
- write64le(Buf + FileOff, (1ULL << 63) | Ordinal);
+ write64le(Buf + OutputSectionOff, (1ULL << 63) | Ordinal);
} else {
- write32le(Buf + FileOff, (1ULL << 31) | Ordinal);
+ write32le(Buf + OutputSectionOff, (1ULL << 31) | Ordinal);
}
}
@@ -100,7 +100,7 @@ public:
size_t getSize() const override { return sizeof(ImportDirectoryTableEntry); }
void writeTo(uint8_t *Buf) override {
- auto *E = (coff_import_directory_table_entry *)(Buf + FileOff);
+ auto *E = (coff_import_directory_table_entry *)(Buf + OutputSectionOff);
E->ImportLookupTableRVA = LookupTab->getRVA();
E->NameRVA = DLLName->getRVA();
E->ImportAddressTableRVA = AddressTab->getRVA();
@@ -156,7 +156,7 @@ public:
}
void writeTo(uint8_t *Buf) override {
- auto *E = (delay_import_directory_table_entry *)(Buf + FileOff);
+ auto *E = (delay_import_directory_table_entry *)(Buf + OutputSectionOff);
E->Attributes = 1;
E->Name = DLLName->getRVA();
E->ModuleHandle = ModuleHandle->getRVA();
@@ -219,10 +219,10 @@ public:
size_t getSize() const override { return sizeof(ThunkX64); }
void writeTo(uint8_t *Buf) override {
- memcpy(Buf + FileOff, ThunkX64, sizeof(ThunkX64));
- write32le(Buf + FileOff + 36, Imp->getRVA() - RVA - 40);
- write32le(Buf + FileOff + 43, Desc->getRVA() - RVA - 47);
- write32le(Buf + FileOff + 48, Helper->getRVA() - RVA - 52);
+ memcpy(Buf + OutputSectionOff, ThunkX64, sizeof(ThunkX64));
+ write32le(Buf + OutputSectionOff + 36, Imp->getRVA() - RVA - 40);
+ write32le(Buf + OutputSectionOff + 43, Desc->getRVA() - RVA - 47);
+ write32le(Buf + OutputSectionOff + 48, Helper->getRVA() - RVA - 52);
}
Defined *Imp = nullptr;
@@ -238,10 +238,10 @@ public:
size_t getSize() const override { return sizeof(ThunkX86); }
void writeTo(uint8_t *Buf) override {
- memcpy(Buf + FileOff, ThunkX86, sizeof(ThunkX86));
- write32le(Buf + FileOff + 3, Imp->getRVA() + Config->ImageBase);
- write32le(Buf + FileOff + 8, Desc->getRVA() + Config->ImageBase);
- write32le(Buf + FileOff + 13, Helper->getRVA() - RVA - 17);
+ memcpy(Buf + OutputSectionOff, ThunkX86, sizeof(ThunkX86));
+ write32le(Buf + OutputSectionOff + 3, Imp->getRVA() + Config->ImageBase);
+ write32le(Buf + OutputSectionOff + 8, Desc->getRVA() + Config->ImageBase);
+ write32le(Buf + OutputSectionOff + 13, Helper->getRVA() - RVA - 17);
}
void getBaserels(std::vector<Baserel> *Res) override {
@@ -262,9 +262,9 @@ public:
void writeTo(uint8_t *Buf) override {
if (Config->is64()) {
- write64le(Buf + FileOff, Thunk->getRVA() + Config->ImageBase);
+ write64le(Buf + OutputSectionOff, Thunk->getRVA() + Config->ImageBase);
} else {
- write32le(Buf + FileOff, Thunk->getRVA() + Config->ImageBase);
+ write32le(Buf + OutputSectionOff, Thunk->getRVA() + Config->ImageBase);
}
}
@@ -290,7 +290,7 @@ public:
}
void writeTo(uint8_t *Buf) override {
- auto *E = (export_directory_table_entry *)(Buf + FileOff);
+ auto *E = (export_directory_table_entry *)(Buf + OutputSectionOff);
E->NameRVA = DLLName->getRVA();
E->OrdinalBase = 0;
E->AddressTableEntries = MaxOrdinal + 1;
@@ -316,7 +316,7 @@ public:
void writeTo(uint8_t *Buf) override {
for (Export &E : Config->Exports) {
auto *D = cast<Defined>(E.Sym->repl());
- write32le(Buf + FileOff + E.Ordinal * 4, D->getRVA());
+ write32le(Buf + OutputSectionOff + E.Ordinal * 4, D->getRVA());
}
}
@@ -330,7 +330,7 @@ public:
size_t getSize() const override { return Chunks.size() * 4; }
void writeTo(uint8_t *Buf) override {
- uint8_t *P = Buf + FileOff;
+ uint8_t *P = Buf + OutputSectionOff;
for (Chunk *C : Chunks) {
write32le(P, C->getRVA());
P += 4;
@@ -347,7 +347,7 @@ public:
size_t getSize() const override { return Size * 2; }
void writeTo(uint8_t *Buf) override {
- uint8_t *P = Buf + FileOff;
+ uint8_t *P = Buf + OutputSectionOff;
for (Export &E : Config->Exports) {
if (E.Noname)
continue;
OpenPOWER on IntegriCloud