brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · e21b354 Raw
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