1# // Compile with clang-cl -m32 /Z7 /GS- /c t.obj pdb-framedata.cpp
2#
3# int func(int x, int y) {
4#  return x + y;
5# }
6#
7# int main(int argc, char **argv) {
8#   return func(argc, argc+1);
9# }
10
11# RUN: yaml2obj %s -o %t.obj
12# RUN: lld-link %t.obj -debug -entry:main -nodefaultlib -debug -out:%t.exe -pdb:%t.pdb
13# RUN: llvm-pdbutil dump -fpo %t.pdb | FileCheck %s
14
15# CHECK:                         New FPO Data
16# CHECK-NEXT: ============================================================
17# CHECK-NEXT:   RVA    | Code | Locals | Params | Stack | Prolog | Saved Regs | Has SEH | Has C++EH | Start | Program
18# CHECK-NEXT: 00001000 |   31 |      0 |      8 |     0 |      6 |          0 |   false |     false | false | $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
19# CHECK-NEXT: 00001001 |   30 |      0 |      8 |     0 |      5 |          4 |   false |     false | false | $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
20# CHECK-NEXT: 00001003 |   28 |      0 |      8 |     0 |      3 |          4 |   false |     false | false | $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
21# CHECK-NEXT: 00001020 |   53 |      0 |      8 |     0 |      7 |          0 |   false |     false | false | $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
22# CHECK-NEXT: 00001021 |   52 |      0 |      8 |     0 |      6 |          4 |   false |     false | false | $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
23# CHECK-NEXT: 00001023 |   50 |      0 |      8 |     0 |      4 |          4 |   false |     false | false | $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
24# CHECK-NEXT: 00001024 |   49 |      0 |      8 |     0 |      3 |          8 |   false |     false | false | $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $esi $T0 8 - ^ =
25
26
27--- !COFF
28header:
29  Machine:         IMAGE_FILE_MACHINE_I386
30  Characteristics: [  ]
31sections:
32  - Name:            .text
33    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
34    Alignment:       16
35    SectionData:     5589E583EC088B450C8B4D088B550803550C8945FC89D0894DF883C4085DC3905589E55683EC148B450C8B4D08C745F8000000008B550883C2018B7508893424895424048945F4894DF0E80000000083C4145E5DC3
36    Relocations:
37      - VirtualAddress:  75
38        SymbolName:      '?func@@YAHHH@Z'
39        Type:            IMAGE_REL_I386_REL32
40  - Name:            .data
41    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
42    Alignment:       4
43    SectionData:     ''
44  - Name:            .bss
45    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
46    Alignment:       4
47    SectionData:     ''
48  - Name:            .drectve
49    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
50    Alignment:       1
51    SectionData:     202F44454641554C544C49423A6C6962636D742E6C6962202F44454641554C544C49423A6F6C646E616D65732E6C6962
52  - Name:            '.debug$S'
53    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
54    Alignment:       4
55    Subsections:
56      - !Symbols
57        Records:
58          - Kind:            S_COMPILE3
59            Compile3Sym:
60              Flags:           [  ]
61              Machine:         Pentium3
62              FrontendMajor:   8
63              FrontendMinor:   0
64              FrontendBuild:   0
65              FrontendQFE:     0
66              BackendMajor:    8000
67              BackendMinor:    0
68              BackendBuild:    0
69              BackendQFE:      0
70              Version:         'clang version 8.0.0 '
71      - !FrameData
72        Frames:
73          - CodeSize:        31
74            FrameFunc:       '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = '
75            LocalSize:       0
76            MaxStackSize:    0
77            ParamsSize:      8
78            PrologSize:      6
79            RvaStart:        0
80            SavedRegsSize:   0
81          - CodeSize:        30
82            FrameFunc:       '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
83            LocalSize:       0
84            MaxStackSize:    0
85            ParamsSize:      8
86            PrologSize:      5
87            RvaStart:        1
88            SavedRegsSize:   4
89          - CodeSize:        28
90            FrameFunc:       '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
91            LocalSize:       0
92            MaxStackSize:    0
93            ParamsSize:      8
94            PrologSize:      3
95            RvaStart:        3
96            SavedRegsSize:   4
97      - !Symbols
98        Records:
99          - Kind:            S_GPROC32_ID
100            ProcSym:
101              CodeSize:        31
102              DbgStart:        0
103              DbgEnd:          0
104              FunctionType:    4098
105              Flags:           [  ]
106              DisplayName:     func
107          - Kind:            S_LOCAL
108            LocalSym:
109              Type:            116
110              Flags:           [ IsParameter ]
111              VarName:         x
112          - Kind:            S_DEFRANGE_REGISTER_REL
113            DefRangeRegisterRelSym:
114              Register:        22
115              Flags:           0
116              BasePointerOffset: 8
117              Range:
118                OffsetStart:     12
119                ISectStart:      0
120                Range:           19
121              Gaps:
122          - Kind:            S_LOCAL
123            LocalSym:
124              Type:            116
125              Flags:           [ IsParameter ]
126              VarName:         y
127          - Kind:            S_DEFRANGE_REGISTER_REL
128            DefRangeRegisterRelSym:
129              Register:        22
130              Flags:           0
131              BasePointerOffset: 12
132              Range:
133                OffsetStart:     12
134                ISectStart:      0
135                Range:           19
136              Gaps:
137          - Kind:            S_PROC_ID_END
138            ScopeEndSym:
139      - !Lines
140        CodeSize:        31
141        Flags:           [  ]
142        RelocOffset:     0
143        RelocSegment:    0
144        Blocks:
145          - FileName:        'D:\src\llvmbuild\cl\Debug\x64\pdb-framedata.cpp'
146            Lines:
147              - Offset:          0
148                LineStart:       3
149                IsStatement:     false
150                EndDelta:        0
151              - Offset:          12
152                LineStart:       4
153                IsStatement:     false
154                EndDelta:        0
155            Columns:
156      - !FrameData
157        Frames:
158          - CodeSize:        53
159            FrameFunc:       '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = '
160            LocalSize:       0
161            MaxStackSize:    0
162            ParamsSize:      8
163            PrologSize:      7
164            RvaStart:        0
165            SavedRegsSize:   0
166          - CodeSize:        52
167            FrameFunc:       '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
168            LocalSize:       0
169            MaxStackSize:    0
170            ParamsSize:      8
171            PrologSize:      6
172            RvaStart:        1
173            SavedRegsSize:   4
174          - CodeSize:        50
175            FrameFunc:       '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
176            LocalSize:       0
177            MaxStackSize:    0
178            ParamsSize:      8
179            PrologSize:      4
180            RvaStart:        3
181            SavedRegsSize:   4
182          - CodeSize:        49
183            FrameFunc:       '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $esi $T0 8 - ^ = '
184            LocalSize:       0
185            MaxStackSize:    0
186            ParamsSize:      8
187            PrologSize:      3
188            RvaStart:        4
189            SavedRegsSize:   8
190      - !Symbols
191        Records:
192          - Kind:            S_GPROC32_ID
193            ProcSym:
194              CodeSize:        53
195              DbgStart:        0
196              DbgEnd:          0
197              FunctionType:    4102
198              Flags:           [  ]
199              DisplayName:     main
200          - Kind:            S_LOCAL
201            LocalSym:
202              Type:            116
203              Flags:           [ IsParameter ]
204              VarName:         argc
205          - Kind:            S_DEFRANGE_REGISTER_REL
206            DefRangeRegisterRelSym:
207              Register:        22
208              Flags:           0
209              BasePointerOffset: 8
210              Range:
211                OffsetStart:     52
212                ISectStart:      0
213                Range:           33
214              Gaps:
215          - Kind:            S_LOCAL
216            LocalSym:
217              Type:            4099
218              Flags:           [ IsParameter ]
219              VarName:         argv
220          - Kind:            S_DEFRANGE_REGISTER_REL
221            DefRangeRegisterRelSym:
222              Register:        22
223              Flags:           0
224              BasePointerOffset: 12
225              Range:
226                OffsetStart:     52
227                ISectStart:      0
228                Range:           33
229              Gaps:
230          - Kind:            S_PROC_ID_END
231            ScopeEndSym:
232      - !Lines
233        CodeSize:        53
234        Flags:           [  ]
235        RelocOffset:     0
236        RelocSegment:    0
237        Blocks:
238          - FileName:        'D:\src\llvmbuild\cl\Debug\x64\pdb-framedata.cpp'
239            Lines:
240              - Offset:          0
241                LineStart:       7
242                IsStatement:     false
243                EndDelta:        0
244              - Offset:          20
245                LineStart:       8
246                IsStatement:     false
247                EndDelta:        0
248            Columns:
249      - !FileChecksums
250        Checksums:
251          - FileName:        'D:\src\llvmbuild\cl\Debug\x64\pdb-framedata.cpp'
252            Kind:            MD5
253            Checksum:        A611B73E19B77B02646FAAF7CAEB025D
254      - !StringTable
255        Strings:
256          - 'D:\src\llvmbuild\cl\Debug\x64\pdb-framedata.cpp'
257          - '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = '
258          - '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
259          - '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
260          - '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $esi $T0 8 - ^ = '
261          - ''
262    Relocations:
263      - VirtualAddress:  68
264        SymbolName:      '?func@@YAHHH@Z'
265        Type:            IMAGE_REL_I386_DIR32NB
266      - VirtualAddress:  208
267        SymbolName:      '?func@@YAHHH@Z'
268        Type:            IMAGE_REL_I386_SECREL
269      - VirtualAddress:  212
270        SymbolName:      '?func@@YAHHH@Z'
271        Type:            IMAGE_REL_I386_SECTION
272      - VirtualAddress:  244
273        SymbolName:      .text
274        Type:            IMAGE_REL_I386_SECREL
275      - VirtualAddress:  248
276        SymbolName:      .text
277        Type:            IMAGE_REL_I386_SECTION
278      - VirtualAddress:  276
279        SymbolName:      .text
280        Type:            IMAGE_REL_I386_SECREL
281      - VirtualAddress:  280
282        SymbolName:      .text
283        Type:            IMAGE_REL_I386_SECTION
284      - VirtualAddress:  296
285        SymbolName:      '?func@@YAHHH@Z'
286        Type:            IMAGE_REL_I386_SECREL
287      - VirtualAddress:  300
288        SymbolName:      '?func@@YAHHH@Z'
289        Type:            IMAGE_REL_I386_SECTION
290      - VirtualAddress:  344
291        SymbolName:      _main
292        Type:            IMAGE_REL_I386_DIR32NB
293      - VirtualAddress:  516
294        SymbolName:      _main
295        Type:            IMAGE_REL_I386_SECREL
296      - VirtualAddress:  520
297        SymbolName:      _main
298        Type:            IMAGE_REL_I386_SECTION
299      - VirtualAddress:  555
300        SymbolName:      .text
301        Type:            IMAGE_REL_I386_SECREL
302      - VirtualAddress:  559
303        SymbolName:      .text
304        Type:            IMAGE_REL_I386_SECTION
305      - VirtualAddress:  590
306        SymbolName:      .text
307        Type:            IMAGE_REL_I386_SECREL
308      - VirtualAddress:  594
309        SymbolName:      .text
310        Type:            IMAGE_REL_I386_SECTION
311      - VirtualAddress:  612
312        SymbolName:      _main
313        Type:            IMAGE_REL_I386_SECREL
314      - VirtualAddress:  616
315        SymbolName:      _main
316        Type:            IMAGE_REL_I386_SECTION
317  - Name:            '.debug$T'
318    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
319    Alignment:       4
320    Types:
321      - Kind:            LF_ARGLIST
322        ArgList:
323          ArgIndices:      [ 116, 116 ]
324      - Kind:            LF_PROCEDURE
325        Procedure:
326          ReturnType:      116
327          CallConv:        NearC
328          Options:         [ None ]
329          ParameterCount:  2
330          ArgumentList:    4096
331      - Kind:            LF_FUNC_ID
332        FuncId:
333          ParentScope:     0
334          FunctionType:    4097
335          Name:            func
336      - Kind:            LF_POINTER
337        Pointer:
338          ReferentType:    1136
339          Attrs:           32778
340      - Kind:            LF_ARGLIST
341        ArgList:
342          ArgIndices:      [ 116, 4099 ]
343      - Kind:            LF_PROCEDURE
344        Procedure:
345          ReturnType:      116
346          CallConv:        NearC
347          Options:         [ None ]
348          ParameterCount:  2
349          ArgumentList:    4100
350      - Kind:            LF_FUNC_ID
351        FuncId:
352          ParentScope:     0
353          FunctionType:    4101
354          Name:            main
355  - Name:            .llvm_addrsig
356    Characteristics: [ IMAGE_SCN_LNK_REMOVE ]
357    Alignment:       1
358    SectionData:     0F
359symbols:
360  - Name:            .text
361    Value:           0
362    SectionNumber:   1
363    SimpleType:      IMAGE_SYM_TYPE_NULL
364    ComplexType:     IMAGE_SYM_DTYPE_NULL
365    StorageClass:    IMAGE_SYM_CLASS_STATIC
366    SectionDefinition:
367      Length:          85
368      NumberOfRelocations: 1
369      NumberOfLinenumbers: 0
370      CheckSum:        1989857796
371      Number:          1
372  - Name:            .data
373    Value:           0
374    SectionNumber:   2
375    SimpleType:      IMAGE_SYM_TYPE_NULL
376    ComplexType:     IMAGE_SYM_DTYPE_NULL
377    StorageClass:    IMAGE_SYM_CLASS_STATIC
378    SectionDefinition:
379      Length:          0
380      NumberOfRelocations: 0
381      NumberOfLinenumbers: 0
382      CheckSum:        0
383      Number:          2
384  - Name:            .bss
385    Value:           0
386    SectionNumber:   3
387    SimpleType:      IMAGE_SYM_TYPE_NULL
388    ComplexType:     IMAGE_SYM_DTYPE_NULL
389    StorageClass:    IMAGE_SYM_CLASS_STATIC
390    SectionDefinition:
391      Length:          0
392      NumberOfRelocations: 0
393      NumberOfLinenumbers: 0
394      CheckSum:        0
395      Number:          3
396  - Name:            .drectve
397    Value:           0
398    SectionNumber:   4
399    SimpleType:      IMAGE_SYM_TYPE_NULL
400    ComplexType:     IMAGE_SYM_DTYPE_NULL
401    StorageClass:    IMAGE_SYM_CLASS_STATIC
402    SectionDefinition:
403      Length:          48
404      NumberOfRelocations: 0
405      NumberOfLinenumbers: 0
406      CheckSum:        149686238
407      Number:          4
408  - Name:            '.debug$S'
409    Value:           0
410    SectionNumber:   5
411    SimpleType:      IMAGE_SYM_TYPE_NULL
412    ComplexType:     IMAGE_SYM_DTYPE_NULL
413    StorageClass:    IMAGE_SYM_CLASS_STATIC
414    SectionDefinition:
415      Length:          988
416      NumberOfRelocations: 18
417      NumberOfLinenumbers: 0
418      CheckSum:        2571438511
419      Number:          5
420  - Name:            '.debug$T'
421    Value:           0
422    SectionNumber:   6
423    SimpleType:      IMAGE_SYM_TYPE_NULL
424    ComplexType:     IMAGE_SYM_DTYPE_NULL
425    StorageClass:    IMAGE_SYM_CLASS_STATIC
426    SectionDefinition:
427      Length:          120
428      NumberOfRelocations: 0
429      NumberOfLinenumbers: 0
430      CheckSum:        3148269371
431      Number:          6
432  - Name:            .llvm_addrsig
433    Value:           0
434    SectionNumber:   7
435    SimpleType:      IMAGE_SYM_TYPE_NULL
436    ComplexType:     IMAGE_SYM_DTYPE_NULL
437    StorageClass:    IMAGE_SYM_CLASS_STATIC
438    SectionDefinition:
439      Length:          1
440      NumberOfRelocations: 0
441      NumberOfLinenumbers: 0
442      CheckSum:        2428444049
443      Number:          7
444  - Name:            '@feat.00'
445    Value:           1
446    SectionNumber:   -1
447    SimpleType:      IMAGE_SYM_TYPE_NULL
448    ComplexType:     IMAGE_SYM_DTYPE_NULL
449    StorageClass:    IMAGE_SYM_CLASS_STATIC
450  - Name:            '?func@@YAHHH@Z'
451    Value:           0
452    SectionNumber:   1
453    SimpleType:      IMAGE_SYM_TYPE_NULL
454    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
455    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
456  - Name:            _main
457    Value:           32
458    SectionNumber:   1
459    SimpleType:      IMAGE_SYM_TYPE_NULL
460    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
461    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
462...
463