[Alignment][NFC] Instructions::getLoadStoreAlignment
[llvm-complete.git] / test / tools / llvm-readobj / dyn-symbols.test
blobbfcd821e0f978fc66122ffe3d9cab4d3470e20a8
1 # RUN: llvm-readobj --dyn-symbols %p/Inputs/dynamic-table-so.x86 | FileCheck %s
3 ## Check the two-letter alias --dt is equivalent to the --dyn-symbols full flag
4 ## name.
6 # RUN: llvm-readobj --dt %p/Inputs/dynamic-table-so.x86 > %t.readobj-dt-alias
7 # RUN: llvm-readobj --dyn-symbols %p/Inputs/dynamic-table-so.x86 > %t.readobj-dt-no-alias
8 # RUN: diff %t.readobj-dt-alias %t.readobj-dt-no-alias
10 # CHECK:      DynamicSymbols [
11 # CHECK-NEXT:   Symbol {
12 # CHECK-NEXT:     Name:
13 # CHECK-NEXT:     Value: 0x0
14 # CHECK-NEXT:     Size: 0
15 # CHECK-NEXT:     Binding: Local
16 # CHECK-NEXT:     Type: None
17 # CHECK-NEXT:     Other: 0
18 # CHECK-NEXT:     Section: Undefined
19 # CHECK-NEXT:   }
20 # CHECK-NEXT:   Symbol {
21 # CHECK-NEXT:     Name:
22 # CHECK-NEXT:     Value: 0x618
23 # CHECK-NEXT:     Size: 0
24 # CHECK-NEXT:     Binding: Local
25 # CHECK-NEXT:     Type: Section
26 # CHECK-NEXT:     Other: 0
27 # CHECK-NEXT:     Section: .init
28 # CHECK-NEXT:   }
29 # CHECK-NEXT:   Symbol {
30 # CHECK-NEXT:     Name:
31 # CHECK-NEXT:     Value: 0x200DC0
32 # CHECK-NEXT:     Size: 0
33 # CHECK-NEXT:     Binding: Local
34 # CHECK-NEXT:     Type: Section
35 # CHECK-NEXT:     Other: 0
36 # CHECK-NEXT:     Section: .tbss
37 # CHECK-NEXT:   }
38 # CHECK-NEXT:   Symbol {
39 # CHECK-NEXT:     Name: _ITM_deregisterTMCloneTable{{ }}
40 # CHECK-NEXT:     Value: 0x0
41 # CHECK-NEXT:     Size: 0
42 # CHECK-NEXT:     Binding: Weak
43 # CHECK-NEXT:     Type: None
44 # CHECK-NEXT:     Other: 0
45 # CHECK-NEXT:     Section: Undefined
46 # CHECK-NEXT:   }
47 # CHECK-NEXT:   Symbol {
48 # CHECK-NEXT:     Name: puts@GLIBC_2.2.5{{ }}
49 # CHECK-NEXT:     Value: 0x0
50 # CHECK-NEXT:     Size: 0
51 # CHECK-NEXT:     Binding: Global
52 # CHECK-NEXT:     Type: Function
53 # CHECK-NEXT:     Other: 0
54 # CHECK-NEXT:     Section: Undefined
55 # CHECK-NEXT:   }
56 # CHECK-NEXT:   Symbol {
57 # CHECK-NEXT:     Name: __tls_get_addr@GLIBC_2.3{{ }}
58 # CHECK-NEXT:     Value: 0x0
59 # CHECK-NEXT:     Size: 0
60 # CHECK-NEXT:     Binding: Global
61 # CHECK-NEXT:     Type: Function
62 # CHECK-NEXT:     Other: 0
63 # CHECK-NEXT:     Section: Undefined
64 # CHECK-NEXT:   }
65 # CHECK-NEXT:   Symbol {
66 # CHECK-NEXT:     Name: __gmon_start__{{ }}
67 # CHECK-NEXT:     Value: 0x0
68 # CHECK-NEXT:     Size: 0
69 # CHECK-NEXT:     Binding: Weak
70 # CHECK-NEXT:     Type: None
71 # CHECK-NEXT:     Other: 0
72 # CHECK-NEXT:     Section: Undefined
73 # CHECK-NEXT:   }
74 # CHECK-NEXT:   Symbol {
75 # CHECK-NEXT:     Name: _Jv_RegisterClasses{{ }}
76 # CHECK-NEXT:     Value: 0x0
77 # CHECK-NEXT:     Size: 0
78 # CHECK-NEXT:     Binding: Weak
79 # CHECK-NEXT:     Type: None
80 # CHECK-NEXT:     Other: 0
81 # CHECK-NEXT:     Section: Undefined
82 # CHECK-NEXT:   }
83 # CHECK-NEXT:   Symbol {
84 # CHECK-NEXT:     Name: _ITM_registerTMCloneTable{{ }}
85 # CHECK-NEXT:     Value: 0x0
86 # CHECK-NEXT:     Size: 0
87 # CHECK-NEXT:     Binding: Weak
88 # CHECK-NEXT:     Type: None
89 # CHECK-NEXT:     Other: 0
90 # CHECK-NEXT:     Section: Undefined
91 # CHECK-NEXT:   }
92 # CHECK-NEXT:   Symbol {
93 # CHECK-NEXT:     Name: __cxa_finalize@GLIBC_2.2.5{{ }}
94 # CHECK-NEXT:     Value: 0x0
95 # CHECK-NEXT:     Size: 0
96 # CHECK-NEXT:     Binding: Weak
97 # CHECK-NEXT:     Type: Function
98 # CHECK-NEXT:     Other: 0
99 # CHECK-NEXT:     Section: Undefined
100 # CHECK-NEXT:   }
101 # CHECK-NEXT:   Symbol {
102 # CHECK-NEXT:     Name: _edata{{ }}
103 # CHECK-NEXT:     Value: 0x201030
104 # CHECK-NEXT:     Size: 0
105 # CHECK-NEXT:     Binding: Global
106 # CHECK-NEXT:     Type: None
107 # CHECK-NEXT:     Other: 0
108 # CHECK-NEXT:     Section: .data
109 # CHECK-NEXT:   }
110 # CHECK-NEXT:   Symbol {
111 # CHECK-NEXT:     Name: foo{{ }}
112 # CHECK-NEXT:     Value: 0x0
113 # CHECK-NEXT:     Size: 4
114 # CHECK-NEXT:     Binding: Global
115 # CHECK-NEXT:     Type: TLS
116 # CHECK-NEXT:     Other: 0
117 # CHECK-NEXT:     Section: .tbss
118 # CHECK-NEXT:   }
119 # CHECK-NEXT:   Symbol {
120 # CHECK-NEXT:     Name: _end{{ }}
121 # CHECK-NEXT:     Value: 0x201038
122 # CHECK-NEXT:     Size: 0
123 # CHECK-NEXT:     Binding: Global
124 # CHECK-NEXT:     Type: None
125 # CHECK-NEXT:     Other: 0
126 # CHECK-NEXT:     Section: .bss
127 # CHECK-NEXT:   }
128 # CHECK-NEXT:   Symbol {
129 # CHECK-NEXT:     Name: __bss_start{{ }}
130 # CHECK-NEXT:     Value: 0x201030
131 # CHECK-NEXT:     Size: 0
132 # CHECK-NEXT:     Binding: Global
133 # CHECK-NEXT:     Type: None
134 # CHECK-NEXT:     Other: 0
135 # CHECK-NEXT:     Section: .bss
136 # CHECK-NEXT:   }
137 # CHECK-NEXT:   Symbol {
138 # CHECK-NEXT:     Name: main{{ }}
139 # CHECK-NEXT:     Value: 0x780
140 # CHECK-NEXT:     Size: 59
141 # CHECK-NEXT:     Binding: Global
142 # CHECK-NEXT:     Type: Function
143 # CHECK-NEXT:     Other: 0
144 # CHECK-NEXT:     Section: .text
145 # CHECK-NEXT:   }
146 # CHECK-NEXT:   Symbol {
147 # CHECK-NEXT:     Name: _init{{ }}
148 # CHECK-NEXT:     Value: 0x618
149 # CHECK-NEXT:     Size: 0
150 # CHECK-NEXT:     Binding: Global
151 # CHECK-NEXT:     Type: Function
152 # CHECK-NEXT:     Other: 0
153 # CHECK-NEXT:     Section: .init
154 # CHECK-NEXT:   }
155 # CHECK-NEXT:   Symbol {
156 # CHECK-NEXT:     Name: _fini{{ }}
157 # CHECK-NEXT:     Value: 0x7BC
158 # CHECK-NEXT:     Size: 0
159 # CHECK-NEXT:     Binding: Global
160 # CHECK-NEXT:     Type: Function
161 # CHECK-NEXT:     Other: 0
162 # CHECK-NEXT:     Section: .fini
163 # CHECK-NEXT:   }
164 # CHECK-NEXT: ]
166 ## Check that we are able to dump the dynamic symbol table even when we have no program headers.
167 ## In this case we find the table by it's type (SHT_DYNSYM) and ignore the DT_SYMTAB value.
169 # RUN: yaml2obj --docnum=1 %s -o %t1.so
170 # RUN: llvm-readobj %t1.so --dyn-symbols | FileCheck %s --check-prefix=NOPHDRS
172 # NOPHDRS: Name: foo
174 --- !ELF
175 FileHeader:
176   Class:   ELFCLASS64
177   Data:    ELFDATA2LSB
178   Type:    ET_DYN
179   Machine: EM_X86_64
180 Sections:
181   - Name:    .dynamic
182     Type:    SHT_DYNAMIC
183     Entries:
184       - Tag:   DT_SYMTAB
185         Value: 0xffff1234
186       - Tag:   DT_NULL
187         Value: 0
188 DynamicSymbols:
189   - Name: foo
191 ## Check we report a warning when there is no SHT_DYNSYM section and we can't map the DT_SYMTAB value
192 ## to an address because of the absence of a corresponding PT_LOAD program header.
194 # RUN: yaml2obj --docnum=2 %s -o %t2.so
195 # RUN: llvm-readobj %t2.so --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t2.so --check-prefix=NOSHT-DYNSYM
197 # NOSHT-DYNSYM: warning: '[[FILE]]': Unable to parse DT_SYMTAB: virtual address is not in any segment: 0x0
198 # NOSHT-DYNSYM:      DynamicSymbols [
199 # NOSHT-DYNSYM-NEXT: ]
201 --- !ELF
202 FileHeader:
203   Class:   ELFCLASS64
204   Data:    ELFDATA2LSB
205   Type:    ET_DYN
206   Machine: EM_X86_64
207 Sections:
208   - Name:    .dynsym
209     Type:    SHT_PROGBITS
210   - Name:    .dynamic
211     Type:    SHT_DYNAMIC
212     Entries:
213       - Tag:   DT_SYMTAB
214         Value: 0
215       - Tag:   DT_NULL
216         Value: 0
217 DynamicSymbols:
218   - Name: foo
220 ## Check that when we can't map the value of the DT_SYMTAB tag to an address, we report a warning and
221 ## use the information in the section header table to locate the dynamic symbol table.
223 # RUN: yaml2obj --docnum=3 %s -o %t3.so
224 # RUN: llvm-readobj %t3.so --dyn-symbols 2>&1 | FileCheck -DFILE=%t3.so %s --check-prefix=BROKEN-DTSYMTAB
226 # BROKEN-DTSYMTAB: warning: '[[FILE]]': Unable to parse DT_SYMTAB: virtual address is not in any segment: 0xffff1234
227 # BROKEN-DTSYMTAB: Name: foo
229 --- !ELF
230 FileHeader:
231   Class:   ELFCLASS64
232   Data:    ELFDATA2LSB
233   Type:    ET_DYN
234   Machine: EM_X86_64
235 Sections:
236   - Name:    .dynamic
237     Type:    SHT_DYNAMIC
238     Entries:
239       - Tag:   DT_SYMTAB
240         Value: 0xffff1234
241       - Tag:   DT_NULL
242         Value: 0
243 DynamicSymbols:
244   - Name: foo
245 ProgramHeaders:
246   - Type: PT_LOAD
247     VAddr: 0x0000
248     Sections:
249       - Section: .dynsym
251 ## Check that if we can get the location of the dynamic symbol table using both the DT_SYMTAB value
252 ## and the section headers table then we prefer the former and report a warning.
254 # RUN: yaml2obj --docnum=4 %s -o %t4.so
255 # RUN: llvm-readobj %t4.so --dyn-symbols 2>&1 | FileCheck -DFILE=%t4.so %s --check-prefix=PREFER-DTSYMTAB
257 # PREFER-DTSYMTAB: warning: '[[FILE]]': SHT_DYNSYM section header and DT_SYMTAB disagree about the location of the dynamic symbol table
258 # PREFER-DTSYMTAB: Name: o
260 --- !ELF
261 FileHeader:
262   Class:   ELFCLASS64
263   Data:    ELFDATA2LSB
264   Type:    ET_DYN
265   Machine: EM_X86_64
266 Sections:
267   - Name:    .dynamic
268     Type:    SHT_DYNAMIC
269     Entries:
270       - Tag:   DT_SYMTAB
271         Value: 0x0
272       - Tag:   DT_NULL
273         Value: 0
274   - Name: .dynsym
275     Type: SHT_DYNSYM
276   - Name: .mydynsym
277     Type: SHT_DYNSYM
278 ## The Content describes 2 symbols: zero symbol and symbol with st_name == 3.
279     Content: "000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000"
280 DynamicSymbols:
281   - Name: foo
282 ProgramHeaders:
283   - Type: PT_LOAD
284     VAddr: 0x0000
285     Sections:
286       - Section: .mydynsym