blob: ffd0053e41475daddc4b64569aaec16f6f3f86f5 [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.
70## FIXME: The extra run for --symbols is because GNU mode only prints the dynamic symbols,
71## if --dyn-symbols is specified, even if --symbols is specified.
72# RUN: llvm-readelf --relocations --dyn-symbols --dyn-relocations \
73# RUN: --elf-section-groups --demangle %t.so > %t.gnu.long
74# RUN: llvm-readelf --symbols --demangle %t.so >> %t.gnu.long
75# RUN: llvm-readelf --relocations --dyn-symbols --dyn-relocations \
76# RUN: --elf-section-groups -C %t.so > %t.gnu.short
77# RUN: llvm-readelf --symbols -C %t.so >> %t.gnu.short
78# RUN: FileCheck %s --input-file %t.gnu.long --check-prefixes=GNU-COMMON,GNU-DEMANGLE
79# RUN: diff %t.gnu.long %t.gnu.short
80
81## Check that default is no demangling.
82# RUN: llvm-readelf --relocations --dyn-symbols --dyn-relocations \
83# RUN: --elf-section-groups %t.so > %t.gnu.default
84# RUN: llvm-readelf --symbols %t.so >> %t.gnu.default
85# RUN: llvm-readelf --relocations --dyn-symbols --dyn-relocations \
86# RUN: --elf-section-groups --demangle=false %t.so > %t.gnu.nodemangle
87# RUN: llvm-readelf --symbols --demangle=false %t.so >> %t.gnu.nodemangle
88# RUN: FileCheck %s --input-file %t.gnu.default --check-prefixes=GNU-COMMON,GNU-MANGLED
89# RUN: diff %t.gnu.default %t.gnu.nodemangle
90
91# GNU-COMMON: Relocation section '.rela.text.foo' at offset {{.*}} contains 1 entries:
92# GNU-COMMON-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
93# GNU-DEMANGLE-NEXT: foo(char){{ }}
94# GNU-MANGLED-NEXT: _Z3fooc{{ }}
95
96# GNU-COMMON: 'RELA' relocation section at offset {{.*}} contains 24 bytes:
97# GNU-COMMON-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
98# GNU-DEMANGLE-NEXT: foo(int){{ }}
99# GNU-MANGLED-NEXT: _Z3fooi{{ }}
100
101# GNU-COMMON: Symbol table '.dynsym' contains 2 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(int){{$}}
105# GNU-MANGLED-NEXT: _Z3fooi{{$}}
106
107# GNU-COMMON: COMDAT group section [{{.*}}] `.group'
108# GNU-DEMANGLE-SAME: [foo(char)]
109# GNU-MANGLED-SAME: [_Z3fooc]
110
111# GNU-COMMON: Symbol table '.symtab' contains 3 entries:
112# GNU-COMMON-NEXT: Num: Value Size Type Bind Vis Ndx Name
113# GNU-COMMON-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
114# GNU-DEMANGLE-NEXT: foo(char){{$}}
115# GNU-DEMANGLE-NEXT: blah(float){{$}}
116# GNU-MANGLED-NEXT: _Z3fooc{{$}}
117# GNU-MANGLED-NEXT: _Z4blahf{{$}}
118
119!ELF
120FileHeader:
121 Class: ELFCLASS64
122 Data: ELFDATA2LSB
123 Type: ET_DYN
124 Machine: EM_X86_64
125Sections:
126 ## TODO: Replace the raw section contents with more meaningful dynamic
127 ## tags/symbols/etc, once yaml2obj supports it.
128 ## FIXME: yaml2obj does not currently allow custom addresses for .dynstr and
129 ## .dynsym if DynamicSymbols are specified.
130 ## See https://bugs.llvm.org/show_bug.cgi?id=40339
131 - Name: .dynstr
132 Type: SHT_STRTAB
133 Flags: [ SHF_ALLOC ]
134 AddressAlign: 0x100
135 EntSize: 0x1
136 ## "\0_Z3fooi\0"
137 Content: "005f5a33666f6f6900"
138 - Name: .dynsym
139 Type: SHT_DYNSYM
140 Flags: [ SHF_ALLOC ]
141 Link: .dynstr
142 Info: 1
143 Address: 0x100
144 AddressAlign: 0x100
145 EntSize: 0x18
146 ## Null symbol;
147 ## st_name: 1; st_info: Global | Func; st_other: 0;
148 ## st_shndx: .text.foo; st_value: 0x2000; st_size: 0
149 Content: "000000000000000000000000000000000000000000000000010000001200050000200000000000000000000000000000"
150 - Name: .rela.dyn
151 Type: SHT_RELA
152 Flags: [ SHF_ALLOC ]
153 Link: .dynsym
154 Info: .text.foo
155 Address: 0x200
156 AddressAlign: 0x100
157 EntSize: 0x18
158 Relocations:
159 - Offset: 0x10
160 ## FIXME: This should be a lookup in the corresponding symbol table, not necessarily the static symbol table.
161 ## See https://bugs.llvm.org/show_bug.cgi?id=40337.
162 Symbol: _Z3fooc
163 Type: R_X86_64_PC32
164 Addend: 0x4
165 - Name: .dynamic
166 Type: SHT_DYNAMIC
167 Flags: [ SHF_ALLOC ]
168 Link: .dynstr
169 Address: 0x1000
170 AddressAlign: 0x1000
171 ## DT_STRTAB - 0x0
172 ## DT_STRSZ - 0x9
173 ## DT_SYMTAB - 0x100
174 ## DT_SYMENT - 0x18
175 ## DT_RELA - 0x200
176 ## DT_RELASZ - 0x18
177 ## DT_RELAENT - 0x18
178 ## DT_NULL - 0x0
179 Content: "050000000000000000000000000000000a000000000000000900000000000000060000000000000000010000000000000b00000000000000180000000000000007000000000000000002000000000000080000000000000018000000000000000900000000000000180000000000000000000000000000000000000000000000"
180 - Name: .text.foo
181 Type: SHT_PROGBITS
182 Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
183 Size: 0x40
184 Address: 0x2000
185 AddressAlign: 0x2000
186 - Name: .group
187 Type: SHT_GROUP
188 Link: .symtab
189 Info: _Z3fooc
190 Members:
191 - SectionOrType: GRP_COMDAT
192 - SectionOrType: .text.foo
193 - Name: .rela.text.foo
194 Type: SHT_RELA
195 Link: .symtab
196 Info: .text.foo
197 Relocations:
198 - Offset: 0x10
199 Symbol: _Z3fooc
200 Type: R_X86_64_PC32
201 - Name: .llvm.call-graph-profile
202 Type: SHT_LLVM_CALL_GRAPH_PROFILE
203 Link: .symtab
204 EntSize: 16
205 Content: "01000000020000002000000000000000"
206 - Name: .llvm_addrsig
207 Type: SHT_LLVM_ADDRSIG
208 Link: .symtab
209 Content: "0102"
210Symbols:
211 Global:
212 - Name: _Z3fooc
213 Type: STT_FUNC
214 Section: .text.foo
215 - Name: _Z4blahf
216 Type: STT_FUNC
217 Section: .text.foo
218ProgramHeaders:
219 - Type: PT_LOAD
220 Flags: [ PF_R, PF_X ]
221 VAddr: 0x0
222 PAddr: 0x0
223 Sections:
224 - Section: .dynsym
225 - Section: .dynstr
226 - Section: .rela.dyn
227 - Section: .dynamic
228 - Section: .text.foo
229 - Type: PT_DYNAMIC
230 Flags: [ PF_R ]
231 VAddr: 0x1000
232 PAddr: 0x1000
233 Sections:
234 - Section: .dynamic