Index: lld/trunk/COFF/PDB.cpp =================================================================== --- lld/trunk/COFF/PDB.cpp +++ lld/trunk/COFF/PDB.cpp @@ -47,6 +47,7 @@ #include "llvm/Object/COFF.h" #include "llvm/Support/BinaryByteStream.h" #include "llvm/Support/Endian.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/JamCRC.h" #include "llvm/Support/Path.h" #include "llvm/Support/ScopedPrinter.h" @@ -412,6 +413,36 @@ } } +static void +recordStringTableReferenceAtOffset(MutableArrayRef Contents, + uint32_t Offset, + std::vector &StrTableRefs) { + Contents = + Contents.drop_front(Offset).take_front(sizeof(support::ulittle32_t)); + ulittle32_t *Index = reinterpret_cast(Contents.data()); + StrTableRefs.push_back(Index); +} + +static void +recordStringTableReferences(SymbolKind Kind, MutableArrayRef Contents, + std::vector &StrTableRefs) { + // For now we only handle S_FILESTATIC, but we may need the same logic for + // S_DEFRANGE and S_DEFRANGE_SUBFIELD. However, I cannot seem to generate any + // PDBs that contain these types of records, so because of the uncertainty + // they are omitted here until we can prove that it's necessary. + switch (Kind) { + case SymbolKind::S_FILESTATIC: + // FileStaticSym::ModFileOffset + recordStringTableReferenceAtOffset(Contents, 4, StrTableRefs); + break; + case SymbolKind::S_DEFRANGE: + case SymbolKind::S_DEFRANGE_SUBFIELD: + log("Not fixing up string table reference in S_DEFRANGE / " + "S_DEFRANGE_SUBFIELD record"); + break; + } +} + static SymbolKind symbolKind(ArrayRef RecordData) { const RecordPrefix *Prefix = reinterpret_cast(RecordData.data()); @@ -628,6 +659,7 @@ pdb::GSIStreamBuilder &GsiBuilder, const CVIndexMap &IndexMap, TypeCollection &IDTable, + std::vector &StringTableRefs, BinaryStreamRef SymData) { // FIXME: Improve error recovery by warning and skipping records when // possible. @@ -656,6 +688,10 @@ // "real" symbols in a PDB. translateIdSymbols(NewData, IDTable); + // If this record refers to an offset in the object file's string table, + // add that item to the global PDB string table and re-write the index. + recordStringTableReferences(Sym.kind(), Contents, StringTableRefs); + SymbolKind NewKind = symbolKind(NewData); // Fill in "Parent" and "End" fields by maintaining a stack of scopes. @@ -710,6 +746,9 @@ const CVIndexMap &IndexMap = mergeDebugT(File, ObjectIndexMap); // Now do all live .debug$S sections. + DebugStringTableSubsectionRef CVStrTab; + DebugChecksumsSubsectionRef Checksums; + std::vector StringTableReferences; for (SectionChunk *DebugChunk : File->getDebugChunks()) { if (!DebugChunk->isLive() || DebugChunk->getSectionName() != ".debug$S") continue; @@ -723,14 +762,20 @@ BinaryStreamReader Reader(RelocatedDebugContents, support::little); ExitOnErr(Reader.readArray(Subsections, RelocatedDebugContents.size())); - DebugStringTableSubsectionRef CVStrTab; - DebugChecksumsSubsectionRef Checksums; for (const DebugSubsectionRecord &SS : Subsections) { switch (SS.kind()) { - case DebugSubsectionKind::StringTable: + case DebugSubsectionKind::StringTable: { + auto Data = SS.getRecordData(); + ArrayRef Buffer; + cantFail(Data.readLongestContiguousChunk(0, Buffer)); + assert(!CVStrTab.valid() && + "Encountered multiple string table subsections!"); ExitOnErr(CVStrTab.initialize(SS.getRecordData())); break; + } case DebugSubsectionKind::FileChecksums: + assert(!Checksums.valid() && + "Encountered multiple checksum subsections!"); ExitOnErr(Checksums.initialize(SS.getRecordData())); break; case DebugSubsectionKind::Lines: @@ -741,10 +786,12 @@ case DebugSubsectionKind::Symbols: if (Config->DebugGHashes) { mergeSymbolRecords(Alloc, File, Builder.getGsiBuilder(), IndexMap, - GlobalIDTable, SS.getRecordData()); + GlobalIDTable, StringTableReferences, + SS.getRecordData()); } else { mergeSymbolRecords(Alloc, File, Builder.getGsiBuilder(), IndexMap, - IDTable, SS.getRecordData()); + IDTable, StringTableReferences, + SS.getRecordData()); } break; default: @@ -752,25 +799,47 @@ break; } } + } - if (Checksums.valid()) { - // Make a new file checksum table that refers to offsets in the PDB-wide - // string table. Generally the string table subsection appears after the - // checksum table, so we have to do this after looping over all the - // subsections. - if (!CVStrTab.valid()) - fatal(".debug$S sections must have both a string table subsection " - "and a checksum subsection table or neither"); - auto NewChecksums = make_unique(PDBStrTab); - for (FileChecksumEntry &FC : Checksums) { - StringRef FileName = ExitOnErr(CVStrTab.getString(FC.FileNameOffset)); - ExitOnErr(Builder.getDbiBuilder().addModuleSourceFile(*File->ModuleDBI, - FileName)); - NewChecksums->addChecksum(FileName, FC.Kind, FC.Checksum); - } - File->ModuleDBI->addDebugSubsection(std::move(NewChecksums)); + // We should have seen all debug subsections across the entire object file now + // which means that if a StringTable subsection and Checksums subsection were + // present, now is the time to handle them. + if (!CVStrTab.valid()) { + if (Checksums.valid()) + fatal(".debug$S sections with a checksums subsection must also contain a " + "string table subsection"); + + if (!StringTableReferences.empty()) + warn("No StringTable subsection was encountered, but there are string " + "table references"); + return; + } + + // Rewrite each string table reference based on the value that the string + // assumes in the final PDB. + for (ulittle32_t *Ref : StringTableReferences) { + auto ExpectedString = CVStrTab.getString(*Ref); + if (!ExpectedString) { + warn("Invalid string table reference"); + consumeError(ExpectedString.takeError()); + continue; } + + *Ref = PDBStrTab.insert(*ExpectedString); + } + + // Make a new file checksum table that refers to offsets in the PDB-wide + // string table. Generally the string table subsection appears after the + // checksum table, so we have to do this after looping over all the + // subsections. + auto NewChecksums = make_unique(PDBStrTab); + for (FileChecksumEntry &FC : Checksums) { + StringRef FileName = ExitOnErr(CVStrTab.getString(FC.FileNameOffset)); + ExitOnErr(Builder.getDbiBuilder().addModuleSourceFile(*File->ModuleDBI, + FileName)); + NewChecksums->addChecksum(FileName, FC.Kind, FC.Checksum); } + File->ModuleDBI->addDebugSubsection(std::move(NewChecksums)); } static PublicSym32 createPublic(Defined *Def) { Index: lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml =================================================================== --- lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml +++ lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml @@ -0,0 +1,1812 @@ +--- !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: 'D:\src\llvmbuild\cl\Debug\x64\a.obj' + - Kind: S_COMPILE3 + Compile3Sym: + Flags: [ SecurityChecks, HotPatch ] + Machine: X64 + FrontendMajor: 19 + FrontendMinor: 11 + FrontendBuild: 25547 + FrontendQFE: 0 + BackendMajor: 19 + BackendMinor: 11 + BackendBuild: 25547 + BackendQFE: 0 + Version: 'Microsoft (R) Optimizing Compiler' + - !Symbols + Records: + - Kind: S_LDATA32 + DataSym: + Type: 116 + DisplayName: x + - Kind: S_UDT + UDTSym: + Type: 4193 + UDTName: '__vc_attributes::event_sourceAttribute' + - Kind: S_UDT + UDTSym: + Type: 4185 + UDTName: '__vc_attributes::event_sourceAttribute::optimize_e' + - Kind: S_UDT + UDTSym: + Type: 4182 + UDTName: '__vc_attributes::event_sourceAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4178 + UDTName: '__vc_attributes::helper_attributes::v1_alttypeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4172 + UDTName: '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4168 + UDTName: '__vc_attributes::helper_attributes::usageAttribute' + - Kind: S_UDT + UDTSym: + Type: 4162 + UDTName: '__vc_attributes::helper_attributes::usageAttribute::usage_e' + - Kind: S_UDT + UDTSym: + Type: 4158 + UDTName: '__vc_attributes::threadingAttribute' + - Kind: S_UDT + UDTSym: + Type: 4150 + UDTName: '__vc_attributes::threadingAttribute::threading_e' + - Kind: S_UDT + UDTSym: + Type: 4146 + UDTName: '__vc_attributes::aggregatableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4138 + UDTName: '__vc_attributes::aggregatableAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4134 + UDTName: '__vc_attributes::event_receiverAttribute' + - Kind: S_UDT + UDTSym: + Type: 4124 + UDTName: '__vc_attributes::event_receiverAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4120 + UDTName: '__vc_attributes::moduleAttribute' + - Kind: S_UDT + UDTSym: + Type: 4106 + UDTName: '__vc_attributes::moduleAttribute::type_e' + - !FileChecksums + Checksums: + - FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp' + Kind: MD5 + Checksum: 108D915B38B79821EA2169DBD317C259 + - !InlineeLines + HasExtraFiles: false + Sites: + - FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp' + LineNum: 6 + Inlinee: 4099 + - !StringTable + Strings: + - 'd:\src\llvmbuild\cl\debug\x64\a.cpp' + - 'D:\src\llvmbuild\cl\Debug\x64\a.obj' + - !Symbols + Records: + - Kind: S_BUILDINFO + BuildInfoSym: + BuildId: 4203 + Relocations: + - VirtualAddress: 132 + SymbolName: '?x@@3HA' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 136 + SymbolName: '?x@@3HA' + 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: [ 116 ] + - Kind: LF_PROCEDURE + Procedure: + ReturnType: 3 + CallConv: NearC + Options: [ None ] + ParameterCount: 1 + ArgumentList: 4096 + - Kind: LF_POINTER + Pointer: + ReferentType: 1648 + Attrs: 65548 + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 4097 + Name: a + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 116, 4098 ] + - Kind: LF_PROCEDURE + Procedure: + ReturnType: 116 + CallConv: NearC + Options: [ None ] + ParameterCount: 2 + ArgumentList: 4100 + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 4101 + Name: main + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 4097 + Name: b + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::moduleAttribute' + UniqueName: '.?AUmoduleAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: dll + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: exe + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: service + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4 + Name: unspecified + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: EXE + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: SERVICE + - Kind: LF_ENUM + Enum: + NumEnumerators: 6 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4105 + Name: '__vc_attributes::moduleAttribute::type_e' + UniqueName: '.?AW4type_e@moduleAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'd:\src\llvmbuild\cl\debug\x64\predefined c++ attributes (compiler internal)' + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4106 + SourceFile: 4107 + LineNumber: 482 + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 112 + Modifiers: [ None, Const ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4109 + Attrs: 65548 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4106, 4110, 4110, 4110, 116, 48, 4110, 116, + 4110, 4110, 116, 48, 48, 4110, 4110 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4104 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4104 + ThisType: 4112 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 15 + ArgumentList: 4111 + ThisPointerAdjustment: 0 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4106 ] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4104 + ThisType: 4112 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4114 + ThisPointerAdjustment: 0 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ ] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4104 + ThisType: 4112 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4116 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4113 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4115 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4117 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4106 + Name: type_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 3 + MethodList: 4118 + Name: moduleAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 0 + Name: type + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 8 + Name: name + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 16 + Name: version + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 24 + Name: uuid + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 116 + FieldOffset: 32 + Name: lcid + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 36 + Name: control + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 40 + Name: helpstring + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 116 + FieldOffset: 48 + Name: helpstringcontext + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 56 + Name: helpstringdll + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 64 + Name: helpfile + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 116 + FieldOffset: 72 + Name: helpcontext + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 76 + Name: hidden + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 77 + Name: restricted + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 80 + Name: custom + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4110 + FieldOffset: 88 + Name: resource_name + - Kind: LF_STRUCTURE + Class: + MemberCount: 19 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4119 + Name: '__vc_attributes::moduleAttribute' + UniqueName: '.?AUmoduleAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 96 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4120 + SourceFile: 4107 + LineNumber: 481 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::event_receiverAttribute' + UniqueName: '.?AUevent_receiverAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: native + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: com + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: managed + - Kind: LF_ENUM + Enum: + NumEnumerators: 3 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4123 + Name: '__vc_attributes::event_receiverAttribute::type_e' + UniqueName: '.?AW4type_e@event_receiverAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4124 + SourceFile: 4107 + LineNumber: 136 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4124, 48 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4122 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4122 + ThisType: 4127 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 2 + ArgumentList: 4126 + ThisPointerAdjustment: 0 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4124 ] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4122 + ThisType: 4127 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4129 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4122 + ThisType: 4127 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4116 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4128 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4130 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4131 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4124 + Name: type_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 3 + MethodList: 4132 + Name: event_receiverAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4124 + FieldOffset: 0 + Name: type + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 4 + Name: layout_dependent + - Kind: LF_STRUCTURE + Class: + MemberCount: 6 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4133 + Name: '__vc_attributes::event_receiverAttribute' + UniqueName: '.?AUevent_receiverAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 8 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4134 + SourceFile: 4107 + LineNumber: 135 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::aggregatableAttribute' + UniqueName: '.?AUaggregatableAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: never + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: allowed + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: always + - Kind: LF_ENUM + Enum: + NumEnumerators: 3 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4137 + Name: '__vc_attributes::aggregatableAttribute::type_e' + UniqueName: '.?AW4type_e@aggregatableAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4138 + SourceFile: 4107 + LineNumber: 545 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4138 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4136 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4136 + ThisType: 4141 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4140 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4136 + ThisType: 4141 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4116 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4142 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4143 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4138 + Name: type_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 2 + MethodList: 4144 + Name: aggregatableAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4138 + FieldOffset: 0 + Name: type + - Kind: LF_STRUCTURE + Class: + MemberCount: 4 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4145 + Name: '__vc_attributes::aggregatableAttribute' + UniqueName: '.?AUaggregatableAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4146 + SourceFile: 4107 + LineNumber: 544 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::threadingAttribute' + UniqueName: '.?AUthreadingAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: apartment + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: single + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: free + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4 + Name: neutral + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 5 + Name: both + - Kind: LF_ENUM + Enum: + NumEnumerators: 5 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4149 + Name: '__vc_attributes::threadingAttribute::threading_e' + UniqueName: '.?AW4threading_e@threadingAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4150 + SourceFile: 4107 + LineNumber: 423 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4150 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4148 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4148 + ThisType: 4153 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4152 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4148 + ThisType: 4153 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4116 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4154 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4155 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4150 + Name: threading_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 2 + MethodList: 4156 + Name: threadingAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4150 + FieldOffset: 0 + Name: value + - Kind: LF_STRUCTURE + Class: + MemberCount: 4 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4157 + Name: '__vc_attributes::threadingAttribute' + UniqueName: '.?AUthreadingAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4158 + SourceFile: 4107 + LineNumber: 422 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::helper_attributes::usageAttribute' + UniqueName: '.?AUusageAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: eAnyUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: eCoClassUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: eCOMInterfaceUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 6 + Name: eInterfaceUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 8 + Name: eMemberUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16 + Name: eMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 32 + Name: eInterfaceMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 64 + Name: eInterfaceMemberUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 128 + Name: eCoClassMemberUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 256 + Name: eCoClassMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 768 + Name: eGlobalMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1024 + Name: eGlobalDataUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2048 + Name: eClassUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4096 + Name: eInterfaceParameterUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 12288 + Name: eMethodParameterUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16384 + Name: eIDLModuleUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 32768 + Name: eAnonymousUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 65536 + Name: eTypedefUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 131072 + Name: eUnionUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 262144 + Name: eEnumUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 524288 + Name: eDefineTagUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1048576 + Name: eStructUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2097152 + Name: eLocalUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4194304 + Name: ePropertyUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 8388608 + Name: eEventUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16777216 + Name: eTemplateUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16777216 + Name: eModuleUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 33554432 + Name: eIllegalUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 67108864 + Name: eAsynchronousUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4161535 + Name: eAnyIDLUsage + - Kind: LF_ENUM + Enum: + NumEnumerators: 30 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4161 + Name: '__vc_attributes::helper_attributes::usageAttribute::usage_e' + UniqueName: '.?AW4usage_e@usageAttribute@helper_attributes@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4162 + SourceFile: 4107 + LineNumber: 51 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 117 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4160 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4160 + ThisType: 4165 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4164 + ThisPointerAdjustment: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4162 + Name: usage_e + - Kind: LF_ONEMETHOD + OneMethod: + Type: 4166 + Attrs: 3 + VFTableOffset: -1 + Name: usageAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 117 + FieldOffset: 0 + Name: value + - Kind: LF_STRUCTURE + Class: + MemberCount: 3 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4167 + Name: '__vc_attributes::helper_attributes::usageAttribute' + UniqueName: '.?AUusageAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4168 + SourceFile: 4107 + LineNumber: 49 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::helper_attributes::v1_alttypeAttribute' + UniqueName: '.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: eBoolean + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: eInteger + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: eFloat + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: eDouble + - Kind: LF_ENUM + Enum: + NumEnumerators: 4 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4171 + Name: '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e' + UniqueName: '.?AW4type_e@v1_alttypeAttribute@helper_attributes@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4172 + SourceFile: 4107 + LineNumber: 38 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4172 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4170 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4170 + ThisType: 4175 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4174 + ThisPointerAdjustment: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4172 + Name: type_e + - Kind: LF_ONEMETHOD + OneMethod: + Type: 4176 + Attrs: 3 + VFTableOffset: -1 + Name: v1_alttypeAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4172 + FieldOffset: 0 + Name: type + - Kind: LF_STRUCTURE + Class: + MemberCount: 3 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4177 + Name: '__vc_attributes::helper_attributes::v1_alttypeAttribute' + UniqueName: '.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4178 + SourceFile: 4107 + LineNumber: 37 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::event_sourceAttribute' + UniqueName: '.?AUevent_sourceAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: native + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: com + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: managed + - Kind: LF_ENUM + Enum: + NumEnumerators: 3 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4181 + Name: '__vc_attributes::event_sourceAttribute::type_e' + UniqueName: '.?AW4type_e@event_sourceAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4182 + SourceFile: 4107 + LineNumber: 1142 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: speed + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: size + - Kind: LF_ENUM + Enum: + NumEnumerators: 2 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4184 + Name: '__vc_attributes::event_sourceAttribute::optimize_e' + UniqueName: '.?AW4optimize_e@event_sourceAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4185 + SourceFile: 4107 + LineNumber: 1145 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4182 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4180 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4180 + ThisType: 4188 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4187 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4180 + ThisType: 4188 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4116 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4189 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4190 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4182 + Name: type_e + - Kind: LF_NESTTYPE + NestedType: + Type: 4185 + Name: optimize_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 2 + MethodList: 4191 + Name: event_sourceAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4182 + FieldOffset: 0 + Name: type + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4185 + FieldOffset: 4 + Name: optimize + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 8 + Name: decorate + - Kind: LF_STRUCTURE + Class: + MemberCount: 7 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4192 + Name: '__vc_attributes::event_sourceAttribute' + UniqueName: '.?AUevent_sourceAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 12 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4193 + SourceFile: 4107 + LineNumber: 1141 + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'D:\src\llvmbuild\cl\Debug\x64' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: '-Z7 -O1 -c -MT -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include" -I"C:\Program' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: ' Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um"' + - Kind: LF_SUBSTR_LIST + StringList: + StringIndices: [ 4197, 4198 ] + - Kind: LF_STRING_ID + StringId: + Id: 4199 + String: ' -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" -TP -X' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: a.cpp + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'D:\src\llvmbuild\cl\Debug\x64\vc140.pdb' + - Kind: LF_BUILDINFO + BuildInfo: + ArgIndices: [ 4195, 4196, 4201, 4202, 4200 ] + - Name: .bss + Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] + Alignment: 4 + SectionData: '' + - Name: '.text$mn' + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: 4883EC288B0D0000000085C97405E8000000004883C428C3 + Relocations: + - VirtualAddress: 6 + SymbolName: '?x@@3HA' + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 15 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_REL32 + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + Subsections: + - !Symbols + Records: + - Kind: S_GPROC32_ID + ProcSym: + CodeSize: 24 + DbgStart: 4 + DbgEnd: 19 + FunctionType: 4099 + Flags: [ HasOptimizedDebugInfo ] + DisplayName: a + - Kind: S_LOCAL + LocalSym: + Type: 116 + Flags: [ IsParameter ] + VarName: __formal + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE + DefRangeFramePointerRelFullScopeSym: + - Kind: S_CALLEES + CallerSym: + FuncID: [ 4103 ] + - Kind: S_FILESTATIC + FileStaticSym: + Index: 116 + ModFilenameOffset: 37 + Flags: [ IsEnregisteredGlobal, IsEnregisteredStatic ] + Name: x + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_FRAMEPROC + FrameProcSym: + TotalFrameBytes: 40 + PaddingFrameBytes: 0 + OffsetToPadding: 0 + BytesOfCalleeSavedRegisters: 0 + OffsetOfExceptionHandler: 0 + SectionIdOfExceptionHandler: 0 + Flags: [ AsynchronousExceptionHandling, Inlined ] + - Kind: S_REGREL32 + RegRelativeSym: + Offset: 48 + Type: 116 + Register: RSP + VarName: __formal + - Kind: S_PROC_ID_END + ScopeEndSym: + - !Lines + CodeSize: 24 + Flags: [ ] + RelocOffset: 0 + RelocSegment: 0 + Blocks: + - FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp' + Lines: + - Offset: 0 + LineStart: 5 + IsStatement: true + EndDelta: 0 + - Offset: 4 + LineStart: 6 + IsStatement: true + EndDelta: 0 + - Offset: 14 + LineStart: 7 + IsStatement: true + EndDelta: 0 + - Offset: 19 + LineStart: 8 + IsStatement: true + EndDelta: 0 + Columns: + Relocations: + - VirtualAddress: 44 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 48 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 80 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 84 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 132 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 136 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 208 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 212 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - Name: '.text$mn' + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: 4883EC288B050000000085C0740D8BC8E8000000008B05000000004883C428C3 + Relocations: + - VirtualAddress: 6 + SymbolName: '?x@@3HA' + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 17 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 23 + SymbolName: '?x@@3HA' + Type: IMAGE_REL_AMD64_REL32 + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + Subsections: + - !Symbols + Records: + - Kind: S_GPROC32_ID + ProcSym: + CodeSize: 32 + DbgStart: 4 + DbgEnd: 27 + FunctionType: 4102 + Flags: [ HasOptimizedDebugInfo ] + DisplayName: main + - Kind: S_LOCAL + LocalSym: + Type: 116 + Flags: [ IsParameter ] + VarName: argc + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE + DefRangeFramePointerRelFullScopeSym: + - Kind: S_LOCAL + LocalSym: + Type: 4098 + Flags: [ IsParameter ] + VarName: argv + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE + DefRangeFramePointerRelFullScopeSym: + - Kind: S_INLINESITE + InlineSiteSym: + Inlinee: 4099 + - Kind: S_CALLEES + CallerSym: + FuncID: [ 4103 ] + - Kind: S_INLINESITE_END + ScopeEndSym: + - Kind: S_FILESTATIC + FileStaticSym: + Index: 116 + ModFilenameOffset: 37 + Flags: [ IsEnregisteredGlobal, IsEnregisteredStatic ] + Name: x + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_FRAMEPROC + FrameProcSym: + TotalFrameBytes: 40 + PaddingFrameBytes: 0 + OffsetToPadding: 0 + BytesOfCalleeSavedRegisters: 0 + OffsetOfExceptionHandler: 0 + SectionIdOfExceptionHandler: 0 + Flags: [ AsynchronousExceptionHandling ] + - Kind: S_INLINEES + CallerSym: + FuncID: [ 4099 ] + - Kind: S_REGREL32 + RegRelativeSym: + Offset: 48 + Type: 116 + Register: RSP + VarName: argc + - Kind: S_REGREL32 + RegRelativeSym: + Offset: 56 + Type: 4098 + Register: RSP + VarName: argv + - Kind: S_PROC_ID_END + ScopeEndSym: + - !Lines + CodeSize: 32 + Flags: [ ] + RelocOffset: 0 + RelocSegment: 0 + Blocks: + - FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp' + Lines: + - Offset: 0 + LineStart: 10 + IsStatement: true + EndDelta: 0 + - Offset: 4 + LineStart: 11 + IsStatement: true + EndDelta: 0 + - Offset: 27 + LineStart: 13 + IsStatement: true + EndDelta: 0 + Columns: + Relocations: + - VirtualAddress: 44 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 48 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 79 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 83 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 95 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 99 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 134 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 138 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 150 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 154 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 229 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 233 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 336 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 340 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - Name: .xdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '0104010004420000' + - Name: .pdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '000000001800000000000000' + Relocations: + - VirtualAddress: 0 + SymbolName: '$LN5' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 4 + SymbolName: '$LN5' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 8 + SymbolName: '$unwind$?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_ADDR32NB + - Name: .xdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '0104010004420000' + - Name: .pdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '000000002000000000000000' + Relocations: + - VirtualAddress: 0 + SymbolName: '$LN7' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 4 + SymbolName: '$LN7' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 8 + SymbolName: '$unwind$main' + Type: IMAGE_REL_AMD64_ADDR32NB +symbols: + - Name: '@comp.id' + Value: 17130443 + 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: 1120 + NumberOfRelocations: 2 + 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: 6700 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: .bss + 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: 0 + Number: 0 + - Name: '?x@@3HA' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: '.text$mn' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 24 + NumberOfRelocations: 2 + NumberOfLinenumbers: 0 + CheckSum: 211387054 + Number: 0 + Selection: IMAGE_COMDAT_SELECT_NODUPLICATES + - Name: '.debug$S' + Value: 0 + SectionNumber: 6 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 264 + NumberOfRelocations: 8 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 5 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '.text$mn' + Value: 0 + SectionNumber: 7 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 32 + NumberOfRelocations: 3 + NumberOfLinenumbers: 0 + CheckSum: 3834856183 + Number: 0 + Selection: IMAGE_COMDAT_SELECT_NODUPLICATES + - Name: '.debug$S' + Value: 0 + SectionNumber: 8 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 384 + NumberOfRelocations: 14 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 7 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '?b@@YAXH@Z' + Value: 0 + SectionNumber: 0 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: '?a@@YAXH@Z' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: main + Value: 0 + SectionNumber: 7 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: '$LN5' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_LABEL + - Name: '$LN7' + Value: 0 + SectionNumber: 7 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_LABEL + - Name: .xdata + Value: 0 + SectionNumber: 9 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 8 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 264583633 + Number: 5 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '$unwind$?a@@YAXH@Z' + Value: 0 + SectionNumber: 9 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .pdata + Value: 0 + SectionNumber: 10 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 12 + NumberOfRelocations: 3 + NumberOfLinenumbers: 0 + CheckSum: 2942184094 + Number: 5 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '$pdata$?a@@YAXH@Z' + Value: 0 + SectionNumber: 10 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .xdata + Value: 0 + SectionNumber: 11 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 8 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 264583633 + Number: 7 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '$unwind$main' + Value: 0 + SectionNumber: 11 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .pdata + Value: 0 + SectionNumber: 12 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 12 + NumberOfRelocations: 3 + NumberOfLinenumbers: 0 + CheckSum: 4185285206 + Number: 7 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '$pdata$main' + Value: 0 + SectionNumber: 12 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC +... Index: lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml =================================================================== --- lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml +++ lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml @@ -0,0 +1,1537 @@ +--- !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: 'D:\src\llvmbuild\cl\Debug\x64\b.obj' + - Kind: S_COMPILE3 + Compile3Sym: + Flags: [ SecurityChecks, HotPatch ] + Machine: X64 + FrontendMajor: 19 + FrontendMinor: 11 + FrontendBuild: 25547 + FrontendQFE: 0 + BackendMajor: 19 + BackendMinor: 11 + BackendBuild: 25547 + BackendQFE: 0 + Version: 'Microsoft (R) Optimizing Compiler' + - !Symbols + Records: + - Kind: S_LDATA32 + DataSym: + Type: 116 + DisplayName: y + - Kind: S_UDT + UDTSym: + Type: 4189 + UDTName: '__vc_attributes::event_sourceAttribute' + - Kind: S_UDT + UDTSym: + Type: 4181 + UDTName: '__vc_attributes::event_sourceAttribute::optimize_e' + - Kind: S_UDT + UDTSym: + Type: 4178 + UDTName: '__vc_attributes::event_sourceAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4174 + UDTName: '__vc_attributes::helper_attributes::v1_alttypeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4168 + UDTName: '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4164 + UDTName: '__vc_attributes::helper_attributes::usageAttribute' + - Kind: S_UDT + UDTSym: + Type: 4158 + UDTName: '__vc_attributes::helper_attributes::usageAttribute::usage_e' + - Kind: S_UDT + UDTSym: + Type: 4154 + UDTName: '__vc_attributes::threadingAttribute' + - Kind: S_UDT + UDTSym: + Type: 4146 + UDTName: '__vc_attributes::threadingAttribute::threading_e' + - Kind: S_UDT + UDTSym: + Type: 4142 + UDTName: '__vc_attributes::aggregatableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4134 + UDTName: '__vc_attributes::aggregatableAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4130 + UDTName: '__vc_attributes::event_receiverAttribute' + - Kind: S_UDT + UDTSym: + Type: 4120 + UDTName: '__vc_attributes::event_receiverAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4116 + UDTName: '__vc_attributes::moduleAttribute' + - Kind: S_UDT + UDTSym: + Type: 4102 + UDTName: '__vc_attributes::moduleAttribute::type_e' + - !FileChecksums + Checksums: + - FileName: 'd:\src\llvmbuild\cl\debug\x64\b.cpp' + Kind: MD5 + Checksum: 2B9F08E2C7D63D3033E1997500CE3C53 + - !StringTable + Strings: + - 'd:\src\llvmbuild\cl\debug\x64\b.cpp' + - 'D:\src\llvmbuild\cl\Debug\x64\b.obj' + - !Symbols + Records: + - Kind: S_BUILDINFO + BuildInfoSym: + BuildId: 4199 + Relocations: + - VirtualAddress: 132 + SymbolName: '?y@@3HA' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 136 + SymbolName: '?y@@3HA' + 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: [ 116 ] + - Kind: LF_PROCEDURE + Procedure: + ReturnType: 3 + CallConv: NearC + Options: [ None ] + ParameterCount: 1 + ArgumentList: 4096 + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 4097 + Name: b + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 4097 + Name: a + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::moduleAttribute' + UniqueName: '.?AUmoduleAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: dll + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: exe + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: service + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4 + Name: unspecified + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: EXE + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: SERVICE + - Kind: LF_ENUM + Enum: + NumEnumerators: 6 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4101 + Name: '__vc_attributes::moduleAttribute::type_e' + UniqueName: '.?AW4type_e@moduleAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'd:\src\llvmbuild\cl\debug\x64\predefined c++ attributes (compiler internal)' + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4102 + SourceFile: 4103 + LineNumber: 482 + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 112 + Modifiers: [ None, Const ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4105 + Attrs: 65548 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4102, 4106, 4106, 4106, 116, 48, 4106, 116, + 4106, 4106, 116, 48, 48, 4106, 4106 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4100 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4100 + ThisType: 4108 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 15 + ArgumentList: 4107 + ThisPointerAdjustment: 0 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4102 ] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4100 + ThisType: 4108 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4110 + ThisPointerAdjustment: 0 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ ] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4100 + ThisType: 4108 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4112 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4109 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4111 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4113 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4102 + Name: type_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 3 + MethodList: 4114 + Name: moduleAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4102 + FieldOffset: 0 + Name: type + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 8 + Name: name + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 16 + Name: version + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 24 + Name: uuid + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 116 + FieldOffset: 32 + Name: lcid + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 36 + Name: control + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 40 + Name: helpstring + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 116 + FieldOffset: 48 + Name: helpstringcontext + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 56 + Name: helpstringdll + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 64 + Name: helpfile + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 116 + FieldOffset: 72 + Name: helpcontext + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 76 + Name: hidden + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 77 + Name: restricted + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 80 + Name: custom + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4106 + FieldOffset: 88 + Name: resource_name + - Kind: LF_STRUCTURE + Class: + MemberCount: 19 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4115 + Name: '__vc_attributes::moduleAttribute' + UniqueName: '.?AUmoduleAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 96 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4116 + SourceFile: 4103 + LineNumber: 481 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::event_receiverAttribute' + UniqueName: '.?AUevent_receiverAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: native + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: com + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: managed + - Kind: LF_ENUM + Enum: + NumEnumerators: 3 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4119 + Name: '__vc_attributes::event_receiverAttribute::type_e' + UniqueName: '.?AW4type_e@event_receiverAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4120 + SourceFile: 4103 + LineNumber: 136 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4120, 48 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4118 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4118 + ThisType: 4123 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 2 + ArgumentList: 4122 + ThisPointerAdjustment: 0 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4120 ] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4118 + ThisType: 4123 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4125 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4118 + ThisType: 4123 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4112 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4124 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4126 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4127 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4120 + Name: type_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 3 + MethodList: 4128 + Name: event_receiverAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4120 + FieldOffset: 0 + Name: type + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 4 + Name: layout_dependent + - Kind: LF_STRUCTURE + Class: + MemberCount: 6 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4129 + Name: '__vc_attributes::event_receiverAttribute' + UniqueName: '.?AUevent_receiverAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 8 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4130 + SourceFile: 4103 + LineNumber: 135 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::aggregatableAttribute' + UniqueName: '.?AUaggregatableAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: never + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: allowed + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: always + - Kind: LF_ENUM + Enum: + NumEnumerators: 3 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4133 + Name: '__vc_attributes::aggregatableAttribute::type_e' + UniqueName: '.?AW4type_e@aggregatableAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4134 + SourceFile: 4103 + LineNumber: 545 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4134 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4132 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4132 + ThisType: 4137 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4136 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4132 + ThisType: 4137 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4112 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4138 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4139 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4134 + Name: type_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 2 + MethodList: 4140 + Name: aggregatableAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4134 + FieldOffset: 0 + Name: type + - Kind: LF_STRUCTURE + Class: + MemberCount: 4 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4141 + Name: '__vc_attributes::aggregatableAttribute' + UniqueName: '.?AUaggregatableAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4142 + SourceFile: 4103 + LineNumber: 544 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::threadingAttribute' + UniqueName: '.?AUthreadingAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: apartment + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: single + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: free + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4 + Name: neutral + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 5 + Name: both + - Kind: LF_ENUM + Enum: + NumEnumerators: 5 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4145 + Name: '__vc_attributes::threadingAttribute::threading_e' + UniqueName: '.?AW4threading_e@threadingAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4146 + SourceFile: 4103 + LineNumber: 423 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4146 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4144 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4144 + ThisType: 4149 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4148 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4144 + ThisType: 4149 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4112 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4150 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4151 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4146 + Name: threading_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 2 + MethodList: 4152 + Name: threadingAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4146 + FieldOffset: 0 + Name: value + - Kind: LF_STRUCTURE + Class: + MemberCount: 4 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4153 + Name: '__vc_attributes::threadingAttribute' + UniqueName: '.?AUthreadingAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4154 + SourceFile: 4103 + LineNumber: 422 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::helper_attributes::usageAttribute' + UniqueName: '.?AUusageAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: eAnyUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: eCoClassUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: eCOMInterfaceUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 6 + Name: eInterfaceUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 8 + Name: eMemberUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16 + Name: eMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 32 + Name: eInterfaceMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 64 + Name: eInterfaceMemberUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 128 + Name: eCoClassMemberUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 256 + Name: eCoClassMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 768 + Name: eGlobalMethodUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1024 + Name: eGlobalDataUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2048 + Name: eClassUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4096 + Name: eInterfaceParameterUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 12288 + Name: eMethodParameterUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16384 + Name: eIDLModuleUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 32768 + Name: eAnonymousUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 65536 + Name: eTypedefUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 131072 + Name: eUnionUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 262144 + Name: eEnumUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 524288 + Name: eDefineTagUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1048576 + Name: eStructUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2097152 + Name: eLocalUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4194304 + Name: ePropertyUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 8388608 + Name: eEventUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16777216 + Name: eTemplateUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 16777216 + Name: eModuleUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 33554432 + Name: eIllegalUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 67108864 + Name: eAsynchronousUsage + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 4161535 + Name: eAnyIDLUsage + - Kind: LF_ENUM + Enum: + NumEnumerators: 30 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4157 + Name: '__vc_attributes::helper_attributes::usageAttribute::usage_e' + UniqueName: '.?AW4usage_e@usageAttribute@helper_attributes@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4158 + SourceFile: 4103 + LineNumber: 51 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 117 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4156 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4156 + ThisType: 4161 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4160 + ThisPointerAdjustment: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4158 + Name: usage_e + - Kind: LF_ONEMETHOD + OneMethod: + Type: 4162 + Attrs: 3 + VFTableOffset: -1 + Name: usageAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 117 + FieldOffset: 0 + Name: value + - Kind: LF_STRUCTURE + Class: + MemberCount: 3 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4163 + Name: '__vc_attributes::helper_attributes::usageAttribute' + UniqueName: '.?AUusageAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4164 + SourceFile: 4103 + LineNumber: 49 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::helper_attributes::v1_alttypeAttribute' + UniqueName: '.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: eBoolean + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: eInteger + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: eFloat + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 3 + Name: eDouble + - Kind: LF_ENUM + Enum: + NumEnumerators: 4 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4167 + Name: '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e' + UniqueName: '.?AW4type_e@v1_alttypeAttribute@helper_attributes@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4168 + SourceFile: 4103 + LineNumber: 38 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4168 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4166 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4166 + ThisType: 4171 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4170 + ThisPointerAdjustment: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4168 + Name: type_e + - Kind: LF_ONEMETHOD + OneMethod: + Type: 4172 + Attrs: 3 + VFTableOffset: -1 + Name: v1_alttypeAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4168 + FieldOffset: 0 + Name: type + - Kind: LF_STRUCTURE + Class: + MemberCount: 3 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4173 + Name: '__vc_attributes::helper_attributes::v1_alttypeAttribute' + UniqueName: '.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 4 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4174 + SourceFile: 4103 + LineNumber: 37 + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference, HasUniqueName ] + FieldList: 0 + Name: '__vc_attributes::event_sourceAttribute' + UniqueName: '.?AUevent_sourceAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 0 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: native + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: com + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: managed + - Kind: LF_ENUM + Enum: + NumEnumerators: 3 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4177 + Name: '__vc_attributes::event_sourceAttribute::type_e' + UniqueName: '.?AW4type_e@event_sourceAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4178 + SourceFile: 4103 + LineNumber: 1142 + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: speed + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: size + - Kind: LF_ENUM + Enum: + NumEnumerators: 2 + Options: [ None, Nested, HasUniqueName ] + FieldList: 4180 + Name: '__vc_attributes::event_sourceAttribute::optimize_e' + UniqueName: '.?AW4optimize_e@event_sourceAttribute@__vc_attributes@@' + UnderlyingType: 116 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4181 + SourceFile: 4103 + LineNumber: 1145 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 4178 ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4176 + Attrs: 66572 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4176 + ThisType: 4184 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 1 + ArgumentList: 4183 + ThisPointerAdjustment: 0 + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 3 + ClassType: 4176 + ThisType: 4184 + CallConv: NearC + Options: [ None, Constructor ] + ParameterCount: 0 + ArgumentList: 4112 + ThisPointerAdjustment: 0 + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 4185 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Type: 4186 + Attrs: 3 + VFTableOffset: -1 + Name: '' + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_NESTTYPE + NestedType: + Type: 4178 + Name: type_e + - Kind: LF_NESTTYPE + NestedType: + Type: 4181 + Name: optimize_e + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 2 + MethodList: 4187 + Name: event_sourceAttribute + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4178 + FieldOffset: 0 + Name: type + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 4181 + FieldOffset: 4 + Name: optimize + - Kind: LF_MEMBER + DataMember: + Attrs: 3 + Type: 48 + FieldOffset: 8 + Name: decorate + - Kind: LF_STRUCTURE + Class: + MemberCount: 7 + Options: [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ] + FieldList: 4188 + Name: '__vc_attributes::event_sourceAttribute' + UniqueName: '.?AUevent_sourceAttribute@__vc_attributes@@' + DerivationList: 0 + VTableShape: 0 + Size: 12 + - Kind: LF_UDT_SRC_LINE + UdtSourceLine: + UDT: 4189 + SourceFile: 4103 + LineNumber: 1141 + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'D:\src\llvmbuild\cl\Debug\x64' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: '-Z7 -O1 -c -MT -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include" -I"C:\Program' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: ' Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um"' + - Kind: LF_SUBSTR_LIST + StringList: + StringIndices: [ 4193, 4194 ] + - Kind: LF_STRING_ID + StringId: + Id: 4195 + String: ' -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" -TP -X' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: b.cpp + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'D:\src\llvmbuild\cl\Debug\x64\vc140.pdb' + - Kind: LF_BUILDINFO + BuildInfo: + ArgIndices: [ 4191, 4192, 4197, 4198, 4196 ] + - Name: .bss + Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] + Alignment: 4 + SectionData: '' + - Name: '.text$mn' + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: 4883EC288B0D0000000085C97405E8000000004883C428C3 + Relocations: + - VirtualAddress: 6 + SymbolName: '?y@@3HA' + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 15 + SymbolName: '?a@@YAXH@Z' + Type: IMAGE_REL_AMD64_REL32 + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + Subsections: + - !Symbols + Records: + - Kind: S_GPROC32_ID + ProcSym: + CodeSize: 24 + DbgStart: 4 + DbgEnd: 19 + FunctionType: 4098 + Flags: [ HasOptimizedDebugInfo ] + DisplayName: b + - Kind: S_LOCAL + LocalSym: + Type: 116 + Flags: [ IsParameter ] + VarName: __formal + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE + DefRangeFramePointerRelFullScopeSym: + - Kind: S_CALLEES + CallerSym: + FuncID: [ 4099 ] + - Kind: S_FILESTATIC + FileStaticSym: + Index: 116 + ModFilenameOffset: 37 + Flags: [ IsEnregisteredGlobal, IsEnregisteredStatic ] + Name: y + - Kind: S_DEFRANGE_REGISTER + DefRangeRegisterSym: + - Kind: S_FRAMEPROC + FrameProcSym: + TotalFrameBytes: 40 + PaddingFrameBytes: 0 + OffsetToPadding: 0 + BytesOfCalleeSavedRegisters: 0 + OffsetOfExceptionHandler: 0 + SectionIdOfExceptionHandler: 0 + Flags: [ AsynchronousExceptionHandling ] + - Kind: S_REGREL32 + RegRelativeSym: + Offset: 48 + Type: 116 + Register: RSP + VarName: __formal + - Kind: S_PROC_ID_END + ScopeEndSym: + - !Lines + CodeSize: 24 + Flags: [ ] + RelocOffset: 0 + RelocSegment: 0 + Blocks: + - FileName: 'd:\src\llvmbuild\cl\debug\x64\b.cpp' + Lines: + - Offset: 0 + LineStart: 5 + IsStatement: true + EndDelta: 0 + - Offset: 4 + LineStart: 6 + IsStatement: true + EndDelta: 0 + - Offset: 14 + LineStart: 7 + IsStatement: true + EndDelta: 0 + - Offset: 19 + LineStart: 8 + IsStatement: true + EndDelta: 0 + Columns: + Relocations: + - VirtualAddress: 44 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 48 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 80 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 84 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 132 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 136 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 208 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 212 + SymbolName: '?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_SECTION + - Name: .xdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '0104010004420000' + - Name: .pdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '000000001800000000000000' + Relocations: + - VirtualAddress: 0 + SymbolName: '$LN5' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 4 + SymbolName: '$LN5' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 8 + SymbolName: '$unwind$?b@@YAXH@Z' + Type: IMAGE_REL_AMD64_ADDR32NB +symbols: + - Name: '@comp.id' + Value: 17130443 + 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: 1096 + NumberOfRelocations: 2 + 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: 6636 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: .bss + 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: 0 + Number: 0 + - Name: '?y@@3HA' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: '.text$mn' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 24 + NumberOfRelocations: 2 + NumberOfLinenumbers: 0 + CheckSum: 211387054 + Number: 0 + Selection: IMAGE_COMDAT_SELECT_NODUPLICATES + - Name: '.debug$S' + Value: 0 + SectionNumber: 6 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 264 + NumberOfRelocations: 8 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 5 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '?a@@YAXH@Z' + Value: 0 + SectionNumber: 0 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: '?b@@YAXH@Z' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: '$LN5' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_LABEL + - Name: .xdata + Value: 0 + SectionNumber: 7 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 8 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 264583633 + Number: 5 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '$unwind$?b@@YAXH@Z' + Value: 0 + SectionNumber: 7 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .pdata + Value: 0 + SectionNumber: 8 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 12 + NumberOfRelocations: 3 + NumberOfLinenumbers: 0 + CheckSum: 2942184094 + Number: 5 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '$pdata$?b@@YAXH@Z' + Value: 0 + SectionNumber: 8 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC +... Index: lld/trunk/test/COFF/pdb-file-static.test =================================================================== --- lld/trunk/test/COFF/pdb-file-static.test +++ lld/trunk/test/COFF/pdb-file-static.test @@ -0,0 +1,51 @@ +# RUN: yaml2obj %S/Inputs/pdb-file-statics-a.yaml > %t.a.obj +# RUN: yaml2obj %S/Inputs/pdb-file-statics-b.yaml > %t.b.obj +# RUN: lld-link %t.a.obj %t.b.obj /nodefaultlib /entry:main /debug /pdb:%t.pdb +# RUN: llvm-pdbutil dump -symbols %t.pdb | FileCheck %s + +# S_FILESTATIC records are unique in that they refer to the string table, but +# they do *not* go through the file checksums table. They refer directly to +# the string table. This makes for special handling in the linker, so it +# deserves a custom test. + +# Clang doesn't currently generate these records, but MSVC does, so we have to +# be able to correctly link them. These records are only generated when +# optimizations are turned on. + +# // a.cpp +# // cl.exe /Z7 /O1 /c a.cpp +# static int x = 0; +# +# void b(int); +# +# void a(int) { +# if (x) +# b(x); +# } +# +# int main(int argc, char **argv) { +# a(argc); +# return x; +# } +# +# // b.cpp +# // cl.exe /Z7 /O1 /c a.cpp +# void a(int); +# +# static int y = 0; +# +# void b(int) { +# if (y) +# a(y); +# } + +# CHECK: Symbols +# CHECK: ============================================================ +# CHECK-LABEL: Mod 0000 | `{{.*}}a.obj`: +# CHECK: 232 | S_FILESTATIC [size = 16] `x` +# CHECK-NEXT: type = 0x0074 (int), file name = 1 (D:\src\llvmbuild\cl\Debug\x64\a.obj), flags = enreg global | enreg static +# CHECK: Mod 0001 | `{{.*}}b.obj`: +# CHECK: 232 | S_FILESTATIC [size = 16] `y` +# CHECK-NEXT: type = 0x0074 (int), file name = 73 (D:\src\llvmbuild\cl\Debug\x64\b.obj), flags = enreg global | enreg static +# CHECK-LABEL: Mod 0002 | `* Linker *`: + Index: lld/trunk/test/COFF/pdb-source-lines.test =================================================================== --- lld/trunk/test/COFF/pdb-source-lines.test +++ lld/trunk/test/COFF/pdb-source-lines.test @@ -64,14 +64,6 @@ CHECK-NEXT: IsStatement: true CHECK-NEXT: EndDelta: 0 CHECK-NEXT: Columns: -CHECK-NEXT: - !FileChecksums -CHECK-NEXT: Checksums: -CHECK-NEXT: - FileName: '{{.*}}pdb_lines_1.c' -CHECK-NEXT: Kind: MD5 -CHECK-NEXT: Checksum: 4EB19DCD86C3BA2238A255C718572E7B -CHECK-NEXT: - FileName: '{{.*}}foo.h' -CHECK-NEXT: Kind: MD5 -CHECK-NEXT: Checksum: 061EB73ABB642532857A4F1D9CBAC323 CHECK-NEXT: - !Lines CHECK-NEXT: CodeSize: 14 CHECK-NEXT: Flags: [ ] @@ -93,6 +85,14 @@ CHECK-NEXT: IsStatement: true CHECK-NEXT: EndDelta: 0 CHECK-NEXT: Columns: +CHECK-NEXT: - !FileChecksums +CHECK-NEXT: Checksums: +CHECK-NEXT: - FileName: '{{.*}}pdb_lines_1.c' +CHECK-NEXT: Kind: MD5 +CHECK-NEXT: Checksum: 4EB19DCD86C3BA2238A255C718572E7B +CHECK-NEXT: - FileName: '{{.*}}foo.h' +CHECK-NEXT: Kind: MD5 +CHECK-NEXT: Checksum: 061EB73ABB642532857A4F1D9CBAC323 CHECK-LABEL: - Module: {{.*}}pdb_lines_2.obj CHECK-NEXT: ObjFile: {{.*}}pdb_lines_2.obj Index: llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h =================================================================== --- llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h +++ llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h @@ -75,6 +75,8 @@ Error dumpSymbolStats(); Error dumpUdtStats(); Error dumpStringTable(); + Error dumpStringTableFromPdb(); + Error dumpStringTableFromObj(); Error dumpLines(); Error dumpInlineeLines(); Error dumpXmi(); Index: llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp =================================================================== --- llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -848,14 +848,7 @@ return Error::success(); } -Error DumpOutputStyle::dumpStringTable() { - printHeader(P, "String Table"); - - if (File.isObj()) { - P.formatLine("Dumping string table is not supported for object files"); - return Error::success(); - } - +Error DumpOutputStyle::dumpStringTableFromPdb() { AutoIndent Indent(P); auto IS = getPdb().getStringTable(); if (!IS) { @@ -895,6 +888,36 @@ return Error::success(); } +Error DumpOutputStyle::dumpStringTableFromObj() { + iterateModuleSubsections( + File, PrintScope{P, 4}, + [&](uint32_t Modi, const SymbolGroup &Strings, + DebugStringTableSubsectionRef &Strings2) { + BinaryStreamRef StringTableBuffer = Strings2.getBuffer(); + BinaryStreamReader Reader(StringTableBuffer); + while (Reader.bytesRemaining() > 0) { + StringRef Str; + uint32_t Offset = Reader.getOffset(); + cantFail(Reader.readCString(Str)); + if (Str.empty()) + continue; + + P.formatLine("{0} | {1}", fmt_align(Offset, AlignStyle::Right, 4), + Str); + } + }); + return Error::success(); +} + +Error DumpOutputStyle::dumpStringTable() { + printHeader(P, "String Table"); + + if (File.isPdb()) + return dumpStringTableFromPdb(); + + return dumpStringTableFromObj(); +} + static void buildDepSet(LazyRandomTypeCollection &Types, ArrayRef Indices, std::map &DepSet) { @@ -1124,6 +1147,7 @@ File, PrintScope{P, 2}, [&](uint32_t Modi, const SymbolGroup &Strings, DebugSymbolsSubsectionRef &Symbols) { + Dumper.setSymbolGroup(&Strings); for (auto Symbol : Symbols) { if (auto EC = Visitor.visitSymbolRecord(Symbol)) { SymbolError = llvm::make_unique(std::move(EC)); @@ -1165,8 +1189,8 @@ SymbolVisitorCallbackPipeline Pipeline; SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb); - MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes, Ids, - Types); + MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes, Strings, + Ids, Types); Pipeline.addCallbackToPipeline(Deserializer); Pipeline.addCallbackToPipeline(Dumper); Index: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h =================================================================== --- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h +++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h @@ -19,6 +19,7 @@ namespace pdb { class LinePrinter; +class SymbolGroup; class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks { public: @@ -26,11 +27,19 @@ codeview::LazyRandomTypeCollection &Ids, codeview::LazyRandomTypeCollection &Types) : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {} + MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, + const SymbolGroup &SymGroup, + codeview::LazyRandomTypeCollection &Ids, + codeview::LazyRandomTypeCollection &Types) + : P(P), RecordBytes(RecordBytes), SymGroup(&SymGroup), Ids(Ids), + Types(Types) {} Error visitSymbolBegin(codeview::CVSymbol &Record) override; Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset) override; Error visitSymbolEnd(codeview::CVSymbol &Record) override; + void setSymbolGroup(const SymbolGroup *Group) { SymGroup = Group; } + #define SYMBOL_RECORD(EnumName, EnumVal, Name) \ virtual Error visitKnownRecord(codeview::CVSymbol &CVR, \ codeview::Name &Record) override; @@ -45,6 +54,7 @@ LinePrinter &P; bool RecordBytes; + const SymbolGroup *SymGroup = nullptr; codeview::LazyRandomTypeCollection &Ids; codeview::LazyRandomTypeCollection &Types; }; Index: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp =================================================================== --- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp +++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp @@ -10,6 +10,7 @@ #include "MinimalSymbolDumper.h" #include "FormatUtil.h" +#include "InputFile.h" #include "LinePrinter.h" #include "llvm/DebugInfo/CodeView/CVRecord.h" @@ -18,6 +19,7 @@ #include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h" #include "llvm/DebugInfo/CodeView/SymbolRecord.h" #include "llvm/DebugInfo/CodeView/TypeRecord.h" +#include "llvm/DebugInfo/PDB/Native/PDBStringTable.h" #include "llvm/Support/FormatVariadic.h" using namespace llvm; @@ -450,6 +452,17 @@ Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FileStaticSym &FS) { P.format(" `{0}`", FS.Name); AutoIndent Indent(P, 7); + if (SymGroup) { + Expected FileName = + SymGroup->getNameFromStringTable(FS.ModFilenameOffset); + if (FileName) { + P.formatLine("type = {0}, file name = {1} ({2}), flags = {3}", + typeIndex(FS.Index), FS.ModFilenameOffset, *FileName, + formatLocalSymFlags(P.getIndentLevel() + 9, FS.Flags)); + } + return Error::success(); + } + P.formatLine("type = {0}, file name offset = {1}, flags = {2}", typeIndex(FS.Index), FS.ModFilenameOffset, formatLocalSymFlags(P.getIndentLevel() + 9, FS.Flags));