xref: /llvm-project/llvm/test/MC/AArch64/win-import-call-optimization.s (revision 283dca56f8dddbf2f144730a01675c94b04f57cb)
1*283dca56SDaniel Paoliello// RUN: llvm-mc -triple aarch64-windows-msvc -filetype obj -o %t.obj %s
2*283dca56SDaniel Paoliello// RUN: llvm-readobj --sections --sd --relocs %t.obj | FileCheck %s
3*283dca56SDaniel Paoliello
4*283dca56SDaniel Paoliello.section        nc_sect,"xr"
5*283dca56SDaniel Paoliellonormal_call:
6*283dca56SDaniel Paoliello  str     x30, [sp, #-16]!                // 8-byte Folded Spill
7*283dca56SDaniel Paoliello  adrp    x8, __imp_a
8*283dca56SDaniel Paoliello  ldr     x8, [x8, :lo12:__imp_a]
9*283dca56SDaniel Paoliello.Limpcall0:
10*283dca56SDaniel Paoliello  blr     x8
11*283dca56SDaniel Paoliello  ldr     x30, [sp], #16                  // 8-byte Folded Reload
12*283dca56SDaniel Paoliello  ret
13*283dca56SDaniel Paoliello
14*283dca56SDaniel Paoliello.section        tc_sect,"xr"
15*283dca56SDaniel Paoliellotail_call:
16*283dca56SDaniel Paoliello  adrp    x8, __imp_b
17*283dca56SDaniel Paoliello  ldr     x8, [x8, :lo12:__imp_b]
18*283dca56SDaniel Paoliello.Limpcall1:
19*283dca56SDaniel Paoliello  br     x8
20*283dca56SDaniel Paoliello
21*283dca56SDaniel Paoliello.section        .impcall,"yi"
22*283dca56SDaniel Paoliello.asciz  "Imp_Call_V1"
23*283dca56SDaniel Paoliello.word   20
24*283dca56SDaniel Paoliello.secnum nc_sect
25*283dca56SDaniel Paoliello.word   19
26*283dca56SDaniel Paoliello.secoffset      .Limpcall0
27*283dca56SDaniel Paoliello.symidx __imp_a
28*283dca56SDaniel Paoliello.word   20
29*283dca56SDaniel Paoliello.secnum tc_sect
30*283dca56SDaniel Paoliello.word   19
31*283dca56SDaniel Paoliello.secoffset      .Limpcall1
32*283dca56SDaniel Paoliello.symidx __imp_b
33*283dca56SDaniel Paoliello
34*283dca56SDaniel Paoliello// CHECK-LABEL: Name: .impcall (2E 69 6D 70 63 61 6C 6C)
35*283dca56SDaniel Paoliello// CHECK-NEXT:  VirtualSize: 0x0
36*283dca56SDaniel Paoliello// CHECK-NEXT:  VirtualAddress: 0x0
37*283dca56SDaniel Paoliello// CHECK-NEXT:  RawDataSize: 52
38*283dca56SDaniel Paoliello// CHECK-NEXT:  PointerToRawData: 0x150
39*283dca56SDaniel Paoliello// CHECK-NEXT:  PointerToRelocations: 0x0
40*283dca56SDaniel Paoliello// CHECK-NEXT:  PointerToLineNumbers: 0x0
41*283dca56SDaniel Paoliello// CHECK-NEXT:  RelocationCount: 0
42*283dca56SDaniel Paoliello// CHECK-NEXT:  LineNumberCount: 0
43*283dca56SDaniel Paoliello// CHECK-NEXT:  Characteristics [
44*283dca56SDaniel Paoliello// CHECK-NEXT:    IMAGE_SCN_ALIGN_4BYTES
45*283dca56SDaniel Paoliello// CHECK-NEXT:    IMAGE_SCN_LNK_INFO
46*283dca56SDaniel Paoliello// CHECK-NEXT:  ]
47*283dca56SDaniel Paoliello// CHECK-NEXT:  SectionData (
48*283dca56SDaniel Paoliello// CHECK-NEXT:    0000: 496D705F 43616C6C 5F563100 14000000  |Imp_Call_V1.....|
49*283dca56SDaniel Paoliello// CHECK-NEXT:    0010:
50*283dca56SDaniel Paoliello// CHECK-SAME:    [[#%.2X,NCSECT:]]000000
51*283dca56SDaniel Paoliello// CHECK-SAME:    13000000
52*283dca56SDaniel Paoliello// CHECK-SAME:    [[#%.2X,NCOFFSET:]]000000
53*283dca56SDaniel Paoliello// CHECK-SAME:    [[#%.2X,NCSYM:]]000000
54*283dca56SDaniel Paoliello// CHECK-NEXT:    0020:
55*283dca56SDaniel Paoliello// CHECK-SAME:    14000000
56*283dca56SDaniel Paoliello// CHECK-SAME:    [[#%.2X,TCSECT:]]000000
57*283dca56SDaniel Paoliello// CHECK-SAME:    13000000
58*283dca56SDaniel Paoliello// CHECK-SAME:    [[#%.2X,TCOFFSET:]]000000
59*283dca56SDaniel Paoliello// CHECK-NEXT:    0030:
60*283dca56SDaniel Paoliello// CHECK-SAME:    [[#%.2X,TCSYM:]]000000
61*283dca56SDaniel Paoliello// CHECK-NEXT:  )
62*283dca56SDaniel Paoliello
63*283dca56SDaniel Paoliello// CHECK-LABEL: Relocations [
64*283dca56SDaniel Paoliello// CHECK-NEXT:     Section ([[#%u,NCSECT]]) nc_sect {
65*283dca56SDaniel Paoliello// CHECK-NEXT:       0x[[#%x,NCOFFSET - 8]] IMAGE_REL_ARM64_PAGEBASE_REL21 __imp_a ([[#%u,NCSYM]])
66*283dca56SDaniel Paoliello// CHECK-NEXT:       0x[[#%x,NCOFFSET - 4]] IMAGE_REL_ARM64_PAGEOFFSET_12L __imp_a ([[#%u,NCSYM]])
67*283dca56SDaniel Paoliello// CHECK-NEXT:     }
68*283dca56SDaniel Paoliello// CHECK-NEXT:     Section ([[#%u,TCSECT]]) tc_sect {
69*283dca56SDaniel Paoliello// CHECK-NEXT:       0x[[#%x,TCOFFSET - 8]] IMAGE_REL_ARM64_PAGEBASE_REL21 __imp_b ([[#%u,TCSYM]])
70*283dca56SDaniel Paoliello// CHECK-NEXT:       0x[[#%x,TCOFFSET - 4]] IMAGE_REL_ARM64_PAGEOFFSET_12L __imp_b ([[#%u,TCSYM]])
71*283dca56SDaniel Paoliello// CHECK-NEXT:     }
72*283dca56SDaniel Paoliello// CHECK-NEXT:   ]
73