From 810551a694e1ba7dd9b7897d60efb129173c8e15 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Fri, 26 Jun 2015 22:05:32 +0000 Subject: [PATCH] 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 --- lld/COFF/DLL.cpp | 4 +++ lld/test/COFF/delayimports.test | 59 ++++++++++++++++++++++++++--------------- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/lld/COFF/DLL.cpp b/lld/COFF/DLL.cpp index 9d5eb81..d44dd4b 100644 --- a/lld/COFF/DLL.cpp +++ b/lld/COFF/DLL.cpp @@ -326,6 +326,10 @@ public: write64le(Buf + FileOff, Thunk->getRVA() + Config->ImageBase); } + void getBaserels(std::vector *Res, Defined *ImageBase) override { + Res->push_back(RVA); + } + Chunk *Thunk; }; diff --git a/lld/test/COFF/delayimports.test b/lld/test/COFF/delayimports.test index 782f2f1..1e862d7 100644 --- a/lld/test/COFF/delayimports.test +++ b/lld/test/COFF/delayimports.test @@ -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: } -- 2.7.4