xref: /llvm-project/llvm/test/tools/obj2yaml/ELF/call-graph-profile-section.yaml (revision a224c5199b327ed0efcdcd87b6dbf950cf4d9ee1)
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