aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/tools/llvm-objdump/COFF/arm64ec.yaml
blob: 94aa3ad9bc7280b46649c04fd831c661ecc62431 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# REQUIRES: aarch64-registered-target

## Check that AMD64 image file with CHPE data is recognized as ARM64EC.
# RUN: yaml2obj --docnum=1 %s -o %t1 -DMACHINE=IMAGE_FILE_MACHINE_AMD64
# RUN: llvm-readobj --coff-load-config %t1 | FileCheck --check-prefix=CODEMAP %s
# RUN: %if x86-registered-target %{                                                           \
# RUN:   llvm-objdump -d %t1 | FileCheck --check-prefixes=DISASM,ARM64EC %s                   \
# RUN: %} %else %{                                                                            \
# RUN:   llvm-objdump -d %t1 2>&1 | FileCheck --check-prefixes=DISASM-NO-X64,ARM64EC,WARN1 %s \
# RUN: %}

## Check that ARM64 image file with CHPE data is recognized as ARM64X.
# RUN: yaml2obj --docnum=1 %s -o %t2 -DMACHINE=IMAGE_FILE_MACHINE_ARM64
# RUN: llvm-readobj --coff-load-config %t2 | FileCheck --check-prefix=CODEMAP %s
# RUN: %if x86-registered-target %{                                                          \
# RUN:   llvm-objdump -d %t2 | FileCheck --check-prefixes=DISASM,ARM64X %s                   \
# RUN: %} %else %{                                                                           \
# RUN:   llvm-objdump -d %t2 2>&1 | FileCheck --check-prefixes=DISASM-NO-X64,ARM64X,WARN1 %s \
# RUN: %}

## Check handling of an explicit, non-default triple.
# RUN: %if !x86-registered-target %{                                              \
# RUN:   llvm-objdump --triple arm64ec-w64-windows-gnu -d %t1 2>&1                \
# RUN:                | FileCheck --check-prefixes=DISASM-NO-X64,ARM64EC,WARN2 %s \
# RUN: %}

# ARM64EC: file format coff-arm64ec
# ARM64X:  file format coff-arm64x

# WARN1: warning: '{{.*}}': unable to get target for 'x86_64--', see --version and --triple.
# WARN2: warning: '{{.*}}': unable to get target for 'x86_64-w64-windows-gnu', see --version and --triple.

# DISASM:      Disassembly of section .text:
# DISASM-EMPTY:
# DISASM-NEXT: 0000000180001000 <.text>:
# DISASM-NEXT: 180001000: 52800040     mov     w0, #0x2
# DISASM-NEXT: 180001004: d65f03c0     ret
# DISASM-NEXT: ...
# DISASM-NEXT: 180001020: b8 03 00 00 00     movl    $0x3, %eax
# DISASM-NEXT: 180001025: c3                 retq
# DISASM-EMPTY:
# DISASM-NEXT: Disassembly of section .test:
# DISASM-EMPTY:
# DISASM-NEXT: 0000000180002000 <.test>:
# DISASM-NEXT: 180002000: b8 06 00 00 00     movl    $0x6, %eax
# DISASM-NEXT: 180002005: c3                 retq
# DISASM-NEXT: 180002006: cc                 int3
# DISASM-NEXT: ...
# DISASM-NEXT: 180002020: 528000a0     mov     w0, #0x5
# DISASM-NEXT: 180002024: d65f03c0     ret

# DISASM-NO-X64:      Disassembly of section .text:
# DISASM-NO-X64-EMPTY:
# DISASM-NO-X64-NEXT: 0000000180001000 <.text>:
# DISASM-NO-X64-NEXT: 180001000: 52800040     mov     w0, #0x2
# DISASM-NO-X64-NEXT: 180001004: d65f03c0     ret
# DISASM-NO-X64-NEXT: ...
# DISASM-NO-X64-NEXT: 180001020: 000003b8     udf     #0x3b8
# DISASM-NO-X64-NEXT: 180001024: 00 c3        <unknown>
# DISASM-NO-X64-EMPTY:
# DISASM-NO-X64-NEXT: Disassembly of section .test:
# DISASM-NO-X64-EMPTY:
# DISASM-NO-X64-NEXT: 0000000180002000 <.test>:
# DISASM-NO-X64-NEXT: 180002000: 000006b8     udf     #0x6b8
# DISASM-NO-X64-NEXT: 180002004: 00ccc300     <unknown>
# DISASM-NO-X64-NEXT: ...
# DISASM-NO-X64-NEXT: 180002020: 528000a0     mov     w0, #0x5
# DISASM-NO-X64-NEXT: 180002024: d65f03c0     ret

# CODEMAP:      CodeMap [
# CODEMAP-NEXT:   0x1000 - 0x1008  ARM64EC
# CODEMAP-NEXT:   0x1020 - 0x2007  X64
# CODEMAP-NEXT:   0x2020 - 0x2028  ARM64EC
# CODEMAP-NEXT: ]

--- !COFF
OptionalHeader:
  ImageBase:        0x180000000
  SectionAlignment: 4096
  FileAlignment:    512
  DLLCharacteristics: [ ]
  LoadConfigTable:
    RelativeVirtualAddress: 0x3000
    Size:                   320
header:
  Machine:         [[MACHINE]]
  Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
  - Name:            .text
    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
    VirtualAddress:  0x1000
    VirtualSize:     38
    SectionData:     40008052C0035FD6000000000000000000000000000000000000000000000000B803000000C3
  - Name:            .test
    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
    VirtualAddress:  0x2000
    VirtualSize:     40
    SectionData:     B806000000C3CC00000000000000000000000000000000000000000000000000A0008052C0035FD6
  - Name:            .rdata
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
    VirtualAddress:  0x3000
    VirtualSize:     328
    StructuredData:
      - LoadConfig:
          CHPEMetadataPointer: 0x180004000
  - Name:            .data
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
    VirtualAddress:  0x4000
    VirtualSize:     112
    StructuredData:
      - UInt32: 1       # Version
      - UInt32: 0x4050  # CodeMap
      - UInt32: 3       # CodeMapCount
      - UInt32: 0       # CodeRangesToEntryPoints
      - UInt32: 0       # RedirectionMetadata
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0       # CodeRangesToEntryPointsCount
      - UInt32: 0       # RedirectionMetadataCount
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0x1001  # CodeMap[0]
      - UInt32: 0x8
      - UInt32: 0x1022  # CodeMap[1]
      - UInt32: 0x0fe7
      - UInt32: 0x2021  # CodeMap[2]
      - UInt32: 0x8
symbols:         []
...

## Check error handling of invalid code map RVA.
# RUN: yaml2obj --docnum=2 %s -o %t-invalid
# RUN: not llvm-objdump -d %t-invalid 2>&1 | FileCheck --check-prefixes=ERR %s -DFILE=%t-invalid
# ERR: error: '[[FILE]]': RVA 0x6000 for CHPE code map not found

--- !COFF
OptionalHeader:
  ImageBase:        0x180000000
  SectionAlignment: 4096
  FileAlignment:    512
  DLLCharacteristics: [ ]
  LoadConfigTable:
    RelativeVirtualAddress: 0x3000
    Size:                   320
header:
  Machine:         IMAGE_FILE_MACHINE_AMD64
  Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
  - Name:            .rdata
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
    VirtualAddress:  0x3000
    VirtualSize:     328
    StructuredData:
      - LoadConfig:
          CHPEMetadataPointer: 0x180004000
  - Name:            .data
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
    VirtualAddress:  0x4000
    VirtualSize:     112
    StructuredData:
      - UInt32: 1       # Version
      - UInt32: 0x6000  # CodeMap
      - UInt32: 3       # CodeMapCount
      - UInt32: 0       # CodeRangesToEntryPoints
      - UInt32: 0       # RedirectionMetadata
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0       # CodeRangesToEntryPointsCount
      - UInt32: 0       # RedirectionMetadataCount
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
      - UInt32: 0
symbols:         []
...