Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / tools / llvm-ifs / read-elf-dynsym.test
blob80edb85d768c79feb2654ba56a2c7383ae6c821d
1 ## Test reading ELF with .dynsym under the following conditions:
2 ##  * Section headers are available.
3 ##  * Section headers are stripped but there is a DT_GNU_HASH dynamic tag.
4 ##  * Section headers are stripped but there is a DT_HASH dynamic tag.
6 ## Test if llvm-ifs reads DT_SYMTAB size through section headers by puting the wrong terminator in DT_GNU_HASH.
7 # RUN: yaml2obj %s -o %tfull -DGNUHASHVALUE="[0x9]" -DTAG1="DT_GNU_HASH" -DVAL1="0xC00"
8 # RUN: llvm-ifs --input-format=ELF --output-ifs=- %tfull | FileCheck %s
10 ## Test if llvm-ifs fails to read DT_SYMTAB size through section headers when the value of sh_entsize is invalid.
11 # RUN: yaml2obj %s -o %tfull -DGNUHASHVALUE="[0x9]" -DTAG1="DT_GNU_HASH" -DVAL1="0xC00" -DENTSIZE="0x19"
12 # RUN: not llvm-ifs --input-format=ELF --output-ifs=- %tfull 2>&1 | FileCheck %s --check-prefix=BADENTSIZE
14 ## Test if llvm-ifs reads DT_SYMTAB size through DT_GNU_HASH.
15 # RUN: yaml2obj %s -o %tw.gnu.hash -DGNUHASHVALUE="[0x8, 0x9]" -DTAG1="DT_GNU_HASH" -DVAL1="0xC00" -DNOHEADER="true"
16 # RUN: llvm-ifs --input-format=ELF --output-ifs=- %tw.gnu.hash | FileCheck %s
18 ## Test if llvm-ifs fails to read DT_SYMTAB size through DT_GNU_HASH when there is no terminator.
19 # RUN: yaml2obj %s -o %tw.gnu.hash -DGNUHASHVALUE="[0x8, 0xA]" -DTAG1="DT_GNU_HASH" -DVAL1="0xC00" -DNOHEADER="true"
20 # RUN: not llvm-ifs --input-format=ELF --output-ifs=- %tw.gnu.hash  2>&1 | FileCheck %s --check-prefix=NOTERMINATOR
22 # CHECK:      --- !ifs-v1
23 # CHECK-NEXT: IfsVersion:      3.0
24 # CHECK-NEXT: Target: { ObjectFormat: ELF, Arch: AArch64, Endianness: little, BitWidth: 64 }
25 # CHECK-NEXT: Symbols:
26 # CHECK-NEXT:   - { Name: bar, Type: Object, Size: 0, Undefined: true }
27 # CHECK-NEXT:   - { Name: foo, Type: Func, Undefined: true }
28 # CHECK-NEXT: ...
30 # BADENTSIZE: SHT_DYNSYM section has sh_size (72) % sh_entsize (25) that is not 0
32 # NOTERMINATOR: error: no terminator found for GNU hash section before buffer end
34 --- !ELF
35 FileHeader:
36   Class:      ELFCLASS64
37   Data:       ELFDATA2LSB
38   Type:       ET_DYN
39   Machine:    EM_AARCH64
40 Sections:
41   - Name:         .text
42     Type:         SHT_PROGBITS
43   - Name:         .data
44     Type:         SHT_PROGBITS
45   - Name:         .strtab
46     Type:         SHT_STRTAB
47   - Name:         .shstrtab
48     Type:         SHT_STRTAB
49   - Name:         .dynsym
50     Type:         SHT_DYNSYM
51     Flags:        [ SHF_ALLOC ]
52     EntSize:      [[ENTSIZE=0x18]]
53     Address:      0x400
54     AddressAlign: 0x400
55   - Name:         .dynstr
56     Type:         SHT_STRTAB
57     Flags:        [ SHF_ALLOC ]
58     Address:      0x600
59     AddressAlign: 0x200
60   - Name:         .dynamic
61     Type:         SHT_DYNAMIC
62     Flags:        [ SHF_ALLOC ]
63     Address:      0x800
64     AddressAlign: 0x200
65     Entries:
66       - Tag:   DT_STRTAB
67         Value: 0x600
68       - Tag:   DT_STRSZ
69         Value: 9
70       - Tag:   DT_SYMTAB
71         Value: 0x400
72       - Tag:   [[TAG1]]
73         Value: [[VAL1]]
74       - Tag:   DT_NULL
75         Value: 0
76   - Name:         .hash
77     Type:         SHT_HASH
78     Flags:        [ SHF_ALLOC ]
79     Address:      0xA00
80     AddressAlign: 0x200
81     Bucket:       [ 1 ]
82     Chain:        [ 1, 2, 3 ]
83   - Name:         .gnu.hash
84     Type:         SHT_GNU_HASH
85     Flags:        [ SHF_ALLOC ]
86     Address:      0xC00
87     AddressAlign: 0x200
88     Header:
89       SymNdx:    0x1
90       Shift2:    0x2
91       MaskWords: 2
92       NBuckets:  2
93     BloomFilter: [0x3, 0x4]
94     HashBuckets: [0x0, 0x1]
95     HashValues:  [[GNUHASHVALUE]]
96   - Type: SectionHeaderTable
97     NoHeaders: [[NOHEADER=false]]
98 DynamicSymbols:
99   - Name:    foo
100     Type:    STT_FUNC
101     Value:   0x100
102     Binding: 1
103   - Name:    bar
104     Type:    STT_OBJECT
105     Value:   0x200
106     Binding: 1
107 ProgramHeaders:
108   - Type:     PT_LOAD
109     VAddr:    0x400
110     FirstSec: .dynsym
111     LastSec:  .gnu.hash
112   - Type:     PT_DYNAMIC
113     VAddr:    0x800
114     FirstSec: .dynamic
115     LastSec:  .dynamic