1# RUN: yaml2obj %s -o %t.obj
2# RUN: lld-link %t.obj -nodefaultlib -entry:main -debug -out:%t.exe -pdb:%t.pdb
3# RUN: llvm-pdbutil dump -symbols -globals %t.pdb | FileCheck %s
4
5# To regenerate the object file:
6# $ cat symbol-types.c
7# struct Foo { int x; };
8# typedef struct Foo UDT_Foo;
9# UDT_Foo global_foo = {42};
10# int main() { return global_foo.x; }
11# $ cl -c -Z7 symbol-types.c
12
13# Note that the type of 'global' goes from 0x1005 in the object file to 0x1004
14# in the PDB because the LF_FUNC_ID is moved to the id stream.
15
16# CHECK-LABEL:                  Global Symbols
17# CHECK-NEXT:  ============================================================
18# CHECK-NEXT:   Records
19# CHECK-NEXT:       48 | S_PROCREF [size = 20] `main`
20# CHECK-NEXT:            module = 1, sum name = 0, offset = 116
21# CHECK-NEXT:       96 | S_UDT [size = 16] `UDT_Foo`
22# CHECK-NEXT:            original type = 0x1004
23# CHECK-NEXT:      112 | S_UDT [size = 12] `Foo`
24# CHECK-NEXT:            original type = 0x1004
25# CHECK-NEXT:       68 | S_GDATA32 [size = 28] `global_foo`
26# CHECK-NEXT:            type = 0x1004 (Foo), addr = 0003:0000
27
28# CHECK:                           Symbols
29# CHECK: ============================================================
30# CHECK-LABEL:   Mod 0000 | `{{.*}}pdb-symbol-types.yaml.tmp.obj`:
31# CHECK:     4 | S_OBJNAME [size = 52] sig=0, `C:\src\llvm-project\build\symbol-types.obj`
32# CHECK:    56 | S_COMPILE3 [size = 60]
33# CHECK:         machine = intel x86-x64, Ver = Microsoft (R) Optimizing Compiler, language = c
34# CHECK:         frontend = 19.0.24215.1, backend = 19.0.24215.1
35# CHECK:         flags = security checks | hot patchable
36# CHECK:   116 | S_GPROC32 [size = 44] `main`
37# CHECK:         parent = 0, end = 192, addr = 0001:0000, code size = 7
38# CHECK:         debug start = 0, debug end = 6, flags = none
39# CHECK:   160 | S_FRAMEPROC [size = 32]
40# CHECK:         size = 0, padding size = 0, offset to padding = 0
41# CHECK:         bytes of callee saved registers = 0, exception handler addr = 0000:0000
42# CHECK:         flags = has async eh | opt speed
43# CHECK:   192 | S_END [size = 4]
44# CHECK:   196 | S_BUILDINFO [size = 8] BuildId = `0x100A`
45# CHECK-LABEL:   Mod 0001 | `* Linker *`:
46
47--- !COFF
48header:
49  Machine:         IMAGE_FILE_MACHINE_AMD64
50  Characteristics: [  ]
51sections:
52  - Name:            .drectve
53    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
54    Alignment:       1
55    SectionData:     2020202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220
56  - Name:            '.debug$S'
57    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
58    Alignment:       1
59    Subsections:
60      - !Symbols
61        Records:
62          - Kind:            S_OBJNAME
63            ObjNameSym:
64              Signature:       0
65              ObjectName:      'C:\src\llvm-project\build\symbol-types.obj'
66          - Kind:            S_COMPILE3
67            Compile3Sym:
68              Flags:           [ SecurityChecks, HotPatch ]
69              Machine:         X64
70              FrontendMajor:   19
71              FrontendMinor:   0
72              FrontendBuild:   24215
73              FrontendQFE:     1
74              BackendMajor:    19
75              BackendMinor:    0
76              BackendBuild:    24215
77              BackendQFE:      1
78              Version:         'Microsoft (R) Optimizing Compiler'
79      - !Symbols
80        Records:
81          - Kind:            S_GPROC32_ID
82            ProcSym:
83              CodeSize:        7
84              DbgStart:        0
85              DbgEnd:          6
86              FunctionType:    4098
87              Flags:           [  ]
88              DisplayName:     main
89          - Kind:            S_FRAMEPROC
90            FrameProcSym:
91              TotalFrameBytes: 0
92              PaddingFrameBytes: 0
93              OffsetToPadding: 0
94              BytesOfCalleeSavedRegisters: 0
95              OffsetOfExceptionHandler: 0
96              SectionIdOfExceptionHandler: 0
97              Flags:           [ AsynchronousExceptionHandling, OptimizedForSpeed ]
98          - Kind:            S_PROC_ID_END
99            ScopeEndSym:
100      - !Lines
101        CodeSize:        7
102        Flags:           [  ]
103        RelocOffset:     0
104        RelocSegment:    0
105        Blocks:
106          - FileName:        'c:\src\llvm-project\build\symbol-types.c'
107            Lines:
108              - Offset:          0
109                LineStart:       4
110                IsStatement:     true
111                EndDelta:        0
112              - Offset:          0
113                LineStart:       5
114                IsStatement:     true
115                EndDelta:        0
116              - Offset:          6
117                LineStart:       6
118                IsStatement:     true
119                EndDelta:        0
120            Columns:
121      - !Symbols
122        Records:
123          - Kind:            S_GDATA32
124            DataSym:
125              Type:            4101
126              DisplayName:     global_foo
127          - Kind:            S_UDT
128            UDTSym:
129              Type:            4101
130              UDTName:         UDT_Foo
131          - Kind:            S_UDT
132            UDTSym:
133              Type:            4101
134              UDTName:         Foo
135      - !FileChecksums
136        Checksums:
137          - FileName:        'c:\src\llvm-project\build\symbol-types.c'
138            Kind:            MD5
139            Checksum:        F833E1A4909FF6FEC5689A664F3BE725
140      - !StringTable
141        Strings:
142          - 'c:\src\llvm-project\build\symbol-types.c'
143      - !Symbols
144        Records:
145          - Kind:            S_BUILDINFO
146            BuildInfoSym:
147              BuildId:         4111
148    Relocations:
149      - VirtualAddress:  164
150        SymbolName:      main
151        Type:            IMAGE_REL_AMD64_SECREL
152      - VirtualAddress:  168
153        SymbolName:      main
154        Type:            IMAGE_REL_AMD64_SECTION
155      - VirtualAddress:  220
156        SymbolName:      main
157        Type:            IMAGE_REL_AMD64_SECREL
158      - VirtualAddress:  224
159        SymbolName:      main
160        Type:            IMAGE_REL_AMD64_SECTION
161      - VirtualAddress:  284
162        SymbolName:      global_foo
163        Type:            IMAGE_REL_AMD64_SECREL
164      - VirtualAddress:  288
165        SymbolName:      global_foo
166        Type:            IMAGE_REL_AMD64_SECTION
167  - Name:            '.debug$T'
168    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
169    Alignment:       1
170    Types:
171      - Kind:            LF_ARGLIST
172        ArgList:
173          ArgIndices:      [ 0 ]
174      - Kind:            LF_PROCEDURE
175        Procedure:
176          ReturnType:      116
177          CallConv:        NearC
178          Options:         [ None ]
179          ParameterCount:  0
180          ArgumentList:    4096
181      - Kind:            LF_FUNC_ID
182        FuncId:
183          ParentScope:     0
184          FunctionType:    4097
185          Name:            main
186      - Kind:            LF_STRUCTURE
187        Class:
188          MemberCount:     0
189          Options:         [ None, ForwardReference, HasUniqueName ]
190          FieldList:       0
191          Name:            Foo
192          UniqueName:      '.?AUFoo@@'
193          DerivationList:  0
194          VTableShape:     0
195          Size:            0
196      - Kind:            LF_FIELDLIST
197        FieldList:
198          - Kind:            LF_MEMBER
199            DataMember:
200              Attrs:           3
201              Type:            116
202              FieldOffset:     0
203              Name:            x
204      - Kind:            LF_STRUCTURE
205        Class:
206          MemberCount:     1
207          Options:         [ None, HasUniqueName ]
208          FieldList:       4100
209          Name:            Foo
210          UniqueName:      '.?AUFoo@@'
211          DerivationList:  0
212          VTableShape:     0
213          Size:            4
214      - Kind:            LF_STRING_ID
215        StringId:
216          Id:              0
217          String:          'c:\src\llvm-project\build\symbol-types.c'
218      - Kind:            LF_UDT_SRC_LINE
219        UdtSourceLine:
220          UDT:             4101
221          SourceFile:      4102
222          LineNumber:      1
223      - Kind:            LF_STRING_ID
224        StringId:
225          Id:              0
226          String:          'C:\src\llvm-project\build'
227      - Kind:            LF_STRING_ID
228        StringId:
229          Id:              0
230          String:          'C:\PROGRA~2\MICROS~1.0\VC\Bin\amd64\cl.exe'
231      - Kind:            LF_STRING_ID
232        StringId:
233          Id:              0
234          String:          '-c -Z7 -MT -IC:\PROGRA~2\MICROS~1.0\VC\include -IC:\PROGRA~2\MICROS~1.0\VC\atlmfc\include -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\ucrt -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\shared -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\um'
235      - Kind:            LF_SUBSTR_LIST
236        StringList:
237          StringIndices:   [ 4106 ]
238      - Kind:            LF_STRING_ID
239        StringId:
240          Id:              4107
241          String:          ' -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\winrt -TC -X'
242      - Kind:            LF_STRING_ID
243        StringId:
244          Id:              0
245          String:          symbol-types.c
246      - Kind:            LF_STRING_ID
247        StringId:
248          Id:              0
249          String:          'C:\src\llvm-project\build\vc140.pdb'
250      - Kind:            LF_BUILDINFO
251        BuildInfo:
252          ArgIndices:      [ 4104, 4105, 4109, 4110, 4108 ]
253  - Name:            .data
254    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
255    Alignment:       4
256    SectionData:     2A000000
257  - Name:            '.text$mn'
258    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
259    Alignment:       16
260    SectionData:     8B0500000000C3
261    Relocations:
262      - VirtualAddress:  2
263        SymbolName:      global_foo
264        Type:            IMAGE_REL_AMD64_REL32
265symbols:
266  - Name:            '@comp.id'
267    Value:           17063575
268    SectionNumber:   -1
269    SimpleType:      IMAGE_SYM_TYPE_NULL
270    ComplexType:     IMAGE_SYM_DTYPE_NULL
271    StorageClass:    IMAGE_SYM_CLASS_STATIC
272  - Name:            '@feat.00'
273    Value:           2147484048
274    SectionNumber:   -1
275    SimpleType:      IMAGE_SYM_TYPE_NULL
276    ComplexType:     IMAGE_SYM_DTYPE_NULL
277    StorageClass:    IMAGE_SYM_CLASS_STATIC
278  - Name:            .drectve
279    Value:           0
280    SectionNumber:   1
281    SimpleType:      IMAGE_SYM_TYPE_NULL
282    ComplexType:     IMAGE_SYM_DTYPE_NULL
283    StorageClass:    IMAGE_SYM_CLASS_STATIC
284    SectionDefinition:
285      Length:          47
286      NumberOfRelocations: 0
287      NumberOfLinenumbers: 0
288      CheckSum:        0
289      Number:          0
290  - Name:            '.debug$S'
291    Value:           0
292    SectionNumber:   2
293    SimpleType:      IMAGE_SYM_TYPE_NULL
294    ComplexType:     IMAGE_SYM_DTYPE_NULL
295    StorageClass:    IMAGE_SYM_CLASS_STATIC
296    SectionDefinition:
297      Length:          432
298      NumberOfRelocations: 6
299      NumberOfLinenumbers: 0
300      CheckSum:        0
301      Number:          0
302  - Name:            '.debug$T'
303    Value:           0
304    SectionNumber:   3
305    SimpleType:      IMAGE_SYM_TYPE_NULL
306    ComplexType:     IMAGE_SYM_DTYPE_NULL
307    StorageClass:    IMAGE_SYM_CLASS_STATIC
308    SectionDefinition:
309      Length:          732
310      NumberOfRelocations: 0
311      NumberOfLinenumbers: 0
312      CheckSum:        0
313      Number:          0
314  - Name:            .data
315    Value:           0
316    SectionNumber:   4
317    SimpleType:      IMAGE_SYM_TYPE_NULL
318    ComplexType:     IMAGE_SYM_DTYPE_NULL
319    StorageClass:    IMAGE_SYM_CLASS_STATIC
320    SectionDefinition:
321      Length:          4
322      NumberOfRelocations: 0
323      NumberOfLinenumbers: 0
324      CheckSum:        3482275674
325      Number:          0
326  - Name:            global_foo
327    Value:           0
328    SectionNumber:   4
329    SimpleType:      IMAGE_SYM_TYPE_NULL
330    ComplexType:     IMAGE_SYM_DTYPE_NULL
331    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
332  - Name:            '.text$mn'
333    Value:           0
334    SectionNumber:   5
335    SimpleType:      IMAGE_SYM_TYPE_NULL
336    ComplexType:     IMAGE_SYM_DTYPE_NULL
337    StorageClass:    IMAGE_SYM_CLASS_STATIC
338    SectionDefinition:
339      Length:          7
340      NumberOfRelocations: 1
341      NumberOfLinenumbers: 0
342      CheckSum:        3635526833
343      Number:          0
344  - Name:            main
345    Value:           0
346    SectionNumber:   5
347    SimpleType:      IMAGE_SYM_TYPE_NULL
348    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
349    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
350...
351