xref: /llvm-project/llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test (revision acec6419e811a46050b0603dfa72fc6a169aa0f7)
1## This test checks how we handle the --bb-addr-map option.
2
3## Check 64-bit:
4# RUN: yaml2obj --docnum=1 %s -DBITS=64 -DADDR=0x999999999 -o %t1.x64.o
5# RUN: llvm-readobj %t1.x64.o --bb-addr-map 2>&1 | FileCheck %s -DADDR=0x999999999 -DFILE=%t1.x64.o --check-prefix=CHECK
6# RUN: llvm-readelf %t1.x64.o --bb-addr-map | FileCheck %s --check-prefix=GNU
7
8## Check 64-bit:
9# RUN: yaml2obj --docnum=1 %s -DBITS=64 -DADDR=0x999999999 -o %t1.v1.x64.o
10# RUN: llvm-readobj %t1.v1.x64.o --bb-addr-map 2>&1 | FileCheck %s -DADDR=0x999999999 -DFILE=%t1.v1.x64.o --check-prefix=CHECK
11
12## Check 32-bit:
13# RUN: yaml2obj --docnum=1 %s -DBITS=32 -o %t1.x32.o
14# RUN: llvm-readobj %t1.x32.o --bb-addr-map 2>&1 | FileCheck -DADDR=0x11111 %s -DFILE=%t1.x32.o --check-prefix=CHECK
15# RUN: llvm-readelf %t1.x32.o --bb-addr-map | FileCheck %s --check-prefix=GNU
16
17## Check that a malformed section can be handled.
18# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DSIZE=7 -o %t2.o
19# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s -DOFFSET=0x00000007 -DFILE=%t2.o --check-prefix=TRUNCATED
20
21## Check that invalid metadata can be handled.
22# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DMETADATA=0xF000002 -o %t3.o
23# RUN: llvm-readobj %t3.o --bb-addr-map 2>&1 | FileCheck %s -DFILE=%t3.o --check-prefix=INVALIDMD
24
25# CHECK:      BBAddrMap [
26# CHECK-NEXT:   Function {
27# CHECK-NEXT:     At: [[ADDR]]
28# CHECK-NEXT: warning: '[[FILE]]': could not identify function symbol for address ([[ADDR]]) in SHT_LLVM_BB_ADDR_MAP section with index 3
29# CHECK-NEXT:     Name: <?>
30# CHECK-NEXT:     BB Ranges [
31# CHECK-NEXT:       {
32# CHECK-NEXT:         Base Address: [[ADDR]]
33# CHECK-NEXT:         BB Entries [
34# CHECK-NEXT:           {
35# CHECK-NEXT:             ID: 0
36# CHECK-NEXT:             Offset: 0x0
37# CHECK-NEXT:             Size: 0x1
38# CHECK-NEXT:             HasReturn: No
39# CHECK-NEXT:             HasTailCall: Yes
40# CHECK-NEXT:             IsEHPad: No
41# CHECK-NEXT:             CanFallThrough: No
42# CHECK-NEXT:             HasIndirectBranch: No
43# CHECK-NEXT:           }
44# CHECK-NEXT:         ]
45# CHECK-NEXT:       }
46# CHECK-NEXT:       {
47# CHECK-NEXT:         Base Address: 0x44444
48# CHECK-NEXT:         BB Entries [
49# CHECK-NEXT:           {
50# CHECK-NEXT:             ID: 2
51# CHECK-NEXT:             Offset: 0x3
52# CHECK-NEXT:             Size: 0x4
53# CHECK-NEXT:             HasReturn: Yes
54# CHECK-NEXT:             HasTailCall: No
55# CHECK-NEXT:             IsEHPad: Yes
56# CHECK-NEXT:             CanFallThrough: No
57# CHECK-NEXT:             HasIndirectBranch: Yes
58# CHECK-NEXT:           }
59# CHECK-NEXT:         ]
60# CHECK-NEXT:       }
61# CHECK-NEXT:     ]
62# CHECK-NEXT:   }
63# CHECK-NEXT:   Function {
64# CHECK-NEXT:     At: 0x22222
65# CHECK-NEXT:     Name: foo
66# CHECK-NEXT:     BB Ranges [
67# CHECK-NEXT:       {
68# CHECK-NEXT:         Base Address: 0x22222
69# CHECK-NEXT:         BB Entries [
70# CHECK-NEXT:           {
71# CHECK-NEXT:             ID: 4
72# CHECK-NEXT:             Offset: 0x6
73# CHECK-NEXT:             Size: 0x7
74# CHECK-NEXT:             HasReturn: No
75# CHECK-NEXT:             HasTailCall: No
76# CHECK-NEXT:             IsEHPad: No
77# CHECK-NEXT:             CanFallThrough: Yes
78# CHECK-NEXT:            HasIndirectBranch: No
79# CHECK-NEXT:           }
80# CHECK-NEXT:         ]
81# CHECK-NEXT:       }
82# CHECK-NEXT:     ]
83# CHECK-NEXT:   }
84# CHECK-NEXT: ]
85
86# GNU: GNUStyle::printBBAddrMaps not implemented
87
88# TRUNCATED:      BBAddrMap [
89# TRUNCATED-NEXT:   warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 3: unable to decode LEB128 at offset [[OFFSET]]: malformed uleb128, extends past end
90# TRUNCATED-NEXT: ]
91## Check that the other valid section is properly dumped.
92# TRUNCATED-NEXT: BBAddrMap [
93# TRUNCATED-NEXT:   Function {
94# TRUNCATED-NEXT:     At: 0x33333
95# TRUNCATED-NEXT:     Name: bar
96# TRUNCATED-NEXT:     BB Ranges [
97# TRUNCATED-NEXT:       {
98# TRUNCATED-NEXT:         Base Address: 0x33333
99# TRUNCATED-NEXT:         BB Entries [
100# TRUNCATED-NEXT:           {
101# TRUNCATED-NEXT:             ID: 6
102# TRUNCATED-NEXT:             Offset: 0x9
103# TRUNCATED-NEXT:             Size: 0xA
104# TRUNCATED-NEXT:             HasReturn: Yes
105# TRUNCATED-NEXT:             HasTailCall: Yes
106# TRUNCATED-NEXT:             IsEHPad: No
107# TRUNCATED-NEXT:             CanFallThrough: Yes
108# TRUNCATED-NEXT:             HasIndirectBranch: Yes
109# TRUNCATED-NEXT:           }
110# TRUNCATED-NEXT:           {
111# TRUNCATED-NEXT:             ID: 7
112# TRUNCATED-NEXT:             Offset: 0x1F
113# TRUNCATED-NEXT:             Size: 0xD
114# TRUNCATED-NEXT:             HasReturn: No
115# TRUNCATED-NEXT:             HasTailCall: Yes
116# TRUNCATED-NEXT:             IsEHPad: Yes
117# TRUNCATED-NEXT:             CanFallThrough: Yes
118# TRUNCATED-NEXT:             HasIndirectBranch: No
119# TRUNCATED-NEXT:           }
120# TRUNCATED-NEXT:         ]
121# TRUNCATED-NEXT:       }
122# TRUNCATED-NEXT:     ]
123# TRUNCATED-NEXT:   }
124# TRUNCATED-NEXT: ]
125
126# INVALIDMD:      BBAddrMap [
127# INVALIDMD-NEXT:   warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 3: invalid encoding for BBEntry::Metadata: 0xf000002
128
129--- !ELF
130FileHeader:
131  Class: ELFCLASS[[BITS]]
132  Data:  ELFDATA2LSB
133  Type:  ET_EXEC
134Sections:
135  - Name:   .text
136    Type:   SHT_PROGBITS
137    Flags:  [SHF_ALLOC]
138  - Name:   .text.bar
139    Type:   SHT_PROGBITS
140    Flags:  [SHF_ALLOC]
141  - Name:   .llvm_bb_addr_map
142    Type:   SHT_LLVM_BB_ADDR_MAP
143    ShSize: [[SIZE=<none>]]
144    Link:   .text
145    Entries:
146      - Version: 2
147        Feature: 0x8
148        BBRanges:
149          - BaseAddress: [[ADDR=0x11111]]
150            BBEntries:
151              - ID:            0
152                AddressOffset: 0x0
153                Size:          0x1
154                Metadata:      [[METADATA=0x2]]
155          - BaseAddress: 0x44444
156            BBEntries:
157              - ID:            2
158                AddressOffset: 0x3
159                Size:          0x4
160                Metadata:      0x15
161      - Version: 2
162        BBRanges:
163          - BaseAddress: 0x22222
164            BBEntries:
165              - ID:            4
166                AddressOffset: 0x6
167                Size:          0x7
168                Metadata:      0x8
169  - Name: dummy_section
170    Type: SHT_PROGBITS
171    Size: 16
172  - Name: '.llvm_bb_addr_map (1)'
173    Type: SHT_LLVM_BB_ADDR_MAP
174    Link: .text.bar
175    Entries:
176      - Version: 2
177        BBRanges:
178          - BaseAddress: 0x33333
179            BBEntries:
180              - ID:            6
181                AddressOffset: 0x9
182                Size:          0xa
183                Metadata:      0x1b
184              - ID:            7
185                AddressOffset: 0xc
186                Size:          0xd
187                Metadata:      0xe
188Symbols:
189  - Name:    foo
190    Section: .text
191    Type:    STT_FUNC
192    Value:   0x22222
193  - Name:    bar
194    Section: .text.bar
195    Type:    STT_FUNC
196    Value:   0x33333
197