xref: /llvm-project/llvm/test/tools/llvm-readobj/ELF/bb-addr-map-relocatable.test (revision acec6419e811a46050b0603dfa72fc6a169aa0f7)
1## This test checks how we handle the --bb-addr-map option on relocatable
2## object files.
3
4# RUN: yaml2obj %s -o %t1.o
5# RUN: llvm-readobj %t1.o --bb-addr-map | FileCheck %s
6
7# CHECK:      BBAddrMap [
8# CHECK-NEXT:   Function {
9# CHECK-NEXT:     At: 0x0
10# CHECK-NEXT:     Name: <?>
11# CHECK-NEXT:     BB Ranges [
12# CHECK-NEXT:       {
13# CHECK-NEXT:         Base Address: 0x0
14# CHECK-NEXT:         BB Entries [
15# CHECK-NEXT:           {
16# CHECK-NEXT:             ID: 0
17# CHECK-NEXT:             Offset: 0x0
18# CHECK-NEXT:             Size: 0xF
19# CHECK-NEXT:             HasReturn: Yes
20# CHECK-NEXT:             HasTailCall: No
21# CHECK-NEXT:             IsEHPad: No
22# CHECK-NEXT:             CanFallThrough: No
23# CHECK-NEXT:             HasIndirectBranch: No
24# CHECK-NEXT:           }
25# CHECK-NEXT:         ]
26# CHECK-NEXT:       }
27# CHECK-NEXT:     ]
28# CHECK-NEXT:   }
29# CHECK-NEXT:   Function {
30# CHECK-NEXT:     At: 0x10
31# CHECK-NEXT:     Name: <?>
32# CHECK-NEXT:     BB Ranges [
33# CHECK-NEXT:       {
34# CHECK-NEXT:         Base Address: 0x10
35# CHECK-NEXT:         BB Entries [
36# CHECK-NEXT:           {
37# CHECK-NEXT:             ID: 0
38# CHECK-NEXT:             Offset: 0x0
39# CHECK-NEXT:             Size: 0x11
40# CHECK-NEXT:             HasReturn: No
41# CHECK-NEXT:             HasTailCall: No
42# CHECK-NEXT:             IsEHPad: No
43# CHECK-NEXT:             CanFallThrough: Yes
44# CHECK-NEXT:             HasIndirectBranch: No
45# CHECK-NEXT:           }
46# CHECK-NEXT:         ]
47# CHECK-NEXT:       }
48# CHECK-NEXT:     ]
49# CHECK-NEXT:   }
50# CHECK-NEXT: ]
51
52--- !ELF
53FileHeader:
54  Class:           ELFCLASS64
55  Data:            ELFDATA2LSB
56  Type:            ET_REL
57  Machine:         EM_X86_64
58Sections:
59  - Name:    .text
60    Type:    SHT_PROGBITS
61    Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
62  - Name:    .llvm_bb_addr_map
63    Type:    SHT_LLVM_BB_ADDR_MAP
64    Link:    .text
65    Entries:
66      - Version: 2
67        BBRanges:
68          - BBEntries:
69            - ID:              0
70              AddressOffset:   0x0
71              Size:            0xF
72              Metadata:        0x1
73      - Version: 2
74        BBRanges:
75          - BBEntries:
76             - ID:              0
77               AddressOffset:   0x0
78               Size:            0x11
79               Metadata:        0x8
80  - Name:  .rela.llvm_bb_addr_map
81    Type:  SHT_RELA
82    Flags: [ SHF_INFO_LINK ]
83    Link:  .symtab
84    Info:  .llvm_bb_addr_map
85    Relocations:
86      - Offset: 0x2
87        Symbol: .text
88        Type:   R_X86_64_64
89      - Offset: 0x11
90        Symbol: .text
91        Type:   R_X86_64_64
92        Addend: 16
93Symbols:
94  - Name:    a
95    Section: .text
96    Value:   0x0
97  - Name:    c
98    Section: .text
99    Value:   0x10
100  - Name:    .text
101    Type:    STT_SECTION
102    Section: .text
103
104## Check that if we have a relocatable file and no relocation section for
105## a SHT_LLVM_BB_ADDR_MAP section, we give the appropriate warnings.
106
107--- !ELF
108FileHeader:
109  Class:           ELFCLASS64
110  Data:            ELFDATA2LSB
111  Type:            ET_REL
112  Machine:         EM_X86_64
113Sections:
114  - Name:    .text
115    Type:    SHT_PROGBITS
116    Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
117  - Name:    .llvm_bb_addr_map
118    Type:    SHT_LLVM_BB_ADDR_MAP
119    Link:    .text
120
121# RUN: yaml2obj %s --docnum=2 -o %t2.o
122# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=NO-RELA -DFILE=%t2.o
123
124# NO-RELA: warning: '[[FILE]]': unable to get relocation section for SHT_LLVM_BB_ADDR_MAP section with index 2
125
126## Check that we get a warning if we expect a relocation and it is not present.
127
128--- !ELF
129FileHeader:
130  Class:           ELFCLASS64
131  Data:            ELFDATA2LSB
132  Type:            ET_REL
133  Machine:         EM_X86_64
134Sections:
135  - Name:    .text
136    Type:    SHT_PROGBITS
137    Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
138  - Name:    .llvm_bb_addr_map
139    Type:    SHT_LLVM_BB_ADDR_MAP
140    Link:    .text
141    Entries:
142      - Version: 2
143        BBRanges:
144        - BBEntries:
145          - ID:              0
146            AddressOffset:   0x0
147            Size:            0xF
148            Metadata:        0x1
149  - Name:  .rela.llvm_bb_addr_map
150    Type:  SHT_RELA
151    Flags: [ SHF_INFO_LINK ]
152    Info:  .llvm_bb_addr_map
153
154# RUN: yaml2obj %s --docnum=3 -o %t3.o
155# RUN: llvm-readobj %t3.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=MISSING-RELOCATION -DFILE=%t3.o
156
157# MISSING-RELOCATION: warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 2: failed to get relocation data for offset: 2 in section SHT_LLVM_BB_ADDR_MAP section with index 2
158
159## Check that if we have a missing relocated section, we fail and give the
160## appropriate warning.
161
162--- !ELF
163FileHeader:
164  Class:           ELFCLASS64
165  Data:            ELFDATA2LSB
166  Type:            ET_REL
167  Machine:         EM_X86_64
168Sections:
169  - Name:  .rela.llvm_bb_addr_map
170    Type:  SHT_RELA
171    Flags: [ SHF_INFO_LINK ]
172    Info:  0xFF
173
174# RUN: yaml2obj %s --docnum=4 -o %t4.o
175# RUN: llvm-readobj %t4.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=NO-RELOCATED-SECTION -DFILE=%t4.o
176
177# NO-RELOCATED-SECTION: warning: '[[FILE]]': failed to get SHT_LLVM_BB_ADDR_MAP section(s): SHT_RELA section with index 1: failed to get a relocated section: invalid section index: 255
178
179## Check that if we have an ET_DYN file with a .rela.dyn section, we don't get
180## a warning about a missing relocation section and can get the baddrmap data.
181
182--- !ELF
183FileHeader:
184  Class:           ELFCLASS64
185  Data:            ELFDATA2LSB
186  Type:            ET_DYN
187  Machine:         EM_X86_64
188Sections:
189  - Name:            .rela.dyn
190    Type:            SHT_RELA
191    Flags:           [ SHF_ALLOC ]
192  - Name:            .llvm_bb_addr_map
193    Type:            SHT_LLVM_BB_ADDR_MAP
194    Flags:           [ SHF_LINK_ORDER ]
195    Entries:
196      - Version:         2
197        BBRanges:
198          - BaseAddress:         0xF
199            BBEntries:
200             - ID:              0
201               AddressOffset:   0x0
202               Size:            0xF
203               Metadata:        0x1
204
205# RUN: yaml2obj %s --docnum=5 -o %t5.o
206# RUN: llvm-readobj %t5.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=ET-DYN-NO-WARNING -DFILE=%t5.o
207
208# ET-DYN-NO-WARNING: BBAddrMap [
209# ET-DYN-NO-WARNING:   Function {
210# ET-DYN-NO-WARNING:     At: 0xF
211# ET-DYN-NO-WARNING:     Name: <?>
212# ET-DYN-NO-WARNING:     BB Ranges [
213# ET-DYN-NO-WARNING:       {
214# ET-DYN-NO-WARNING:         Base Address: 0xF
215# ET-DYN-NO-WARNING:         BB Entries [
216# ET-DYN-NO-WARNING:           {
217# ET-DYN-NO-WARNING:             ID: 0
218# ET-DYN-NO-WARNING:             Offset: 0x0
219# ET-DYN-NO-WARNING:             Size: 0xF
220# ET-DYN-NO-WARNING:             HasReturn: Yes
221# ET-DYN-NO-WARNING:             HasTailCall: No
222# ET-DYN-NO-WARNING:             IsEHPad: No
223# ET-DYN-NO-WARNING:             CanFallThrough: No
224# ET-DYN-NO-WARNING:             HasIndirectBranch: No
225# ET-DYN-NO-WARNING:           }
226# ET-DYN-NO-WARNING:         ]
227# ET-DYN-NO-WARNING:       }
228# ET-DYN-NO-WARNING:     ]
229# ET-DYN-NO-WARNING:   }
230# ET-DYN-NO-WARNING: ]
231