[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 <benjamin.santerre@gmail.com>
This commit is contained in:
parent
0209e76fe6
commit
75b79c9238
@ -244,40 +244,36 @@ static const uint8_t thunkX64[] = {
|
||||
};
|
||||
|
||||
static const uint8_t tailMergeX64[] = {
|
||||
0x51, // push rcx
|
||||
0x52, // push rdx
|
||||
0x41, 0x50, // push r8
|
||||
0x41, 0x51, // push r9
|
||||
0x48, 0x83, 0xEC, 0x48, // sub rsp, 48h
|
||||
0x66, 0x0F, 0x7F, 0x04, 0x24, // movdqa xmmword ptr [rsp], xmm0
|
||||
0x66, 0x0F, 0x7F, 0x4C, 0x24, 0x10, // movdqa xmmword ptr [rsp+10h], xmm1
|
||||
0x66, 0x0F, 0x7F, 0x54, 0x24, 0x20, // movdqa xmmword ptr [rsp+20h], xmm2
|
||||
0x66, 0x0F, 0x7F, 0x5C, 0x24, 0x30, // movdqa xmmword ptr [rsp+30h], xmm3
|
||||
0x48, 0x8B, 0xD0, // mov rdx, rax
|
||||
0x48, 0x8D, 0x0D, 0, 0, 0, 0, // lea rcx, [___DELAY_IMPORT_...]
|
||||
0xE8, 0, 0, 0, 0, // call __delayLoadHelper2
|
||||
0x66, 0x0F, 0x6F, 0x04, 0x24, // movdqa xmm0, xmmword ptr [rsp]
|
||||
0x66, 0x0F, 0x6F, 0x4C, 0x24, 0x10, // movdqa xmm1, xmmword ptr [rsp+10h]
|
||||
0x66, 0x0F, 0x6F, 0x54, 0x24, 0x20, // movdqa xmm2, xmmword ptr [rsp+20h]
|
||||
0x66, 0x0F, 0x6F, 0x5C, 0x24, 0x30, // movdqa xmm3, xmmword ptr [rsp+30h]
|
||||
0x48, 0x83, 0xC4, 0x48, // add rsp, 48h
|
||||
0x41, 0x59, // pop r9
|
||||
0x41, 0x58, // pop r8
|
||||
0x5A, // pop rdx
|
||||
0x59, // pop rcx
|
||||
0xFF, 0xE0, // jmp rax
|
||||
0x48, 0x89, 0x4C, 0x24, 0x08, // mov qword ptr [rsp+8], rcx
|
||||
0x48, 0x89, 0x54, 0x24, 0x10, // mov qword ptr [rsp+10h], rdx
|
||||
0x4C, 0x89, 0x44, 0x24, 0x18, // mov qword ptr [rsp+18h], r8
|
||||
0x4C, 0x89, 0x4C, 0x24, 0x20, // mov qword ptr [rsp+20h], r9
|
||||
0x48, 0x83, 0xEC, 0x68, // sub rsp, 68h
|
||||
0x66, 0x0F, 0x7F, 0x44, 0x24, 0x20, // movdqa xmmword ptr [rsp+20h], xmm0
|
||||
0x66, 0x0F, 0x7F, 0x4C, 0x24, 0x30, // movdqa xmmword ptr [rsp+30h], xmm1
|
||||
0x66, 0x0F, 0x7F, 0x54, 0x24, 0x40, // movdqa xmmword ptr [rsp+40h], xmm2
|
||||
0x66, 0x0F, 0x7F, 0x5C, 0x24, 0x50, // movdqa xmmword ptr [rsp+50h], xmm3
|
||||
0x48, 0x8B, 0xD0, // mov rdx, rax
|
||||
0x48, 0x8D, 0x0D, 0, 0, 0, 0, // lea rcx, [___DELAY_IMPORT_...]
|
||||
0xE8, 0, 0, 0, 0, // call __delayLoadHelper2
|
||||
0x66, 0x0F, 0x6F, 0x44, 0x24, 0x20, // movdqa xmm0, xmmword ptr [rsp+20h]
|
||||
0x66, 0x0F, 0x6F, 0x4C, 0x24, 0x30, // movdqa xmm1, xmmword ptr [rsp+30h]
|
||||
0x66, 0x0F, 0x6F, 0x54, 0x24, 0x40, // movdqa xmm2, xmmword ptr [rsp+40h]
|
||||
0x66, 0x0F, 0x6F, 0x5C, 0x24, 0x50, // movdqa xmm3, xmmword ptr [rsp+50h]
|
||||
0x48, 0x8B, 0x4C, 0x24, 0x70, // mov rcx, qword ptr [rsp+70h]
|
||||
0x48, 0x8B, 0x54, 0x24, 0x78, // mov rdx, qword ptr [rsp+78h]
|
||||
0x4C, 0x8B, 0x84, 0x24, 0x80, 0, 0, 0, // mov r8, qword ptr [rsp+80h]
|
||||
0x4C, 0x8B, 0x8C, 0x24, 0x88, 0, 0, 0, // mov r9, qword ptr [rsp+88h]
|
||||
0x48, 0x83, 0xC4, 0x68, // add rsp, 68h
|
||||
0xFF, 0xE0, // jmp rax
|
||||
};
|
||||
|
||||
static const uint8_t tailMergeUnwindInfoX64[] = {
|
||||
0x01, // Version=1, Flags=UNW_FLAG_NHANDLER
|
||||
0x0a, // Size of prolog
|
||||
0x05, // Count of unwind codes
|
||||
0x18, // Size of prolog
|
||||
0x01, // Count of unwind codes
|
||||
0x00, // No frame register
|
||||
0x0a, 0x82, // Offset 0xa: UWOP_ALLOC_SMALL(0x48)
|
||||
0x06, 0x02, // Offset 6: UWOP_ALLOC_SMALL(8)
|
||||
0x04, 0x02, // Offset 4: UWOP_ALLOC_SMALL(8)
|
||||
0x02, 0x02, // Offset 2: UWOP_ALLOC_SMALL(8)
|
||||
0x01, 0x02, // Offset 1: UWOP_ALLOC_SMALL(8)
|
||||
0x18, 0xC2, // Offset 0x18: UWOP_ALLOC_SMALL(0x68)
|
||||
0x00, 0x00 // Padding to align on 32-bits
|
||||
};
|
||||
|
||||
@ -378,8 +374,8 @@ public:
|
||||
|
||||
void writeTo(uint8_t *buf) const override {
|
||||
memcpy(buf, tailMergeX64, sizeof(tailMergeX64));
|
||||
write32le(buf + 39, desc->getRVA() - rva - 43);
|
||||
write32le(buf + 44, helper->getRVA() - rva - 48);
|
||||
write32le(buf + 54, desc->getRVA() - rva - 58);
|
||||
write32le(buf + 59, helper->getRVA() - rva - 63);
|
||||
}
|
||||
|
||||
Chunk *desc = nullptr;
|
||||
|
@ -51,28 +51,28 @@ DISASM-NEXT: 180002016: 48 8d 05 6b 50 00 00 leaq 0x506b(%rip), %rax
|
||||
DISASM-NEXT: 18000201d: e9 0c 00 00 00 jmp 0x18000202e <.text+0x102e>
|
||||
DISASM-NEXT: 180002022: 48 8d 05 67 50 00 00 leaq 0x5067(%rip), %rax # 0x180007090
|
||||
DISASM-NEXT: 180002029: e9 00 00 00 00 jmp 0x18000202e <.text+0x102e>
|
||||
DISASM-NEXT: 18000202e: 51 pushq %rcx
|
||||
DISASM-NEXT: 18000202f: 52 pushq %rdx
|
||||
DISASM-NEXT: 180002030: 41 50 pushq %r8
|
||||
DISASM-NEXT: 180002032: 41 51 pushq %r9
|
||||
DISASM-NEXT: 180002034: 48 83 ec 48 subq $0x48, %rsp
|
||||
DISASM-NEXT: 180002038: 66 0f 7f 04 24 movdqa %xmm0, (%rsp)
|
||||
DISASM-NEXT: 18000203d: 66 0f 7f 4c 24 10 movdqa %xmm1, 0x10(%rsp)
|
||||
DISASM-NEXT: 180002043: 66 0f 7f 54 24 20 movdqa %xmm2, 0x20(%rsp)
|
||||
DISASM-NEXT: 180002049: 66 0f 7f 5c 24 30 movdqa %xmm3, 0x30(%rsp)
|
||||
DISASM-NEXT: 18000204f: 48 8b d0 movq %rax, %rdx
|
||||
DISASM-NEXT: 180002052: 48 8d 0d a7 21 00 00 leaq 0x21a7(%rip), %rcx # 0x180004200
|
||||
DISASM-NEXT: 180002059: e8 aa ef ff ff callq 0x180001008 <.text+0x8>
|
||||
DISASM-NEXT: 18000205e: 66 0f 6f 04 24 movdqa (%rsp), %xmm0
|
||||
DISASM-NEXT: 180002063: 66 0f 6f 4c 24 10 movdqa 0x10(%rsp), %xmm1
|
||||
DISASM-NEXT: 180002069: 66 0f 6f 54 24 20 movdqa 0x20(%rsp), %xmm2
|
||||
DISASM-NEXT: 18000206f: 66 0f 6f 5c 24 30 movdqa 0x30(%rsp), %xmm3
|
||||
DISASM-NEXT: 180002075: 48 83 c4 48 addq $0x48, %rsp
|
||||
DISASM-NEXT: 180002079: 41 59 popq %r9
|
||||
DISASM-NEXT: 18000207b: 41 58 popq %r8
|
||||
DISASM-NEXT: 18000207d: 5a popq %rdx
|
||||
DISASM-NEXT: 18000207e: 59 popq %rcx
|
||||
DISASM-NEXT: 18000207f: ff e0 jmpq *%rax
|
||||
DISASM-NEXT: 18000202e: 48 89 4c 24 08 movq %rcx, 0x8(%rsp)
|
||||
DISASM-NEXT: 180002033: 48 89 54 24 10 movq %rdx, 0x10(%rsp)
|
||||
DISASM-NEXT: 180002038: 4c 89 44 24 18 movq %r8, 0x18(%rsp)
|
||||
DISASM-NEXT: 18000203d: 4c 89 4c 24 20 movq %r9, 0x20(%rsp)
|
||||
DISASM-NEXT: 180002042: 48 83 ec 68 subq $0x68, %rsp
|
||||
DISASM-NEXT: 180002046: 66 0f 7f 44 24 20 movdqa %xmm0, 0x20(%rsp)
|
||||
DISASM-NEXT: 18000204c: 66 0f 7f 4c 24 30 movdqa %xmm1, 0x30(%rsp)
|
||||
DISASM-NEXT: 180002052: 66 0f 7f 54 24 40 movdqa %xmm2, 0x40(%rsp)
|
||||
DISASM-NEXT: 180002058: 66 0f 7f 5c 24 50 movdqa %xmm3, 0x50(%rsp)
|
||||
DISASM-NEXT: 18000205e: 48 8b d0 movq %rax, %rdx
|
||||
DISASM-NEXT: 180002061: 48 8d 0d 90 21 00 00 leaq 0x2190(%rip), %rcx # 0x1800041f8
|
||||
DISASM-NEXT: 180002068: e8 9b ef ff ff callq 0x180001008 <.text+0x8>
|
||||
DISASM-NEXT: 18000206d: 66 0f 6f 44 24 20 movdqa 0x20(%rsp), %xmm0
|
||||
DISASM-NEXT: 180002073: 66 0f 6f 4c 24 30 movdqa 0x30(%rsp), %xmm1
|
||||
DISASM-NEXT: 180002079: 66 0f 6f 54 24 40 movdqa 0x40(%rsp), %xmm2
|
||||
DISASM-NEXT: 18000207f: 66 0f 6f 5c 24 50 movdqa 0x50(%rsp), %xmm3
|
||||
DISASM-NEXT: 180002085: 48 8b 4c 24 70 movq 0x70(%rsp), %rcx
|
||||
DISASM-NEXT: 18000208a: 48 8b 54 24 78 movq 0x78(%rsp), %rdx
|
||||
DISASM-NEXT: 18000208f: 4c 8b 84 24 80 00 00 00 movq 0x80(%rsp), %r8
|
||||
DISASM-NEXT: 180002097: 4c 8b 8c 24 88 00 00 00 movq 0x88(%rsp), %r9
|
||||
DISASM-NEXT: 18000209f: 48 83 c4 68 addq $0x68, %rsp
|
||||
DISASM-NEXT: 1800020a3: ff e0 jmpq *%rax
|
||||
|
||||
RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=LOADCFG %s
|
||||
LOADCFG: CHPEMetadata [
|
||||
@ -85,7 +85,7 @@ IMPORTS-NEXT: Name: test.dll
|
||||
IMPORTS-NEXT: Attributes: 0x1
|
||||
IMPORTS-NEXT: ModuleHandle: 0x7080
|
||||
IMPORTS-NEXT: ImportAddressTable: 0x7088
|
||||
IMPORTS-NEXT: ImportNameTable: 0x4240
|
||||
IMPORTS-NEXT: ImportNameTable: 0x4238
|
||||
IMPORTS-NEXT: BoundDelayImportTable: 0x0
|
||||
IMPORTS-NEXT: UnloadDelayImportTable: 0x0
|
||||
IMPORTS-NEXT: Import {
|
||||
@ -141,7 +141,7 @@ RELOC-NEXT: Address: 0x6008
|
||||
RELOC-NEXT: }
|
||||
|
||||
RUN: llvm-readobj --hex-dump=.pdata out.dll | FileCheck --check-prefix=PDATA %s
|
||||
PDATA: 0x180008000 2e200000 81200000 18400000
|
||||
PDATA: 0x180008000 2e200000 a5200000 18400000
|
||||
|
||||
Verify that a demangled version of __delayLoadHelper2 can be used.
|
||||
|
||||
|
@ -21,7 +21,7 @@ IMPORTS-NEXT: Name: test.dll
|
||||
IMPORTS-NEXT: Attributes: 0x1
|
||||
IMPORTS-NEXT: ModuleHandle: 0x6080
|
||||
IMPORTS-NEXT: ImportAddressTable: 0x6088
|
||||
IMPORTS-NEXT: ImportNameTable: 0x4390
|
||||
IMPORTS-NEXT: ImportNameTable: 0x4388
|
||||
IMPORTS-NEXT: BoundDelayImportTable: 0x0
|
||||
IMPORTS-NEXT: UnloadDelayImportTable: 0x0
|
||||
IMPORTS-NEXT: Import {
|
||||
@ -35,7 +35,7 @@ IMPORTS-NEXT: Name: test.dll
|
||||
IMPORTS-NEXT: Attributes: 0x1
|
||||
IMPORTS-NEXT: ModuleHandle: 0x6080
|
||||
IMPORTS-NEXT: ImportAddressTable: 0x6098
|
||||
IMPORTS-NEXT: ImportNameTable: 0x43A0
|
||||
IMPORTS-NEXT: ImportNameTable: 0x4398
|
||||
IMPORTS-NEXT: BoundDelayImportTable: 0x0
|
||||
IMPORTS-NEXT: UnloadDelayImportTable: 0x0
|
||||
IMPORTS-NEXT: Import {
|
||||
@ -73,7 +73,7 @@ DISASM-NEXT: 180001040: ad0497e4 stp q4, q5, [sp, #0x90]
|
||||
DISASM-NEXT: 180001044: ad059fe6 stp q6, q7, [sp, #0xb0]
|
||||
DISASM-NEXT: 180001048: aa1103e1 mov x1, x17
|
||||
DISASM-NEXT: 18000104c: f0000000 adrp x0, 0x180004000
|
||||
DISASM-NEXT: 180001050: 910d4000 add x0, x0, #0x350
|
||||
DISASM-NEXT: 180001050: 910d2000 add x0, x0, #0x348
|
||||
DISASM-NEXT: 180001054: 97ffffeb bl 0x180001000 <.text>
|
||||
DISASM-NEXT: 180001058: aa0003f0 mov x16, x0
|
||||
DISASM-NEXT: 18000105c: ad459fe6 ldp q6, q7, [sp, #0xb0]
|
||||
@ -105,28 +105,28 @@ DISASM-NEXT: ...
|
||||
DISASM-NEXT: 180003000: ff 25 92 30 00 00 jmpq *0x3092(%rip) # 0x180006098
|
||||
DISASM-NEXT: 180003006: 48 8d 05 8b 30 00 00 leaq 0x308b(%rip), %rax # 0x180006098
|
||||
DISASM-NEXT: 18000300d: e9 00 00 00 00 jmp 0x180003012 <.text+0x2012>
|
||||
DISASM-NEXT: 180003012: 51 pushq %rcx
|
||||
DISASM-NEXT: 180003013: 52 pushq %rdx
|
||||
DISASM-NEXT: 180003014: 41 50 pushq %r8
|
||||
DISASM-NEXT: 180003016: 41 51 pushq %r9
|
||||
DISASM-NEXT: 180003018: 48 83 ec 48 subq $0x48, %rsp
|
||||
DISASM-NEXT: 18000301c: 66 0f 7f 04 24 movdqa %xmm0, (%rsp)
|
||||
DISASM-NEXT: 180003021: 66 0f 7f 4c 24 10 movdqa %xmm1, 0x10(%rsp)
|
||||
DISASM-NEXT: 180003027: 66 0f 7f 54 24 20 movdqa %xmm2, 0x20(%rsp)
|
||||
DISASM-NEXT: 18000302d: 66 0f 7f 5c 24 30 movdqa %xmm3, 0x30(%rsp)
|
||||
DISASM-NEXT: 180003033: 48 8b d0 movq %rax, %rdx
|
||||
DISASM-NEXT: 180003036: 48 8d 0d 13 13 00 00 leaq 0x1313(%rip), %rcx # 0x180004350
|
||||
DISASM-NEXT: 18000303d: e8 c6 ef ff ff callq 0x180002008 <.text+0x1008>
|
||||
DISASM-NEXT: 180003042: 66 0f 6f 04 24 movdqa (%rsp), %xmm0
|
||||
DISASM-NEXT: 180003047: 66 0f 6f 4c 24 10 movdqa 0x10(%rsp), %xmm1
|
||||
DISASM-NEXT: 18000304d: 66 0f 6f 54 24 20 movdqa 0x20(%rsp), %xmm2
|
||||
DISASM-NEXT: 180003053: 66 0f 6f 5c 24 30 movdqa 0x30(%rsp), %xmm3
|
||||
DISASM-NEXT: 180003059: 48 83 c4 48 addq $0x48, %rsp
|
||||
DISASM-NEXT: 18000305d: 41 59 popq %r9
|
||||
DISASM-NEXT: 18000305f: 41 58 popq %r8
|
||||
DISASM-NEXT: 180003061: 5a popq %rdx
|
||||
DISASM-NEXT: 180003062: 59 popq %rcx
|
||||
DISASM-NEXT: 180003063: ff e0 jmpq *%rax
|
||||
DISASM-NEXT: 180003012: 48 89 4c 24 08 movq %rcx, 0x8(%rsp)
|
||||
DISASM-NEXT: 180003017: 48 89 54 24 10 movq %rdx, 0x10(%rsp)
|
||||
DISASM-NEXT: 18000301c: 4c 89 44 24 18 movq %r8, 0x18(%rsp)
|
||||
DISASM-NEXT: 180003021: 4c 89 4c 24 20 movq %r9, 0x20(%rsp)
|
||||
DISASM-NEXT: 180003026: 48 83 ec 68 subq $0x68, %rsp
|
||||
DISASM-NEXT: 18000302a: 66 0f 7f 44 24 20 movdqa %xmm0, 0x20(%rsp)
|
||||
DISASM-NEXT: 180003030: 66 0f 7f 4c 24 30 movdqa %xmm1, 0x30(%rsp)
|
||||
DISASM-NEXT: 180003036: 66 0f 7f 54 24 40 movdqa %xmm2, 0x40(%rsp)
|
||||
DISASM-NEXT: 18000303c: 66 0f 7f 5c 24 50 movdqa %xmm3, 0x50(%rsp)
|
||||
DISASM-NEXT: 180003042: 48 8b d0 movq %rax, %rdx
|
||||
DISASM-NEXT: 180003045: 48 8d 0d fc 12 00 00 leaq 0x12fc(%rip), %rcx # 0x180004348
|
||||
DISASM-NEXT: 18000304c: e8 b7 ef ff ff callq 0x180002008 <.text+0x1008>
|
||||
DISASM-NEXT: 180003051: 66 0f 6f 44 24 20 movdqa 0x20(%rsp), %xmm0
|
||||
DISASM-NEXT: 180003057: 66 0f 6f 4c 24 30 movdqa 0x30(%rsp), %xmm1
|
||||
DISASM-NEXT: 18000305d: 66 0f 6f 54 24 40 movdqa 0x40(%rsp), %xmm2
|
||||
DISASM-NEXT: 180003063: 66 0f 6f 5c 24 50 movdqa 0x50(%rsp), %xmm3
|
||||
DISASM-NEXT: 180003069: 48 8b 4c 24 70 movq 0x70(%rsp), %rcx
|
||||
DISASM-NEXT: 18000306e: 48 8b 54 24 78 movq 0x78(%rsp), %rdx
|
||||
DISASM-NEXT: 180003073: 4c 8b 84 24 80 00 00 00 movq 0x80(%rsp), %r8
|
||||
DISASM-NEXT: 18000307b: 4c 8b 8c 24 88 00 00 00 movq 0x88(%rsp), %r9
|
||||
DISASM-NEXT: 180003083: 48 83 c4 68 addq $0x68, %rsp
|
||||
DISASM-NEXT: 180003087: ff e0 jmpq *%rax
|
||||
|
||||
RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=LOADCFG %s
|
||||
LOADCFG: AuxiliaryDelayloadIAT: 0x5000
|
||||
@ -230,7 +230,7 @@ EC-IMPORTS-NEXT: Name: test.dll
|
||||
EC-IMPORTS-NEXT: Attributes: 0x1
|
||||
EC-IMPORTS-NEXT: ModuleHandle: 0x6080
|
||||
EC-IMPORTS-NEXT: ImportAddressTable: 0x6088
|
||||
EC-IMPORTS-NEXT: ImportNameTable: 0x4388
|
||||
EC-IMPORTS-NEXT: ImportNameTable: 0x4380
|
||||
EC-IMPORTS-NEXT: BoundDelayImportTable: 0x0
|
||||
EC-IMPORTS-NEXT: UnloadDelayImportTable: 0x0
|
||||
EC-IMPORTS-NEXT: }
|
||||
@ -243,7 +243,7 @@ EC-IMPORTS-NEXT: Name: test.dll
|
||||
EC-IMPORTS-NEXT: Attributes: 0x1
|
||||
EC-IMPORTS-NEXT: ModuleHandle: 0x6080
|
||||
EC-IMPORTS-NEXT: ImportAddressTable: 0x6090
|
||||
EC-IMPORTS-NEXT: ImportNameTable: 0x4390
|
||||
EC-IMPORTS-NEXT: ImportNameTable: 0x4388
|
||||
EC-IMPORTS-NEXT: BoundDelayImportTable: 0x0
|
||||
EC-IMPORTS-NEXT: UnloadDelayImportTable: 0x0
|
||||
EC-IMPORTS-NEXT: Import {
|
||||
@ -279,28 +279,28 @@ EC-DISASM-NEXT: ...
|
||||
EC-DISASM-NEXT: 180003000: ff 25 8a 30 00 00 jmpq *0x308a(%rip) # 0x180006090
|
||||
EC-DISASM-NEXT: 180003006: 48 8d 05 83 30 00 00 leaq 0x3083(%rip), %rax # 0x180006090
|
||||
EC-DISASM-NEXT: 18000300d: e9 00 00 00 00 jmp 0x180003012 <.text+0x2012>
|
||||
EC-DISASM-NEXT: 180003012: 51 pushq %rcx
|
||||
EC-DISASM-NEXT: 180003013: 52 pushq %rdx
|
||||
EC-DISASM-NEXT: 180003014: 41 50 pushq %r8
|
||||
EC-DISASM-NEXT: 180003016: 41 51 pushq %r9
|
||||
EC-DISASM-NEXT: 180003018: 48 83 ec 48 subq $0x48, %rsp
|
||||
EC-DISASM-NEXT: 18000301c: 66 0f 7f 04 24 movdqa %xmm0, (%rsp)
|
||||
EC-DISASM-NEXT: 180003021: 66 0f 7f 4c 24 10 movdqa %xmm1, 0x10(%rsp)
|
||||
EC-DISASM-NEXT: 180003027: 66 0f 7f 54 24 20 movdqa %xmm2, 0x20(%rsp)
|
||||
EC-DISASM-NEXT: 18000302d: 66 0f 7f 5c 24 30 movdqa %xmm3, 0x30(%rsp)
|
||||
EC-DISASM-NEXT: 180003033: 48 8b d0 movq %rax, %rdx
|
||||
EC-DISASM-NEXT: 180003036: 48 8d 0d 0b 13 00 00 leaq 0x130b(%rip), %rcx # 0x180004348
|
||||
EC-DISASM-NEXT: 18000303d: e8 c6 ef ff ff callq 0x180002008 <.text+0x1008>
|
||||
EC-DISASM-NEXT: 180003042: 66 0f 6f 04 24 movdqa (%rsp), %xmm0
|
||||
EC-DISASM-NEXT: 180003047: 66 0f 6f 4c 24 10 movdqa 0x10(%rsp), %xmm1
|
||||
EC-DISASM-NEXT: 18000304d: 66 0f 6f 54 24 20 movdqa 0x20(%rsp), %xmm2
|
||||
EC-DISASM-NEXT: 180003053: 66 0f 6f 5c 24 30 movdqa 0x30(%rsp), %xmm3
|
||||
EC-DISASM-NEXT: 180003059: 48 83 c4 48 addq $0x48, %rsp
|
||||
EC-DISASM-NEXT: 18000305d: 41 59 popq %r9
|
||||
EC-DISASM-NEXT: 18000305f: 41 58 popq %r8
|
||||
EC-DISASM-NEXT: 180003061: 5a popq %rdx
|
||||
EC-DISASM-NEXT: 180003062: 59 popq %rcx
|
||||
EC-DISASM-NEXT: 180003063: ff e0 jmpq *%rax
|
||||
EC-DISASM-NEXT: 180003012: 48 89 4c 24 08 movq %rcx, 0x8(%rsp)
|
||||
EC-DISASM-NEXT: 180003017: 48 89 54 24 10 movq %rdx, 0x10(%rsp)
|
||||
EC-DISASM-NEXT: 18000301c: 4c 89 44 24 18 movq %r8, 0x18(%rsp)
|
||||
EC-DISASM-NEXT: 180003021: 4c 89 4c 24 20 movq %r9, 0x20(%rsp)
|
||||
EC-DISASM-NEXT: 180003026: 48 83 ec 68 subq $0x68, %rsp
|
||||
EC-DISASM-NEXT: 18000302a: 66 0f 7f 44 24 20 movdqa %xmm0, 0x20(%rsp)
|
||||
EC-DISASM-NEXT: 180003030: 66 0f 7f 4c 24 30 movdqa %xmm1, 0x30(%rsp)
|
||||
EC-DISASM-NEXT: 180003036: 66 0f 7f 54 24 40 movdqa %xmm2, 0x40(%rsp)
|
||||
EC-DISASM-NEXT: 18000303c: 66 0f 7f 5c 24 50 movdqa %xmm3, 0x50(%rsp)
|
||||
EC-DISASM-NEXT: 180003042: 48 8b d0 movq %rax, %rdx
|
||||
EC-DISASM-NEXT: 180003045: 48 8d 0d f4 12 00 00 leaq 0x12f4(%rip), %rcx # 0x180004340
|
||||
EC-DISASM-NEXT: 18000304c: e8 b7 ef ff ff callq 0x180002008 <.text+0x1008>
|
||||
EC-DISASM-NEXT: 180003051: 66 0f 6f 44 24 20 movdqa 0x20(%rsp), %xmm0
|
||||
EC-DISASM-NEXT: 180003057: 66 0f 6f 4c 24 30 movdqa 0x30(%rsp), %xmm1
|
||||
EC-DISASM-NEXT: 18000305d: 66 0f 6f 54 24 40 movdqa 0x40(%rsp), %xmm2
|
||||
EC-DISASM-NEXT: 180003063: 66 0f 6f 5c 24 50 movdqa 0x50(%rsp), %xmm3
|
||||
EC-DISASM-NEXT: 180003069: 48 8b 4c 24 70 movq 0x70(%rsp), %rcx
|
||||
EC-DISASM-NEXT: 18000306e: 48 8b 54 24 78 movq 0x78(%rsp), %rdx
|
||||
EC-DISASM-NEXT: 180003073: 4c 8b 84 24 80 00 00 00 movq 0x80(%rsp), %r8
|
||||
EC-DISASM-NEXT: 18000307b: 4c 8b 8c 24 88 00 00 00 movq 0x88(%rsp), %r9
|
||||
EC-DISASM-NEXT: 180003083: 48 83 c4 68 addq $0x68, %rsp
|
||||
EC-DISASM-NEXT: 180003087: ff e0 jmpq *%rax
|
||||
|
||||
RUN: llvm-readobj --coff-load-config out-ec.dll | FileCheck --check-prefix=EC-LOADCFG %s
|
||||
EC-LOADCFG: AuxiliaryDelayloadIAT: 0x5000
|
||||
|
@ -10,7 +10,7 @@ IMPORT-NEXT: Name: std64.dll
|
||||
IMPORT-NEXT: Attributes: 0x1
|
||||
IMPORT-NEXT: ModuleHandle: 0x3018
|
||||
IMPORT-NEXT: ImportAddressTable: 0x3020
|
||||
IMPORT-NEXT: ImportNameTable: 0x2050
|
||||
IMPORT-NEXT: ImportNameTable: 0x2048
|
||||
IMPORT-NEXT: BoundDelayImportTable: 0x0
|
||||
IMPORT-NEXT: UnloadDelayImportTable: 0x0
|
||||
IMPORT-NEXT: Import {
|
||||
@ -44,22 +44,18 @@ BASEREL-NEXT: }
|
||||
UNWIND: UnwindInformation [
|
||||
UNWIND-NEXT: RuntimeFunction {
|
||||
UNWIND-NEXT: StartAddress: (0x14000108A)
|
||||
UNWIND-NEXT: EndAddress: (0x1400010DD)
|
||||
UNWIND-NEXT: EndAddress: (0x140001101)
|
||||
UNWIND-NEXT: UnwindInfoAddress: (0x140002000)
|
||||
UNWIND-NEXT: UnwindInfo {
|
||||
UNWIND-NEXT: Version: 1
|
||||
UNWIND-NEXT: Flags [ (0x0)
|
||||
UNWIND-NEXT: ]
|
||||
UNWIND-NEXT: PrologSize: 10
|
||||
UNWIND-NEXT: PrologSize: 24
|
||||
UNWIND-NEXT: FrameRegister: -
|
||||
UNWIND-NEXT: FrameOffset: -
|
||||
UNWIND-NEXT: UnwindCodeCount: 5
|
||||
UNWIND-NEXT: UnwindCodeCount: 1
|
||||
UNWIND-NEXT: UnwindCodes [
|
||||
UNWIND-NEXT: 0x0A: ALLOC_SMALL size=72
|
||||
UNWIND-NEXT: 0x06: ALLOC_SMALL size=8
|
||||
UNWIND-NEXT: 0x04: ALLOC_SMALL size=8
|
||||
UNWIND-NEXT: 0x02: ALLOC_SMALL size=8
|
||||
UNWIND-NEXT: 0x01: ALLOC_SMALL size=8
|
||||
UNWIND-NEXT: 0x18: ALLOC_SMALL size=104
|
||||
UNWIND-NEXT: ]
|
||||
UNWIND-NEXT: }
|
||||
UNWIND-NEXT: }
|
||||
|
@ -15,7 +15,7 @@
|
||||
# CHECK-NEXT: Attributes: 0x1
|
||||
# CHECK-NEXT: ModuleHandle: 0x3000
|
||||
# CHECK-NEXT: ImportAddressTable: 0x3010
|
||||
# CHECK-NEXT: ImportNameTable: 0x2070
|
||||
# CHECK-NEXT: ImportNameTable: 0x2068
|
||||
# CHECK-NEXT: BoundDelayImportTable: 0x0
|
||||
# CHECK-NEXT: UnloadDelayImportTable: 0x0
|
||||
# CHECK-NEXT: Import {
|
||||
@ -32,16 +32,16 @@
|
||||
# CHECK-NEXT: Attributes: 0x1
|
||||
# CHECK-NEXT: ModuleHandle: 0x3008
|
||||
# CHECK-NEXT: ImportAddressTable: 0x3028
|
||||
# CHECK-NEXT: ImportNameTable: 0x2088
|
||||
# CHECK-NEXT: ImportNameTable: 0x2080
|
||||
# CHECK-NEXT: BoundDelayImportTable: 0x0
|
||||
# CHECK-NEXT: UnloadDelayImportTable: 0x0
|
||||
# CHECK-NEXT: Import {
|
||||
# CHECK-NEXT: Symbol: left (0)
|
||||
# CHECK-NEXT: Address: 0x1400010B8
|
||||
# CHECK-NEXT: Address: 0x1400010DC
|
||||
# CHECK-NEXT: }
|
||||
# CHECK-NEXT: Import {
|
||||
# CHECK-NEXT: Symbol: right (0)
|
||||
# CHECK-NEXT: Address: 0x1400010C4
|
||||
# CHECK-NEXT: Address: 0x1400010E8
|
||||
# CHECK-NEXT: }
|
||||
# CHECK-NEXT: }
|
||||
|
||||
|
@ -37,14 +37,14 @@
|
||||
|
||||
# DELAY-CHECK: ImageBase: 0x140000000
|
||||
# DELAY-CHECK: LoadConfig [
|
||||
# DELAY-CHECK: GuardCFFunctionTable: 0x140002124
|
||||
# DELAY-CHECK: GuardCFFunctionTable: 0x14000211C
|
||||
# DELAY-CHECK: GuardCFFunctionCount: 2
|
||||
# DELAY-CHECK: GuardFlags [ (0x10500)
|
||||
# DELAY-CHECK: CF_FUNCTION_TABLE_PRESENT (0x400)
|
||||
# DELAY-CHECK: CF_INSTRUMENTED (0x100)
|
||||
# DELAY-CHECK: CF_LONGJUMP_TABLE_PRESENT (0x10000)
|
||||
# DELAY-CHECK: ]
|
||||
# DELAY-CHECK: GuardAddressTakenIatEntryTable: 0x14000212C
|
||||
# DELAY-CHECK: GuardAddressTakenIatEntryTable: 0x140002124
|
||||
# DELAY-CHECK: GuardAddressTakenIatEntryCount: 1
|
||||
# DELAY-CHECK: ]
|
||||
# DELAY-CHECK: GuardFidTable [
|
||||
|
Loading…
x
Reference in New Issue
Block a user