blob: 809a7243edf34fb5868f69c78e14af26520b01d6 [file] [log] [blame]
## 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