| # RUN: yaml2obj %s -o %t.obj |
| # RUN: lld-link %t.obj -nodefaultlib -entry:main -debug -out:%t.exe -pdb:%t.pdb |
| # RUN: llvm-pdbutil dump -symbols -globals %t.pdb | FileCheck %s |
| |
| # To regenerate the object file: |
| # $ cat symbol-types.c |
| # struct Foo { int x; }; |
| # typedef struct Foo UDT_Foo; |
| # UDT_Foo global_foo = {42}; |
| # int main() { return global_foo.x; } |
| # $ cl -c -Z7 symbol-types.c |
| |
| # Note that the type of 'global' goes from 0x1005 in the object file to 0x1004 |
| # in the PDB because the LF_FUNC_ID is moved to the id stream. |
| |
| # CHECK-LABEL: Global Symbols |
| # CHECK-NEXT: ============================================================ |
| # CHECK-NEXT: Records |
| # CHECK-NEXT: 48 | S_PROCREF [size = 20] `main` |
| # CHECK-NEXT: module = 1, sum name = 0, offset = 116 |
| # CHECK-NEXT: 96 | S_UDT [size = 16] `UDT_Foo` |
| # CHECK-NEXT: original type = 0x1004 |
| # CHECK-NEXT: 112 | S_UDT [size = 12] `Foo` |
| # CHECK-NEXT: original type = 0x1004 |
| # CHECK-NEXT: 68 | S_GDATA32 [size = 28] `global_foo` |
| # CHECK-NEXT: type = 0x1004 (Foo), addr = 0003:0000 |
| |
| # CHECK: Symbols |
| # CHECK: ============================================================ |
| # CHECK-LABEL: Mod 0000 | `{{.*}}pdb-symbol-types.yaml.tmp.obj`: |
| # CHECK: 4 | S_OBJNAME [size = 52] sig=0, `C:\src\llvm-project\build\symbol-types.obj` |
| # CHECK: 56 | S_COMPILE3 [size = 60] |
| # CHECK: machine = intel x86-x64, Ver = Microsoft (R) Optimizing Compiler, language = c |
| # CHECK: frontend = 19.0.24215.1, backend = 19.0.24215.1 |
| # CHECK: flags = security checks | hot patchable |
| # CHECK: 116 | S_GPROC32 [size = 44] `main` |
| # CHECK: parent = 0, end = 192, addr = 0001:0000, code size = 7 |
| # CHECK: debug start = 0, debug end = 6, flags = none |
| # CHECK: 160 | S_FRAMEPROC [size = 32] |
| # CHECK: size = 0, padding size = 0, offset to padding = 0 |
| # CHECK: bytes of callee saved registers = 0, exception handler addr = 0000:0000 |
| # CHECK: flags = has async eh | opt speed |
| # CHECK: 192 | S_END [size = 4] |
| # CHECK: 196 | S_BUILDINFO [size = 8] BuildId = `0x100A` |
| # CHECK-LABEL: Mod 0001 | `* Linker *`: |
| |
| --- !COFF |
| header: |
| Machine: IMAGE_FILE_MACHINE_AMD64 |
| Characteristics: [ ] |
| sections: |
| - Name: .drectve |
| Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ] |
| Alignment: 1 |
| SectionData: 2020202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220 |
| - Name: '.debug$S' |
| Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] |
| Alignment: 1 |
| Subsections: |
| - !Symbols |
| Records: |
| - Kind: S_OBJNAME |
| ObjNameSym: |
| Signature: 0 |
| ObjectName: 'C:\src\llvm-project\build\symbol-types.obj' |
| - Kind: S_COMPILE3 |
| Compile3Sym: |
| Flags: [ SecurityChecks, HotPatch ] |
| Machine: X64 |
| FrontendMajor: 19 |
| FrontendMinor: 0 |
| FrontendBuild: 24215 |
| FrontendQFE: 1 |
| BackendMajor: 19 |
| BackendMinor: 0 |
| BackendBuild: 24215 |
| BackendQFE: 1 |
| Version: 'Microsoft (R) Optimizing Compiler' |
| - !Symbols |
| Records: |
| - Kind: S_GPROC32_ID |
| ProcSym: |
| CodeSize: 7 |
| DbgStart: 0 |
| DbgEnd: 6 |
| FunctionType: 4098 |
| Flags: [ ] |
| DisplayName: main |
| - Kind: S_FRAMEPROC |
| FrameProcSym: |
| TotalFrameBytes: 0 |
| PaddingFrameBytes: 0 |
| OffsetToPadding: 0 |
| BytesOfCalleeSavedRegisters: 0 |
| OffsetOfExceptionHandler: 0 |
| SectionIdOfExceptionHandler: 0 |
| Flags: [ AsynchronousExceptionHandling, OptimizedForSpeed ] |
| - Kind: S_PROC_ID_END |
| ScopeEndSym: |
| - !Lines |
| CodeSize: 7 |
| Flags: [ ] |
| RelocOffset: 0 |
| RelocSegment: 0 |
| Blocks: |
| - FileName: 'c:\src\llvm-project\build\symbol-types.c' |
| Lines: |
| - Offset: 0 |
| LineStart: 4 |
| IsStatement: true |
| EndDelta: 0 |
| - Offset: 0 |
| LineStart: 5 |
| IsStatement: true |
| EndDelta: 0 |
| - Offset: 6 |
| LineStart: 6 |
| IsStatement: true |
| EndDelta: 0 |
| Columns: |
| - !Symbols |
| Records: |
| - Kind: S_GDATA32 |
| DataSym: |
| Type: 4101 |
| DisplayName: global_foo |
| - Kind: S_UDT |
| UDTSym: |
| Type: 4101 |
| UDTName: UDT_Foo |
| - Kind: S_UDT |
| UDTSym: |
| Type: 4101 |
| UDTName: Foo |
| - !FileChecksums |
| Checksums: |
| - FileName: 'c:\src\llvm-project\build\symbol-types.c' |
| Kind: MD5 |
| Checksum: F833E1A4909FF6FEC5689A664F3BE725 |
| - !StringTable |
| Strings: |
| - 'c:\src\llvm-project\build\symbol-types.c' |
| - !Symbols |
| Records: |
| - Kind: S_BUILDINFO |
| BuildInfoSym: |
| BuildId: 4111 |
| Relocations: |
| - VirtualAddress: 164 |
| SymbolName: main |
| Type: IMAGE_REL_AMD64_SECREL |
| - VirtualAddress: 168 |
| SymbolName: main |
| Type: IMAGE_REL_AMD64_SECTION |
| - VirtualAddress: 220 |
| SymbolName: main |
| Type: IMAGE_REL_AMD64_SECREL |
| - VirtualAddress: 224 |
| SymbolName: main |
| Type: IMAGE_REL_AMD64_SECTION |
| - VirtualAddress: 284 |
| SymbolName: global_foo |
| Type: IMAGE_REL_AMD64_SECREL |
| - VirtualAddress: 288 |
| SymbolName: global_foo |
| Type: IMAGE_REL_AMD64_SECTION |
| - Name: '.debug$T' |
| Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] |
| Alignment: 1 |
| Types: |
| - Kind: LF_ARGLIST |
| ArgList: |
| ArgIndices: [ 0 ] |
| - Kind: LF_PROCEDURE |
| Procedure: |
| ReturnType: 116 |
| CallConv: NearC |
| Options: [ None ] |
| ParameterCount: 0 |
| ArgumentList: 4096 |
| - Kind: LF_FUNC_ID |
| FuncId: |
| ParentScope: 0 |
| FunctionType: 4097 |
| Name: main |
| - Kind: LF_STRUCTURE |
| Class: |
| MemberCount: 0 |
| Options: [ None, ForwardReference, HasUniqueName ] |
| FieldList: 0 |
| Name: Foo |
| UniqueName: '.?AUFoo@@' |
| DerivationList: 0 |
| VTableShape: 0 |
| Size: 0 |
| - Kind: LF_FIELDLIST |
| FieldList: |
| - Kind: LF_MEMBER |
| DataMember: |
| Attrs: 3 |
| Type: 116 |
| FieldOffset: 0 |
| Name: x |
| - Kind: LF_STRUCTURE |
| Class: |
| MemberCount: 1 |
| Options: [ None, HasUniqueName ] |
| FieldList: 4100 |
| Name: Foo |
| UniqueName: '.?AUFoo@@' |
| DerivationList: 0 |
| VTableShape: 0 |
| Size: 4 |
| - Kind: LF_STRING_ID |
| StringId: |
| Id: 0 |
| String: 'c:\src\llvm-project\build\symbol-types.c' |
| - Kind: LF_UDT_SRC_LINE |
| UdtSourceLine: |
| UDT: 4101 |
| SourceFile: 4102 |
| LineNumber: 1 |
| - Kind: LF_STRING_ID |
| StringId: |
| Id: 0 |
| String: 'C:\src\llvm-project\build' |
| - Kind: LF_STRING_ID |
| StringId: |
| Id: 0 |
| String: 'C:\PROGRA~2\MICROS~1.0\VC\Bin\amd64\cl.exe' |
| - Kind: LF_STRING_ID |
| StringId: |
| Id: 0 |
| 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' |
| - Kind: LF_SUBSTR_LIST |
| StringList: |
| StringIndices: [ 4106 ] |
| - Kind: LF_STRING_ID |
| StringId: |
| Id: 4107 |
| String: ' -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\winrt -TC -X' |
| - Kind: LF_STRING_ID |
| StringId: |
| Id: 0 |
| String: symbol-types.c |
| - Kind: LF_STRING_ID |
| StringId: |
| Id: 0 |
| String: 'C:\src\llvm-project\build\vc140.pdb' |
| - Kind: LF_BUILDINFO |
| BuildInfo: |
| ArgIndices: [ 4104, 4105, 4109, 4110, 4108 ] |
| - Name: .data |
| Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] |
| Alignment: 4 |
| SectionData: 2A000000 |
| - Name: '.text$mn' |
| Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] |
| Alignment: 16 |
| SectionData: 8B0500000000C3 |
| Relocations: |
| - VirtualAddress: 2 |
| SymbolName: global_foo |
| Type: IMAGE_REL_AMD64_REL32 |
| symbols: |
| - Name: '@comp.id' |
| Value: 17063575 |
| SectionNumber: -1 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_STATIC |
| - Name: '@feat.00' |
| Value: 2147484048 |
| SectionNumber: -1 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_STATIC |
| - Name: .drectve |
| Value: 0 |
| SectionNumber: 1 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_STATIC |
| SectionDefinition: |
| Length: 47 |
| NumberOfRelocations: 0 |
| NumberOfLinenumbers: 0 |
| CheckSum: 0 |
| Number: 0 |
| - Name: '.debug$S' |
| Value: 0 |
| SectionNumber: 2 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_STATIC |
| SectionDefinition: |
| Length: 432 |
| NumberOfRelocations: 6 |
| NumberOfLinenumbers: 0 |
| CheckSum: 0 |
| Number: 0 |
| - Name: '.debug$T' |
| Value: 0 |
| SectionNumber: 3 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_STATIC |
| SectionDefinition: |
| Length: 732 |
| NumberOfRelocations: 0 |
| NumberOfLinenumbers: 0 |
| CheckSum: 0 |
| Number: 0 |
| - Name: .data |
| Value: 0 |
| SectionNumber: 4 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_STATIC |
| SectionDefinition: |
| Length: 4 |
| NumberOfRelocations: 0 |
| NumberOfLinenumbers: 0 |
| CheckSum: 3482275674 |
| Number: 0 |
| - Name: global_foo |
| Value: 0 |
| SectionNumber: 4 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_EXTERNAL |
| - Name: '.text$mn' |
| Value: 0 |
| SectionNumber: 5 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_NULL |
| StorageClass: IMAGE_SYM_CLASS_STATIC |
| SectionDefinition: |
| Length: 7 |
| NumberOfRelocations: 1 |
| NumberOfLinenumbers: 0 |
| CheckSum: 3635526833 |
| Number: 0 |
| - Name: main |
| Value: 0 |
| SectionNumber: 5 |
| SimpleType: IMAGE_SYM_TYPE_NULL |
| ComplexType: IMAGE_SYM_DTYPE_FUNCTION |
| StorageClass: IMAGE_SYM_CLASS_EXTERNAL |
| ... |