1## Test how we dump SHT_LLVM_CALL_GRAPH_PROFILE sections for 32 and 64-bit targets. 2 3## Test we use the "Entries" property when it is possible to dump values correctly. 4 5# RUN: yaml2obj -D BITS=64 -D ENCODE=LSB %s -o %t.le64 6# RUN: obj2yaml %t.le64 | FileCheck %s --check-prefix=BASIC 7# RUN: yaml2obj -D BITS=64 -D ENCODE=MSB %s -o %t.be64 8# RUN: obj2yaml %t.be64 | FileCheck %s --check-prefix=BASIC 9# RUN: yaml2obj -D BITS=32 -D ENCODE=LSB %s -o %t.le32 10# RUN: obj2yaml %t.le32 | FileCheck %s --check-prefix=BASIC 11# RUN: yaml2obj -D BITS=32 -D ENCODE=MSB %s -o %t.be32 12# RUN: obj2yaml %t.be32 | FileCheck %s --check-prefix=BASIC 13 14# BASIC: Sections: 15# BASIC-NEXT: - Name: .llvm.call-graph-profile 16# BASIC-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 17# BASIC-NEXT: Link: .symtab 18# BASIC-NEXT: EntSize: 0x10 19# BASIC-NEXT: Entries: 20# BASIC-NEXT: - From: foo 21# BASIC-NEXT: To: bar 22# BASIC-NEXT: Weight: 89 23# BASIC-NEXT: - From: bar 24# BASIC-NEXT: To: foo 25# BASIC-NEXT: Weight: 98 26# BASIC-NEXT: Symbols: 27 28--- !ELF 29FileHeader: 30 Class: ELFCLASS[[BITS]] 31 Data: ELFDATA2[[ENCODE]] 32 Type: ET_DYN 33Sections: 34 - Name: .llvm.call-graph-profile 35 Type: SHT_LLVM_CALL_GRAPH_PROFILE 36 Entries: 37 - From: 1 38 To: 2 39 Weight: 89 40 - From: 2 41 To: 1 42 Weight: 98 43Symbols: 44 - Name: foo 45 - Name: bar 46 47## Check how we handle broken cases. 48 49# RUN: yaml2obj --docnum=2 %s -o %t.invalid 50# RUN: obj2yaml %t.invalid | FileCheck %s --check-prefix=INVALID 51 52# INVALID: --- !ELF 53# INVALID-NEXT: FileHeader: 54# INVALID-NEXT: Class: ELFCLASS32 55# INVALID-NEXT: Data: ELFDATA2MSB 56# INVALID-NEXT: Type: ET_DYN 57# INVALID-NEXT: Sections: 58# INVALID-NEXT: - Name: .empty 59# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 60# INVALID-NEXT: Link: .symtab 61# INVALID-NEXT: EntSize: 0x10 62# INVALID-NEXT: - Name: .multiple.16.valid 63# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 64# INVALID-NEXT: Link: .symtab 65# INVALID-NEXT: EntSize: 0x10 66# INVALID-NEXT: Entries: 67# INVALID-NEXT: - From: foo 68# INVALID-NEXT: To: bar 69# INVALID-NEXT: Weight: 3 70# INVALID-NEXT: - Name: .non.multiple.16 71# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 72# INVALID-NEXT: Link: .symtab 73# INVALID-NEXT: EntSize: 0x10 74# INVALID-NEXT: Content: '0000000100000002000000000000000300' 75# INVALID-NEXT: - Name: .multiple.16.invalid 76# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 77# INVALID-NEXT: Link: .symtab 78# INVALID-NEXT: EntSize: 0x10 79# INVALID-NEXT: Content: 00112233445566778899AABBCCDDEEFF 80# INVALID-NEXT: - Name: .unknown.symbol.1 81# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 82# INVALID-NEXT: Link: .symtab 83# INVALID-NEXT: EntSize: 0x10 84# INVALID-NEXT: Content: 000000FF000000020000000000000003 85# INVALID-NEXT: - Name: .unknown.symbol.2 86# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 87# INVALID-NEXT: Link: .symtab 88# INVALID-NEXT: EntSize: 0x10 89# INVALID-NEXT: Content: 00000001000000FF0000000000000003 90# INVALID-NEXT: - Name: .link.to.symtable 91# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 92# INVALID-NEXT: Link: .symtab 93# INVALID-NEXT: EntSize: 0x10 94# INVALID-NEXT: Entries: 95# INVALID-NEXT: - From: foo 96# INVALID-NEXT: To: bar 97# INVALID-NEXT: Weight: 0 98# INVALID-NEXT: - Name: .link.to.non.symtable.1 99# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 100# INVALID-NEXT: EntSize: 0x10 101# INVALID-NEXT: Content: '00000001000000020000000000000000' 102# INVALID-NEXT: - Name: .link.to.non.symtable.2 103# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 104# INVALID-NEXT: Link: .empty 105# INVALID-NEXT: EntSize: 0x10 106# INVALID-NEXT: Content: '00000001000000020000000000000000' 107# INVALID-NEXT: - Name: .zero.entry.size 108# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 109# INVALID-NEXT: Link: .symtab 110# INVALID-NEXT: Entries: 111# INVALID-NEXT: - From: foo 112# INVALID-NEXT: To: bar 113# INVALID-NEXT: Weight: 0 114# INVALID-NEXT: - Name: .invalid.entry.size 115# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 116# INVALID-NEXT: Link: .symtab 117# INVALID-NEXT: EntSize: 0x1 118# INVALID-NEXT: Entries: 119# INVALID-NEXT: - From: foo 120# INVALID-NEXT: To: bar 121# INVALID-NEXT: Weight: 0 122# INVALID-NEXT: Symbols: 123# INVALID-NEXT: - Name: foo 124# INVALID-NEXT: - Name: bar 125 126--- !ELF 127FileHeader: 128 Class: ELFCLASS32 129 Data: ELFDATA2MSB 130 Type: ET_DYN 131Sections: 132## Case 1: Content is empty. 133 - Name: .empty 134 Type: SHT_LLVM_CALL_GRAPH_PROFILE 135## Case 2: Check that we use the "Entries" property to dump the data when it 136## has a size that is a multiple of 16 and is valid (it is possible to match 137## symbol indexes to symbols), but fallback to dumping the whole section 138## using the "Content" property otherwise. 139## TODO: Teach yaml2obj to accept 'Size' key for SHT_LLVM_CALL_GRAPH_PROFILE 140## sections and use Entries for cases below. 141 - Name: .multiple.16.valid 142 Type: SHT_LLVM_CALL_GRAPH_PROFILE 143 Content: "00000001000000020000000000000003" 144 - Name: .non.multiple.16 145 Type: SHT_LLVM_CALL_GRAPH_PROFILE 146 Content: "0000000100000002000000000000000300" 147 - Name: .multiple.16.invalid 148 Type: SHT_LLVM_CALL_GRAPH_PROFILE 149 Content: "00112233445566778899AABBCCDDEEFF" 150## Case 3: Check we use the "Content" property when unable to match a 151## symbol index to a symbol. 152 - Name: .unknown.symbol.1 153 Type: SHT_LLVM_CALL_GRAPH_PROFILE 154 Entries: 155 - From: 0xff 156 To: 2 157 Weight: 3 158 - Name: .unknown.symbol.2 159 Type: SHT_LLVM_CALL_GRAPH_PROFILE 160 Entries: 161 - From: 1 162 To: 0xff 163 Weight: 3 164## Case 4: Check we use the "Content" property when a linked section 165## is not a symbol table. 166 - Name: .link.to.symtable 167 Type: SHT_LLVM_CALL_GRAPH_PROFILE 168 Entries: 169 - From: 1 170 To: 2 171 Weight: 0 172 - Name: .link.to.non.symtable.1 173 Type: SHT_LLVM_CALL_GRAPH_PROFILE 174 Link: 0 175 Entries: 176 - From: 1 177 To: 2 178 Weight: 0 179 - Name: .link.to.non.symtable.2 180 Type: SHT_LLVM_CALL_GRAPH_PROFILE 181 Link: 1 182 Entries: 183 - From: 1 184 To: 2 185 Weight: 0 186## Case 5: Check we can dump a section that has a sh_entsize that is not a multiple of 16. 187 - Name: .zero.entry.size 188 Type: SHT_LLVM_CALL_GRAPH_PROFILE 189 EntSize: 0 190 Entries: 191 - From: 1 192 To: 2 193 Weight: 0 194 - Name: .invalid.entry.size 195 Type: SHT_LLVM_CALL_GRAPH_PROFILE 196 EntSize: 1 197 Entries: 198 - From: 1 199 To: 2 200 Weight: 0 201Symbols: 202 - Name: foo 203 - Name: bar 204