[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