blob: a1a881e6436d2ef7ded5ed69995b117aee303199 [file] [log] [blame]
James Hendersone50d9cb2019-01-17 15:34:12 +00001## Show that llvm-readelf + llvm-readobj demangle symbol names in symbol tables
2## (including dynamic symbols), relocations (including dynamic relocations), and groups.
3
4# RUN: yaml2obj %s > %t.so
5
6## Check LLVM output style.
7# RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \
8# RUN: --elf-section-groups --elf-cg-profile --addrsig \
9# RUN: --demangle %t.so > %t.llvm.long
10# RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \
11# RUN: --elf-section-groups --elf-cg-profile --addrsig \
12# RUN: -C %t.so > %t.llvm.short
13# RUN: FileCheck %s --input-file %t.llvm.long --check-prefixes=LLVM-COMMON,LLVM-DEMANGLE
14# RUN: diff %t.llvm.long %t.llvm.short
15
16## Check that default is no demangling.
17# RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \
18# RUN: --elf-section-groups --elf-cg-profile --addrsig \
19# RUN: %t.so > %t.llvm.default
20# RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \
21# RUN: --elf-section-groups --elf-cg-profile --addrsig \
22# RUN: --demangle=false %t.so > %t.llvm.nodemangle
23# RUN: FileCheck %s --input-file %t.llvm.default --check-prefixes=LLVM-COMMON,LLVM-MANGLED
24# RUN: diff %t.llvm.default %t.llvm.nodemangle
25
26# LLVM-COMMON: Relocations [
27# LLVM-COMMON: Section {{.*}} .rela.text.foo {
28# LLVM-DEMANGLE-NEXT: {{ }}foo(char){{ }}
29# LLVM-MANGLED-NEXT: {{ }}_Z3fooc{{ }}
30# LLVM-COMMON-NEXT: }
31# LLVM-COMMON: ]
32
33# LLVM-COMMON: Dynamic Relocations {
34# LLVM-DEMANGLE-NEXT: {{ }}foo(int){{ }}
35# LLVM-MANGLED-NEXT: {{ }}_Z3fooi{{ }}
36# LLVM-COMMON-NEXT: }
37
38# LLVM-COMMON: Symbols [
39# LLVM-DEMANGLE: Name: foo(char){{ }}
40# LLVM-DEMANGLE: Name: blah(float){{ }}
41# LLVM-MANGLED: Name: _Z3fooc{{ }}
42# LLVM-MANGLED: Name: _Z4blahf{{ }}
43# LLVM-COMMON: ]
44
45# LLVM-COMMON: DynamicSymbols [
46# LLVM-DEMANGLE: Name: foo(int){{ }}
47# LLVM-MANGLED: Name: _Z3fooi{{ }}
48# LLVM-COMMON: ]
49
50# LLVM-COMMON: Groups {
51# LLVM-DEMANGLE: Signature: foo(char){{$}}
52# LLVM-MANGLED: Signature: _Z3fooc{{$}}
53# LLVM-COMMON: }
54
55# LLVM-COMMON: CGProfile [
56# LLVM-DEMANGLE: From: foo(char){{ }}
57# LLVM-DEMANGLE: To: blah(float){{ }}
58# LLVM-MANGLED: From: _Z3fooc{{ }}
59# LLVM-MANGLED: To: _Z4blahf{{ }}
60# LLVM-COMMON: ]
61
62# LLVM-COMMON: Addrsig [
63# LLVM-DEMANGLE-NEXT: Sym: foo(char){{ }}
64# LLVM-DEMANGLE-NEXT: Sym: blah(float){{ }}
65# LLVM-MANGLED-NEXT: Sym: _Z3fooc{{ }}
66# LLVM-MANGLED-NEXT: Sym: _Z4blahf{{ }}
67# LLVM-COMMON-NEXT: ]
68
69## Check GNU output style.
James Henderson21ed8682019-01-23 16:15:39 +000070# RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \
James Hendersone50d9cb2019-01-17 15:34:12 +000071# RUN: --elf-section-groups --demangle %t.so > %t.gnu.long
James Henderson21ed8682019-01-23 16:15:39 +000072# RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \
James Hendersone50d9cb2019-01-17 15:34:12 +000073# RUN: --elf-section-groups -C %t.so > %t.gnu.short
James Hendersone50d9cb2019-01-17 15:34:12 +000074# RUN: FileCheck %s --input-file %t.gnu.long --check-prefixes=GNU-COMMON,GNU-DEMANGLE
75# RUN: diff %t.gnu.long %t.gnu.short
76
77## Check that default is no demangling.
James Henderson21ed8682019-01-23 16:15:39 +000078# RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \
James Hendersone50d9cb2019-01-17 15:34:12 +000079# RUN: --elf-section-groups %t.so > %t.gnu.default
James Henderson21ed8682019-01-23 16:15:39 +000080# RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \
James Hendersone50d9cb2019-01-17 15:34:12 +000081# RUN: --elf-section-groups --demangle=false %t.so > %t.gnu.nodemangle
James Hendersone50d9cb2019-01-17 15:34:12 +000082# RUN: FileCheck %s --input-file %t.gnu.default --check-prefixes=GNU-COMMON,GNU-MANGLED
83# RUN: diff %t.gnu.default %t.gnu.nodemangle
84
85# GNU-COMMON: Relocation section '.rela.text.foo' at offset {{.*}} contains 1 entries:
86# GNU-COMMON-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
87# GNU-DEMANGLE-NEXT: foo(char){{ }}
88# GNU-MANGLED-NEXT: _Z3fooc{{ }}
89
90# GNU-COMMON: 'RELA' relocation section at offset {{.*}} contains 24 bytes:
91# GNU-COMMON-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
92# GNU-DEMANGLE-NEXT: foo(int){{ }}
93# GNU-MANGLED-NEXT: _Z3fooi{{ }}
94
95# GNU-COMMON: Symbol table '.dynsym' contains 2 entries:
96# GNU-COMMON-NEXT: Num: Value Size Type Bind Vis Ndx Name
97# GNU-COMMON-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
98# GNU-DEMANGLE-NEXT: foo(int){{$}}
99# GNU-MANGLED-NEXT: _Z3fooi{{$}}
100
James Hendersone50d9cb2019-01-17 15:34:12 +0000101# GNU-COMMON: Symbol table '.symtab' contains 3 entries:
102# GNU-COMMON-NEXT: Num: Value Size Type Bind Vis Ndx Name
103# GNU-COMMON-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
104# GNU-DEMANGLE-NEXT: foo(char){{$}}
105# GNU-DEMANGLE-NEXT: blah(float){{$}}
106# GNU-MANGLED-NEXT: _Z3fooc{{$}}
107# GNU-MANGLED-NEXT: _Z4blahf{{$}}
108
James Henderson21ed8682019-01-23 16:15:39 +0000109# GNU-COMMON: COMDAT group section [{{.*}}] `.group'
110# GNU-DEMANGLE-SAME: [foo(char)]
111# GNU-MANGLED-SAME: [_Z3fooc]
112
James Hendersone50d9cb2019-01-17 15:34:12 +0000113!ELF
114FileHeader:
115 Class: ELFCLASS64
116 Data: ELFDATA2LSB
117 Type: ET_DYN
118 Machine: EM_X86_64
119Sections:
James Hendersone50d9cb2019-01-17 15:34:12 +0000120 - Name: .dynstr
121 Type: SHT_STRTAB
122 Flags: [ SHF_ALLOC ]
123 AddressAlign: 0x100
124 EntSize: 0x1
James Hendersone50d9cb2019-01-17 15:34:12 +0000125 - Name: .dynsym
126 Type: SHT_DYNSYM
127 Flags: [ SHF_ALLOC ]
128 Link: .dynstr
James Hendersone50d9cb2019-01-17 15:34:12 +0000129 Address: 0x100
130 AddressAlign: 0x100
131 EntSize: 0x18
James Hendersone50d9cb2019-01-17 15:34:12 +0000132 - Name: .rela.dyn
133 Type: SHT_RELA
134 Flags: [ SHF_ALLOC ]
135 Link: .dynsym
136 Info: .text.foo
137 Address: 0x200
138 AddressAlign: 0x100
139 EntSize: 0x18
140 Relocations:
141 - Offset: 0x10
142 ## FIXME: This should be a lookup in the corresponding symbol table, not necessarily the static symbol table.
143 ## See https://bugs.llvm.org/show_bug.cgi?id=40337.
144 Symbol: _Z3fooc
145 Type: R_X86_64_PC32
146 Addend: 0x4
George Rimar0e7ed912019-02-09 11:34:28 +0000147 - Name: .dynamic
148 Type: SHT_DYNAMIC
149 Flags: [ SHF_ALLOC ]
150 Address: 0x0000000000001000
151 Link: .dynstr
152 AddressAlign: 0x0000000000001000
153 EntSize: 0x0000000000000010
154 Entries:
155 - Tag: DT_STRTAB
156 Value: 0x0000000000000000
157 - Tag: DT_STRSZ
158 Value: 0x0000000000000009
159 - Tag: DT_SYMTAB
160 Value: 0x0000000000000100
161 - Tag: DT_SYMENT
162 Value: 0x0000000000000018
163 - Tag: DT_RELA
164 Value: 0x0000000000000200
165 - Tag: DT_RELASZ
166 Value: 0x0000000000000018
167 - Tag: DT_RELAENT
168 Value: 0x0000000000000018
169 - Tag: DT_NULL
170 Value: 0x0000000000000000
James Hendersone50d9cb2019-01-17 15:34:12 +0000171 - Name: .text.foo
172 Type: SHT_PROGBITS
173 Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
174 Size: 0x40
175 Address: 0x2000
176 AddressAlign: 0x2000
177 - Name: .group
178 Type: SHT_GROUP
179 Link: .symtab
180 Info: _Z3fooc
181 Members:
182 - SectionOrType: GRP_COMDAT
183 - SectionOrType: .text.foo
184 - Name: .rela.text.foo
185 Type: SHT_RELA
186 Link: .symtab
187 Info: .text.foo
188 Relocations:
189 - Offset: 0x10
190 Symbol: _Z3fooc
191 Type: R_X86_64_PC32
192 - Name: .llvm.call-graph-profile
193 Type: SHT_LLVM_CALL_GRAPH_PROFILE
194 Link: .symtab
195 EntSize: 16
196 Content: "01000000020000002000000000000000"
197 - Name: .llvm_addrsig
198 Type: SHT_LLVM_ADDRSIG
199 Link: .symtab
200 Content: "0102"
201Symbols:
George Rimar6da44ad2019-04-03 14:53:42 +0000202 - Name: _Z3fooc
203 Type: STT_FUNC
204 Section: .text.foo
205 Binding: STB_GLOBAL
206 - Name: _Z4blahf
207 Type: STT_FUNC
208 Section: .text.foo
209 Binding: STB_GLOBAL
George Rimar5da70232019-06-05 15:29:50 +0000210DynamicSymbols:
211 - Name: _Z3fooi
212 Binding: STB_GLOBAL
James Hendersone50d9cb2019-01-17 15:34:12 +0000213ProgramHeaders:
214 - Type: PT_LOAD
215 Flags: [ PF_R, PF_X ]
216 VAddr: 0x0
217 PAddr: 0x0
218 Sections:
219 - Section: .dynsym
220 - Section: .dynstr
221 - Section: .rela.dyn
222 - Section: .dynamic
223 - Section: .text.foo
224 - Type: PT_DYNAMIC
225 Flags: [ PF_R ]
226 VAddr: 0x1000
227 PAddr: 0x1000
228 Sections:
229 - Section: .dynamic