150 lines · yaml
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.le646# RUN: obj2yaml %t.le64 | FileCheck %s --check-prefix=BASIC7# RUN: yaml2obj -D BITS=64 -D ENCODE=MSB %s -o %t.be648# RUN: obj2yaml %t.be64 | FileCheck %s --check-prefix=BASIC9# RUN: yaml2obj -D BITS=32 -D ENCODE=LSB %s -o %t.le3210# RUN: obj2yaml %t.le32 | FileCheck %s --check-prefix=BASIC11# RUN: yaml2obj -D BITS=32 -D ENCODE=MSB %s -o %t.be3212# RUN: obj2yaml %t.be32 | FileCheck %s --check-prefix=BASIC13 14# BASIC: Sections:15# BASIC-NEXT: - Name: .llvm.call-graph-profile16# BASIC-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE17# BASIC-NEXT: Link: .symtab18# BASIC-NEXT: Entries:19# BASIC-NEXT: - Weight: 8920# BASIC-NEXT: - Weight: 9821# BASIC-NEXT: Symbols:22 23--- !ELF24FileHeader:25 Class: ELFCLASS[[BITS]]26 Data: ELFDATA2[[ENCODE]]27 Type: ET_DYN28Sections:29 - Name: .llvm.call-graph-profile30 Type: SHT_LLVM_CALL_GRAPH_PROFILE31 Entries:32 - Weight: 8933 - Weight: 9834Symbols:35 - Name: foo36 - Name: bar37 38## Check how we handle broken cases.39 40# RUN: yaml2obj --docnum=2 %s -o %t.invalid41# RUN: obj2yaml %t.invalid | FileCheck %s --check-prefix=INVALID42 43# INVALID: --- !ELF44# INVALID-NEXT: FileHeader:45# INVALID-NEXT: Class: ELFCLASS3246# INVALID-NEXT: Data: ELFDATA2MSB47# INVALID-NEXT: Type: ET_DYN48# INVALID-NEXT: Sections:49# INVALID-NEXT: - Name: .empty50# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE51# INVALID-NEXT: Link: .symtab52# INVALID-NEXT: - Name: .multiple.8.valid53# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE54# INVALID-NEXT: Link: .symtab55# INVALID-NEXT: Entries:56# INVALID-NEXT: Weight: 357# INVALID-NEXT: - Name: .non.multiple.858# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE59# INVALID-NEXT: Link: .symtab60# INVALID-NEXT: Content: '000000000000000300'61# INVALID-NEXT: - Name: .multiple.8.invalid62# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE63# INVALID-NEXT: Link: .symtab64# INVALID-NEXT: Content: 008899AABBCCDDEEFF65# INVALID-NEXT: - Name: .link.to.symtable66# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE67# INVALID-NEXT: Link: .symtab68# INVALID-NEXT: Entries:69# INVALID-NEXT: - Weight: 070# INVALID-NEXT: - Name: .link.to.non.symtable.171# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE72# INVALID-NEXT: Entries:73# INVALID-NEXT: - Weight: 074# INVALID-NEXT: - Name: .link.to.non.symtable.275# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE76# INVALID-NEXT: Link: .empty77# INVALID-NEXT: Entries:78# INVALID-NEXT: - Weight: 079# INVALID-NEXT: - Name: .zero.entry.size80# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE81# INVALID-NEXT: Link: .symtab82# INVALID-NEXT: EntSize: 0x083# INVALID-NEXT: Entries:84# INVALID-NEXT: - Weight: 085# INVALID-NEXT: - Name: .invalid.entry.size86# INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE87# INVALID-NEXT: Link: .symtab88# INVALID-NEXT: EntSize: 0x189# INVALID-NEXT: Entries:90# INVALID-NEXT: - Weight: 091# INVALID-NEXT: Symbols:92# INVALID-NEXT: - Name: foo93# INVALID-NEXT: - Name: bar94 95--- !ELF96FileHeader:97 Class: ELFCLASS3298 Data: ELFDATA2MSB99 Type: ET_DYN100Sections:101## Case 1: Content is empty.102 - Name: .empty103 Type: SHT_LLVM_CALL_GRAPH_PROFILE104## Case 2: Check that we use the "Entries" property to dump the data when it105## has a size that is a multiple of 16 and is valid (it is possible to match106## symbol indexes to symbols), but fallback to dumping the whole section107## using the "Content" property otherwise.108## TODO: Teach yaml2obj to accept 'Size' key for SHT_LLVM_CALL_GRAPH_PROFILE109## sections and use Entries for cases below.110 - Name: .multiple.8.valid111 Type: SHT_LLVM_CALL_GRAPH_PROFILE112 Content: "0000000000000003"113 - Name: .non.multiple.8114 Type: SHT_LLVM_CALL_GRAPH_PROFILE115 Content: "000000000000000300"116 - Name: .multiple.8.invalid117 Type: SHT_LLVM_CALL_GRAPH_PROFILE118 Content: "008899AABBCCDDEEFF"119## Case 4: Check we use the "Content" property when a linked section120## is not a symbol table.121 - Name: .link.to.symtable122 Type: SHT_LLVM_CALL_GRAPH_PROFILE123 Entries:124 - Weight: 0125 - Name: .link.to.non.symtable.1126 Type: SHT_LLVM_CALL_GRAPH_PROFILE127 Link: 0128 Entries:129 - Weight: 0130 - Name: .link.to.non.symtable.2131 Type: SHT_LLVM_CALL_GRAPH_PROFILE132 Link: 1133 Entries:134 - Weight: 0135## 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.size138 Type: SHT_LLVM_CALL_GRAPH_PROFILE139 EntSize: 0140 Entries:141 - Weight: 0142 - Name: .invalid.entry.size143 Type: SHT_LLVM_CALL_GRAPH_PROFILE144 EntSize: 1145 Entries:146 - Weight: 0147Symbols:148 - Name: foo149 - Name: bar150