diff options
Diffstat (limited to 'llvm/test/tools/llvm-readobj/ELF/demangle.test')
-rw-r--r-- | llvm/test/tools/llvm-readobj/ELF/demangle.test | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-readobj/ELF/demangle.test b/llvm/test/tools/llvm-readobj/ELF/demangle.test new file mode 100644 index 00000000000..29181cf1b4c --- /dev/null +++ b/llvm/test/tools/llvm-readobj/ELF/demangle.test @@ -0,0 +1,227 @@ +## 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: + - 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: 16 + Content: "01000000020000002000000000000000" + - 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 + 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 |