James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 1 | ## 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 Henderson | 21ed868 | 2019-01-23 16:15:39 +0000 | [diff] [blame] | 70 | # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 71 | # RUN: --elf-section-groups --demangle %t.so > %t.gnu.long |
James Henderson | 21ed868 | 2019-01-23 16:15:39 +0000 | [diff] [blame] | 72 | # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 73 | # RUN: --elf-section-groups -C %t.so > %t.gnu.short |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 74 | # 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 Henderson | 21ed868 | 2019-01-23 16:15:39 +0000 | [diff] [blame] | 78 | # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 79 | # RUN: --elf-section-groups %t.so > %t.gnu.default |
James Henderson | 21ed868 | 2019-01-23 16:15:39 +0000 | [diff] [blame] | 80 | # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 81 | # RUN: --elf-section-groups --demangle=false %t.so > %t.gnu.nodemangle |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 82 | # 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 Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 101 | # 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 Henderson | 21ed868 | 2019-01-23 16:15:39 +0000 | [diff] [blame] | 109 | # GNU-COMMON: COMDAT group section [{{.*}}] `.group' |
| 110 | # GNU-DEMANGLE-SAME: [foo(char)] |
| 111 | # GNU-MANGLED-SAME: [_Z3fooc] |
| 112 | |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 113 | !ELF |
| 114 | FileHeader: |
| 115 | Class: ELFCLASS64 |
| 116 | Data: ELFDATA2LSB |
| 117 | Type: ET_DYN |
| 118 | Machine: EM_X86_64 |
| 119 | Sections: |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 120 | - Name: .dynstr |
| 121 | Type: SHT_STRTAB |
| 122 | Flags: [ SHF_ALLOC ] |
| 123 | AddressAlign: 0x100 |
| 124 | EntSize: 0x1 |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 125 | - Name: .dynsym |
| 126 | Type: SHT_DYNSYM |
| 127 | Flags: [ SHF_ALLOC ] |
| 128 | Link: .dynstr |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 129 | Address: 0x100 |
| 130 | AddressAlign: 0x100 |
| 131 | EntSize: 0x18 |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 132 | - 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 |
George Rimar | 9120844 | 2019-08-22 12:39:56 +0000 | [diff] [blame] | 142 | Symbol: _Z3fooi |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 143 | Type: R_X86_64_PC32 |
| 144 | Addend: 0x4 |
George Rimar | 0e7ed91 | 2019-02-09 11:34:28 +0000 | [diff] [blame] | 145 | - Name: .dynamic |
| 146 | Type: SHT_DYNAMIC |
| 147 | Flags: [ SHF_ALLOC ] |
| 148 | Address: 0x0000000000001000 |
| 149 | Link: .dynstr |
| 150 | AddressAlign: 0x0000000000001000 |
| 151 | EntSize: 0x0000000000000010 |
| 152 | Entries: |
| 153 | - Tag: DT_STRTAB |
| 154 | Value: 0x0000000000000000 |
| 155 | - Tag: DT_STRSZ |
| 156 | Value: 0x0000000000000009 |
| 157 | - Tag: DT_SYMTAB |
| 158 | Value: 0x0000000000000100 |
| 159 | - Tag: DT_SYMENT |
| 160 | Value: 0x0000000000000018 |
| 161 | - Tag: DT_RELA |
| 162 | Value: 0x0000000000000200 |
| 163 | - Tag: DT_RELASZ |
| 164 | Value: 0x0000000000000018 |
| 165 | - Tag: DT_RELAENT |
| 166 | Value: 0x0000000000000018 |
| 167 | - Tag: DT_NULL |
| 168 | Value: 0x0000000000000000 |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 169 | - Name: .text.foo |
| 170 | Type: SHT_PROGBITS |
| 171 | Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] |
| 172 | Size: 0x40 |
| 173 | Address: 0x2000 |
| 174 | AddressAlign: 0x2000 |
| 175 | - Name: .group |
| 176 | Type: SHT_GROUP |
| 177 | Link: .symtab |
| 178 | Info: _Z3fooc |
| 179 | Members: |
| 180 | - SectionOrType: GRP_COMDAT |
| 181 | - SectionOrType: .text.foo |
| 182 | - Name: .rela.text.foo |
| 183 | Type: SHT_RELA |
| 184 | Link: .symtab |
| 185 | Info: .text.foo |
| 186 | Relocations: |
| 187 | - Offset: 0x10 |
| 188 | Symbol: _Z3fooc |
| 189 | Type: R_X86_64_PC32 |
| 190 | - Name: .llvm.call-graph-profile |
| 191 | Type: SHT_LLVM_CALL_GRAPH_PROFILE |
| 192 | Link: .symtab |
| 193 | EntSize: 16 |
| 194 | Content: "01000000020000002000000000000000" |
| 195 | - Name: .llvm_addrsig |
| 196 | Type: SHT_LLVM_ADDRSIG |
| 197 | Link: .symtab |
| 198 | Content: "0102" |
| 199 | Symbols: |
George Rimar | 6da44ad | 2019-04-03 14:53:42 +0000 | [diff] [blame] | 200 | - Name: _Z3fooc |
| 201 | Type: STT_FUNC |
| 202 | Section: .text.foo |
| 203 | Binding: STB_GLOBAL |
| 204 | - Name: _Z4blahf |
| 205 | Type: STT_FUNC |
| 206 | Section: .text.foo |
| 207 | Binding: STB_GLOBAL |
George Rimar | 5da7023 | 2019-06-05 15:29:50 +0000 | [diff] [blame] | 208 | DynamicSymbols: |
| 209 | - Name: _Z3fooi |
| 210 | Binding: STB_GLOBAL |
James Henderson | e50d9cb | 2019-01-17 15:34:12 +0000 | [diff] [blame] | 211 | ProgramHeaders: |
| 212 | - Type: PT_LOAD |
| 213 | Flags: [ PF_R, PF_X ] |
| 214 | VAddr: 0x0 |
| 215 | PAddr: 0x0 |
| 216 | Sections: |
| 217 | - Section: .dynsym |
| 218 | - Section: .dynstr |
| 219 | - Section: .rela.dyn |
| 220 | - Section: .dynamic |
| 221 | - Section: .text.foo |
| 222 | - Type: PT_DYNAMIC |
| 223 | Flags: [ PF_R ] |
| 224 | VAddr: 0x1000 |
| 225 | PAddr: 0x1000 |
| 226 | Sections: |
| 227 | - Section: .dynamic |