• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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