[lld] r240806 - COFF: Align DLL import thunks on 16-byte boundaries.
Rui Ueyama
ruiu at google.com
Fri Jun 26 11:28:56 PDT 2015
Author: ruiu
Date: Fri Jun 26 13:28:56 2015
New Revision: 240806
URL: http://llvm.org/viewvc/llvm-project?rev=240806&view=rev
Log:
COFF: Align DLL import thunks on 16-byte boundaries.
Modified:
lld/trunk/COFF/Chunks.cpp
lld/trunk/COFF/Chunks.h
lld/trunk/test/COFF/delayimports.test
lld/trunk/test/COFF/imports.test
Modified: lld/trunk/COFF/Chunks.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.cpp?rev=240806&r1=240805&r2=240806&view=diff
==============================================================================
--- lld/trunk/COFF/Chunks.cpp (original)
+++ lld/trunk/COFF/Chunks.cpp Fri Jun 26 13:28:56 2015
@@ -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.
Modified: lld/trunk/COFF/Chunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.h?rev=240806&r1=240805&r2=240806&view=diff
==============================================================================
--- lld/trunk/COFF/Chunks.h (original)
+++ lld/trunk/COFF/Chunks.h Fri Jun 26 13:28:56 2015
@@ -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;
Modified: lld/trunk/test/COFF/delayimports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/delayimports.test?rev=240806&r1=240805&r2=240806&view=diff
==============================================================================
--- lld/trunk/test/COFF/delayimports.test (original)
+++ lld/trunk/test/COFF/delayimports.test Fri Jun 26 13:28:56 2015
@@ -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: }
Modified: lld/trunk/test/COFF/imports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/imports.test?rev=240806&r1=240805&r2=240806&view=diff
==============================================================================
--- lld/trunk/test/COFF/imports.test (original)
+++ lld/trunk/test/COFF/imports.test Fri Jun 26 13:28:56 2015
@@ -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
More information about the llvm-commits
mailing list