156 lines
5.3 KiB
Plaintext
156 lines
5.3 KiB
Plaintext
## Check we print symbol versions, when they are available.
|
|
|
|
## Test undefined symbols.
|
|
# RUN: yaml2obj %s -o %t-undef.o
|
|
# RUN: llvm-objdump -T %t-undef.o 2>&1 | tr '\t' '|' | FileCheck %s \
|
|
# RUN: -DFILE=%t-undef.o --check-prefix=UNDEF --match-full-lines --strict-whitespace
|
|
|
|
## version2sym and version3sym are invalid: undefined symbols cannot refer to .gnu.version_d.
|
|
## We still check their behaviors.
|
|
# UNDEF:DYNAMIC SYMBOL TABLE:
|
|
# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 localversym
|
|
# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 globalversym
|
|
# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v2) version2sym
|
|
# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v3hidden) version3sym
|
|
# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v4) version4sym
|
|
# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v5hidden) .hidden version5sym
|
|
|
|
## Test defined symbols.
|
|
# RUN: yaml2obj -DINDEX=0x1 %s -o %t-def.o
|
|
# RUN: llvm-objdump -T %t-def.o 2>&1 | tr '\t' '|' | FileCheck %s \
|
|
# RUN: -DFILE=%t-def.o --check-prefix=DEF --match-full-lines --strict-whitespace
|
|
|
|
# DEF:DYNAMIC SYMBOL TABLE:
|
|
# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 localversym
|
|
# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 globalversym
|
|
# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 v2 version2sym
|
|
# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 (v3hidden) version3sym
|
|
# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 (v4) version4sym
|
|
# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 (v5hidden) .hidden version5sym
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .gnu.version
|
|
Type: SHT_GNU_versym
|
|
Flags: [ SHF_ALLOC ]
|
|
## 0x8000 is a special VERSYM_HIDDEN bit.
|
|
Entries: [ 0, 0, 1, 2, 0x8003, 4, 0x8005 ]
|
|
ShSize: [[VERSYMSIZE=<none>]]
|
|
- Name: .gnu.version_d
|
|
Type: SHT_GNU_verdef
|
|
Flags: [ SHF_ALLOC ]
|
|
Link: .dynstr
|
|
AddressAlign: 0x4
|
|
Info: 0x2
|
|
ShOffset: [[VERDEFOFFSET=<none>]]
|
|
Entries:
|
|
- VersionNdx: 2
|
|
Names:
|
|
- v2
|
|
- VersionNdx: 3
|
|
Names:
|
|
- v3hidden
|
|
- Name: .gnu.version_r
|
|
Type: SHT_GNU_verneed
|
|
Flags: [ SHF_ALLOC ]
|
|
Link: .dynstr
|
|
Info: 0x2
|
|
Dependencies:
|
|
- Version: 1
|
|
File: file1.so
|
|
Entries:
|
|
- Name: v4
|
|
Hash: 0
|
|
Flags: 0
|
|
Other: 4
|
|
- Version: 1
|
|
File: file2.0
|
|
Entries:
|
|
- Name: v5hidden
|
|
Hash: 0
|
|
Flags: 0
|
|
Other: 5
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
EntSize: [[ENTSIZE=<none>]]
|
|
DynamicSymbols:
|
|
- Name: localversym
|
|
Index: [[INDEX=<none>]]
|
|
Binding: STB_GLOBAL
|
|
- Name: globalversym
|
|
Index: [[INDEX=<none>]]
|
|
Binding: STB_GLOBAL
|
|
- Name: version2sym
|
|
Index: [[INDEX=<none>]]
|
|
Binding: STB_GLOBAL
|
|
- Name: version3sym
|
|
Index: [[INDEX=<none>]]
|
|
Binding: STB_GLOBAL
|
|
- Name: version4sym
|
|
Index: [[INDEX=<none>]]
|
|
Binding: STB_GLOBAL
|
|
- Name: version5sym
|
|
Index: [[INDEX=<none>]]
|
|
Other: [ STV_HIDDEN ]
|
|
Binding: STB_GLOBAL
|
|
|
|
## Test the output with a long version name.
|
|
# RUN: yaml2obj --docnum=2 %s -o %t2
|
|
# RUN: llvm-objdump -T %t2 2>&1 | tr '\t' '|' | FileCheck %s \
|
|
# RUN: --check-prefix=LONGNAME --match-full-lines --strict-whitespace
|
|
|
|
# LONGNAME:DYNAMIC SYMBOL TABLE:
|
|
# LONGNAME-NEXT:0000000000000000 g D .gnu.version|0000000000000000 v2 sym1
|
|
# LONGNAME-NEXT:0000000000000000 g D .gnu.version|0000000000000000 v3withverylongname sym2
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .gnu.version
|
|
Type: SHT_GNU_versym
|
|
Flags: [ SHF_ALLOC ]
|
|
Entries: [ 1, 2, 3 ]
|
|
- Name: .gnu.version_d
|
|
Type: SHT_GNU_verdef
|
|
Flags: [ SHF_ALLOC ]
|
|
Link: .dynstr
|
|
AddressAlign: 0x4
|
|
Info: 0x2
|
|
Entries:
|
|
- VersionNdx: 2
|
|
Names:
|
|
- v2
|
|
- VersionNdx: 3
|
|
Names:
|
|
- v3withverylongname
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
DynamicSymbols:
|
|
- Name: sym1
|
|
Index: 1
|
|
Binding: STB_GLOBAL
|
|
- Name: sym2
|
|
Index: 1
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check we report a warning when we are unable to read a SHT_GNU_versym section entry.
|
|
## In this case, the section has a size that is not a multiple of its sh_entsize.
|
|
|
|
# RUN: yaml2obj -DVERSYMSIZE=0xff %s -o %t2-broken-versym.o
|
|
# RUN: llvm-objdump -T %t2-broken-versym.o 2>&1 | FileCheck %s --check-prefixes=VERSION-ERR1,NOVER
|
|
|
|
# VERSION-ERR1:warning: {{.*}}: unable to read an entry with index 1 from SHT_GNU_versym section
|
|
# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 localversym
|
|
# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 globalversym
|
|
# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 version2sym
|
|
# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 version3sym
|
|
# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 version4sym
|
|
# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 .hidden version5sym
|