## Show that llvm-readelf + llvm-readobj demangle symbol names in symbol tables ## (including dynamic symbols), relocations (including dynamic relocations), and groups. # RUN: yaml2obj %s -o %t.so ## Check LLVM output style. # RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \ # RUN: --section-groups --cg-profile --addrsig \ # RUN: --demangle %t.so > %t.llvm.long # RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \ # RUN: --section-groups --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: --section-groups --cg-profile --addrsig \ # RUN: %t.so > %t.llvm.default # RUN: llvm-readobj --symbols --relocations --dyn-symbols --dyn-relocations \ # RUN: --section-groups --cg-profile --addrsig \ # RUN: --no-demangle %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: --section-groups --addrsig --demangle %t.so > %t.gnu.long # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ # RUN: --section-groups --addrsig -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: --section-groups --addrsig %t.so > %t.gnu.default # RUN: llvm-readelf --symbols --relocations --dyn-symbols --dyn-relocations \ # RUN: --section-groups --addrsig --no-demangle %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] # GNU-COMMON: Address-significant symbols section '.llvm_addrsig' contains 2 entries: # GNU-COMMON: Num: Name # GNU-DEMANGLE-NEXT: 1: foo(char) # GNU-DEMANGLE-NEXT: 2: blah(float) # GNU-MANGLED-NEXT: 1: _Z3fooc # GNU-MANGLED-NEXT: 2: _Z4blahf !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .dynstr Type: SHT_STRTAB Flags: [ SHF_ALLOC ] AddressAlign: 0x100 EntSize: 0x1 - Name: .dynsym Type: SHT_DYNSYM Flags: [ SHF_ALLOC ] Link: .dynstr Address: 0x100 AddressAlign: 0x100 EntSize: 0x18 - Name: .rela.dyn Type: SHT_RELA Flags: [ SHF_ALLOC ] Link: .dynsym Info: .text.foo Address: 0x200 AddressAlign: 0x100 EntSize: 0x18 Relocations: - Offset: 0x10 Symbol: _Z3fooi 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: 8 Content: "2000000000000000" - Name: .rel.llvm.call-graph-profile Type: SHT_REL Info: .llvm.call-graph-profile Relocations: - Symbol: 1 Type: R_X86_64_NONE - Offset: 0x1 Symbol: 2 Type: R_X86_64_NONE - Name: .llvm_addrsig Type: SHT_LLVM_ADDRSIG Link: .symtab Content: "0102" Symbols: - Name: _Z3fooc Type: STT_FUNC Section: .text.foo Binding: STB_GLOBAL - Name: _Z4blahf Type: STT_FUNC Section: .text.foo Binding: STB_GLOBAL DynamicSymbols: - Name: _Z3fooi Binding: STB_GLOBAL ProgramHeaders: - Type: PT_LOAD Flags: [ PF_R, PF_X ] VAddr: 0x0 FirstSec: .dynstr LastSec: .text.foo - Type: PT_DYNAMIC Flags: [ PF_R ] VAddr: 0x1000 FirstSec: .dynamic LastSec: .dynamic