COFF: Add base relocation for delay-import table.

Because the address table of the delay-import table contains
absolute address, it needs to be added to the base relocation
table.

llvm-svn: 240844
This commit is contained in:
Rui Ueyama 2015-06-26 22:05:32 +00:00
parent 9818dd77b4
commit 810551a694
2 changed files with 41 additions and 22 deletions

View File

@ -326,6 +326,10 @@ public:
write64le(Buf + FileOff, Thunk->getRVA() + Config->ImageBase);
}
void getBaserels(std::vector<uint32_t> *Res, Defined *ImageBase) override {
Res->push_back(RVA);
}
Chunk *Thunk;
};

View File

@ -1,26 +1,41 @@
# RUN: lld -flavor link2 /out:%t.exe /entry:main /subsystem:console \
# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib /delayload:std64.dll \
# RUN: /alternatename:__delayLoadHelper2=main
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck -check-prefix=BASEREL %s
CHECK: DelayImport {
CHECK-NEXT: Name: std64.dll
CHECK-NEXT: Attributes: 0x1
CHECK-NEXT: ModuleHandle: 0x1018
CHECK-NEXT: ImportAddressTable: 0x1020
CHECK-NEXT: ImportNameTable: 0x3040
CHECK-NEXT: BoundDelayImportTable: 0x0
CHECK-NEXT: UnloadDelayImportTable: 0x0
CHECK-NEXT: Import {
CHECK-NEXT: Symbol: ExitProcess (0)
CHECK-NEXT: Address: 0x140002066
CHECK-NEXT: }
CHECK-NEXT: Import {
CHECK-NEXT: Symbol: (50)
CHECK-NEXT: Address: 0x1400020BD
CHECK-NEXT: }
CHECK-NEXT: Import {
CHECK-NEXT: Symbol: MessageBoxA (1)
CHECK-NEXT: Address: 0x140002114
CHECK-NEXT: }
CHECK-NEXT: }
IMPORT: DelayImport {
IMPORT-NEXT: Name: std64.dll
IMPORT-NEXT: Attributes: 0x1
IMPORT-NEXT: ModuleHandle: 0x1018
IMPORT-NEXT: ImportAddressTable: 0x1020
IMPORT-NEXT: ImportNameTable: 0x3040
IMPORT-NEXT: BoundDelayImportTable: 0x0
IMPORT-NEXT: UnloadDelayImportTable: 0x0
IMPORT-NEXT: Import {
IMPORT-NEXT: Symbol: ExitProcess (0)
IMPORT-NEXT: Address: 0x140002066
IMPORT-NEXT: }
IMPORT-NEXT: Import {
IMPORT-NEXT: Symbol: (50)
IMPORT-NEXT: Address: 0x1400020BD
IMPORT-NEXT: }
IMPORT-NEXT: Import {
IMPORT-NEXT: Symbol: MessageBoxA (1)
IMPORT-NEXT: Address: 0x140002114
IMPORT-NEXT: }
IMPORT-NEXT: }
BASEREL: BaseReloc [
BASEREL-NEXT: Entry {
BASEREL-NEXT: Type: DIR64
BASEREL-NEXT: Address: 0x1020
BASEREL-NEXT: }
BASEREL-NEXT: Entry {
BASEREL-NEXT: Type: DIR64
BASEREL-NEXT: Address: 0x1028
BASEREL-NEXT: }
BASEREL-NEXT: Entry {
BASEREL-NEXT: Type: DIR64
BASEREL-NEXT: Address: 0x1030
BASEREL-NEXT: }