[PATCH] D57168: Fix broken export table if .rdata is merged with .text.
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 24 11:02:58 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rLLD352082: Fix broken export table if .rdata is merged with .text. (authored by ruiu, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D57168?vs=183336&id=183351#toc
Repository:
rLLD LLVM Linker
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D57168/new/
https://reviews.llvm.org/D57168
Files:
COFF/DLL.cpp
test/COFF/imports.test
Index: test/COFF/imports.test
===================================================================
--- test/COFF/imports.test
+++ test/COFF/imports.test
@@ -34,3 +34,16 @@
IMPORT-NEXT: Symbol: (50)
IMPORT-NEXT: Symbol: MessageBoxA (1)
IMPORT-NEXT: }
+
+# RUN: lld-link /out:%t.exe /entry:main /subsystem:console /merge:.rdata=.text \
+# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib /include:ExitProcess
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=MERGE %s
+
+MERGE: Import {
+MERGE-NEXT: Name: std64.dll
+MERGE-NEXT: ImportLookupTableRVA: 0x1090
+MERGE-NEXT: ImportAddressTableRVA: 0x10B0
+MERGE-NEXT: Symbol: ExitProcess (0)
+MERGE-NEXT: Symbol: (50)
+MERGE-NEXT: Symbol: MessageBoxA (1)
+MERGE-NEXT: }
Index: COFF/DLL.cpp
===================================================================
--- COFF/DLL.cpp
+++ COFF/DLL.cpp
@@ -46,6 +46,7 @@
}
void writeTo(uint8_t *Buf) const override {
+ memset(Buf + OutputSectionOff, 0, getSize());
write16le(Buf + OutputSectionOff, Hint);
memcpy(Buf + OutputSectionOff + 2, Name.data(), Name.size());
}
@@ -62,7 +63,10 @@
size_t getSize() const override { return Config->Wordsize; }
void writeTo(uint8_t *Buf) const override {
- write32le(Buf + OutputSectionOff, HintName->getRVA());
+ if (Config->is64())
+ write64le(Buf + OutputSectionOff, HintName->getRVA());
+ else
+ write32le(Buf + OutputSectionOff, HintName->getRVA());
}
Chunk *HintName;
@@ -98,6 +102,8 @@
size_t getSize() const override { return sizeof(ImportDirectoryTableEntry); }
void writeTo(uint8_t *Buf) const override {
+ memset(Buf + OutputSectionOff, 0, getSize());
+
auto *E = (coff_import_directory_table_entry *)(Buf + OutputSectionOff);
E->ImportLookupTableRVA = LookupTab->getRVA();
E->NameRVA = DLLName->getRVA();
@@ -117,6 +123,10 @@
bool hasData() const override { return false; }
size_t getSize() const override { return Size; }
+ void writeTo(uint8_t *Buf) const override {
+ memset(Buf + OutputSectionOff, 0, Size);
+ }
+
private:
size_t Size;
};
@@ -159,6 +169,8 @@
}
void writeTo(uint8_t *Buf) const override {
+ memset(Buf + OutputSectionOff, 0, getSize());
+
auto *E = (delay_import_directory_table_entry *)(Buf + OutputSectionOff);
E->Attributes = 1;
E->Name = DLLName->getRVA();
@@ -391,6 +403,8 @@
}
void writeTo(uint8_t *Buf) const override {
+ memset(Buf + OutputSectionOff, 0, getSize());
+
auto *E = (export_directory_table_entry *)(Buf + OutputSectionOff);
E->NameRVA = DLLName->getRVA();
E->OrdinalBase = 0;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57168.183351.patch
Type: text/x-patch
Size: 2649 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190124/1c91ba1e/attachment.bin>
More information about the llvm-commits
mailing list