Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/Chunks.cpp6
-rw-r--r--lld/COFF/Chunks.h2
-rw-r--r--lld/test/COFF/delayimports.test6
-rw-r--r--lld/test/COFF/imports.test12
4 files changed, 16 insertions, 10 deletions
diff --git a/lld/COFF/Chunks.cpp b/lld/COFF/Chunks.cpp
index c5cf80ec7758..aa2c0be3ef51 100644
--- a/lld/COFF/Chunks.cpp
+++ b/lld/COFF/Chunks.cpp
@@ -216,6 +216,12 @@ void StringChunk::writeTo(uint8_t *Buf) {
memcpy(Buf + FileOff, Str.data(), Str.size());
}
+ImportThunkChunk::ImportThunkChunk(Defined *S) : ImpSymbol(S) {
+ // Intel Optimization Manual says that all branch targets
+ // should be 16-byte aligned. MSVC linker does this too.
+ Align = 16;
+}
+
void ImportThunkChunk::writeTo(uint8_t *Buf) {
memcpy(Buf + FileOff, ImportThunkData, sizeof(ImportThunkData));
// The first two bytes is a JMP instruction. Fill its operand.
diff --git a/lld/COFF/Chunks.h b/lld/COFF/Chunks.h
index d44c02550836..37a6003cf8ec 100644
--- a/lld/COFF/Chunks.h
+++ b/lld/COFF/Chunks.h
@@ -198,7 +198,7 @@ static const uint8_t ImportThunkData[] = {
// contents will be a JMP instruction to some __imp_ symbol.
class ImportThunkChunk : public Chunk {
public:
- explicit ImportThunkChunk(Defined *S) : ImpSymbol(S) {}
+ explicit ImportThunkChunk(Defined *ImpSymbol);
size_t getSize() const override { return sizeof(ImportThunkData); }
void writeTo(uint8_t *Buf) override;
diff --git a/lld/test/COFF/delayimports.test b/lld/test/COFF/delayimports.test
index 5dff32a9ddab..6cc1c7b8a3d1 100644
--- a/lld/test/COFF/delayimports.test
+++ b/lld/test/COFF/delayimports.test
@@ -13,14 +13,14 @@ CHECK-NEXT: BoundDelayImportTable: 0x0
CHECK-NEXT: UnloadDelayImportTable: 0x0
CHECK-NEXT: Import {
CHECK-NEXT: Symbol: ExitProcess (0)
-CHECK-NEXT: Address: 0x2045
+CHECK-NEXT: Address: 0x2066
CHECK-NEXT: }
CHECK-NEXT: Import {
CHECK-NEXT: Symbol: (50)
-CHECK-NEXT: Address: 0x209C
+CHECK-NEXT: Address: 0x20BD
CHECK-NEXT: }
CHECK-NEXT: Import {
CHECK-NEXT: Symbol: MessageBoxA (1)
-CHECK-NEXT: Address: 0x20F3
+CHECK-NEXT: Address: 0x2114
CHECK-NEXT: }
CHECK-NEXT: }
diff --git a/lld/test/COFF/imports.test b/lld/test/COFF/imports.test
index a336217b8fdf..90f5a2802f6e 100644
--- a/lld/test/COFF/imports.test
+++ b/lld/test/COFF/imports.test
@@ -12,13 +12,13 @@ TEXT-NEXT: movq $0, %rcx
TEXT-NEXT: leaq -4108(%rip), %rdx
TEXT-NEXT: leaq -4121(%rip), %r8
TEXT-NEXT: movl $0, %r9d
-TEXT-NEXT: callq 27
+TEXT-NEXT: callq 60
TEXT-NEXT: movl $0, %ecx
-TEXT-NEXT: callq 5
-TEXT-NEXT: callq 6
-TEXT-NEXT: jmpq *4111(%rip)
-TEXT-NEXT: jmpq *4113(%rip)
-TEXT-NEXT: jmpq *4115(%rip)
+TEXT-NEXT: callq 18
+TEXT-NEXT: callq 29
+TEXT: jmpq *4098(%rip)
+TEXT: jmpq *4090(%rip)
+TEXT: jmpq *4082(%rip)
IMPORT: Import {
IMPORT-NEXT: Name: std64.dll