156 lines · plain
1## Check we print symbol versions, when they are available.2 3## Test undefined symbols.4# RUN: yaml2obj %s -o %t-undef.o5# RUN: llvm-objdump -T %t-undef.o 2>&1 | tr '\t' '|' | FileCheck %s \6# RUN: -DFILE=%t-undef.o --check-prefix=UNDEF --match-full-lines --strict-whitespace7 8## version2sym and version3sym are invalid: undefined symbols cannot refer to .gnu.version_d.9## We still check their behaviors.10# UNDEF:DYNAMIC SYMBOL TABLE:11# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 localversym12# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 globalversym13# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v2) version2sym14# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v3hidden) version3sym15# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v4) version4sym16# UNDEF-NEXT:0000000000000000 D *UND*|0000000000000000 (v5hidden) .hidden version5sym17 18## Test defined symbols.19# RUN: yaml2obj -DINDEX=0x1 %s -o %t-def.o20# RUN: llvm-objdump -T %t-def.o 2>&1 | tr '\t' '|' | FileCheck %s \21# RUN: -DFILE=%t-def.o --check-prefix=DEF --match-full-lines --strict-whitespace22 23# DEF:DYNAMIC SYMBOL TABLE:24# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 localversym25# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 globalversym26# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 v2 version2sym27# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 (v3hidden) version3sym28# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 (v4) version4sym29# DEF-NEXT:0000000000000000 g D .gnu.version|0000000000000000 (v5hidden) .hidden version5sym30 31--- !ELF32FileHeader:33 Class: ELFCLASS6434 Data: ELFDATA2LSB35 Type: ET_DYN36Sections:37 - Name: .gnu.version38 Type: SHT_GNU_versym39 Flags: [ SHF_ALLOC ]40## 0x8000 is a special VERSYM_HIDDEN bit.41 Entries: [ 0, 0, 1, 2, 0x8003, 4, 0x8005 ]42 ShSize: [[VERSYMSIZE=<none>]]43 - Name: .gnu.version_d44 Type: SHT_GNU_verdef45 Flags: [ SHF_ALLOC ]46 Link: .dynstr47 AddressAlign: 0x448 Info: 0x249 ShOffset: [[VERDEFOFFSET=<none>]]50 Entries:51 - VersionNdx: 252 Names:53 - v254 - VersionNdx: 355 Names:56 - v3hidden57 - Name: .gnu.version_r58 Type: SHT_GNU_verneed59 Flags: [ SHF_ALLOC ]60 Link: .dynstr61 Info: 0x262 Dependencies:63 - Version: 164 File: file1.so65 Entries:66 - Name: v467 Hash: 068 Flags: 069 Other: 470 - Version: 171 File: file2.072 Entries:73 - Name: v5hidden74 Hash: 075 Flags: 076 Other: 577 - Name: .dynsym78 Type: SHT_DYNSYM79 EntSize: [[ENTSIZE=<none>]]80DynamicSymbols:81 - Name: localversym82 Index: [[INDEX=<none>]]83 Binding: STB_GLOBAL84 - Name: globalversym85 Index: [[INDEX=<none>]]86 Binding: STB_GLOBAL87 - Name: version2sym88 Index: [[INDEX=<none>]]89 Binding: STB_GLOBAL90 - Name: version3sym91 Index: [[INDEX=<none>]]92 Binding: STB_GLOBAL93 - Name: version4sym94 Index: [[INDEX=<none>]]95 Binding: STB_GLOBAL96 - Name: version5sym97 Index: [[INDEX=<none>]]98 Other: [ STV_HIDDEN ]99 Binding: STB_GLOBAL100 101## Test the output with a long version name.102# RUN: yaml2obj --docnum=2 %s -o %t2103# RUN: llvm-objdump -T %t2 2>&1 | tr '\t' '|' | FileCheck %s \104# RUN: --check-prefix=LONGNAME --match-full-lines --strict-whitespace105 106# LONGNAME:DYNAMIC SYMBOL TABLE:107# LONGNAME-NEXT:0000000000000000 g D .gnu.version|0000000000000000 v2 sym1108# LONGNAME-NEXT:0000000000000000 g D .gnu.version|0000000000000000 v3withverylongname sym2109 110--- !ELF111FileHeader:112 Class: ELFCLASS64113 Data: ELFDATA2LSB114 Type: ET_DYN115Sections:116 - Name: .gnu.version117 Type: SHT_GNU_versym118 Flags: [ SHF_ALLOC ]119 Entries: [ 1, 2, 3 ]120 - Name: .gnu.version_d121 Type: SHT_GNU_verdef122 Flags: [ SHF_ALLOC ]123 Link: .dynstr124 AddressAlign: 0x4125 Info: 0x2126 Entries:127 - VersionNdx: 2128 Names:129 - v2130 - VersionNdx: 3131 Names:132 - v3withverylongname133 - Name: .dynsym134 Type: SHT_DYNSYM135DynamicSymbols:136 - Name: sym1137 Index: 1138 Binding: STB_GLOBAL139 - Name: sym2140 Index: 1141 Binding: STB_GLOBAL142 143## Check we report a warning when we are unable to read a SHT_GNU_versym section entry.144## In this case, the section has a size that is not a multiple of its sh_entsize.145 146# RUN: yaml2obj -DVERSYMSIZE=0xff %s -o %t2-broken-versym.o147# RUN: llvm-objdump -T %t2-broken-versym.o 2>&1 | FileCheck %s --check-prefixes=VERSION-ERR1,NOVER148 149# VERSION-ERR1:warning: {{.*}}: unable to read an entry with index 1 from SHT_GNU_versym section150# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 localversym151# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 globalversym152# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 version2sym153# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 version3sym154# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 version4sym155# NOVER-NEXT:0000000000000000 D *UND* 0000000000000000 .hidden version5sym156