Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions lld/COFF/DLL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -320,32 +320,34 @@ static const uint8_t thunkARM64[] = {
};

static const uint8_t tailMergeARM64[] = {
0xfd, 0x7b, 0xb3, 0xa9, // stp x29, x30, [sp, #-208]!
0xfd, 0x7b, 0xb2, 0xa9, // stp x29, x30, [sp, #-224]!
0xfd, 0x03, 0x00, 0x91, // mov x29, sp
0xe0, 0x07, 0x01, 0xa9, // stp x0, x1, [sp, #16]
0xe2, 0x0f, 0x02, 0xa9, // stp x2, x3, [sp, #32]
0xe4, 0x17, 0x03, 0xa9, // stp x4, x5, [sp, #48]
0xe6, 0x1f, 0x04, 0xa9, // stp x6, x7, [sp, #64]
0xe0, 0x87, 0x02, 0xad, // stp q0, q1, [sp, #80]
0xe2, 0x8f, 0x03, 0xad, // stp q2, q3, [sp, #112]
0xe4, 0x97, 0x04, 0xad, // stp q4, q5, [sp, #144]
0xe6, 0x9f, 0x05, 0xad, // stp q6, q7, [sp, #176]
0xe8, 0x2b, 0x00, 0xf9, // str x8, [sp, #80]
0xe0, 0x07, 0x03, 0xad, // stp q0, q1, [sp, #96]
0xe2, 0x0f, 0x04, 0xad, // stp q2, q3, [sp, #128]
0xe4, 0x17, 0x05, 0xad, // stp q4, q5, [sp, #160]
0xe6, 0x1f, 0x06, 0xad, // stp q6, q7, [sp, #192]
0xe1, 0x03, 0x11, 0xaa, // mov x1, x17
0x00, 0x00, 0x00, 0x90, // adrp x0, #0 DELAY_IMPORT_DESCRIPTOR
0x00, 0x00, 0x00, 0x91, // add x0, x0, #0 :lo12:DELAY_IMPORT_DESCRIPTOR
0x02, 0x00, 0x00, 0x90, // adrp x2, #0 __delayLoadHelper2
0x42, 0x00, 0x00, 0x91, // add x2, x2, #0 :lo12:__delayLoadHelper2
0x40, 0x00, 0x3f, 0xd6, // blr x2
0xf0, 0x03, 0x00, 0xaa, // mov x16, x0
0xe6, 0x9f, 0x45, 0xad, // ldp q6, q7, [sp, #176]
0xe4, 0x97, 0x44, 0xad, // ldp q4, q5, [sp, #144]
0xe2, 0x8f, 0x43, 0xad, // ldp q2, q3, [sp, #112]
0xe0, 0x87, 0x42, 0xad, // ldp q0, q1, [sp, #80]
0xe6, 0x1f, 0x46, 0xad, // ldp q6, q7, [sp, #192]
0xe4, 0x17, 0x45, 0xad, // ldp q4, q5, [sp, #160]
0xe2, 0x0f, 0x44, 0xad, // ldp q2, q3, [sp, #128]
0xe0, 0x07, 0x43, 0xad, // ldp q0, q1, [sp, #96]
0xe8, 0x2b, 0x40, 0xf9, // ldr x8, [sp, #80]
0xe6, 0x1f, 0x44, 0xa9, // ldp x6, x7, [sp, #64]
0xe4, 0x17, 0x43, 0xa9, // ldp x4, x5, [sp, #48]
0xe2, 0x0f, 0x42, 0xa9, // ldp x2, x3, [sp, #32]
0xe0, 0x07, 0x41, 0xa9, // ldp x0, x1, [sp, #16]
0xfd, 0x7b, 0xcd, 0xa8, // ldp x29, x30, [sp], #208
0xfd, 0x7b, 0xce, 0xa8, // ldp x29, x30, [sp], #224
0x00, 0x02, 0x1f, 0xd6, // br x16
};

Expand Down Expand Up @@ -556,11 +558,11 @@ class TailMergeChunkARM64 : public NonSectionCodeChunk {

void writeTo(uint8_t *buf) const override {
memcpy(buf, tailMergeARM64, sizeof(tailMergeARM64));
applyArm64Addr(buf + 44, desc->getRVA(), rva + 44, 12);
applyArm64Imm(buf + 48, desc->getRVA() & 0xfff, 0);
applyArm64Addr(buf + 48, desc->getRVA(), rva + 48, 12);
applyArm64Imm(buf + 52, desc->getRVA() & 0xfff, 0);
if (helper) {
applyArm64Addr(buf + 52, helper->getRVA(), rva + 52, 12);
applyArm64Imm(buf + 56, helper->getRVA() & 0xfff, 0);
applyArm64Addr(buf + 56, helper->getRVA(), rva + 56, 12);
applyArm64Imm(buf + 60, helper->getRVA() & 0xfff, 0);
}
}

Expand Down
46 changes: 24 additions & 22 deletions lld/test/COFF/arm64-delayimport.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,35 @@
# DISASM: 140001014: d0000011 adrp x17, 0x140003000
# DISASM: 140001018: 91002231 add x17, x17, #8
# DISASM: 14000101c: 14000001 b 0x140001020 <.text+0x20>
# DISASM: 140001020: a9b37bfd stp x29, x30, [sp, #-208]!
# DISASM: 140001020: a9b27bfd stp x29, x30, [sp, #-224]!
# DISASM: 140001024: 910003fd mov x29, sp
# DISASM: 140001028: a90107e0 stp x0, x1, [sp, #16]
# DISASM: 14000102c: a9020fe2 stp x2, x3, [sp, #32]
# DISASM: 140001030: a90317e4 stp x4, x5, [sp, #48]
# DISASM: 140001034: a9041fe6 stp x6, x7, [sp, #64]
# DISASM: 140001038: ad0287e0 stp q0, q1, [sp, #80]
# DISASM: 14000103c: ad038fe2 stp q2, q3, [sp, #112]
# DISASM: 140001040: ad0497e4 stp q4, q5, [sp, #144]
# DISASM: 140001044: ad059fe6 stp q6, q7, [sp, #176]
# DISASM: 140001048: aa1103e1 mov x1, x17
# DISASM: 14000104c: b0000000 adrp x0, 0x140002000
# DISASM: 140001050: 91000000 add x0, x0, #0
# DISASM: 140001054: 90000002 adrp x2, 0x140001000 <.text>
# DISASM: 140001058: 91000042 add x2, x2, #0
# DISASM: 14000105c: d63f0040 blr x2
# DISASM: 140001060: aa0003f0 mov x16, x0
# DISASM: 140001064: ad459fe6 ldp q6, q7, [sp, #176]
# DISASM: 140001068: ad4497e4 ldp q4, q5, [sp, #144]
# DISASM: 14000106c: ad438fe2 ldp q2, q3, [sp, #112]
# DISASM: 140001070: ad4287e0 ldp q0, q1, [sp, #80]
# DISASM: 140001074: a9441fe6 ldp x6, x7, [sp, #64]
# DISASM: 140001078: a94317e4 ldp x4, x5, [sp, #48]
# DISASM: 14000107c: a9420fe2 ldp x2, x3, [sp, #32]
# DISASM: 140001080: a94107e0 ldp x0, x1, [sp, #16]
# DISASM: 140001084: a8cd7bfd ldp x29, x30, [sp], #208
# DISASM: 140001088: d61f0200 br x16
# DISASM: 140001038: f9002be8 str x8, [sp, #80]
# DISASM: 14000103c: ad0307e0 stp q0, q1, [sp, #96]
# DISASM: 140001040: ad040fe2 stp q2, q3, [sp, #128]
# DISASM: 140001044: ad0517e4 stp q4, q5, [sp, #160]
# DISASM: 140001048: ad061fe6 stp q6, q7, [sp, #192]
# DISASM: 14000104c: aa1103e1 mov x1, x17
# DISASM: 140001050: b0000000 adrp x0, 0x140002000
# DISASM: 140001054: 91000000 add x0, x0, #0
# DISASM: 140001058: 90000002 adrp x2, 0x140001000 <.text>
# DISASM: 14000105c: 91000042 add x2, x2, #0
# DISASM: 140001060: d63f0040 blr x2
# DISASM: 140001064: aa0003f0 mov x16, x0
# DISASM: 140001068: ad461fe6 ldp q6, q7, [sp, #192]
# DISASM: 14000106c: ad4517e4 ldp q4, q5, [sp, #160]
# DISASM: 140001070: ad440fe2 ldp q2, q3, [sp, #128]
# DISASM: 140001074: ad4307e0 ldp q0, q1, [sp, #96]
# DISASM: 140001078: f9402be8 ldr x8, [sp, #80]
# DISASM: 14000107c: a9441fe6 ldp x6, x7, [sp, #64]
# DISASM: 140001080: a94317e4 ldp x4, x5, [sp, #48]
# DISASM: 140001084: a9420fe2 ldp x2, x3, [sp, #32]
# DISASM: 140001088: a94107e0 ldp x0, x1, [sp, #16]
# DISASM: 14000108c: a8ce7bfd ldp x29, x30, [sp], #224
# DISASM: 140001090: d61f0200 br x16

# IMPORTS: Format: COFF-ARM64
# IMPORTS: Arch: aarch64
Expand Down
92 changes: 48 additions & 44 deletions lld/test/COFF/arm64x-delayimport.test
Original file line number Diff line number Diff line change
Expand Up @@ -61,33 +61,35 @@ DISASM-NEXT: 180001010: d61f0200 br x16
DISASM-NEXT: 180001014: b0000031 adrp x17, 0x180006000
DISASM-NEXT: 180001018: 91022231 add x17, x17, #0x88
DISASM-NEXT: 18000101c: 14000001 b 0x180001020 <.text+0x20>
DISASM-NEXT: 180001020: a9b37bfd stp x29, x30, [sp, #-0xd0]!
DISASM-NEXT: 180001020: a9b27bfd stp x29, x30, [sp, #-0xe0]!
DISASM-NEXT: 180001024: 910003fd mov x29, sp
DISASM-NEXT: 180001028: a90107e0 stp x0, x1, [sp, #0x10]
DISASM-NEXT: 18000102c: a9020fe2 stp x2, x3, [sp, #0x20]
DISASM-NEXT: 180001030: a90317e4 stp x4, x5, [sp, #0x30]
DISASM-NEXT: 180001034: a9041fe6 stp x6, x7, [sp, #0x40]
DISASM-NEXT: 180001038: ad0287e0 stp q0, q1, [sp, #0x50]
DISASM-NEXT: 18000103c: ad038fe2 stp q2, q3, [sp, #0x70]
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: 910d2000 add x0, x0, #0x348
DISASM-NEXT: 180001054: 90000002 adrp x2, 0x180001000 <.text>
DISASM-NEXT: 180001058: 91000042 add x2, x2, #0x0
DISASM-NEXT: 18000105c: d63f0040 blr x2
DISASM-NEXT: 180001060: aa0003f0 mov x16, x0
DISASM-NEXT: 180001064: ad459fe6 ldp q6, q7, [sp, #0xb0]
DISASM-NEXT: 180001068: ad4497e4 ldp q4, q5, [sp, #0x90]
DISASM-NEXT: 18000106c: ad438fe2 ldp q2, q3, [sp, #0x70]
DISASM-NEXT: 180001070: ad4287e0 ldp q0, q1, [sp, #0x50]
DISASM-NEXT: 180001074: a9441fe6 ldp x6, x7, [sp, #0x40]
DISASM-NEXT: 180001078: a94317e4 ldp x4, x5, [sp, #0x30]
DISASM-NEXT: 18000107c: a9420fe2 ldp x2, x3, [sp, #0x20]
DISASM-NEXT: 180001080: a94107e0 ldp x0, x1, [sp, #0x10]
DISASM-NEXT: 180001084: a8cd7bfd ldp x29, x30, [sp], #0xd0
DISASM-NEXT: 180001088: d61f0200 br x16
DISASM-NEXT: 180001038: f9002be8 str x8, [sp, #0x50]
DISASM-NEXT: 18000103c: ad0307e0 stp q0, q1, [sp, #0x60]
DISASM-NEXT: 180001040: ad040fe2 stp q2, q3, [sp, #0x80]
DISASM-NEXT: 180001044: ad0517e4 stp q4, q5, [sp, #0xa0]
DISASM-NEXT: 180001048: ad061fe6 stp q6, q7, [sp, #0xc0]
DISASM-NEXT: 18000104c: aa1103e1 mov x1, x17
DISASM-NEXT: 180001050: f0000000 adrp x0, 0x180004000
DISASM-NEXT: 180001054: 910d2000 add x0, x0, #0x348
DISASM-NEXT: 180001058: 90000002 adrp x2, 0x180001000 <.text>
DISASM-NEXT: 18000105c: 91000042 add x2, x2, #0x0
DISASM-NEXT: 180001060: d63f0040 blr x2
DISASM-NEXT: 180001064: aa0003f0 mov x16, x0
DISASM-NEXT: 180001068: ad461fe6 ldp q6, q7, [sp, #0xc0]
DISASM-NEXT: 18000106c: ad4517e4 ldp q4, q5, [sp, #0xa0]
DISASM-NEXT: 180001070: ad440fe2 ldp q2, q3, [sp, #0x80]
DISASM-NEXT: 180001074: ad4307e0 ldp q0, q1, [sp, #0x60]
DISASM-NEXT: 180001078: f9402be8 ldr x8, [sp, #0x50]
DISASM-NEXT: 18000107c: a9441fe6 ldp x6, x7, [sp, #0x40]
DISASM-NEXT: 180001080: a94317e4 ldp x4, x5, [sp, #0x30]
DISASM-NEXT: 180001084: a9420fe2 ldp x2, x3, [sp, #0x20]
DISASM-NEXT: 180001088: a94107e0 ldp x0, x1, [sp, #0x10]
DISASM-NEXT: 18000108c: a8ce7bfd ldp x29, x30, [sp], #0xe0
DISASM-NEXT: 180001090: d61f0200 br x16
DISASM-NEXT: ...
DISASM-NEXT: 180002000: 52800040 mov w0, #0x2 // =2
DISASM-NEXT: 180002004: d65f03c0 ret
Expand Down Expand Up @@ -186,33 +188,35 @@ NATIVE-DISASM-NEXT: 180001010: d61f0200 br x16
NATIVE-DISASM-NEXT: 180001014: 90000031 adrp x17, 0x180005000
NATIVE-DISASM-NEXT: 180001018: 91022231 add x17, x17, #0x88
NATIVE-DISASM-NEXT: 18000101c: 14000001 b 0x180001020 <.text+0x20>
NATIVE-DISASM-NEXT: 180001020: a9b37bfd stp x29, x30, [sp, #-0xd0]!
NATIVE-DISASM-NEXT: 180001020: a9b27bfd stp x29, x30, [sp, #-0xe0]!
NATIVE-DISASM-NEXT: 180001024: 910003fd mov x29, sp
NATIVE-DISASM-NEXT: 180001028: a90107e0 stp x0, x1, [sp, #0x10]
NATIVE-DISASM-NEXT: 18000102c: a9020fe2 stp x2, x3, [sp, #0x20]
NATIVE-DISASM-NEXT: 180001030: a90317e4 stp x4, x5, [sp, #0x30]
NATIVE-DISASM-NEXT: 180001034: a9041fe6 stp x6, x7, [sp, #0x40]
NATIVE-DISASM-NEXT: 180001038: ad0287e0 stp q0, q1, [sp, #0x50]
NATIVE-DISASM-NEXT: 18000103c: ad038fe2 stp q2, q3, [sp, #0x70]
NATIVE-DISASM-NEXT: 180001040: ad0497e4 stp q4, q5, [sp, #0x90]
NATIVE-DISASM-NEXT: 180001044: ad059fe6 stp q6, q7, [sp, #0xb0]
NATIVE-DISASM-NEXT: 180001048: aa1103e1 mov x1, x17
NATIVE-DISASM-NEXT: 18000104c: d0000000 adrp x0, 0x180003000
NATIVE-DISASM-NEXT: 180001050: 910cc000 add x0, x0, #0x330
NATIVE-DISASM-NEXT: 180001054: 90000002 adrp x2, 0x180001000 <.text>
NATIVE-DISASM-NEXT: 180001058: 91000042 add x2, x2, #0x0
NATIVE-DISASM-NEXT: 18000105c: d63f0040 blr x2
NATIVE-DISASM-NEXT: 180001060: aa0003f0 mov x16, x0
NATIVE-DISASM-NEXT: 180001064: ad459fe6 ldp q6, q7, [sp, #0xb0]
NATIVE-DISASM-NEXT: 180001068: ad4497e4 ldp q4, q5, [sp, #0x90]
NATIVE-DISASM-NEXT: 18000106c: ad438fe2 ldp q2, q3, [sp, #0x70]
NATIVE-DISASM-NEXT: 180001070: ad4287e0 ldp q0, q1, [sp, #0x50]
NATIVE-DISASM-NEXT: 180001074: a9441fe6 ldp x6, x7, [sp, #0x40]
NATIVE-DISASM-NEXT: 180001078: a94317e4 ldp x4, x5, [sp, #0x30]
NATIVE-DISASM-NEXT: 18000107c: a9420fe2 ldp x2, x3, [sp, #0x20]
NATIVE-DISASM-NEXT: 180001080: a94107e0 ldp x0, x1, [sp, #0x10]
NATIVE-DISASM-NEXT: 180001084: a8cd7bfd ldp x29, x30, [sp], #0xd0
NATIVE-DISASM-NEXT: 180001088: d61f0200 br x16
NATIVE-DISASM-NEXT: 180001038: f9002be8 str x8, [sp, #0x50]
NATIVE-DISASM-NEXT: 18000103c: ad0307e0 stp q0, q1, [sp, #0x60]
NATIVE-DISASM-NEXT: 180001040: ad040fe2 stp q2, q3, [sp, #0x80]
NATIVE-DISASM-NEXT: 180001044: ad0517e4 stp q4, q5, [sp, #0xa0]
NATIVE-DISASM-NEXT: 180001048: ad061fe6 stp q6, q7, [sp, #0xc0]
NATIVE-DISASM-NEXT: 18000104c: aa1103e1 mov x1, x17
NATIVE-DISASM-NEXT: 180001050: d0000000 adrp x0, 0x180003000
NATIVE-DISASM-NEXT: 180001054: 910cc000 add x0, x0, #0x330
NATIVE-DISASM-NEXT: 180001058: 90000002 adrp x2, 0x180001000 <.text>
NATIVE-DISASM-NEXT: 18000105c: 91000042 add x2, x2, #0x0
NATIVE-DISASM-NEXT: 180001060: d63f0040 blr x2
NATIVE-DISASM-NEXT: 180001064: aa0003f0 mov x16, x0
NATIVE-DISASM-NEXT: 180001068: ad461fe6 ldp q6, q7, [sp, #0xc0]
NATIVE-DISASM-NEXT: 18000106c: ad4517e4 ldp q4, q5, [sp, #0xa0]
NATIVE-DISASM-NEXT: 180001070: ad440fe2 ldp q2, q3, [sp, #0x80]
NATIVE-DISASM-NEXT: 180001074: ad4307e0 ldp q0, q1, [sp, #0x60]
NATIVE-DISASM-NEXT: 180001078: f9402be8 ldr x8, [sp, #0x50]
NATIVE-DISASM-NEXT: 18000107c: a9441fe6 ldp x6, x7, [sp, #0x40]
NATIVE-DISASM-NEXT: 180001080: a94317e4 ldp x4, x5, [sp, #0x30]
NATIVE-DISASM-NEXT: 180001084: a9420fe2 ldp x2, x3, [sp, #0x20]
NATIVE-DISASM-NEXT: 180001088: a94107e0 ldp x0, x1, [sp, #0x10]
NATIVE-DISASM-NEXT: 18000108c: a8ce7bfd ldp x29, x30, [sp], #0xe0
NATIVE-DISASM-NEXT: 180001090: d61f0200 br x16

RUN: llvm-readobj --coff-load-config out-native.dll | FileCheck --check-prefix=NATIVE-LOADCFG %s
NATIVE-LOADCFG: AuxiliaryDelayloadIAT: 0x4000
Expand Down