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: Entries: 19# BASIC-NEXT: - Weight: 89 20# BASIC-NEXT: - Weight: 98 21# BASIC-NEXT: Symbols: 22 23--- !ELF 24FileHeader: 25 Class: ELFCLASS[[BITS]] 26 Data: ELFDATA2[[ENCODE]] 27 Type: ET_DYN 28Sections: 29 - Name: .llvm.call-graph-profile 30 Type: SHT_LLVM_CALL_GRAPH_PROFILE 31 Entries: 32 - Weight: 89 33 - Weight: 98 34Symbols: 35 - Name: foo 36 - Name: bar 37 38## Check how we handle broken cases. 39 40# RUN: yaml2obj --docnum=2 %s -o %t.invalid 41# RUN: obj2yaml %t.invalid | FileCheck %s --check-prefix=INVALID 42 43# INVALID: --- !ELF 44# INVALID-NEXT: FileHeader: 45# INVALID-NEXT: Class: ELFCLASS32 46# INVALID-NEXT: Data: ELFDATA2MSB 47# INVALID-NEXT: Type: ET_DYN 48# INVALID-NEXT: Sections: 49# INVALID-NEXT: - Name: .empty 50# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 51# INVALID-NEXT: Link: .symtab 52# INVALID-NEXT: - Name: .multiple.8.valid 53# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 54# INVALID-NEXT: Link: .symtab 55# INVALID-NEXT: Entries: 56# INVALID-NEXT: Weight: 3 57# INVALID-NEXT: - Name: .non.multiple.8 58# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 59# INVALID-NEXT: Link: .symtab 60# INVALID-NEXT: Content: '000000000000000300' 61# INVALID-NEXT: - Name: .multiple.8.invalid 62# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 63# INVALID-NEXT: Link: .symtab 64# INVALID-NEXT: Content: 008899AABBCCDDEEFF 65# INVALID-NEXT: - Name: .link.to.symtable 66# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 67# INVALID-NEXT: Link: .symtab 68# INVALID-NEXT: Entries: 69# INVALID-NEXT: - Weight: 0 70# INVALID-NEXT: - Name: .link.to.non.symtable.1 71# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 72# INVALID-NEXT: Entries: 73# INVALID-NEXT: - Weight: 0 74# INVALID-NEXT: - Name: .link.to.non.symtable.2 75# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 76# INVALID-NEXT: Link: .empty 77# INVALID-NEXT: Entries: 78# INVALID-NEXT: - Weight: 0 79# INVALID-NEXT: - Name: .zero.entry.size 80# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 81# INVALID-NEXT: Link: .symtab 82# INVALID-NEXT: EntSize: 0x0 83# INVALID-NEXT: Entries: 84# INVALID-NEXT: - Weight: 0 85# INVALID-NEXT: - Name: .invalid.entry.size 86# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE 87# INVALID-NEXT: Link: .symtab 88# INVALID-NEXT: EntSize: 0x1 89# INVALID-NEXT: Entries: 90# INVALID-NEXT: - Weight: 0 91# INVALID-NEXT: Symbols: 92# INVALID-NEXT: - Name: foo 93# INVALID-NEXT: - Name: bar 94 95--- !ELF 96FileHeader: 97 Class: ELFCLASS32 98 Data: ELFDATA2MSB 99 Type: ET_DYN 100Sections: 101## Case 1: Content is empty. 102 - Name: .empty 103 Type: SHT_LLVM_CALL_GRAPH_PROFILE 104## Case 2: Check that we use the "Entries" property to dump the data when it 105## has a size that is a multiple of 16 and is valid (it is possible to match 106## symbol indexes to symbols), but fallback to dumping the whole section 107## using the "Content" property otherwise. 108## TODO: Teach yaml2obj to accept 'Size' key for SHT_LLVM_CALL_GRAPH_PROFILE 109## sections and use Entries for cases below. 110 - Name: .multiple.8.valid 111 Type: SHT_LLVM_CALL_GRAPH_PROFILE 112 Content: "0000000000000003" 113 - Name: .non.multiple.8 114 Type: SHT_LLVM_CALL_GRAPH_PROFILE 115 Content: "000000000000000300" 116 - Name: .multiple.8.invalid 117 Type: SHT_LLVM_CALL_GRAPH_PROFILE 118 Content: "008899AABBCCDDEEFF" 119## Case 4: Check we use the "Content" property when a linked section 120## is not a symbol table. 121 - Name: .link.to.symtable 122 Type: SHT_LLVM_CALL_GRAPH_PROFILE 123 Entries: 124 - Weight: 0 125 - Name: .link.to.non.symtable.1 126 Type: SHT_LLVM_CALL_GRAPH_PROFILE 127 Link: 0 128 Entries: 129 - Weight: 0 130 - Name: .link.to.non.symtable.2 131 Type: SHT_LLVM_CALL_GRAPH_PROFILE 132 Link: 1 133 Entries: 134 - Weight: 0 135## Case 5: Check we can dump a section that has a sh_entsize that is not a multiple of 16. 136## Check that in these cases we print the "EntSize" key. 137 - Name: .zero.entry.size 138 Type: SHT_LLVM_CALL_GRAPH_PROFILE 139 EntSize: 0 140 Entries: 141 - Weight: 0 142 - Name: .invalid.entry.size 143 Type: SHT_LLVM_CALL_GRAPH_PROFILE 144 EntSize: 1 145 Entries: 146 - Weight: 0 147Symbols: 148 - Name: foo 149 - Name: bar 150