## Test how we dump SHT_LLVM_CALL_GRAPH_PROFILE sections for 32 and 64-bit targets. ## Test we use the "Entries" property when it is possible to dump values correctly. # RUN: yaml2obj -D BITS=64 -D ENCODE=LSB %s -o %t.le64 # RUN: obj2yaml %t.le64 | FileCheck %s --check-prefix=BASIC # RUN: yaml2obj -D BITS=64 -D ENCODE=MSB %s -o %t.be64 # RUN: obj2yaml %t.be64 | FileCheck %s --check-prefix=BASIC # RUN: yaml2obj -D BITS=32 -D ENCODE=LSB %s -o %t.le32 # RUN: obj2yaml %t.le32 | FileCheck %s --check-prefix=BASIC # RUN: yaml2obj -D BITS=32 -D ENCODE=MSB %s -o %t.be32 # RUN: obj2yaml %t.be32 | FileCheck %s --check-prefix=BASIC # BASIC: Sections: # BASIC-NEXT: - Name: .llvm.call-graph-profile # BASIC-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # BASIC-NEXT: Link: .symtab # BASIC-NEXT: Entries: # BASIC-NEXT: - Weight: 89 # BASIC-NEXT: - Weight: 98 # BASIC-NEXT: Symbols: --- !ELF FileHeader: Class: ELFCLASS[[BITS]] Data: ELFDATA2[[ENCODE]] Type: ET_DYN Sections: - Name: .llvm.call-graph-profile Type: SHT_LLVM_CALL_GRAPH_PROFILE Entries: - Weight: 89 - Weight: 98 Symbols: - Name: foo - Name: bar ## Check how we handle broken cases. # RUN: yaml2obj --docnum=2 %s -o %t.invalid # RUN: obj2yaml %t.invalid | FileCheck %s --check-prefix=INVALID # INVALID: --- !ELF # INVALID-NEXT: FileHeader: # INVALID-NEXT: Class: ELFCLASS32 # INVALID-NEXT: Data: ELFDATA2MSB # INVALID-NEXT: Type: ET_DYN # INVALID-NEXT: Sections: # INVALID-NEXT: - Name: .empty # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .symtab # INVALID-NEXT: - Name: .multiple.8.valid # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .symtab # INVALID-NEXT: Entries: # INVALID-NEXT: Weight: 3 # INVALID-NEXT: - Name: .non.multiple.8 # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .symtab # INVALID-NEXT: Content: '000000000000000300' # INVALID-NEXT: - Name: .multiple.8.invalid # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .symtab # INVALID-NEXT: Content: 008899AABBCCDDEEFF # INVALID-NEXT: - Name: .link.to.symtable # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .symtab # INVALID-NEXT: Entries: # INVALID-NEXT: - Weight: 0 # INVALID-NEXT: - Name: .link.to.non.symtable.1 # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Entries: # INVALID-NEXT: - Weight: 0 # INVALID-NEXT: - Name: .link.to.non.symtable.2 # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .empty # INVALID-NEXT: Entries: # INVALID-NEXT: - Weight: 0 # INVALID-NEXT: - Name: .zero.entry.size # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .symtab # INVALID-NEXT: EntSize: 0x0 # INVALID-NEXT: Entries: # INVALID-NEXT: - Weight: 0 # INVALID-NEXT: - Name: .invalid.entry.size # INVALID-NEXT: Type: SHT_LLVM_CALL_GRAPH_PROFILE # INVALID-NEXT: Link: .symtab # INVALID-NEXT: EntSize: 0x1 # INVALID-NEXT: Entries: # INVALID-NEXT: - Weight: 0 # INVALID-NEXT: Symbols: # INVALID-NEXT: - Name: foo # INVALID-NEXT: - Name: bar --- !ELF FileHeader: Class: ELFCLASS32 Data: ELFDATA2MSB Type: ET_DYN Sections: ## Case 1: Content is empty. - Name: .empty Type: SHT_LLVM_CALL_GRAPH_PROFILE ## Case 2: Check that we use the "Entries" property to dump the data when it ## has a size that is a multiple of 16 and is valid (it is possible to match ## symbol indexes to symbols), but fallback to dumping the whole section ## using the "Content" property otherwise. ## TODO: Teach yaml2obj to accept 'Size' key for SHT_LLVM_CALL_GRAPH_PROFILE ## sections and use Entries for cases below. - Name: .multiple.8.valid Type: SHT_LLVM_CALL_GRAPH_PROFILE Content: "0000000000000003" - Name: .non.multiple.8 Type: SHT_LLVM_CALL_GRAPH_PROFILE Content: "000000000000000300" - Name: .multiple.8.invalid Type: SHT_LLVM_CALL_GRAPH_PROFILE Content: "008899AABBCCDDEEFF" ## Case 4: Check we use the "Content" property when a linked section ## is not a symbol table. - Name: .link.to.symtable Type: SHT_LLVM_CALL_GRAPH_PROFILE Entries: - Weight: 0 - Name: .link.to.non.symtable.1 Type: SHT_LLVM_CALL_GRAPH_PROFILE Link: 0 Entries: - Weight: 0 - Name: .link.to.non.symtable.2 Type: SHT_LLVM_CALL_GRAPH_PROFILE Link: 1 Entries: - Weight: 0 ## Case 5: Check we can dump a section that has a sh_entsize that is not a multiple of 16. ## Check that in these cases we print the "EntSize" key. - Name: .zero.entry.size Type: SHT_LLVM_CALL_GRAPH_PROFILE EntSize: 0 Entries: - Weight: 0 - Name: .invalid.entry.size Type: SHT_LLVM_CALL_GRAPH_PROFILE EntSize: 1 Entries: - Weight: 0 Symbols: - Name: foo - Name: bar