| ## Show that llvm-readelf + llvm-readobj demangle symbol names in symbol tables |
| ## (including dynamic symbols), relocations (including dynamic relocations), and groups. |
| |
| # RUN: yaml2obj %s > %t.so |
| |
| ## Check LLVM output style. |
| # RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups --elf-cg-profile --addrsig \ |
| # RUN: --demangle %t.so > %t.llvm.long |
| # RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups --elf-cg-profile --addrsig \ |
| # RUN: -C %t.so > %t.llvm.short |
| # RUN: FileCheck %s --input-file %t.llvm.long --check-prefixes=LLVM-COMMON,LLVM-DEMANGLE |
| # RUN: diff %t.llvm.long %t.llvm.short |
| |
| ## Check that default is no demangling. |
| # RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups --elf-cg-profile --addrsig \ |
| # RUN: %t.so > %t.llvm.default |
| # RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups --elf-cg-profile --addrsig \ |
| # RUN: --demangle=false %t.so > %t.llvm.nodemangle |
| # RUN: FileCheck %s --input-file %t.llvm.default --check-prefixes=LLVM-COMMON,LLVM-MANGLED |
| # RUN: diff %t.llvm.default %t.llvm.nodemangle |
| |
| # LLVM-COMMON: Relocations [ |
| # LLVM-COMMON: Section {{.*}} .rela.text.foo { |
| # LLVM-DEMANGLE-NEXT: {{ }}foo(char){{ }} |
| # LLVM-MANGLED-NEXT: {{ }}_Z3fooc{{ }} |
| # LLVM-COMMON-NEXT: } |
| # LLVM-COMMON: ] |
| |
| # LLVM-COMMON: Dynamic Relocations { |
| # LLVM-DEMANGLE-NEXT: {{ }}foo(int){{ }} |
| # LLVM-MANGLED-NEXT: {{ }}_Z3fooi{{ }} |
| # LLVM-COMMON-NEXT: } |
| |
| # LLVM-COMMON: Symbols [ |
| # LLVM-DEMANGLE: Name: foo(char){{ }} |
| # LLVM-DEMANGLE: Name: blah(float){{ }} |
| # LLVM-MANGLED: Name: _Z3fooc{{ }} |
| # LLVM-MANGLED: Name: _Z4blahf{{ }} |
| # LLVM-COMMON: ] |
| |
| # LLVM-COMMON: DynamicSymbols [ |
| # LLVM-DEMANGLE: Name: foo(int){{ }} |
| # LLVM-MANGLED: Name: _Z3fooi{{ }} |
| # LLVM-COMMON: ] |
| |
| # LLVM-COMMON: Groups { |
| # LLVM-DEMANGLE: Signature: foo(char){{$}} |
| # LLVM-MANGLED: Signature: _Z3fooc{{$}} |
| # LLVM-COMMON: } |
| |
| # LLVM-COMMON: CGProfile [ |
| # LLVM-DEMANGLE: From: foo(char){{ }} |
| # LLVM-DEMANGLE: To: blah(float){{ }} |
| # LLVM-MANGLED: From: _Z3fooc{{ }} |
| # LLVM-MANGLED: To: _Z4blahf{{ }} |
| # LLVM-COMMON: ] |
| |
| # LLVM-COMMON: Addrsig [ |
| # LLVM-DEMANGLE-NEXT: Sym: foo(char){{ }} |
| # LLVM-DEMANGLE-NEXT: Sym: blah(float){{ }} |
| # LLVM-MANGLED-NEXT: Sym: _Z3fooc{{ }} |
| # LLVM-MANGLED-NEXT: Sym: _Z4blahf{{ }} |
| # LLVM-COMMON-NEXT: ] |
| |
| ## Check GNU output style. |
| # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups --demangle %t.so > %t.gnu.long |
| # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups -C %t.so > %t.gnu.short |
| # RUN: FileCheck %s --input-file %t.gnu.long --check-prefixes=GNU-COMMON,GNU-DEMANGLE |
| # RUN: diff %t.gnu.long %t.gnu.short |
| |
| ## Check that default is no demangling. |
| # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups %t.so > %t.gnu.default |
| # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ |
| # RUN: --elf-section-groups --demangle=false %t.so > %t.gnu.nodemangle |
| # RUN: FileCheck %s --input-file %t.gnu.default --check-prefixes=GNU-COMMON,GNU-MANGLED |
| # RUN: diff %t.gnu.default %t.gnu.nodemangle |
| |
| # GNU-COMMON: Relocation section '.rela.text.foo' at offset {{.*}} contains 1 entries: |
| # GNU-COMMON-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # GNU-DEMANGLE-NEXT: foo(char){{ }} |
| # GNU-MANGLED-NEXT: _Z3fooc{{ }} |
| |
| # GNU-COMMON: 'RELA' relocation section at offset {{.*}} contains 24 bytes: |
| # GNU-COMMON-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # GNU-DEMANGLE-NEXT: foo(int){{ }} |
| # GNU-MANGLED-NEXT: _Z3fooi{{ }} |
| |
| # GNU-COMMON: Symbol table '.dynsym' contains 2 entries: |
| # GNU-COMMON-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| # GNU-COMMON-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| # GNU-DEMANGLE-NEXT: foo(int){{$}} |
| # GNU-MANGLED-NEXT: _Z3fooi{{$}} |
| |
| # GNU-COMMON: Symbol table '.symtab' contains 3 entries: |
| # GNU-COMMON-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| # GNU-COMMON-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| # GNU-DEMANGLE-NEXT: foo(char){{$}} |
| # GNU-DEMANGLE-NEXT: blah(float){{$}} |
| # GNU-MANGLED-NEXT: _Z3fooc{{$}} |
| # GNU-MANGLED-NEXT: _Z4blahf{{$}} |
| |
| # GNU-COMMON: COMDAT group section [{{.*}}] `.group' |
| # GNU-DEMANGLE-SAME: [foo(char)] |
| # GNU-MANGLED-SAME: [_Z3fooc] |
| |
| !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| ## TODO: Replace the raw section contents with more meaningful dynamic |
| ## tags/symbols/etc, once yaml2obj supports it. |
| ## FIXME: yaml2obj does not currently allow custom addresses for .dynstr and |
| ## .dynsym if DynamicSymbols are specified. |
| ## See https://bugs.llvm.org/show_bug.cgi?id=40339 |
| - Name: .dynstr |
| Type: SHT_STRTAB |
| Flags: [ SHF_ALLOC ] |
| AddressAlign: 0x100 |
| EntSize: 0x1 |
| ## "\0_Z3fooi\0" |
| Content: "005f5a33666f6f6900" |
| - Name: .dynsym |
| Type: SHT_DYNSYM |
| Flags: [ SHF_ALLOC ] |
| Link: .dynstr |
| Address: 0x100 |
| AddressAlign: 0x100 |
| EntSize: 0x18 |
| ## Null symbol; |
| ## st_name: 1; st_info: Global | Func; st_other: 0; |
| ## st_shndx: .text.foo; st_value: 0x2000; st_size: 0 |
| Content: "000000000000000000000000000000000000000000000000010000001200050000200000000000000000000000000000" |
| - Name: .rela.dyn |
| Type: SHT_RELA |
| Flags: [ SHF_ALLOC ] |
| Link: .dynsym |
| Info: .text.foo |
| Address: 0x200 |
| AddressAlign: 0x100 |
| EntSize: 0x18 |
| Relocations: |
| - Offset: 0x10 |
| ## FIXME: This should be a lookup in the corresponding symbol table, not necessarily the static symbol table. |
| ## See https://bugs.llvm.org/show_bug.cgi?id=40337. |
| Symbol: _Z3fooc |
| Type: R_X86_64_PC32 |
| Addend: 0x4 |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Flags: [ SHF_ALLOC ] |
| Address: 0x0000000000001000 |
| Link: .dynstr |
| AddressAlign: 0x0000000000001000 |
| EntSize: 0x0000000000000010 |
| Entries: |
| - Tag: DT_STRTAB |
| Value: 0x0000000000000000 |
| - Tag: DT_STRSZ |
| Value: 0x0000000000000009 |
| - Tag: DT_SYMTAB |
| Value: 0x0000000000000100 |
| - Tag: DT_SYMENT |
| Value: 0x0000000000000018 |
| - Tag: DT_RELA |
| Value: 0x0000000000000200 |
| - Tag: DT_RELASZ |
| Value: 0x0000000000000018 |
| - Tag: DT_RELAENT |
| Value: 0x0000000000000018 |
| - Tag: DT_NULL |
| Value: 0x0000000000000000 |
| - Name: .text.foo |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] |
| Size: 0x40 |
| Address: 0x2000 |
| AddressAlign: 0x2000 |
| - Name: .group |
| Type: SHT_GROUP |
| Link: .symtab |
| Info: _Z3fooc |
| Members: |
| - SectionOrType: GRP_COMDAT |
| - SectionOrType: .text.foo |
| - Name: .rela.text.foo |
| Type: SHT_RELA |
| Link: .symtab |
| Info: .text.foo |
| Relocations: |
| - Offset: 0x10 |
| Symbol: _Z3fooc |
| Type: R_X86_64_PC32 |
| - Name: .llvm.call-graph-profile |
| Type: SHT_LLVM_CALL_GRAPH_PROFILE |
| Link: .symtab |
| EntSize: 16 |
| Content: "01000000020000002000000000000000" |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Link: .symtab |
| Content: "0102" |
| Symbols: |
| Global: |
| - Name: _Z3fooc |
| Type: STT_FUNC |
| Section: .text.foo |
| - Name: _Z4blahf |
| Type: STT_FUNC |
| Section: .text.foo |
| ProgramHeaders: |
| - Type: PT_LOAD |
| Flags: [ PF_R, PF_X ] |
| VAddr: 0x0 |
| PAddr: 0x0 |
| Sections: |
| - Section: .dynsym |
| - Section: .dynstr |
| - Section: .rela.dyn |
| - Section: .dynamic |
| - Section: .text.foo |
| - Type: PT_DYNAMIC |
| Flags: [ PF_R ] |
| VAddr: 0x1000 |
| PAddr: 0x1000 |
| Sections: |
| - Section: .dynamic |