xref: /llvm-project/llvm/test/tools/obj2yaml/ELF/bb-addr-map.yaml (revision acec6419e811a46050b0603dfa72fc6a169aa0f7)
1## Check how obj2yaml produces YAML .llvm_bb_addr_map descriptions.
2
3## Check that obj2yaml uses the "Entries" tag to describe an .llvm_bb_addr_map section.
4
5# RUN: yaml2obj --docnum=1 %s -o %t1
6# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID
7
8# VALID:      --- !ELF
9# VALID-NEXT: FileHeader:
10# VALID-NEXT:   Class: ELFCLASS64
11# VALID-NEXT:   Data:  ELFDATA2LSB
12# VALID-NEXT:   Type:  ET_EXEC
13# VALID-NEXT: Sections:
14# VALID-NEXT:   - Name: .llvm_bb_addr_map
15# VALID-NEXT:     Type: SHT_LLVM_BB_ADDR_MAP
16# VALID-NEXT:     Entries:
17# VALID-NEXT:       - Version: 2
18# VALID-NEXT:         BBRanges:
19## The 'BaseAddress' field is omitted when it's zero.
20# VALID-NEXT:           - BBEntries:
21# VALID-NEXT:             - ID:            0
22# VALID-NEXT:               AddressOffset: 0x1
23# VALID-NEXT:               Size:          0x2
24# VALID-NEXT:               Metadata:      0x3
25# VALID-NEXT:             - ID:            2
26# VALID-NEXT:               AddressOffset: 0x4
27# VALID-NEXT:               Size:          0x5
28# VALID-NEXT:               Metadata:      0x6
29# VALID-NEXT:             - ID:            4
30# VALID-NEXT:               AddressOffset: 0xFFFFFFFFFFFFFFF7
31# VALID-NEXT:               Size:          0xFFFFFFFFFFFFFFF8
32# VALID-NEXT:               Metadata:      0xFFFFFFFFFFFFFFF9
33# VALID-NEXT:       - Version: 2
34# VALID-NEXT:         Feature: 0x8
35# VALID-NEXT:         BBRanges:
36# VALID-NEXT:           - BaseAddress: 0xFFFFFFFFFFFFFF20
37# VALID-NEXT:             BBEntries:
38# VALID-NEXT:               - ID:            6
39# VALID-NEXT:                 AddressOffset: 0xA
40# VALID-NEXT:                 Size:          0xB
41# VALID-NEXT:                 Metadata:      0xC
42
43--- !ELF
44FileHeader:
45  Class: ELFCLASS64
46  Data:  ELFDATA2LSB
47  Type:  ET_EXEC
48Sections:
49  - Name:   .llvm_bb_addr_map
50    Type:   SHT_LLVM_BB_ADDR_MAP
51    ShSize: [[SIZE=<none>]]
52    Entries:
53      - Version: 2
54        Feature: 0x0
55        BBRanges:
56          - BaseAddress: 0x0
57            BBEntries:
58              - ID:            0
59                AddressOffset: 0x1
60                Size:          0x2
61                Metadata:      0x3
62              - ID:            2
63                AddressOffset: 0x4
64                Size:          0x5
65                Metadata:      0x6
66              - ID:            4
67                AddressOffset: 0xFFFFFFFFFFFFFFF7
68                Size:          0xFFFFFFFFFFFFFFF8
69                Metadata:      0xFFFFFFFFFFFFFFF9
70      - Version:   2
71        Feature:   0x8
72        NumBBRanges: [[NUMBBRANGES=<none>]]
73        BBRanges:
74          - BaseAddress:   0xFFFFFFFFFFFFFF20
75            NumBlocks: [[NUMBLOCKS=<none>]]
76            BBEntries:
77             - ID:            6
78               AddressOffset: 0xA
79               Size:          0xB
80               Metadata:      0xC
81
82## Check obj2yaml can dump empty .llvm_bb_addr_map sections.
83
84# RUN: yaml2obj --docnum=2 %s -o %t2
85# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=EMPTY
86
87# EMPTY:      --- !ELF
88# EMPTY-NEXT: FileHeader:
89# EMPTY-NEXT:   Class: ELFCLASS64
90# EMPTY-NEXT:   Data:  ELFDATA2LSB
91# EMPTY-NEXT:   Type:  ET_EXEC
92# EMPTY-NEXT: Sections:
93# EMPTY-NEXT:   - Name:    .llvm_bb_addr_map
94# EMPTY-NEXT:     Type:    SHT_LLVM_BB_ADDR_MAP
95# EMPTY-NOT:      Content:
96
97--- !ELF
98FileHeader:
99  Class: ELFCLASS64
100  Data:  ELFDATA2LSB
101  Type:  ET_EXEC
102Sections:
103  - Name:    .llvm_bb_addr_map
104    Type:    SHT_LLVM_BB_ADDR_MAP
105    Content: ""
106
107## Check obj2yaml can dump multiple .llvm_bb_addr_map sections.
108
109# RUN: yaml2obj --docnum=3 %s -o %t3
110# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=MULTI
111
112# MULTI:      --- !ELF
113# MULTI-NEXT: FileHeader:
114# MULTI-NEXT:   Class: ELFCLASS64
115# MULTI-NEXT:   Data:  ELFDATA2LSB
116# MULTI-NEXT:   Type:  ET_EXEC
117# MULTI-NEXT: Sections:
118# MULTI-NEXT:   - Name: .llvm_bb_addr_map
119# MULTI-NEXT:     Type: SHT_LLVM_BB_ADDR_MAP
120# MULTI-NEXT:     Entries:
121## Fields 'BaseAddress' and 'Feature' are omitted when they are zero.
122# MULTI-NEXT:       - Version: 0
123# MULTI-NEXT:         BBRanges:
124# MULTI-NEXT:           - BBEntries:
125# MULTI-NEXT:              - ID:            0
126# MULTI-NEXT:                AddressOffset: 0x1
127# MULTI-NEXT:                Size:          0x2
128# MULTI-NEXT:                Metadata:      0x3
129# MULTI-NEXT:   - Name: '.llvm_bb_addr_map (1)'
130# MULTI-NEXT:     Type: SHT_LLVM_BB_ADDR_MAP
131# MULTI-NEXT:     Entries:
132# MULTI-NEXT:       - Version:   0
133# MULTI-NEXT:         BBRanges:
134# MULTI-NEXT:           - BaseAddress:   0x20
135# MULTI-NEXT:             BBEntries: []
136
137--- !ELF
138FileHeader:
139  Class: ELFCLASS64
140  Data:  ELFDATA2LSB
141  Type:  ET_EXEC
142Sections:
143  - Name: .llvm_bb_addr_map
144    Type: SHT_LLVM_BB_ADDR_MAP
145    Entries:
146## Check that obj2yaml does not emit the 'Address' and 'Feature' fields when
147## they are zero.
148      - Version: 0
149        Feature: 0x0
150        BBRanges:
151          - BaseAddress: 0x0
152            BBEntries:
153              - AddressOffset: 0x1
154                Size:          0x2
155                Metadata:      0x3
156  - Name: '.llvm_bb_addr_map (1)'
157    Type:  SHT_LLVM_BB_ADDR_MAP
158    Entries:
159      - Version: 0
160        BBRanges:
161          - BaseAddress: 0x20
162
163## Check that obj2yaml uses the "Content" tag to describe an .llvm_bb_addr_map section
164## when it can't extract the entries, for example, when the section is truncated, or
165## when an invalid 'NumBlocks' or 'NumBBRanges` field is specified.
166
167# RUN: yaml2obj --docnum=1 -DSIZE=0x8 %s -o %t4
168# RUN: obj2yaml %t4 | FileCheck %s --check-prefixes=TRUNCATED,INVALID
169
170# RUN: yaml2obj --docnum=1 -DNUMBLOCKS=2 %s -o %t5
171# RUN: obj2yaml %t5 | FileCheck %s --check-prefixes=BADNUM,INVALID
172
173# RUN: yaml2obj --docnum=1 -DNUMBBRANGES=2 %s -o %t6
174# RUN: obj2yaml %t6 | FileCheck %s --check-prefixes=BADNUM,INVALID
175
176# INVALID:           --- !ELF
177# INVALID-NEXT:      FileHeader:
178# INVALID-NEXT:        Class: ELFCLASS64
179# INVALID-NEXT:        Data:  ELFDATA2LSB
180# INVALID-NEXT:        Type:  ET_EXEC
181# INVALID-NEXT:      Sections:
182# INVALID-NEXT:        - Name:    .llvm_bb_addr_map
183# INVALID-NEXT:          Type:    SHT_LLVM_BB_ADDR_MAP
184# BADNUM-NEXT:           Content: {{([[:xdigit:]]+)}}{{$}}
185# TRUNCATED-NEXT:        Content: '{{([[:xdigit:]]{16})}}'{{$}}
186