Skip to content

Commit c325db4

Browse files
e-kudDeChambord
authored andcommitted
[LLD][X86] Match delayLoad thunk with MSVC (#149521)
Previously we saved registers in the shadow space of callee before calling __delayLoadHelper2. Now we save arguments in the shadow space of the caller and allocate shadow space for the callee. Fixes #51941 --------- Co-authored-by: Benjamin Santerre <[email protected]> (cherry picked from commit 75b79c9)
1 parent d8e9216 commit c325db4

File tree

6 files changed

+111
-119
lines changed

6 files changed

+111
-119
lines changed

lld/COFF/DLL.cpp

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -244,40 +244,36 @@ static const uint8_t thunkX64[] = {
244244
};
245245

246246
static const uint8_t tailMergeX64[] = {
247-
0x51, // push rcx
248-
0x52, // push rdx
249-
0x41, 0x50, // push r8
250-
0x41, 0x51, // push r9
251-
0x48, 0x83, 0xEC, 0x48, // sub rsp, 48h
252-
0x66, 0x0F, 0x7F, 0x04, 0x24, // movdqa xmmword ptr [rsp], xmm0
253-
0x66, 0x0F, 0x7F, 0x4C, 0x24, 0x10, // movdqa xmmword ptr [rsp+10h], xmm1
254-
0x66, 0x0F, 0x7F, 0x54, 0x24, 0x20, // movdqa xmmword ptr [rsp+20h], xmm2
255-
0x66, 0x0F, 0x7F, 0x5C, 0x24, 0x30, // movdqa xmmword ptr [rsp+30h], xmm3
256-
0x48, 0x8B, 0xD0, // mov rdx, rax
257-
0x48, 0x8D, 0x0D, 0, 0, 0, 0, // lea rcx, [___DELAY_IMPORT_...]
258-
0xE8, 0, 0, 0, 0, // call __delayLoadHelper2
259-
0x66, 0x0F, 0x6F, 0x04, 0x24, // movdqa xmm0, xmmword ptr [rsp]
260-
0x66, 0x0F, 0x6F, 0x4C, 0x24, 0x10, // movdqa xmm1, xmmword ptr [rsp+10h]
261-
0x66, 0x0F, 0x6F, 0x54, 0x24, 0x20, // movdqa xmm2, xmmword ptr [rsp+20h]
262-
0x66, 0x0F, 0x6F, 0x5C, 0x24, 0x30, // movdqa xmm3, xmmword ptr [rsp+30h]
263-
0x48, 0x83, 0xC4, 0x48, // add rsp, 48h
264-
0x41, 0x59, // pop r9
265-
0x41, 0x58, // pop r8
266-
0x5A, // pop rdx
267-
0x59, // pop rcx
268-
0xFF, 0xE0, // jmp rax
247+
0x48, 0x89, 0x4C, 0x24, 0x08, // mov qword ptr [rsp+8], rcx
248+
0x48, 0x89, 0x54, 0x24, 0x10, // mov qword ptr [rsp+10h], rdx
249+
0x4C, 0x89, 0x44, 0x24, 0x18, // mov qword ptr [rsp+18h], r8
250+
0x4C, 0x89, 0x4C, 0x24, 0x20, // mov qword ptr [rsp+20h], r9
251+
0x48, 0x83, 0xEC, 0x68, // sub rsp, 68h
252+
0x66, 0x0F, 0x7F, 0x44, 0x24, 0x20, // movdqa xmmword ptr [rsp+20h], xmm0
253+
0x66, 0x0F, 0x7F, 0x4C, 0x24, 0x30, // movdqa xmmword ptr [rsp+30h], xmm1
254+
0x66, 0x0F, 0x7F, 0x54, 0x24, 0x40, // movdqa xmmword ptr [rsp+40h], xmm2
255+
0x66, 0x0F, 0x7F, 0x5C, 0x24, 0x50, // movdqa xmmword ptr [rsp+50h], xmm3
256+
0x48, 0x8B, 0xD0, // mov rdx, rax
257+
0x48, 0x8D, 0x0D, 0, 0, 0, 0, // lea rcx, [___DELAY_IMPORT_...]
258+
0xE8, 0, 0, 0, 0, // call __delayLoadHelper2
259+
0x66, 0x0F, 0x6F, 0x44, 0x24, 0x20, // movdqa xmm0, xmmword ptr [rsp+20h]
260+
0x66, 0x0F, 0x6F, 0x4C, 0x24, 0x30, // movdqa xmm1, xmmword ptr [rsp+30h]
261+
0x66, 0x0F, 0x6F, 0x54, 0x24, 0x40, // movdqa xmm2, xmmword ptr [rsp+40h]
262+
0x66, 0x0F, 0x6F, 0x5C, 0x24, 0x50, // movdqa xmm3, xmmword ptr [rsp+50h]
263+
0x48, 0x8B, 0x4C, 0x24, 0x70, // mov rcx, qword ptr [rsp+70h]
264+
0x48, 0x8B, 0x54, 0x24, 0x78, // mov rdx, qword ptr [rsp+78h]
265+
0x4C, 0x8B, 0x84, 0x24, 0x80, 0, 0, 0, // mov r8, qword ptr [rsp+80h]
266+
0x4C, 0x8B, 0x8C, 0x24, 0x88, 0, 0, 0, // mov r9, qword ptr [rsp+88h]
267+
0x48, 0x83, 0xC4, 0x68, // add rsp, 68h
268+
0xFF, 0xE0, // jmp rax
269269
};
270270

271271
static const uint8_t tailMergeUnwindInfoX64[] = {
272272
0x01, // Version=1, Flags=UNW_FLAG_NHANDLER
273-
0x0a, // Size of prolog
274-
0x05, // Count of unwind codes
273+
0x18, // Size of prolog
274+
0x01, // Count of unwind codes
275275
0x00, // No frame register
276-
0x0a, 0x82, // Offset 0xa: UWOP_ALLOC_SMALL(0x48)
277-
0x06, 0x02, // Offset 6: UWOP_ALLOC_SMALL(8)
278-
0x04, 0x02, // Offset 4: UWOP_ALLOC_SMALL(8)
279-
0x02, 0x02, // Offset 2: UWOP_ALLOC_SMALL(8)
280-
0x01, 0x02, // Offset 1: UWOP_ALLOC_SMALL(8)
276+
0x18, 0xC2, // Offset 0x18: UWOP_ALLOC_SMALL(0x68)
281277
0x00, 0x00 // Padding to align on 32-bits
282278
};
283279

@@ -378,8 +374,8 @@ class TailMergeChunkX64 : public NonSectionCodeChunk {
378374

379375
void writeTo(uint8_t *buf) const override {
380376
memcpy(buf, tailMergeX64, sizeof(tailMergeX64));
381-
write32le(buf + 39, desc->getRVA() - rva - 43);
382-
write32le(buf + 44, helper->getRVA() - rva - 48);
377+
write32le(buf + 54, desc->getRVA() - rva - 58);
378+
write32le(buf + 59, helper->getRVA() - rva - 63);
383379
}
384380

385381
Chunk *desc = nullptr;

lld/test/COFF/arm64ec-delayimport.test

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -51,28 +51,28 @@ DISASM-NEXT: 180002016: 48 8d 05 6b 50 00 00 leaq 0x506b(%rip), %rax
5151
DISASM-NEXT: 18000201d: e9 0c 00 00 00 jmp 0x18000202e <.text+0x102e>
5252
DISASM-NEXT: 180002022: 48 8d 05 67 50 00 00 leaq 0x5067(%rip), %rax # 0x180007090
5353
DISASM-NEXT: 180002029: e9 00 00 00 00 jmp 0x18000202e <.text+0x102e>
54-
DISASM-NEXT: 18000202e: 51 pushq %rcx
55-
DISASM-NEXT: 18000202f: 52 pushq %rdx
56-
DISASM-NEXT: 180002030: 41 50 pushq %r8
57-
DISASM-NEXT: 180002032: 41 51 pushq %r9
58-
DISASM-NEXT: 180002034: 48 83 ec 48 subq $0x48, %rsp
59-
DISASM-NEXT: 180002038: 66 0f 7f 04 24 movdqa %xmm0, (%rsp)
60-
DISASM-NEXT: 18000203d: 66 0f 7f 4c 24 10 movdqa %xmm1, 0x10(%rsp)
61-
DISASM-NEXT: 180002043: 66 0f 7f 54 24 20 movdqa %xmm2, 0x20(%rsp)
62-
DISASM-NEXT: 180002049: 66 0f 7f 5c 24 30 movdqa %xmm3, 0x30(%rsp)
63-
DISASM-NEXT: 18000204f: 48 8b d0 movq %rax, %rdx
64-
DISASM-NEXT: 180002052: 48 8d 0d a7 21 00 00 leaq 0x21a7(%rip), %rcx # 0x180004200
65-
DISASM-NEXT: 180002059: e8 aa ef ff ff callq 0x180001008 <.text+0x8>
66-
DISASM-NEXT: 18000205e: 66 0f 6f 04 24 movdqa (%rsp), %xmm0
67-
DISASM-NEXT: 180002063: 66 0f 6f 4c 24 10 movdqa 0x10(%rsp), %xmm1
68-
DISASM-NEXT: 180002069: 66 0f 6f 54 24 20 movdqa 0x20(%rsp), %xmm2
69-
DISASM-NEXT: 18000206f: 66 0f 6f 5c 24 30 movdqa 0x30(%rsp), %xmm3
70-
DISASM-NEXT: 180002075: 48 83 c4 48 addq $0x48, %rsp
71-
DISASM-NEXT: 180002079: 41 59 popq %r9
72-
DISASM-NEXT: 18000207b: 41 58 popq %r8
73-
DISASM-NEXT: 18000207d: 5a popq %rdx
74-
DISASM-NEXT: 18000207e: 59 popq %rcx
75-
DISASM-NEXT: 18000207f: ff e0 jmpq *%rax
54+
DISASM-NEXT: 18000202e: 48 89 4c 24 08 movq %rcx, 0x8(%rsp)
55+
DISASM-NEXT: 180002033: 48 89 54 24 10 movq %rdx, 0x10(%rsp)
56+
DISASM-NEXT: 180002038: 4c 89 44 24 18 movq %r8, 0x18(%rsp)
57+
DISASM-NEXT: 18000203d: 4c 89 4c 24 20 movq %r9, 0x20(%rsp)
58+
DISASM-NEXT: 180002042: 48 83 ec 68 subq $0x68, %rsp
59+
DISASM-NEXT: 180002046: 66 0f 7f 44 24 20 movdqa %xmm0, 0x20(%rsp)
60+
DISASM-NEXT: 18000204c: 66 0f 7f 4c 24 30 movdqa %xmm1, 0x30(%rsp)
61+
DISASM-NEXT: 180002052: 66 0f 7f 54 24 40 movdqa %xmm2, 0x40(%rsp)
62+
DISASM-NEXT: 180002058: 66 0f 7f 5c 24 50 movdqa %xmm3, 0x50(%rsp)
63+
DISASM-NEXT: 18000205e: 48 8b d0 movq %rax, %rdx
64+
DISASM-NEXT: 180002061: 48 8d 0d 90 21 00 00 leaq 0x2190(%rip), %rcx # 0x1800041f8
65+
DISASM-NEXT: 180002068: e8 9b ef ff ff callq 0x180001008 <.text+0x8>
66+
DISASM-NEXT: 18000206d: 66 0f 6f 44 24 20 movdqa 0x20(%rsp), %xmm0
67+
DISASM-NEXT: 180002073: 66 0f 6f 4c 24 30 movdqa 0x30(%rsp), %xmm1
68+
DISASM-NEXT: 180002079: 66 0f 6f 54 24 40 movdqa 0x40(%rsp), %xmm2
69+
DISASM-NEXT: 18000207f: 66 0f 6f 5c 24 50 movdqa 0x50(%rsp), %xmm3
70+
DISASM-NEXT: 180002085: 48 8b 4c 24 70 movq 0x70(%rsp), %rcx
71+
DISASM-NEXT: 18000208a: 48 8b 54 24 78 movq 0x78(%rsp), %rdx
72+
DISASM-NEXT: 18000208f: 4c 8b 84 24 80 00 00 00 movq 0x80(%rsp), %r8
73+
DISASM-NEXT: 180002097: 4c 8b 8c 24 88 00 00 00 movq 0x88(%rsp), %r9
74+
DISASM-NEXT: 18000209f: 48 83 c4 68 addq $0x68, %rsp
75+
DISASM-NEXT: 1800020a3: ff e0 jmpq *%rax
7676

7777
RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=LOADCFG %s
7878
LOADCFG: CHPEMetadata [
@@ -85,7 +85,7 @@ IMPORTS-NEXT: Name: test.dll
8585
IMPORTS-NEXT: Attributes: 0x1
8686
IMPORTS-NEXT: ModuleHandle: 0x7080
8787
IMPORTS-NEXT: ImportAddressTable: 0x7088
88-
IMPORTS-NEXT: ImportNameTable: 0x4240
88+
IMPORTS-NEXT: ImportNameTable: 0x4238
8989
IMPORTS-NEXT: BoundDelayImportTable: 0x0
9090
IMPORTS-NEXT: UnloadDelayImportTable: 0x0
9191
IMPORTS-NEXT: Import {
@@ -141,7 +141,7 @@ RELOC-NEXT: Address: 0x6008
141141
RELOC-NEXT: }
142142

143143
RUN: llvm-readobj --hex-dump=.pdata out.dll | FileCheck --check-prefix=PDATA %s
144-
PDATA: 0x180008000 2e200000 81200000 18400000
144+
PDATA: 0x180008000 2e200000 a5200000 18400000
145145

146146
Verify that a demangled version of __delayLoadHelper2 can be used.
147147

lld/test/COFF/arm64x-delayimport.test

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ IMPORTS-NEXT: Name: test.dll
2121
IMPORTS-NEXT: Attributes: 0x1
2222
IMPORTS-NEXT: ModuleHandle: 0x6080
2323
IMPORTS-NEXT: ImportAddressTable: 0x6088
24-
IMPORTS-NEXT: ImportNameTable: 0x4390
24+
IMPORTS-NEXT: ImportNameTable: 0x4388
2525
IMPORTS-NEXT: BoundDelayImportTable: 0x0
2626
IMPORTS-NEXT: UnloadDelayImportTable: 0x0
2727
IMPORTS-NEXT: Import {
@@ -35,7 +35,7 @@ IMPORTS-NEXT: Name: test.dll
3535
IMPORTS-NEXT: Attributes: 0x1
3636
IMPORTS-NEXT: ModuleHandle: 0x6080
3737
IMPORTS-NEXT: ImportAddressTable: 0x6098
38-
IMPORTS-NEXT: ImportNameTable: 0x43A0
38+
IMPORTS-NEXT: ImportNameTable: 0x4398
3939
IMPORTS-NEXT: BoundDelayImportTable: 0x0
4040
IMPORTS-NEXT: UnloadDelayImportTable: 0x0
4141
IMPORTS-NEXT: Import {
@@ -73,7 +73,7 @@ DISASM-NEXT: 180001040: ad0497e4 stp q4, q5, [sp, #0x90]
7373
DISASM-NEXT: 180001044: ad059fe6 stp q6, q7, [sp, #0xb0]
7474
DISASM-NEXT: 180001048: aa1103e1 mov x1, x17
7575
DISASM-NEXT: 18000104c: f0000000 adrp x0, 0x180004000
76-
DISASM-NEXT: 180001050: 910d4000 add x0, x0, #0x350
76+
DISASM-NEXT: 180001050: 910d2000 add x0, x0, #0x348
7777
DISASM-NEXT: 180001054: 97ffffeb bl 0x180001000 <.text>
7878
DISASM-NEXT: 180001058: aa0003f0 mov x16, x0
7979
DISASM-NEXT: 18000105c: ad459fe6 ldp q6, q7, [sp, #0xb0]
@@ -105,28 +105,28 @@ DISASM-NEXT: ...
105105
DISASM-NEXT: 180003000: ff 25 92 30 00 00 jmpq *0x3092(%rip) # 0x180006098
106106
DISASM-NEXT: 180003006: 48 8d 05 8b 30 00 00 leaq 0x308b(%rip), %rax # 0x180006098
107107
DISASM-NEXT: 18000300d: e9 00 00 00 00 jmp 0x180003012 <.text+0x2012>
108-
DISASM-NEXT: 180003012: 51 pushq %rcx
109-
DISASM-NEXT: 180003013: 52 pushq %rdx
110-
DISASM-NEXT: 180003014: 41 50 pushq %r8
111-
DISASM-NEXT: 180003016: 41 51 pushq %r9
112-
DISASM-NEXT: 180003018: 48 83 ec 48 subq $0x48, %rsp
113-
DISASM-NEXT: 18000301c: 66 0f 7f 04 24 movdqa %xmm0, (%rsp)
114-
DISASM-NEXT: 180003021: 66 0f 7f 4c 24 10 movdqa %xmm1, 0x10(%rsp)
115-
DISASM-NEXT: 180003027: 66 0f 7f 54 24 20 movdqa %xmm2, 0x20(%rsp)
116-
DISASM-NEXT: 18000302d: 66 0f 7f 5c 24 30 movdqa %xmm3, 0x30(%rsp)
117-
DISASM-NEXT: 180003033: 48 8b d0 movq %rax, %rdx
118-
DISASM-NEXT: 180003036: 48 8d 0d 13 13 00 00 leaq 0x1313(%rip), %rcx # 0x180004350
119-
DISASM-NEXT: 18000303d: e8 c6 ef ff ff callq 0x180002008 <.text+0x1008>
120-
DISASM-NEXT: 180003042: 66 0f 6f 04 24 movdqa (%rsp), %xmm0
121-
DISASM-NEXT: 180003047: 66 0f 6f 4c 24 10 movdqa 0x10(%rsp), %xmm1
122-
DISASM-NEXT: 18000304d: 66 0f 6f 54 24 20 movdqa 0x20(%rsp), %xmm2
123-
DISASM-NEXT: 180003053: 66 0f 6f 5c 24 30 movdqa 0x30(%rsp), %xmm3
124-
DISASM-NEXT: 180003059: 48 83 c4 48 addq $0x48, %rsp
125-
DISASM-NEXT: 18000305d: 41 59 popq %r9
126-
DISASM-NEXT: 18000305f: 41 58 popq %r8
127-
DISASM-NEXT: 180003061: 5a popq %rdx
128-
DISASM-NEXT: 180003062: 59 popq %rcx
129-
DISASM-NEXT: 180003063: ff e0 jmpq *%rax
108+
DISASM-NEXT: 180003012: 48 89 4c 24 08 movq %rcx, 0x8(%rsp)
109+
DISASM-NEXT: 180003017: 48 89 54 24 10 movq %rdx, 0x10(%rsp)
110+
DISASM-NEXT: 18000301c: 4c 89 44 24 18 movq %r8, 0x18(%rsp)
111+
DISASM-NEXT: 180003021: 4c 89 4c 24 20 movq %r9, 0x20(%rsp)
112+
DISASM-NEXT: 180003026: 48 83 ec 68 subq $0x68, %rsp
113+
DISASM-NEXT: 18000302a: 66 0f 7f 44 24 20 movdqa %xmm0, 0x20(%rsp)
114+
DISASM-NEXT: 180003030: 66 0f 7f 4c 24 30 movdqa %xmm1, 0x30(%rsp)
115+
DISASM-NEXT: 180003036: 66 0f 7f 54 24 40 movdqa %xmm2, 0x40(%rsp)
116+
DISASM-NEXT: 18000303c: 66 0f 7f 5c 24 50 movdqa %xmm3, 0x50(%rsp)
117+
DISASM-NEXT: 180003042: 48 8b d0 movq %rax, %rdx
118+
DISASM-NEXT: 180003045: 48 8d 0d fc 12 00 00 leaq 0x12fc(%rip), %rcx # 0x180004348
119+
DISASM-NEXT: 18000304c: e8 b7 ef ff ff callq 0x180002008 <.text+0x1008>
120+
DISASM-NEXT: 180003051: 66 0f 6f 44 24 20 movdqa 0x20(%rsp), %xmm0
121+
DISASM-NEXT: 180003057: 66 0f 6f 4c 24 30 movdqa 0x30(%rsp), %xmm1
122+
DISASM-NEXT: 18000305d: 66 0f 6f 54 24 40 movdqa 0x40(%rsp), %xmm2
123+
DISASM-NEXT: 180003063: 66 0f 6f 5c 24 50 movdqa 0x50(%rsp), %xmm3
124+
DISASM-NEXT: 180003069: 48 8b 4c 24 70 movq 0x70(%rsp), %rcx
125+
DISASM-NEXT: 18000306e: 48 8b 54 24 78 movq 0x78(%rsp), %rdx
126+
DISASM-NEXT: 180003073: 4c 8b 84 24 80 00 00 00 movq 0x80(%rsp), %r8
127+
DISASM-NEXT: 18000307b: 4c 8b 8c 24 88 00 00 00 movq 0x88(%rsp), %r9
128+
DISASM-NEXT: 180003083: 48 83 c4 68 addq $0x68, %rsp
129+
DISASM-NEXT: 180003087: ff e0 jmpq *%rax
130130

131131
RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=LOADCFG %s
132132
LOADCFG: AuxiliaryDelayloadIAT: 0x5000
@@ -230,7 +230,7 @@ EC-IMPORTS-NEXT: Name: test.dll
230230
EC-IMPORTS-NEXT: Attributes: 0x1
231231
EC-IMPORTS-NEXT: ModuleHandle: 0x6080
232232
EC-IMPORTS-NEXT: ImportAddressTable: 0x6088
233-
EC-IMPORTS-NEXT: ImportNameTable: 0x4388
233+
EC-IMPORTS-NEXT: ImportNameTable: 0x4380
234234
EC-IMPORTS-NEXT: BoundDelayImportTable: 0x0
235235
EC-IMPORTS-NEXT: UnloadDelayImportTable: 0x0
236236
EC-IMPORTS-NEXT: }
@@ -243,7 +243,7 @@ EC-IMPORTS-NEXT: Name: test.dll
243243
EC-IMPORTS-NEXT: Attributes: 0x1
244244
EC-IMPORTS-NEXT: ModuleHandle: 0x6080
245245
EC-IMPORTS-NEXT: ImportAddressTable: 0x6090
246-
EC-IMPORTS-NEXT: ImportNameTable: 0x4390
246+
EC-IMPORTS-NEXT: ImportNameTable: 0x4388
247247
EC-IMPORTS-NEXT: BoundDelayImportTable: 0x0
248248
EC-IMPORTS-NEXT: UnloadDelayImportTable: 0x0
249249
EC-IMPORTS-NEXT: Import {
@@ -279,28 +279,28 @@ EC-DISASM-NEXT: ...
279279
EC-DISASM-NEXT: 180003000: ff 25 8a 30 00 00 jmpq *0x308a(%rip) # 0x180006090
280280
EC-DISASM-NEXT: 180003006: 48 8d 05 83 30 00 00 leaq 0x3083(%rip), %rax # 0x180006090
281281
EC-DISASM-NEXT: 18000300d: e9 00 00 00 00 jmp 0x180003012 <.text+0x2012>
282-
EC-DISASM-NEXT: 180003012: 51 pushq %rcx
283-
EC-DISASM-NEXT: 180003013: 52 pushq %rdx
284-
EC-DISASM-NEXT: 180003014: 41 50 pushq %r8
285-
EC-DISASM-NEXT: 180003016: 41 51 pushq %r9
286-
EC-DISASM-NEXT: 180003018: 48 83 ec 48 subq $0x48, %rsp
287-
EC-DISASM-NEXT: 18000301c: 66 0f 7f 04 24 movdqa %xmm0, (%rsp)
288-
EC-DISASM-NEXT: 180003021: 66 0f 7f 4c 24 10 movdqa %xmm1, 0x10(%rsp)
289-
EC-DISASM-NEXT: 180003027: 66 0f 7f 54 24 20 movdqa %xmm2, 0x20(%rsp)
290-
EC-DISASM-NEXT: 18000302d: 66 0f 7f 5c 24 30 movdqa %xmm3, 0x30(%rsp)
291-
EC-DISASM-NEXT: 180003033: 48 8b d0 movq %rax, %rdx
292-
EC-DISASM-NEXT: 180003036: 48 8d 0d 0b 13 00 00 leaq 0x130b(%rip), %rcx # 0x180004348
293-
EC-DISASM-NEXT: 18000303d: e8 c6 ef ff ff callq 0x180002008 <.text+0x1008>
294-
EC-DISASM-NEXT: 180003042: 66 0f 6f 04 24 movdqa (%rsp), %xmm0
295-
EC-DISASM-NEXT: 180003047: 66 0f 6f 4c 24 10 movdqa 0x10(%rsp), %xmm1
296-
EC-DISASM-NEXT: 18000304d: 66 0f 6f 54 24 20 movdqa 0x20(%rsp), %xmm2
297-
EC-DISASM-NEXT: 180003053: 66 0f 6f 5c 24 30 movdqa 0x30(%rsp), %xmm3
298-
EC-DISASM-NEXT: 180003059: 48 83 c4 48 addq $0x48, %rsp
299-
EC-DISASM-NEXT: 18000305d: 41 59 popq %r9
300-
EC-DISASM-NEXT: 18000305f: 41 58 popq %r8
301-
EC-DISASM-NEXT: 180003061: 5a popq %rdx
302-
EC-DISASM-NEXT: 180003062: 59 popq %rcx
303-
EC-DISASM-NEXT: 180003063: ff e0 jmpq *%rax
282+
EC-DISASM-NEXT: 180003012: 48 89 4c 24 08 movq %rcx, 0x8(%rsp)
283+
EC-DISASM-NEXT: 180003017: 48 89 54 24 10 movq %rdx, 0x10(%rsp)
284+
EC-DISASM-NEXT: 18000301c: 4c 89 44 24 18 movq %r8, 0x18(%rsp)
285+
EC-DISASM-NEXT: 180003021: 4c 89 4c 24 20 movq %r9, 0x20(%rsp)
286+
EC-DISASM-NEXT: 180003026: 48 83 ec 68 subq $0x68, %rsp
287+
EC-DISASM-NEXT: 18000302a: 66 0f 7f 44 24 20 movdqa %xmm0, 0x20(%rsp)
288+
EC-DISASM-NEXT: 180003030: 66 0f 7f 4c 24 30 movdqa %xmm1, 0x30(%rsp)
289+
EC-DISASM-NEXT: 180003036: 66 0f 7f 54 24 40 movdqa %xmm2, 0x40(%rsp)
290+
EC-DISASM-NEXT: 18000303c: 66 0f 7f 5c 24 50 movdqa %xmm3, 0x50(%rsp)
291+
EC-DISASM-NEXT: 180003042: 48 8b d0 movq %rax, %rdx
292+
EC-DISASM-NEXT: 180003045: 48 8d 0d f4 12 00 00 leaq 0x12f4(%rip), %rcx # 0x180004340
293+
EC-DISASM-NEXT: 18000304c: e8 b7 ef ff ff callq 0x180002008 <.text+0x1008>
294+
EC-DISASM-NEXT: 180003051: 66 0f 6f 44 24 20 movdqa 0x20(%rsp), %xmm0
295+
EC-DISASM-NEXT: 180003057: 66 0f 6f 4c 24 30 movdqa 0x30(%rsp), %xmm1
296+
EC-DISASM-NEXT: 18000305d: 66 0f 6f 54 24 40 movdqa 0x40(%rsp), %xmm2
297+
EC-DISASM-NEXT: 180003063: 66 0f 6f 5c 24 50 movdqa 0x50(%rsp), %xmm3
298+
EC-DISASM-NEXT: 180003069: 48 8b 4c 24 70 movq 0x70(%rsp), %rcx
299+
EC-DISASM-NEXT: 18000306e: 48 8b 54 24 78 movq 0x78(%rsp), %rdx
300+
EC-DISASM-NEXT: 180003073: 4c 8b 84 24 80 00 00 00 movq 0x80(%rsp), %r8
301+
EC-DISASM-NEXT: 18000307b: 4c 8b 8c 24 88 00 00 00 movq 0x88(%rsp), %r9
302+
EC-DISASM-NEXT: 180003083: 48 83 c4 68 addq $0x68, %rsp
303+
EC-DISASM-NEXT: 180003087: ff e0 jmpq *%rax
304304

305305
RUN: llvm-readobj --coff-load-config out-ec.dll | FileCheck --check-prefix=EC-LOADCFG %s
306306
EC-LOADCFG: AuxiliaryDelayloadIAT: 0x5000

lld/test/COFF/delayimports.test

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ IMPORT-NEXT: Name: std64.dll
1010
IMPORT-NEXT: Attributes: 0x1
1111
IMPORT-NEXT: ModuleHandle: 0x3018
1212
IMPORT-NEXT: ImportAddressTable: 0x3020
13-
IMPORT-NEXT: ImportNameTable: 0x2050
13+
IMPORT-NEXT: ImportNameTable: 0x2048
1414
IMPORT-NEXT: BoundDelayImportTable: 0x0
1515
IMPORT-NEXT: UnloadDelayImportTable: 0x0
1616
IMPORT-NEXT: Import {
@@ -44,22 +44,18 @@ BASEREL-NEXT: }
4444
UNWIND: UnwindInformation [
4545
UNWIND-NEXT: RuntimeFunction {
4646
UNWIND-NEXT: StartAddress: (0x14000108A)
47-
UNWIND-NEXT: EndAddress: (0x1400010DD)
47+
UNWIND-NEXT: EndAddress: (0x140001101)
4848
UNWIND-NEXT: UnwindInfoAddress: (0x140002000)
4949
UNWIND-NEXT: UnwindInfo {
5050
UNWIND-NEXT: Version: 1
5151
UNWIND-NEXT: Flags [ (0x0)
5252
UNWIND-NEXT: ]
53-
UNWIND-NEXT: PrologSize: 10
53+
UNWIND-NEXT: PrologSize: 24
5454
UNWIND-NEXT: FrameRegister: -
5555
UNWIND-NEXT: FrameOffset: -
56-
UNWIND-NEXT: UnwindCodeCount: 5
56+
UNWIND-NEXT: UnwindCodeCount: 1
5757
UNWIND-NEXT: UnwindCodes [
58-
UNWIND-NEXT: 0x0A: ALLOC_SMALL size=72
59-
UNWIND-NEXT: 0x06: ALLOC_SMALL size=8
60-
UNWIND-NEXT: 0x04: ALLOC_SMALL size=8
61-
UNWIND-NEXT: 0x02: ALLOC_SMALL size=8
62-
UNWIND-NEXT: 0x01: ALLOC_SMALL size=8
58+
UNWIND-NEXT: 0x18: ALLOC_SMALL size=104
6359
UNWIND-NEXT: ]
6460
UNWIND-NEXT: }
6561
UNWIND-NEXT: }

0 commit comments

Comments
 (0)