xref: /llvm-project/llvm/test/tools/yaml2obj/ELF/bb-addr-map.yaml (revision acec6419e811a46050b0603dfa72fc6a169aa0f7)
1## Check how yaml2obj produces .llvm_bb_addr_map sections.
2
3# RUN: yaml2obj --docnum=1 %s -o %t1
4# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s
5
6## Case 1: Specify content.
7# CHECK:      Section {
8# CHECK:        Index: 1
9# CHECK-NEXT:   Name: .llvm_bb_addr_map (1)
10# CHECK-NEXT:   Type: SHT_LLVM_BB_ADDR_MAP (0x6FFF4C0A)
11# CHECK-NEXT:   Flags [ (0x0)
12# CHECK-NEXT:   ]
13# CHECK-NEXT:   Address: 0x0
14# CHECK-NEXT:   Offset: 0x40
15# CHECK-NEXT:   Size: 13
16# CHECK-NEXT:   Link: 0
17# CHECK-NEXT:   Info: 0
18# CHECK-NEXT:   AddressAlignment: 0
19# CHECK-NEXT:   EntrySize: 0
20# CHECK-NEXT:   SectionData (
21# CHECK-NEXT:     0000: 00000000 00000000 01010203 04
22# CHECK-NEXT:   )
23# CHECK-NEXT: }
24
25## Case 2: Empty.
26# CHECK:        Name: .llvm_bb_addr_map (1)
27# CHECK:        Size:
28# CHECK-SAME:   {{^ 0$}}
29
30## Case 3: Specify Size only.
31# CHECK:        Name: .llvm_bb_addr_map (1)
32# CHECK:        SectionData (
33# CHECK-NEXT:     0000: 00000000 00000000
34# CHECK-NEXT:   )
35
36# Case 4: Specify Entries.
37# CHECK:        Name: .llvm_bb_addr_map (1)
38# CHECK:        SectionData (
39# CHECK-NEXT:     0000: 02002000 00000000 0000010B 010203
40# CHECK-NEXT:   )
41
42# Case 5: Specify Entries and omit the Address field.
43# CHECK:        Name: .llvm_bb_addr_map (1)
44# CHECK:        Address:
45# CHECK-SAME:   {{^ 0x0$}}
46# CHECK:        SectionData (
47# CHECK-NEXT:     0000: 02000000 00000000 0000010C 010203
48# CHECK-NEXT:   )
49
50# Case 6: Override the NumBlocks field.
51# CHECK:        Name: .llvm_bb_addr_map (1)
52# CHECK:        SectionData (
53# CHECK-NEXT:     0000: 02002000 00000000 0000020D 010203
54# CHECK-NEXT:   )
55
56# Case 7: Specify empty BBRanges.
57# CHECK:        Name: .llvm_bb_addr_map (1)
58# CHECK:        SectionData (
59# CHECK-NEXT:     0000: 020000
60# CHECK-NEXT:   )
61
62# Case 8: Specify empty BBRanges with multi-bb-range.
63# CHECK:        Name: .llvm_bb_addr_map (1)
64# CHECK:        SectionData (
65# CHECK-NEXT:     0000: 020800
66# CHECK-NEXT:   )
67
68
69
70
71--- !ELF
72FileHeader:
73  Class: ELFCLASS64
74  Data:  ELFDATA2LSB
75  Type:  ET_EXEC
76Sections:
77
78## Test the following cases:
79
80## 1) We can produce an .llvm_bb_addr_map section from a description with section
81##    content.
82##  Specify Content.
83  - Name:    '.llvm_bb_addr_map (1)'
84    Type:    SHT_LLVM_BB_ADDR_MAP
85    Content: "00000000000000000101020304"
86
87## 2) We can produce an empty .llvm_bb_addr_map section from a description
88##    with empty section content.
89  - Name: '.llvm_bb_addr_map (2)'
90    Type: SHT_LLVM_BB_ADDR_MAP
91
92## 3) We can produce a zero .llvm_bb_addr_map section of a specific size when
93##    we specify the size only.
94  - Name: '.llvm_bb_addr_map (3)'
95    Type: SHT_LLVM_BB_ADDR_MAP
96    Size: 8
97
98## 4) We can produce an .llvm_bb_addr_map section from a description with
99##    Entries.
100  - Name: '.llvm_bb_addr_map (4)'
101    Type: SHT_LLVM_BB_ADDR_MAP
102    Entries:
103      - Version: 2
104        BBRanges:
105          - BaseAddress: 0x0000000000000020
106            BBEntries:
107              - ID:            11
108                AddressOffset: 0x00000001
109                Size:          0x00000002
110                Metadata:      0x00000003
111
112## 5) When specifying the description with Entries, the 'Address' field will be
113##    zero when omitted.
114  - Name: '.llvm_bb_addr_map (5)'
115    Type: SHT_LLVM_BB_ADDR_MAP
116    Entries:
117      - Version: 2
118        BBRanges:
119          - BBEntries:
120            - ID:            12
121              AddressOffset: 0x00000001
122              Size:          0x00000002
123              Metadata:      0x00000003
124
125## 6) We can override the NumBlocks field with a value different from the
126##    actual number of BB Entries.
127  - Name: '.llvm_bb_addr_map (6)'
128    Type: SHT_LLVM_BB_ADDR_MAP
129    Entries:
130      - Version:   2
131        BBRanges:
132          - BaseAddress:   0x0000000000000020
133            NumBlocks: 2
134            BBEntries:
135             - ID:            13
136               AddressOffset: 0x00000001
137               Size:          0x00000002
138               Metadata:      0x00000003
139
140## 7) We can produce a SHT_LLVM_BB_ADDR_MAP section from a description
141##    with one entry with empty BBRanges.
142  - Name: '.llvm_bb_addr_map (7)'
143    Type: SHT_LLVM_BB_ADDR_MAP
144    Entries:
145      - Version: 2
146        BBRanges: []
147
148## 8) We can produce a SHT_LLVM_BB_ADDR_MAP section from a multi-bb-range
149##    description with one entry with empty BBRanges.
150  - Name: '.llvm_bb_addr_map (8)'
151    Type: SHT_LLVM_BB_ADDR_MAP
152    Entries:
153      - Version: 2
154        Feature: 0x8
155        BBRanges: []
156
157## Check we can't use Entries at the same time as either Content or Size.
158# RUN: not yaml2obj --docnum=2 -DCONTENT="00" %s 2>&1 | FileCheck %s --check-prefix=INVALID
159# RUN: not yaml2obj --docnum=2 -DSIZE="0" %s 2>&1 | FileCheck %s --check-prefix=INVALID
160
161# INVALID: error: "Entries" cannot be used with "Content" or "Size"
162
163--- !ELF
164FileHeader:
165  Class: ELFCLASS64
166  Data:  ELFDATA2LSB
167  Type:  ET_EXEC
168Sections:
169##  Specify Content and Size
170  - Name:    '.llvm_bb_addr_map'
171    Type:    SHT_LLVM_BB_ADDR_MAP
172    Entries: []
173    Content: [[CONTENT=<none>]]
174    Size:    [[SIZE=<none>]]
175
176## Check that yaml2obj generates a warning when we use unsupported versions.
177# RUN: yaml2obj --docnum=3  %s 2>&1 | FileCheck %s --check-prefix=INVALID-VERSION
178# INVALID-VERSION: warning: unsupported SHT_LLVM_BB_ADDR_MAP version: 3; encoding using the most recent version
179
180--- !ELF
181FileHeader:
182  Class: ELFCLASS64
183  Data:  ELFDATA2LSB
184  Type:  ET_EXEC
185Sections:
186  - Name: '.llvm_bb_addr_map'
187    Type: SHT_LLVM_BB_ADDR_MAP
188    Entries:
189##  Specify unsupported version
190      - Version: 3
191