brintos

brintos / llvm-project-archived public Read only

0
0
Text · 35.2 KiB · eaf6128 Raw
839 lines · plain
1## In this test we test that dynamic symbols are dumped as expected.2 3## Case 1: Dynamic symbol table found via the DT_SYMTAB dynamic tag.4# RUN: yaml2obj --docnum=1 %s -o %t1.so5# RUN: llvm-readobj --dyn-symbols %t1.so 2>&1 \6# RUN:   | FileCheck %s --implicit-check-not="warning:" --check-prefix=DYNSYMS-LLVM7# RUN: llvm-readelf --dyn-symbols %t1.so 2>&1 \8# RUN:   | FileCheck %s --implicit-check-not="warning:" --check-prefix=DYNSYMS-GNU9 10# DYNSYMS-LLVM:      DynamicSymbols [11# DYNSYMS-LLVM-NEXT:   Symbol {12# DYNSYMS-LLVM-NEXT:     Name:  (0)13# DYNSYMS-LLVM-NEXT:     Value: 0x014# DYNSYMS-LLVM-NEXT:     Size: 015# DYNSYMS-LLVM-NEXT:     Binding: Local (0x0)16# DYNSYMS-LLVM-NEXT:     Type: None (0x0)17# DYNSYMS-LLVM-NEXT:     Other: 018# DYNSYMS-LLVM-NEXT:     Section: Undefined (0x0)19# DYNSYMS-LLVM-NEXT:   }20# DYNSYMS-LLVM-NEXT:   Symbol {21# DYNSYMS-LLVM-NEXT:     Name: foo (5)22# DYNSYMS-LLVM-NEXT:     Value: 0x023# DYNSYMS-LLVM-NEXT:     Size: 024# DYNSYMS-LLVM-NEXT:     Binding: Local (0x0)25# DYNSYMS-LLVM-NEXT:     Type: None (0x0)26# DYNSYMS-LLVM-NEXT:     Other: 027# DYNSYMS-LLVM-NEXT:     Section: Undefined (0x0)28# DYNSYMS-LLVM-NEXT:   }29# DYNSYMS-LLVM-NEXT:   Symbol {30# DYNSYMS-LLVM-NEXT:     Name: bar (1)31# DYNSYMS-LLVM-NEXT:     Value: 0x032# DYNSYMS-LLVM-NEXT:     Size: 033# DYNSYMS-LLVM-NEXT:     Binding: Local (0x0)34# DYNSYMS-LLVM-NEXT:     Type: None (0x0)35# DYNSYMS-LLVM-NEXT:     Other: 036# DYNSYMS-LLVM-NEXT:     Section: Undefined (0x0)37# DYNSYMS-LLVM-NEXT:   }38# DYNSYMS-LLVM-NEXT: ]39 40# DYNSYMS-GNU:      Symbol table '.dynsym' contains 3 entries:41# DYNSYMS-GNU-NEXT:  Num:    Value          Size Type    Bind   Vis       Ndx Name42# DYNSYMS-GNU-NEXT:    0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND43# DYNSYMS-GNU-NEXT:    1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND foo44# DYNSYMS-GNU-NEXT:    2: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND bar45 46--- !ELF47FileHeader:48  Class: ELFCLASS6449  Data:  ELFDATA2LSB50  Type:  ET_DYN51Sections:52  - Name:    .dynamic53    Type:    SHT_DYNAMIC54    Entries:55      - Tag:   DT_SYMTAB56        Value: 0x10057      - Tag:   DT_NULL58        Value: 059  - Name:    .dynsym60    Type:    SHT_DYNSYM61    Address: 0x10062DynamicSymbols:63  - Name: foo64  - Name: bar65ProgramHeaders:66  - Type:     PT_LOAD67    VAddr:    0x10068    FirstSec: .dynsym69    LastSec:  .dynsym70 71## Case 2: Check the output for aliases.72## a) Check the two-letter alias --dt is equivalent to the --dyn-symbols73## full flag name.74# RUN: llvm-readobj --dt %t1.so > %t.readobj-dt-alias75# RUN: llvm-readobj --dyn-symbols %t1.so > %t.readobj-dt-no-alias76# RUN: cmp %t.readobj-dt-alias %t.readobj-dt-no-alias77## b) Check --dyn-syms equals --dyn-symbols, --dt for llvm-readobj.78# RUN: llvm-readobj --dyn-syms %t1.so > %t.readobj-dyn-syms79# RUN: cmp %t.readobj-dt-alias %t.readobj-dyn-syms80## c) Check --dyn-syms equals --dyn-symbols for llvm-readelf.81# RUN: llvm-readelf --dyn-syms %t1.so > %t.readelf-dyn-syms82# RUN: llvm-readelf --dyn-symbols %t1.so > %t.readelf-dyn-symbols83# RUN: cmp %t.readelf-dyn-symbols %t.readelf-dyn-syms84 85## Case 3.1: Check that we are able to dump the dynamic symbol table even when we have no program headers.86## In this case we find the table by it's type (SHT_DYNSYM) and ignore the DT_SYMTAB value.87# RUN: yaml2obj --docnum=2 %s -o %t2.so88# RUN: llvm-readobj %t2.so --dyn-symbols 2>&1 | \89# RUN:   FileCheck %s -DFILE=%t2.so --implicit-check-not=warning: --check-prefix=NOPHDRS-LLVM90# RUN: llvm-readelf %t2.so --dyn-symbols 2>&1 | \91# RUN:   FileCheck %s -DFILE=%t2.so --implicit-check-not=warning: -DNAME=.dynsym --check-prefix=NOPHDRS-GNU92 93# NOPHDRS-LLVM: warning: '[[FILE]]': unable to parse DT_SYMTAB: virtual address is not in any segment: 0xffff123494# NOPHDRS-LLVM:      DynamicSymbols [95# NOPHDRS-LLVM-NEXT:   Symbol {96# NOPHDRS-LLVM-NEXT:     Name:  (0)97# NOPHDRS-LLVM-NEXT:     Value: 0x098# NOPHDRS-LLVM-NEXT:     Size: 099# NOPHDRS-LLVM-NEXT:     Binding: Local (0x0)100# NOPHDRS-LLVM-NEXT:     Type: None (0x0)101# NOPHDRS-LLVM-NEXT:     Other: 0102# NOPHDRS-LLVM-NEXT:     Section: Undefined (0x0)103# NOPHDRS-LLVM-NEXT:   }104# NOPHDRS-LLVM-NEXT:   Symbol {105# NOPHDRS-LLVM-NEXT:     Name: foo (1)106# NOPHDRS-LLVM-NEXT:     Value: 0x0107# NOPHDRS-LLVM-NEXT:     Size: 0108# NOPHDRS-LLVM-NEXT:     Binding: Local (0x0)109# NOPHDRS-LLVM-NEXT:     Type: None (0x0)110# NOPHDRS-LLVM-NEXT:     Other: 0111# NOPHDRS-LLVM-NEXT:     Section: Undefined (0x0)112# NOPHDRS-LLVM-NEXT:   }113# NOPHDRS-LLVM-NEXT: ]114 115# NOPHDRS-GNU:      warning: '[[FILE]]': unable to parse DT_SYMTAB: virtual address is not in any segment: 0xffff1234116# NOPHDRS-NAMEWARN: warning: '[[FILE]]': unable to get the name of SHT_DYNSYM section with index 2: a section [index 2] has an invalid sh_name (0xffffffff) offset which goes past the end of the section name string table117# NOPHDRS-GNU:      Symbol table '[[NAME]]' contains 2 entries:118# NOPHDRS-GNU-NEXT:  Num:    Value          Size Type    Bind   Vis       Ndx Name119# NOPHDRS-GNU-NEXT:    0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND120# NOPHDRS-GNU-NEXT:    1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND foo121 122--- !ELF123FileHeader:124  Class: ELFCLASS64125  Data:  ELFDATA2LSB126  Type:  ET_DYN127Sections:128  - Name:    .dynamic129    Type:    SHT_DYNAMIC130    Entries:131      - Tag:   DT_SYMTAB132        Value: 0xffff1234133      - Tag:   DT_NULL134        Value: 0135  - Name:   .dynsym136    Type:   SHT_DYNSYM137    ShName: [[DYNSYMNAME=<none>]]138DynamicSymbols:139  - Name: foo140 141## Case 3.2: the same as 3.1, but the sh_name field of the SHT_DYNSYM section is invalid.142##           Check we are still able to dump symbols.143# RUN: yaml2obj --docnum=2 -DDYNSYMNAME=0xffffffff %s -o %t2.broken.name144# RUN: llvm-readobj %t2.broken.name --dyn-symbols 2>&1 | \145# RUN:   FileCheck %s -DFILE=%t2.broken.name --check-prefix=NOPHDRS-LLVM --implicit-check-not=warning:146# RUN: llvm-readelf %t2.broken.name --dyn-symbols 2>&1 | \147# RUN:   FileCheck %s -DFILE=%t2.broken.name -DNAME="<?>" \148# RUN:     --check-prefixes=NOPHDRS-GNU,NOPHDRS-NAMEWARN --implicit-check-not=warning:149 150## Case 4: Check we report a warning when there is no SHT_DYNSYM section and we can't map the DT_SYMTAB value151## to an address because of the absence of a corresponding PT_LOAD program header.152# RUN: yaml2obj --docnum=3 %s -o %t3.so153# RUN: llvm-readobj %t3.so --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t3.so --check-prefixes=NOSHT-DYNSYM,NOSHT-DYNSYM-LLVM154# RUN: llvm-readelf %t3.so --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t3.so --check-prefix=NOSHT-DYNSYM155 156# NOSHT-DYNSYM:           warning: '[[FILE]]': unable to parse DT_SYMTAB: virtual address is not in any segment: 0x0157# NOSHT-DYNSYM-LLVM:      DynamicSymbols [158# NOSHT-DYNSYM-LLVM-NEXT: ]159 160--- !ELF161FileHeader:162  Class: ELFCLASS64163  Data:  ELFDATA2LSB164  Type:  ET_DYN165Sections:166  - Name:    .dynsym167    Type:    SHT_PROGBITS168  - Name:    .dynamic169    Type:    SHT_DYNAMIC170    Entries:171      - Tag:   DT_SYMTAB172        Value: 0173      - Tag:   DT_NULL174        Value: 0175DynamicSymbols:176  - Name: foo177 178## Case 5: Check that when we can't map the value of the DT_SYMTAB tag to an address, we report a warning and179## use the information in the section header table to locate the dynamic symbol table.180# RUN: yaml2obj --docnum=4 %s -o %t4.so181# RUN: llvm-readobj %t4.so --dyn-symbols 2>&1 | FileCheck -DFILE=%t4.so %s --check-prefixes=BROKEN-DTSYMTAB,BROKEN-DTSYMTAB-LLVM182# RUN: llvm-readelf %t4.so --dyn-symbols 2>&1 | FileCheck -DFILE=%t4.so %s --check-prefixes=BROKEN-DTSYMTAB,BROKEN-DTSYMTAB-GNU183 184# BROKEN-DTSYMTAB:      warning: '[[FILE]]': unable to parse DT_SYMTAB: virtual address is not in any segment: 0xffff1234185# BROKEN-DTSYMTAB-LLVM: Name: foo186# BROKEN-DTSYMTAB-GNU:  1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND foo187 188--- !ELF189FileHeader:190  Class: ELFCLASS64191  Data:  ELFDATA2LSB192  Type:  ET_DYN193Sections:194  - Name:    .dynamic195    Type:    SHT_DYNAMIC196    Entries:197      - Tag:   DT_SYMTAB198        Value: 0xffff1234199      - Tag:   DT_NULL200        Value: 0201DynamicSymbols:202  - Name: foo203ProgramHeaders:204  - Type:     PT_LOAD205    VAddr:    0x0000206    FirstSec: .dynsym207    LastSec:  .dynsym208 209## Case 6: Check that if we can get the location of the dynamic symbol table using both the DT_SYMTAB value210## and the section headers table then we prefer the former and report a warning.211# RUN: yaml2obj --docnum=5 %s -o %t5.so212# RUN: llvm-readobj %t5.so --dyn-symbols 2>&1 | FileCheck -DFILE=%t5.so %s --check-prefixes=PREFER-DTSYMTAB,PREFER-DTSYMTAB-LLVM213# RUN: llvm-readelf %t5.so --dyn-symbols 2>&1 | FileCheck -DFILE=%t5.so %s --check-prefixes=PREFER-DTSYMTAB,PREFER-DTSYMTAB-GNU214 215# PREFER-DTSYMTAB:      warning: '[[FILE]]': SHT_DYNSYM section header and DT_SYMTAB disagree about the location of the dynamic symbol table216# PREFER-DTSYMTAB-LLVM: Name: o217# PREFER-DTSYMTAB-GNU:  1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND o218 219--- !ELF220FileHeader:221  Class: ELFCLASS64222  Data:  ELFDATA2LSB223  Type:  ET_DYN224Sections:225  - Name:    .dynamic226    Type:    SHT_DYNAMIC227    Entries:228      - Tag:   DT_SYMTAB229        Value: 0x0230      - Tag:   DT_NULL231        Value: 0232  - Name: .dynsym233    Type: SHT_DYNSYM234  - Name: .mydynsym235    Type: SHT_DYNSYM236## The Content describes 2 symbols: zero symbol and symbol with st_name == 3.237    Content: "000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000"238DynamicSymbols:239  - Name: foo240ProgramHeaders:241  - Type:     PT_LOAD242    VAddr:    0x0000243    FirstSec: .mydynsym244    LastSec:  .mydynsym245 246## Case 7: Check how we dump versioned symbols. Use both -V and --dyn-symbols247## to check that printed version is consistent.248## A default version is one that is contained in the version table (SHT_GNU_versym)249## and only available for defined symbols. We use the "@@" prefix to print it.250 251## Check how we dump undefined symbols.252 253# RUN: yaml2obj %s --docnum=6 -o %t6254# RUN: llvm-readobj -V --dyn-symbols %t6 | FileCheck %s --check-prefix=VERSIONED-UND-LLVM255# RUN: llvm-readelf -V --dyn-symbols %t6 | FileCheck %s --check-prefix=VERSIONED-UND-GNU256 257# VERSIONED-UND-LLVM:       DynamicSymbols [258# VERSIONED-UND-LLVM-NEXT:   Symbol {259# VERSIONED-UND-LLVM-NEXT:     Name:  (0)260# VERSIONED-UND-LLVM-NEXT:     Value: 0x0261# VERSIONED-UND-LLVM-NEXT:     Size: 0262# VERSIONED-UND-LLVM-NEXT:     Binding: Local (0x0)263# VERSIONED-UND-LLVM-NEXT:     Type: None (0x0)264# VERSIONED-UND-LLVM-NEXT:     Other: 0265# VERSIONED-UND-LLVM-NEXT:     Section: Undefined (0x0)266# VERSIONED-UND-LLVM-NEXT:   }267# VERSIONED-UND-LLVM-NEXT:   Symbol {268# VERSIONED-UND-LLVM-NEXT:     Name: localversym (28)269# VERSIONED-UND-LLVM-NEXT:     Value: 0x0270# VERSIONED-UND-LLVM-NEXT:     Size: 0271# VERSIONED-UND-LLVM-NEXT:     Binding: Local (0x0)272# VERSIONED-UND-LLVM-NEXT:     Type: None (0x0)273# VERSIONED-UND-LLVM-NEXT:     Other: 0274# VERSIONED-UND-LLVM-NEXT:     Section: Undefined (0x0)275# VERSIONED-UND-LLVM-NEXT:   }276# VERSIONED-UND-LLVM-NEXT:   Symbol {277# VERSIONED-UND-LLVM-NEXT:     Name: globalversym (40)278# VERSIONED-UND-LLVM-NEXT:     Value: 0x0279# VERSIONED-UND-LLVM-NEXT:     Size: 0280# VERSIONED-UND-LLVM-NEXT:     Binding: Local (0x0)281# VERSIONED-UND-LLVM-NEXT:     Type: None (0x0)282# VERSIONED-UND-LLVM-NEXT:     Other: 0283# VERSIONED-UND-LLVM-NEXT:     Section: Undefined (0x0)284# VERSIONED-UND-LLVM-NEXT:   }285# VERSIONED-UND-LLVM-NEXT:   Symbol {286# VERSIONED-UND-LLVM-NEXT:     Name: aaa@v2 (65)287# VERSIONED-UND-LLVM-NEXT:     Value: 0x0288# VERSIONED-UND-LLVM-NEXT:     Size: 0289# VERSIONED-UND-LLVM-NEXT:     Binding: Local (0x0)290# VERSIONED-UND-LLVM-NEXT:     Type: None (0x0)291# VERSIONED-UND-LLVM-NEXT:     Other: 0292# VERSIONED-UND-LLVM-NEXT:     Section: Undefined (0x0)293# VERSIONED-UND-LLVM-NEXT:   }294# VERSIONED-UND-LLVM-NEXT:   Symbol {295# VERSIONED-UND-LLVM-NEXT:     Name: bbb@v3hidden (61)296# VERSIONED-UND-LLVM-NEXT:     Value: 0x0297# VERSIONED-UND-LLVM-NEXT:     Size: 0298# VERSIONED-UND-LLVM-NEXT:     Binding: Local (0x0)299# VERSIONED-UND-LLVM-NEXT:     Type: None (0x0)300# VERSIONED-UND-LLVM-NEXT:     Other: 0301# VERSIONED-UND-LLVM-NEXT:     Section: Undefined (0x0)302# VERSIONED-UND-LLVM-NEXT:   }303# VERSIONED-UND-LLVM-NEXT:   Symbol {304# VERSIONED-UND-LLVM-NEXT:     Name: ccc@v4 (57)305# VERSIONED-UND-LLVM-NEXT:     Value: 0x0306# VERSIONED-UND-LLVM-NEXT:     Size: 0307# VERSIONED-UND-LLVM-NEXT:     Binding: Local (0x0)308# VERSIONED-UND-LLVM-NEXT:     Type: None (0x0)309# VERSIONED-UND-LLVM-NEXT:     Other: 0310# VERSIONED-UND-LLVM-NEXT:     Section: Undefined (0x0)311# VERSIONED-UND-LLVM-NEXT:   }312# VERSIONED-UND-LLVM-NEXT:   Symbol {313# VERSIONED-UND-LLVM-NEXT:     Name: ddd@v5hidden (53)314# VERSIONED-UND-LLVM-NEXT:     Value: 0x0315# VERSIONED-UND-LLVM-NEXT:     Size: 0316# VERSIONED-UND-LLVM-NEXT:     Binding: Local (0x0)317# VERSIONED-UND-LLVM-NEXT:     Type: None (0x0)318# VERSIONED-UND-LLVM-NEXT:     Other: 0319# VERSIONED-UND-LLVM-NEXT:     Section: Undefined (0x0)320# VERSIONED-UND-LLVM-NEXT:   }321# VERSIONED-UND-LLVM-NEXT: ]322# VERSIONED-UND-LLVM:      VersionSymbols [323# VERSIONED-UND-LLVM:          Name: localversym324# VERSIONED-UND-LLVM:          Name: globalversym325# VERSIONED-UND-LLVM:          Name: aaa@v2326# VERSIONED-UND-LLVM:          Name: bbb@v3hidden327# VERSIONED-UND-LLVM:          Name: ccc@v4328# VERSIONED-UND-LLVM:          Name: ddd@v5hidden329 330# VERSIONED-UND-GNU:      Num:    Value          Size Type    Bind   Vis     Ndx Name331# VERSIONED-UND-GNU:        1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT UND localversym332# VERSIONED-UND-GNU-NEXT:   2: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT UND globalversym333# VERSIONED-UND-GNU-NEXT:   3: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT UND aaa@v2334# VERSIONED-UND-GNU-NEXT:   4: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT UND bbb@v3hidden335# VERSIONED-UND-GNU-NEXT:   5: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT UND ccc@v4336# VERSIONED-UND-GNU-NEXT:   6: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT UND ddd@v5hidden337# VERSIONED-UND-GNU:      000:   0 (*local*)  0 (*local*) 1 (*global*) 2 (v2)338# VERSIONED-UND-GNU:      004:   3h(v3hidden) 4 (v4)      5h(v5hidden)339 340--- !ELF341FileHeader:342  Class: ELFCLASS64343  Data:  ELFDATA2LSB344  Type:  ET_DYN345Sections:346  - Name:         .gnu.version347    Type:         SHT_GNU_versym348    Flags:        [ SHF_ALLOC ]349    Link:         .dynsym350    AddressAlign: 0x2351    EntSize:      0x2352## 0x8000 is a special VERSYM_HIDDEN bit.353## Here we have: VER_NDX_LOCAL (0), VER_NDX_GLOBAL (1), two versions354## from the SHT_GNU_verdef section (2, 0x8003) and two versions355## from the SHT_GNU_verneed section (4, 0x8005).356    Entries:      [ 0, 0, 1, 2, 0x8003, 4, 0x8005 ]357  - Name:         .gnu.version_d358    Type:         SHT_GNU_verdef359    Flags:        [ SHF_ALLOC ]360    AddressAlign: 0x4361    Entries:362      - VersionNdx: 2363        Names:364          - v2365      - VersionNdx: 3366        Names:367          - v3hidden368  - Name:  .gnu.version_r369    Type:  SHT_GNU_verneed370    Flags: [ SHF_ALLOC ]371    Dependencies:372      - Version: 1373        File:    file1.so374        Entries:375          - Name:  v4376            Other: 4377            Hash:  0378            Flags: 0379      - Version: 1380        File:    file2.0381        Entries:382          - Name:  v5hidden383            Other: 5384            Hash:  0385            Flags: 0386DynamicSymbols:387  - Name:  localversym388    Index: [[INDEX=<none>]]389  - Name:  globalversym390    Index: [[INDEX=<none>]]391  - Name:  aaa392    Index: [[INDEX=<none>]]393  - Name:  [[NAME=bbb]]394    Type:  [[TYPE=STT_NOTYPE]]395    Index: [[INDEX_BBB=<none>]]396  - Name:  [[NAME=ccc]]397    Type:  [[TYPE=STT_NOTYPE]]398    Index: [[INDEX=<none>]]399  - Name:  ddd400    Index: [[INDEX=<none>]]401 402## In this case all dynamic symbols are defined. Check that we print the403## "@@" prefix for default versions as expected.404 405# RUN: yaml2obj %s --docnum=6 -DINDEX=1 -DINDEX_BBB=1 -o %t6.def406# RUN: llvm-readobj -V --dyn-symbols %t6.def | FileCheck %s --check-prefix=VERSIONED-DEF-LLVM407# RUN: llvm-readelf -V --dyn-symbols %t6.def | FileCheck %s --check-prefix=VERSIONED-DEF-GNU408 409# VERSIONED-DEF-LLVM:      DynamicSymbols [410# VERSIONED-DEF-LLVM:        Symbol {411# VERSIONED-DEF-LLVM:          Name:    localversym (28)412# VERSIONED-DEF-LLVM:          Section: .gnu.version (0x1)413# VERSIONED-DEF-LLVM-NEXT:   }414# VERSIONED-DEF-LLVM-NEXT:   Symbol {415# VERSIONED-DEF-LLVM-NEXT:     Name:    globalversym (40)416# VERSIONED-DEF-LLVM:          Section: .gnu.version (0x1)417# VERSIONED-DEF-LLVM-NEXT:   }418# VERSIONED-DEF-LLVM-NEXT:   Symbol {419# VERSIONED-DEF-LLVM-NEXT:     Name:    aaa@@v2 (65)420# VERSIONED-DEF-LLVM:          Section: .gnu.version (0x1)421# VERSIONED-DEF-LLVM-NEXT:   }422# VERSIONED-DEF-LLVM-NEXT:   Symbol {423# VERSIONED-DEF-LLVM-NEXT:     Name:    bbb@v3hidden (61)424# VERSIONED-DEF-LLVM:          Section: .gnu.version (0x1)425# VERSIONED-DEF-LLVM-NEXT:   }426# VERSIONED-DEF-LLVM-NEXT:   Symbol {427# VERSIONED-DEF-LLVM-NEXT:     Name:    ccc@v4 (57)428# VERSIONED-DEF-LLVM:          Section: .gnu.version (0x1)429# VERSIONED-DEF-LLVM-NEXT:   }430# VERSIONED-DEF-LLVM-NEXT:   Symbol {431# VERSIONED-DEF-LLVM-NEXT:     Name:    ddd@v5hidden (53)432# VERSIONED-DEF-LLVM:          Section: .gnu.version (0x1)433# VERSIONED-DEF-LLVM-NEXT:   }434# VERSIONED-DEF-LLVM:      VersionSymbols [435# VERSIONED-DEF-LLVM:          Name: localversym436# VERSIONED-DEF-LLVM:          Name: globalversym437# VERSIONED-DEF-LLVM:          Name: aaa@@v2438# VERSIONED-DEF-LLVM:          Name: bbb@v3hidden439# VERSIONED-DEF-LLVM:          Name: ccc@v4440# VERSIONED-DEF-LLVM:          Name: ddd@v5hidden441 442# VERSIONED-DEF-GNU:      Num: {{.*}} Vis     Ndx Name443# VERSIONED-DEF-GNU:        1: {{.*}} DEFAULT   1 localversym444# VERSIONED-DEF-GNU-NEXT:   2: {{.*}} DEFAULT   1 globalversym445# VERSIONED-DEF-GNU-NEXT:   3: {{.*}} DEFAULT   1 aaa@@v2446# VERSIONED-DEF-GNU-NEXT:   4: {{.*}} DEFAULT   1 bbb@v3hidden447# VERSIONED-DEF-GNU-NEXT:   5: {{.*}} DEFAULT   1 ccc@v4448# VERSIONED-DEF-GNU-NEXT:   6: {{.*}} DEFAULT   1 ddd@v5hidden449 450## Check the behavior for unnamed versioned section symbols.451# RUN: yaml2obj %s -DTYPE=STT_SECTION -DNAME="''" -DINDEX_BBB=SHN_ABS --docnum=6 -o %t6.sec.sym452# RUN: llvm-readobj -V --dyn-symbols %t6.sec.sym 2>&1 | \453# RUN:   FileCheck %s -DFILE=%t6.sec.sym --check-prefix=VERSIONED-SEC-SYM-LLVM454# RUN: llvm-readelf -V --dyn-symbols %t6.sec.sym 2>&1 | \455# RUN:   FileCheck %s -DFILE=%t6.sec.sym --check-prefix=VERSIONED-SEC-SYM-GNU456 457# VERSIONED-SEC-SYM-LLVM: DynamicSymbols [458# VERSIONED-SEC-SYM-LLVM:  Name: localversym (28)459# VERSIONED-SEC-SYM-LLVM:  Name: globalversym (40)460# VERSIONED-SEC-SYM-LLVM:  Name: aaa@v2 (57)461# VERSIONED-SEC-SYM-LLVM: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0xfff1 (SHN_ABS)462# VERSIONED-SEC-SYM-LLVM:  Name: <?> (0)463# VERSIONED-SEC-SYM-LLVM: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0x0 (SHN_UNDEF)464# VERSIONED-SEC-SYM-LLVM:  Name: <?> (0)465# VERSIONED-SEC-SYM-LLVM:  Name: ddd@v5hidden (53)466# VERSIONED-SEC-SYM-LLVM: VersionSymbols [467# VERSIONED-SEC-SYM-LLVM:  Name: localversym468# VERSIONED-SEC-SYM-LLVM:  Name: globalversym469# VERSIONED-SEC-SYM-LLVM:  Name: aaa@v2470# VERSIONED-SEC-SYM-LLVM:  Name: <?>471# VERSIONED-SEC-SYM-LLVM:  Name: <?>472# VERSIONED-SEC-SYM-LLVM:  Name: ddd@v5hidden473 474# VERSIONED-SEC-SYM-GNU:     Symbol table '.dynsym' contains 7 entries:475# VERSIONED-SEC-SYM-GNU:        Num: {{.*}} Ndx Name476# VERSIONED-SEC-SYM-GNU:          1: {{.*}} UND localversym477# VERSIONED-SEC-SYM-GNU-NEXT:     2: {{.*}} UND globalversym478# VERSIONED-SEC-SYM-GNU-NEXT:     3: {{.*}} UND aaa@v2479# VERSIONED-SEC-SYM-GNU-NEXT: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0xfff1 (SHN_ABS)480# VERSIONED-SEC-SYM-GNU-NEXT:     4: {{.*}} ABS <?>481# VERSIONED-SEC-SYM-GNU-NEXT: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0x0 (SHN_UNDEF)482# VERSIONED-SEC-SYM-GNU-NEXT:     5: {{.*}} UND <?>483# VERSIONED-SEC-SYM-GNU-NEXT:     6: {{.*}} UND ddd@v5hidden484 485## Check we print a proper warning when an unnamed versioned section symbol has st_shndx = SHN_XINDEX, but there486## is no SHT_SYMTAB_SHNDX section in the object.487# RUN: yaml2obj %s -DTYPE=STT_SECTION -DNAME="''" -DINDEX_BBB=SHN_XINDEX --docnum=6 -o %t6.sec.xindex.sym488# RUN: llvm-readobj -V --dyn-symbols %t6.sec.xindex.sym 2>&1 | \489# RUN:   FileCheck %s -DFILE=%t6.sec.xindex.sym --check-prefix=VERSIONED-SEC-SYM-XINDEX-LLVM490# RUN: llvm-readelf -V --dyn-symbols %t6.sec.xindex.sym 2>&1 | \491# RUN:   FileCheck %s -DFILE=%t6.sec.xindex.sym --check-prefix=VERSIONED-SEC-SYM-XINDEX-GNU492 493# VERSIONED-SEC-SYM-XINDEX-LLVM:       Name: aaa@v2 (57)494# VERSIONED-SEC-SYM-XINDEX-LLVM:      warning: '[[FILE]]': found an extended symbol index (4), but unable to locate the extended symbol index table495# VERSIONED-SEC-SYM-XINDEX-LLVM-NEXT: Symbol {496# VERSIONED-SEC-SYM-XINDEX-LLVM-NEXT:  Name: <?> (0)497 498# VERSIONED-SEC-SYM-XINDEX-GNU:      3: {{.*}} UND aaa@v2499# VERSIONED-SEC-SYM-XINDEX-GNU-NEXT: warning: '[[FILE]]': found an extended symbol index (4), but unable to locate the extended symbol index table500# VERSIONED-SEC-SYM-XINDEX-GNU-NEXT: 4: {{.*}} RSV[0xffff] <?>501 502## Case 8: Check what we print when:503## a) The dynamic symbol table does not exist.504# RUN: yaml2obj %s --docnum=7 -o %t7505# RUN: llvm-readobj --dyn-symbols %t7 | FileCheck %s --check-prefix=NO-DYNSYM-LLVM506# RUN: llvm-readelf --dyn-symbols %t7 | count 0507## b) The dynamic symbol table has a size of 0.508# RUN: yaml2obj %s --docnum=8 -o %t8509# RUN: llvm-readobj --dyn-symbols %t8 | FileCheck %s --check-prefix=NO-DYNSYM-LLVM510# RUN: llvm-readelf --dyn-symbols %t8 | count 0511## c) The dynamic symbol table only contains the null symbol.512# RUN: yaml2obj %s --docnum=9 -o %t9513# RUN: llvm-readobj --dyn-symbols %t9 | FileCheck %s --check-prefix=DYNSYM-EMPTY-LLVM514# RUN: llvm-readelf --dyn-symbols %t9 | FileCheck %s --check-prefix=DYNSYM-EMPTY-GNU515 516# NO-DYNSYM-LLVM:      DynamicSymbols [517# NO-DYNSYM-LLVM-NEXT: ]518 519# DYNSYM-EMPTY-LLVM:      DynamicSymbols [520# DYNSYM-EMPTY-LLVM-NEXT:  Symbol {521# DYNSYM-EMPTY-LLVM-NEXT:  Name: (0)522# DYNSYM-EMPTY-LLVM-NEXT:  Value: 0x0523# DYNSYM-EMPTY-LLVM-NEXT:  Size: 0524# DYNSYM-EMPTY-LLVM-NEXT:  Binding: Local (0x0)525# DYNSYM-EMPTY-LLVM-NEXT:  Type: None (0x0)526# DYNSYM-EMPTY-LLVM-NEXT:  Other: 0527# DYNSYM-EMPTY-LLVM-NEXT:  Section: Undefined (0x0)528# DYNSYM-EMPTY-LLVM-NEXT:  }529# DYNSYM-EMPTY-LLVM-NEXT: ]530 531# DYNSYM-EMPTY-GNU:      Symbol table '.dynsym' contains 1 entries:532# DYNSYM-EMPTY-GNU-NEXT:   Num:    Value  Size Type    Bind   Vis       Ndx Name533# DYNSYM-EMPTY-GNU-NEXT:     0: 00000000     0 NOTYPE  LOCAL  DEFAULT   UND534 535--- !ELF536FileHeader:537  Class: ELFCLASS32538  Data:  ELFDATA2LSB539  Type:  ET_DYN540 541--- !ELF542FileHeader:543  Class: ELFCLASS32544  Data:  ELFDATA2LSB545  Type:  ET_DYN546Sections:547  - Name: .dynsym548    Type: SHT_DYNSYM549    Size: 0550 551--- !ELF552FileHeader:553  Class: ELFCLASS32554  Data:  ELFDATA2LSB555  Type:  ET_DYN556DynamicSymbols: []557 558## Case 9: Check what we print when:559## a) The size of the dynamic symbol table is not a multiple of its entry size.560# RUN: yaml2obj %s --docnum=10 -o %t10561# RUN: llvm-readobj --dyn-symbols %t10 2>&1 | FileCheck %s -DFILE=%t10 --check-prefix=DYNSYM-SIZE-INVALID1562# RUN: llvm-readelf --dyn-symbols %t10 2>&1 | FileCheck %s -DFILE=%t10 --check-prefix=DYNSYM-SIZE-INVALID1563 564# DYNSYM-SIZE-INVALID1: warning: '[[FILE]]': SHT_DYNSYM section with index 1 has invalid size (0x1) or entry size (0x10)565 566## b) The same, but the DT_SYMTAB tag is present. In this case the dynamic tag has priority over the567##    information about a location and an entity size of the dynamic symbol table from the section header.568##    The code uses sizeof(Elf_Sym) for an entity size, so it can't be incorrect and569##    the message printed is a bit shorter.570# RUN: yaml2obj %s --docnum=11 -o %t11571# RUN: llvm-readobj --dyn-symbols %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=DYNSYM-SIZE-INVALID2572# RUN: llvm-readelf --dyn-symbols %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=DYNSYM-SIZE-INVALID2573 574# DYNSYM-SIZE-INVALID2: warning: '[[FILE]]': SHT_DYNSYM section with index 2 has invalid size (0x1){{$}}575 576## c) In the case when the DT_SYMENT tag is present, we report when it's value does not match the577#     value of the symbol size for the platform.578# RUN: yaml2obj %s -D BITS=32 --docnum=12 -o %t12579# RUN: llvm-readobj --dyn-symbols %t12 2>&1 | \580# RUN:   FileCheck %s -DFILE=%t12 --implicit-check-not=warning: --check-prefix=DYNSYM-SIZE-INVALID3581# RUN: llvm-readelf --dyn-symbols %t12 2>&1 | \582# RUN:   FileCheck %s -DFILE=%t12 --implicit-check-not=warning: --check-prefix=DYNSYM-SIZE-INVALID3583# RUN: yaml2obj %s -D BITS=64 --docnum=12 -o %t13584# RUN: llvm-readobj --dyn-symbols %t13 2>&1 | \585# RUN:   FileCheck %s -DFILE=%t13 --implicit-check-not=warning: --check-prefix=DYNSYM-SIZE-INVALID4586# RUN: llvm-readelf --dyn-symbols %t13 2>&1 | \587# RUN:   FileCheck %s -DFILE=%t13 --implicit-check-not=warning: --check-prefix=DYNSYM-SIZE-INVALID4588 589# DYNSYM-SIZE-INVALID3: warning: '[[FILE]]': DT_SYMENT value of 0x123 is not the size of a symbol (0x10){{$}}590# DYNSYM-SIZE-INVALID4: warning: '[[FILE]]': DT_SYMENT value of 0x123 is not the size of a symbol (0x18){{$}}591 592--- !ELF593FileHeader:594  Class: ELFCLASS32595  Data:  ELFDATA2LSB596  Type:  ET_DYN597Sections:598  - Name: .dynsym599    Type: SHT_DYNSYM600    Size: 0x1601 602--- !ELF603FileHeader:604  Class: ELFCLASS64605  Data:  ELFDATA2LSB606  Type:  ET_DYN607Sections:608  - Name:    .dynamic609    Type:    SHT_DYNAMIC610    Entries:611      - Tag:   DT_SYMTAB612        Value: 0x100613      - Tag:   DT_NULL614        Value: 0615  - Name:    .dynsym616    Type:    SHT_DYNSYM617    Address: 0x100618    Size:    0x1619ProgramHeaders:620  - Type:     PT_LOAD621    VAddr:    0x100622    FirstSec: .dynsym623    LastSec:  .dynsym624 625--- !ELF626FileHeader:627  Class: ELFCLASS[[BITS]]628  Data:  ELFDATA2LSB629  Type:  ET_DYN630Sections:631  - Name:    .dynamic632    Type:    SHT_DYNAMIC633    Entries:634      - Tag:   DT_SYMENT635        Value: 0x123636      - Tag:   DT_SYMENT637        Value: 0x123638      - Tag:   DT_NULL639        Value: 0640 641## Case 10: Check we report a warning when the DT_STRSZ value is broken so that the dynamic string642##          table goes past the end of the file. Document we stop dumping symbols and report an error.643 644# RUN: yaml2obj %s --docnum=13 -o %t14645# RUN: llvm-readobj --dyn-symbols %t14 2>&1 | \646# RUN:   FileCheck %s -DFILE=%t14 --check-prefix=DYNSTR-INVALID-LLVM647# RUN: llvm-readelf --dyn-symbols %t14 2>&1 | \648# RUN:   FileCheck %s -DFILE=%t14 --check-prefix=DYNSTR-INVALID-GNU649 650# DYNSTR-INVALID-LLVM: warning: '[[FILE]]': the dynamic string table at 0x78 goes past the end of the file (0x2a8) with DT_STRSZ = 0xffffffff651# DYNSTR-INVALID-LLVM:      DynamicSymbols [652# DYNSTR-INVALID-LLVM-NEXT:   Symbol {653# DYNSTR-INVALID-LLVM-NEXT:     Name:  (0)654# DYNSTR-INVALID-LLVM-NEXT:     Value: 0x0655# DYNSTR-INVALID-LLVM-NEXT:     Size: 0656# DYNSTR-INVALID-LLVM-NEXT:     Binding: Local (0x0)657# DYNSTR-INVALID-LLVM-NEXT:     Type: None (0x0)658# DYNSTR-INVALID-LLVM-NEXT:     Other: 0659# DYNSTR-INVALID-LLVM-NEXT:     Section: Undefined (0x0)660# DYNSTR-INVALID-LLVM-NEXT:   }661# DYNSTR-INVALID-LLVM-NEXT: warning: '[[FILE]]': st_name (0xffffff00) is past the end of the string table of size 0x6662# DYNSTR-INVALID-LLVM-NEXT:   Symbol {663# DYNSTR-INVALID-LLVM-NEXT:     Name: <?> (4294967040)664# DYNSTR-INVALID-LLVM-NEXT:     Value: 0x0665# DYNSTR-INVALID-LLVM-NEXT:     Size: 0666# DYNSTR-INVALID-LLVM-NEXT:     Binding: Local (0x0)667# DYNSTR-INVALID-LLVM-NEXT:     Type: None (0x0)668# DYNSTR-INVALID-LLVM-NEXT:     Other: 0669# DYNSTR-INVALID-LLVM-NEXT:     Section: Undefined (0x0)670# DYNSTR-INVALID-LLVM-NEXT:   }671# DYNSTR-INVALID-LLVM-NEXT:   Symbol {672# DYNSTR-INVALID-LLVM-NEXT:     Name: test (1)673# DYNSTR-INVALID-LLVM-NEXT:     Value: 0x0674# DYNSTR-INVALID-LLVM-NEXT:     Size: 0675# DYNSTR-INVALID-LLVM-NEXT:     Binding: Local (0x0)676# DYNSTR-INVALID-LLVM-NEXT:     Type: None (0x0)677# DYNSTR-INVALID-LLVM-NEXT:     Other: 0678# DYNSTR-INVALID-LLVM-NEXT:     Section: Undefined (0x0)679# DYNSTR-INVALID-LLVM-NEXT:   }680# DYNSTR-INVALID-LLVM-NEXT: ]681 682# DYNSTR-INVALID-GNU: warning: '[[FILE]]': the dynamic string table at 0x78 goes past the end of the file (0x2a8) with DT_STRSZ = 0xffffffff683# DYNSTR-INVALID-GNU:      Symbol table '.dynsym' contains 3 entries:684# DYNSTR-INVALID-GNU-NEXT:    Num:    Value          Size Type    Bind   Vis       Ndx Name685# DYNSTR-INVALID-GNU-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND686# DYNSTR-INVALID-GNU-NEXT: warning: '[[FILE]]': st_name (0xffffff00) is past the end of the string table of size 0x6687# DYNSTR-INVALID-GNU-NEXT:      1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND <?>688# DYNSTR-INVALID-GNU-NEXT:      2: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND test689 690--- !ELF691FileHeader:692  Class: ELFCLASS64693  Data:  ELFDATA2LSB694  Type:  ET_EXEC695Sections:696  - Name:    .dynstr697    Type:    SHT_STRTAB698    Flags:   [ SHF_ALLOC ]699    Content: '007465737400' ## '\0', 'test', '\0'700  - Name:  .dynamic701    Type:  SHT_DYNAMIC702    Flags: [ SHF_ALLOC ]703    Link:  .dynstr704    Entries:705      - Tag:   DT_STRTAB706        Value: 0x0707      - Tag:   DT_STRSZ708        Value: 0xffffffff709      - Tag:   DT_NULL710        Value: 0x0711DynamicSymbols:712  - StName:  0xffffff00713## An arbitrary valid symbol to document we report an error before dumping it.714  - StName:  0x1715ProgramHeaders:716  - Type:     PT_LOAD717    Flags:    [ PF_R ]718    FirstSec: .dynstr719    LastSec:  .dynamic720 721## Case 11: check various warnings we report when fields of the SHT_DYNSYM section are broken.722 723## a) check we report a warning when the entry size of the dynamic symbol table is zero.724# RUN: yaml2obj %s --docnum=14 -DENTSIZE=0x0 -o %t15.entsize725# RUN: llvm-readobj --dyn-symbols %t15.entsize 2>&1 | FileCheck %s -DFILE=%t15.entsize --check-prefix=DYNSYM-ZERO-ENTSIZE-LLVM726# RUN: llvm-readelf --dyn-symbols %t15.entsize 2>&1 | \727# RUN:   FileCheck %s -DFILE=%t15.entsize --check-prefix=DYNSYM-ZERO-ENTSIZE-GNU --implicit-check-not="Symbol table"728 729# DYNSYM-ZERO-ENTSIZE-LLVM:      DynamicSymbols [730# DYNSYM-ZERO-ENTSIZE-LLVM-NEXT:  warning: '[[FILE]]': SHT_DYNSYM section with index 1 has invalid size (0x20) or entry size (0x0)731# DYNSYM-ZERO-ENTSIZE-LLVM-NEXT: ]732 733# DYNSYM-ZERO-ENTSIZE-GNU:  warning: '[[FILE]]': SHT_DYNSYM section with index 1 has invalid size (0x20) or entry size (0x0)734 735--- !ELF736FileHeader:737  Class: ELFCLASS32738  Data:  ELFDATA2LSB739  Type:  ET_DYN740Sections:741  - Name:     .dynsym742    Type:     SHT_DYNSYM743    EntSize:  [[ENTSIZE=<none>]]744    Link:     [[LINK=<none>]]745    ShOffset: [[OFFSET=<none>]]746    ShSize:   [[SIZE=<none>]]747DynamicSymbols:748  - Name: foo749 750## b) check we report a warning when the sh_offset field of the SHT_DYNSYM section is751##    invalid (sh_offset + sh_size is greater than the file size). Check we don't dump752##    dynamic symbols in this case.753# RUN: yaml2obj --docnum=14 %s -DOFFSET=0xffffffff -o %t15.offset754# RUN: llvm-readobj %t15.offset --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t15.offset \755# RUN:   --check-prefixes=OFFSET-BROKEN,OFFSET-BROKEN-LLVM756# RUN: llvm-readelf %t15.offset --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t15.offset \757# RUN:   --implicit-check-not="Symbol table" --check-prefix=OFFSET-BROKEN758 759# OFFSET-BROKEN: warning: '[[FILE]]': unable to read dynamic symbols from SHT_DYNSYM section with index 1: offset (0xffffffff) + size (0x20) is greater than the file size (0x148)760 761# OFFSET-BROKEN-LLVM:      DynamicSymbols [762# OFFSET-BROKEN-LLVM-NEXT: ]763 764## c) check we report a warning when the sh_size field of the SHT_DYNSYM section is765##    invalid (sh_offset + sh_size is greater than the file size). Check we don't dump766##    dynamic symbols in this case.767# RUN: yaml2obj --docnum=14 %s -DSIZE=0xffffffff -o %t15.size768# RUN: llvm-readobj %t15.size --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t15.size \769# RUN:   --check-prefixes=SIZE-BROKEN,SIZE-BROKEN-LLVM770# RUN: llvm-readelf %t15.size --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t15.size \771# RUN:   --implicit-check-not="Symbol table" --check-prefix=SIZE-BROKEN772 773# SIZE-BROKEN: warning: '[[FILE]]': unable to read dynamic symbols from SHT_DYNSYM section with index 1: offset (0x34) + size (0xffffffff) is greater than the file size (0x148)774 775# SIZE-BROKEN-LLVM:      DynamicSymbols [776# SIZE-BROKEN-LLVM-NEXT: ]777 778## d) check we report a warning when the sh_link field of the SHT_DYNSYM section779##    is not a valid section index or is not an index of a valid string table.780# RUN: yaml2obj --docnum=14 %s -DLINK=0xffffffff -o %t16.link781# RUN: llvm-readobj %t16.link --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link \782# RUN:   --check-prefixes=LINK-BROKEN1,LINK-BROKEN-LLVM --implicit-check-not=warning:783# RUN: llvm-readelf %t16.link --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link \784# RUN:   --check-prefixes=LINK-BROKEN1,LINK-BROKEN-GNU --implicit-check-not=warning:785 786## Also test that we are able to dump section headers even if the .dynsym section's sh_link field is broken.787# RUN: llvm-readobj %t16.link --section-headers --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link \788# RUN:   --check-prefixes=LINK-BROKEN1,LINK-SEC-HDRS-LLVM,LINK-BROKEN-LLVM --implicit-check-not=warning:789# RUN: llvm-readelf %t16.link --section-headers --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link \790# RUN:   --check-prefixes=LINK-BROKEN1,LINK-SEC-HDRS-GNU,LINK-BROKEN-GNU791 792# RUN: yaml2obj --docnum=14 %s -DLINK=0x0 -o %t16.link.0793# RUN: llvm-readobj %t16.link.0 --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link.0 \794# RUN:   --check-prefixes=LINK-BROKEN2,LINK-BROKEN-LLVM --implicit-check-not=warning:795# RUN: llvm-readelf %t16.link.0 --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link.0 \796# RUN:   --check-prefixes=LINK-BROKEN2,LINK-BROKEN-GNU --implicit-check-not=warning:797 798## Also test that we are able to dump section headers even if the .dynsym section's sh_link field is broken.799# RUN: llvm-readobj %t16.link.0 --section-headers --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link.0 \800# RUN:   --check-prefixes=LINK-BROKEN2,LINK-SEC-HDRS-LLVM,LINK-BROKEN-LLVM --implicit-check-not=warning:801# RUN: llvm-readelf %t16.link.0 --section-headers --dyn-symbols 2>&1 | FileCheck %s -DFILE=%t16.link.0 \802# RUN:   --check-prefixes=LINK-BROKEN2,LINK-SEC-HDRS-GNU,LINK-BROKEN-GNU --implicit-check-not=warning:803 804# LINK-BROKEN1: warning: '[[FILE]]': unable to get the string table for the SHT_DYNSYM section with index 1: invalid section index: 4294967295805# LINK-BROKEN2: warning: '[[FILE]]': unable to get the string table for the SHT_DYNSYM section with index 1: invalid sh_type for string table section [index 0]: expected SHT_STRTAB, but got SHT_NULL806 807# LINK-SEC-HDRS-LLVM: Sections [808# LINK-SEC-HDRS-GNU:  There are 5 section headers, starting at offset 0x80:809 810# LINK-BROKEN-LLVM:      DynamicSymbols [811# LINK-BROKEN-LLVM-NEXT: warning: '[[FILE]]': st_name (0x0) is past the end of the string table of size 0x0812# LINK-BROKEN-LLVM-NEXT:   Symbol {813# LINK-BROKEN-LLVM-NEXT:     Name: <?> (0)814# LINK-BROKEN-LLVM-NEXT:     Value: 0x0815# LINK-BROKEN-LLVM-NEXT:     Size: 0816# LINK-BROKEN-LLVM-NEXT:     Binding: Local (0x0)817# LINK-BROKEN-LLVM-NEXT:     Type: None (0x0)818# LINK-BROKEN-LLVM-NEXT:     Other: 0819# LINK-BROKEN-LLVM-NEXT:     Section: Undefined (0x0)820# LINK-BROKEN-LLVM-NEXT:   }821# LINK-BROKEN-LLVM-NEXT: warning: '[[FILE]]': st_name (0x1) is past the end of the string table of size 0x0822# LINK-BROKEN-LLVM-NEXT:   Symbol {823# LINK-BROKEN-LLVM-NEXT:     Name: <?> (1)824# LINK-BROKEN-LLVM-NEXT:     Value: 0x0825# LINK-BROKEN-LLVM-NEXT:     Size: 0826# LINK-BROKEN-LLVM-NEXT:     Binding: Local (0x0)827# LINK-BROKEN-LLVM-NEXT:     Type: None (0x0)828# LINK-BROKEN-LLVM-NEXT:     Other: 0829# LINK-BROKEN-LLVM-NEXT:     Section: Undefined (0x0)830# LINK-BROKEN-LLVM-NEXT:   }831# LINK-BROKEN-LLVM-NEXT: ]832 833# LINK-BROKEN-GNU:      Symbol table '.dynsym' contains 2 entries:834# LINK-BROKEN-GNU-NEXT:    Num:    Value  Size Type    Bind   Vis       Ndx Name835# LINK-BROKEN-GNU-NEXT: warning: '[[FILE]]': st_name (0x0) is past the end of the string table of size 0x0836# LINK-BROKEN-GNU-NEXT:      0: 00000000     0 NOTYPE  LOCAL  DEFAULT   UND <?>837# LINK-BROKEN-GNU-NEXT: warning: '[[FILE]]': st_name (0x1) is past the end of the string table of size 0x0838# LINK-BROKEN-GNU-NEXT:      1: 00000000     0 NOTYPE  LOCAL  DEFAULT   UND <?>839