1*46225b19SZachary Turner //===- SymbolRecordMapping.cpp -----------------------------------*- C++-*-===// 2*46225b19SZachary Turner // 3*46225b19SZachary Turner // The LLVM Compiler Infrastructure 4*46225b19SZachary Turner // 5*46225b19SZachary Turner // This file is distributed under the University of Illinois Open Source 6*46225b19SZachary Turner // License. See LICENSE.TXT for details. 7*46225b19SZachary Turner // 8*46225b19SZachary Turner //===----------------------------------------------------------------------===// 9*46225b19SZachary Turner 10*46225b19SZachary Turner #include "llvm/DebugInfo/CodeView/SymbolRecordMapping.h" 11*46225b19SZachary Turner 12*46225b19SZachary Turner using namespace llvm; 13*46225b19SZachary Turner using namespace llvm::codeview; 14*46225b19SZachary Turner 15*46225b19SZachary Turner #define error(X) \ 16*46225b19SZachary Turner if (auto EC = X) \ 17*46225b19SZachary Turner return EC; 18*46225b19SZachary Turner 19*46225b19SZachary Turner namespace { 20*46225b19SZachary Turner struct MapGap { 21*46225b19SZachary Turner Error operator()(CodeViewRecordIO &IO, LocalVariableAddrGap &Gap) const { 22*46225b19SZachary Turner error(IO.mapInteger(Gap.GapStartOffset)); 23*46225b19SZachary Turner error(IO.mapInteger(Gap.Range)); 24*46225b19SZachary Turner return Error::success(); 25*46225b19SZachary Turner } 26*46225b19SZachary Turner }; 27*46225b19SZachary Turner } 28*46225b19SZachary Turner 29*46225b19SZachary Turner static Error mapLocalVariableAddrRange(CodeViewRecordIO &IO, 30*46225b19SZachary Turner LocalVariableAddrRange &Range) { 31*46225b19SZachary Turner error(IO.mapInteger(Range.OffsetStart)); 32*46225b19SZachary Turner error(IO.mapInteger(Range.ISectStart)); 33*46225b19SZachary Turner error(IO.mapInteger(Range.Range)); 34*46225b19SZachary Turner return Error::success(); 35*46225b19SZachary Turner } 36*46225b19SZachary Turner 37*46225b19SZachary Turner Error SymbolRecordMapping::visitSymbolBegin(CVSymbol &Record) { 38*46225b19SZachary Turner error(IO.beginRecord(MaxRecordLength - sizeof(RecordPrefix))); 39*46225b19SZachary Turner return Error::success(); 40*46225b19SZachary Turner } 41*46225b19SZachary Turner 42*46225b19SZachary Turner Error SymbolRecordMapping::visitSymbolEnd(CVSymbol &Record) { 43*46225b19SZachary Turner error(IO.endRecord()); 44*46225b19SZachary Turner return Error::success(); 45*46225b19SZachary Turner } 46*46225b19SZachary Turner 47*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, BlockSym &Block) { 48*46225b19SZachary Turner 49*46225b19SZachary Turner error(IO.mapInteger(Block.Parent)); 50*46225b19SZachary Turner error(IO.mapInteger(Block.End)); 51*46225b19SZachary Turner error(IO.mapInteger(Block.CodeSize)); 52*46225b19SZachary Turner error(IO.mapInteger(Block.CodeOffset)); 53*46225b19SZachary Turner error(IO.mapInteger(Block.Segment)); 54*46225b19SZachary Turner error(IO.mapStringZ(Block.Name)); 55*46225b19SZachary Turner 56*46225b19SZachary Turner return Error::success(); 57*46225b19SZachary Turner } 58*46225b19SZachary Turner 59*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, Thunk32Sym &Thunk) { 60*46225b19SZachary Turner 61*46225b19SZachary Turner error(IO.mapInteger(Thunk.Parent)); 62*46225b19SZachary Turner error(IO.mapInteger(Thunk.End)); 63*46225b19SZachary Turner error(IO.mapInteger(Thunk.Next)); 64*46225b19SZachary Turner error(IO.mapInteger(Thunk.Offset)); 65*46225b19SZachary Turner error(IO.mapInteger(Thunk.Segment)); 66*46225b19SZachary Turner error(IO.mapInteger(Thunk.Length)); 67*46225b19SZachary Turner error(IO.mapEnum(Thunk.Thunk)); 68*46225b19SZachary Turner error(IO.mapStringZ(Thunk.Name)); 69*46225b19SZachary Turner error(IO.mapByteVectorTail(Thunk.VariantData)); 70*46225b19SZachary Turner 71*46225b19SZachary Turner return Error::success(); 72*46225b19SZachary Turner } 73*46225b19SZachary Turner 74*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 75*46225b19SZachary Turner TrampolineSym &Tramp) { 76*46225b19SZachary Turner 77*46225b19SZachary Turner error(IO.mapEnum(Tramp.Type)); 78*46225b19SZachary Turner error(IO.mapInteger(Tramp.Size)); 79*46225b19SZachary Turner error(IO.mapInteger(Tramp.ThunkOffset)); 80*46225b19SZachary Turner error(IO.mapInteger(Tramp.TargetOffset)); 81*46225b19SZachary Turner error(IO.mapInteger(Tramp.ThunkSection)); 82*46225b19SZachary Turner error(IO.mapInteger(Tramp.TargetSection)); 83*46225b19SZachary Turner 84*46225b19SZachary Turner return Error::success(); 85*46225b19SZachary Turner } 86*46225b19SZachary Turner 87*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 88*46225b19SZachary Turner SectionSym &Section) { 89*46225b19SZachary Turner uint8_t Padding = 0; 90*46225b19SZachary Turner 91*46225b19SZachary Turner error(IO.mapInteger(Section.SectionNumber)); 92*46225b19SZachary Turner error(IO.mapInteger(Section.Alignment)); 93*46225b19SZachary Turner error(IO.mapInteger(Padding)); 94*46225b19SZachary Turner error(IO.mapInteger(Section.Rva)); 95*46225b19SZachary Turner error(IO.mapInteger(Section.Length)); 96*46225b19SZachary Turner error(IO.mapInteger(Section.Characteristics)); 97*46225b19SZachary Turner error(IO.mapStringZ(Section.Name)); 98*46225b19SZachary Turner 99*46225b19SZachary Turner return Error::success(); 100*46225b19SZachary Turner } 101*46225b19SZachary Turner 102*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 103*46225b19SZachary Turner CoffGroupSym &CoffGroup) { 104*46225b19SZachary Turner 105*46225b19SZachary Turner error(IO.mapInteger(CoffGroup.Size)); 106*46225b19SZachary Turner error(IO.mapInteger(CoffGroup.Characteristics)); 107*46225b19SZachary Turner error(IO.mapInteger(CoffGroup.Offset)); 108*46225b19SZachary Turner error(IO.mapInteger(CoffGroup.Segment)); 109*46225b19SZachary Turner error(IO.mapStringZ(CoffGroup.Name)); 110*46225b19SZachary Turner 111*46225b19SZachary Turner return Error::success(); 112*46225b19SZachary Turner } 113*46225b19SZachary Turner 114*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 115*46225b19SZachary Turner BPRelativeSym &BPRel) { 116*46225b19SZachary Turner 117*46225b19SZachary Turner error(IO.mapInteger(BPRel.Offset)); 118*46225b19SZachary Turner error(IO.mapInteger(BPRel.Type)); 119*46225b19SZachary Turner error(IO.mapStringZ(BPRel.Name)); 120*46225b19SZachary Turner 121*46225b19SZachary Turner return Error::success(); 122*46225b19SZachary Turner } 123*46225b19SZachary Turner 124*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 125*46225b19SZachary Turner BuildInfoSym &BuildInfo) { 126*46225b19SZachary Turner 127*46225b19SZachary Turner error(IO.mapInteger(BuildInfo.BuildId)); 128*46225b19SZachary Turner 129*46225b19SZachary Turner return Error::success(); 130*46225b19SZachary Turner } 131*46225b19SZachary Turner 132*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 133*46225b19SZachary Turner CallSiteInfoSym &CallSiteInfo) { 134*46225b19SZachary Turner uint16_t Padding = 0; 135*46225b19SZachary Turner 136*46225b19SZachary Turner error(IO.mapInteger(CallSiteInfo.CodeOffset)); 137*46225b19SZachary Turner error(IO.mapInteger(CallSiteInfo.Segment)); 138*46225b19SZachary Turner error(IO.mapInteger(Padding)); 139*46225b19SZachary Turner error(IO.mapInteger(CallSiteInfo.Type)); 140*46225b19SZachary Turner 141*46225b19SZachary Turner return Error::success(); 142*46225b19SZachary Turner } 143*46225b19SZachary Turner 144*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 145*46225b19SZachary Turner EnvBlockSym &EnvBlock) { 146*46225b19SZachary Turner 147*46225b19SZachary Turner uint8_t Reserved = 0; 148*46225b19SZachary Turner error(IO.mapInteger(Reserved)); 149*46225b19SZachary Turner error(IO.mapStringZVectorZ(EnvBlock.Fields)); 150*46225b19SZachary Turner 151*46225b19SZachary Turner return Error::success(); 152*46225b19SZachary Turner } 153*46225b19SZachary Turner 154*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 155*46225b19SZachary Turner FileStaticSym &FileStatic) { 156*46225b19SZachary Turner 157*46225b19SZachary Turner error(IO.mapInteger(FileStatic.Index)); 158*46225b19SZachary Turner error(IO.mapInteger(FileStatic.ModFilenameOffset)); 159*46225b19SZachary Turner error(IO.mapEnum(FileStatic.Flags)); 160*46225b19SZachary Turner error(IO.mapStringZ(FileStatic.Name)); 161*46225b19SZachary Turner 162*46225b19SZachary Turner return Error::success(); 163*46225b19SZachary Turner } 164*46225b19SZachary Turner 165*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ExportSym &Export) { 166*46225b19SZachary Turner 167*46225b19SZachary Turner error(IO.mapInteger(Export.Ordinal)); 168*46225b19SZachary Turner error(IO.mapEnum(Export.Flags)); 169*46225b19SZachary Turner error(IO.mapStringZ(Export.Name)); 170*46225b19SZachary Turner 171*46225b19SZachary Turner return Error::success(); 172*46225b19SZachary Turner } 173*46225b19SZachary Turner 174*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 175*46225b19SZachary Turner Compile2Sym &Compile2) { 176*46225b19SZachary Turner 177*46225b19SZachary Turner error(IO.mapEnum(Compile2.Flags)); 178*46225b19SZachary Turner error(IO.mapEnum(Compile2.Machine)); 179*46225b19SZachary Turner error(IO.mapInteger(Compile2.VersionFrontendMajor)); 180*46225b19SZachary Turner error(IO.mapInteger(Compile2.VersionFrontendMinor)); 181*46225b19SZachary Turner error(IO.mapInteger(Compile2.VersionFrontendBuild)); 182*46225b19SZachary Turner error(IO.mapInteger(Compile2.VersionBackendMajor)); 183*46225b19SZachary Turner error(IO.mapInteger(Compile2.VersionBackendMinor)); 184*46225b19SZachary Turner error(IO.mapInteger(Compile2.VersionBackendBuild)); 185*46225b19SZachary Turner error(IO.mapStringZ(Compile2.Version)); 186*46225b19SZachary Turner error(IO.mapStringZVectorZ(Compile2.ExtraStrings)); 187*46225b19SZachary Turner 188*46225b19SZachary Turner return Error::success(); 189*46225b19SZachary Turner } 190*46225b19SZachary Turner 191*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 192*46225b19SZachary Turner Compile3Sym &Compile3) { 193*46225b19SZachary Turner 194*46225b19SZachary Turner error(IO.mapEnum(Compile3.Flags)); 195*46225b19SZachary Turner error(IO.mapEnum(Compile3.Machine)); 196*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionFrontendMajor)); 197*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionFrontendMinor)); 198*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionFrontendBuild)); 199*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionFrontendQFE)); 200*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionBackendMajor)); 201*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionBackendMinor)); 202*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionBackendBuild)); 203*46225b19SZachary Turner error(IO.mapInteger(Compile3.VersionBackendQFE)); 204*46225b19SZachary Turner error(IO.mapStringZ(Compile3.Version)); 205*46225b19SZachary Turner 206*46225b19SZachary Turner return Error::success(); 207*46225b19SZachary Turner } 208*46225b19SZachary Turner 209*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 210*46225b19SZachary Turner ConstantSym &Constant) { 211*46225b19SZachary Turner 212*46225b19SZachary Turner error(IO.mapInteger(Constant.Type)); 213*46225b19SZachary Turner error(IO.mapEncodedInteger(Constant.Value)); 214*46225b19SZachary Turner error(IO.mapStringZ(Constant.Name)); 215*46225b19SZachary Turner 216*46225b19SZachary Turner return Error::success(); 217*46225b19SZachary Turner } 218*46225b19SZachary Turner 219*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, DataSym &Data) { 220*46225b19SZachary Turner 221*46225b19SZachary Turner error(IO.mapInteger(Data.Type)); 222*46225b19SZachary Turner error(IO.mapInteger(Data.DataOffset)); 223*46225b19SZachary Turner error(IO.mapInteger(Data.Segment)); 224*46225b19SZachary Turner error(IO.mapStringZ(Data.Name)); 225*46225b19SZachary Turner 226*46225b19SZachary Turner return Error::success(); 227*46225b19SZachary Turner } 228*46225b19SZachary Turner 229*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord( 230*46225b19SZachary Turner CVSymbol &CVR, DefRangeFramePointerRelSym &DefRangeFramePointerRel) { 231*46225b19SZachary Turner 232*46225b19SZachary Turner error(IO.mapInteger(DefRangeFramePointerRel.Offset)); 233*46225b19SZachary Turner error(mapLocalVariableAddrRange(IO, DefRangeFramePointerRel.Range)); 234*46225b19SZachary Turner error(IO.mapVectorTail(DefRangeFramePointerRel.Gaps, MapGap())); 235*46225b19SZachary Turner 236*46225b19SZachary Turner return Error::success(); 237*46225b19SZachary Turner } 238*46225b19SZachary Turner 239*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord( 240*46225b19SZachary Turner CVSymbol &CVR, 241*46225b19SZachary Turner DefRangeFramePointerRelFullScopeSym &DefRangeFramePointerRelFullScope) { 242*46225b19SZachary Turner 243*46225b19SZachary Turner error(IO.mapInteger(DefRangeFramePointerRelFullScope.Offset)); 244*46225b19SZachary Turner 245*46225b19SZachary Turner return Error::success(); 246*46225b19SZachary Turner } 247*46225b19SZachary Turner 248*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord( 249*46225b19SZachary Turner CVSymbol &CVR, DefRangeRegisterRelSym &DefRangeRegisterRel) { 250*46225b19SZachary Turner 251*46225b19SZachary Turner error(IO.mapObject(DefRangeRegisterRel.Hdr.Register)); 252*46225b19SZachary Turner error(IO.mapObject(DefRangeRegisterRel.Hdr.Flags)); 253*46225b19SZachary Turner error(IO.mapObject(DefRangeRegisterRel.Hdr.BasePointerOffset)); 254*46225b19SZachary Turner error(mapLocalVariableAddrRange(IO, DefRangeRegisterRel.Range)); 255*46225b19SZachary Turner error(IO.mapVectorTail(DefRangeRegisterRel.Gaps, MapGap())); 256*46225b19SZachary Turner 257*46225b19SZachary Turner return Error::success(); 258*46225b19SZachary Turner } 259*46225b19SZachary Turner 260*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord( 261*46225b19SZachary Turner CVSymbol &CVR, DefRangeRegisterSym &DefRangeRegister) { 262*46225b19SZachary Turner 263*46225b19SZachary Turner error(IO.mapObject(DefRangeRegister.Hdr.Register)); 264*46225b19SZachary Turner error(IO.mapObject(DefRangeRegister.Hdr.MayHaveNoName)); 265*46225b19SZachary Turner error(mapLocalVariableAddrRange(IO, DefRangeRegister.Range)); 266*46225b19SZachary Turner error(IO.mapVectorTail(DefRangeRegister.Gaps, MapGap())); 267*46225b19SZachary Turner 268*46225b19SZachary Turner return Error::success(); 269*46225b19SZachary Turner } 270*46225b19SZachary Turner 271*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord( 272*46225b19SZachary Turner CVSymbol &CVR, DefRangeSubfieldRegisterSym &DefRangeSubfieldRegister) { 273*46225b19SZachary Turner 274*46225b19SZachary Turner error(IO.mapObject(DefRangeSubfieldRegister.Hdr.Register)); 275*46225b19SZachary Turner error(IO.mapObject(DefRangeSubfieldRegister.Hdr.MayHaveNoName)); 276*46225b19SZachary Turner error(IO.mapObject(DefRangeSubfieldRegister.Hdr.OffsetInParent)); 277*46225b19SZachary Turner error(mapLocalVariableAddrRange(IO, DefRangeSubfieldRegister.Range)); 278*46225b19SZachary Turner error(IO.mapVectorTail(DefRangeSubfieldRegister.Gaps, MapGap())); 279*46225b19SZachary Turner 280*46225b19SZachary Turner return Error::success(); 281*46225b19SZachary Turner } 282*46225b19SZachary Turner 283*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord( 284*46225b19SZachary Turner CVSymbol &CVR, DefRangeSubfieldSym &DefRangeSubfield) { 285*46225b19SZachary Turner 286*46225b19SZachary Turner error(IO.mapInteger(DefRangeSubfield.Program)); 287*46225b19SZachary Turner error(IO.mapInteger(DefRangeSubfield.OffsetInParent)); 288*46225b19SZachary Turner error(mapLocalVariableAddrRange(IO, DefRangeSubfield.Range)); 289*46225b19SZachary Turner error(IO.mapVectorTail(DefRangeSubfield.Gaps, MapGap())); 290*46225b19SZachary Turner 291*46225b19SZachary Turner return Error::success(); 292*46225b19SZachary Turner } 293*46225b19SZachary Turner 294*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 295*46225b19SZachary Turner DefRangeSym &DefRange) { 296*46225b19SZachary Turner 297*46225b19SZachary Turner error(IO.mapInteger(DefRange.Program)); 298*46225b19SZachary Turner error(mapLocalVariableAddrRange(IO, DefRange.Range)); 299*46225b19SZachary Turner error(IO.mapVectorTail(DefRange.Gaps, MapGap())); 300*46225b19SZachary Turner 301*46225b19SZachary Turner return Error::success(); 302*46225b19SZachary Turner } 303*46225b19SZachary Turner 304*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 305*46225b19SZachary Turner FrameCookieSym &FrameCookie) { 306*46225b19SZachary Turner 307*46225b19SZachary Turner error(IO.mapInteger(FrameCookie.CodeOffset)); 308*46225b19SZachary Turner error(IO.mapInteger(FrameCookie.Register)); 309*46225b19SZachary Turner error(IO.mapInteger(FrameCookie.CookieKind)); 310*46225b19SZachary Turner error(IO.mapInteger(FrameCookie.Flags)); 311*46225b19SZachary Turner 312*46225b19SZachary Turner return Error::success(); 313*46225b19SZachary Turner } 314*46225b19SZachary Turner 315*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 316*46225b19SZachary Turner FrameProcSym &FrameProc) { 317*46225b19SZachary Turner error(IO.mapInteger(FrameProc.TotalFrameBytes)); 318*46225b19SZachary Turner error(IO.mapInteger(FrameProc.PaddingFrameBytes)); 319*46225b19SZachary Turner error(IO.mapInteger(FrameProc.OffsetToPadding)); 320*46225b19SZachary Turner error(IO.mapInteger(FrameProc.BytesOfCalleeSavedRegisters)); 321*46225b19SZachary Turner error(IO.mapInteger(FrameProc.OffsetOfExceptionHandler)); 322*46225b19SZachary Turner error(IO.mapInteger(FrameProc.SectionIdOfExceptionHandler)); 323*46225b19SZachary Turner error(IO.mapEnum(FrameProc.Flags)); 324*46225b19SZachary Turner 325*46225b19SZachary Turner return Error::success(); 326*46225b19SZachary Turner } 327*46225b19SZachary Turner 328*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord( 329*46225b19SZachary Turner CVSymbol &CVR, HeapAllocationSiteSym &HeapAllocSite) { 330*46225b19SZachary Turner 331*46225b19SZachary Turner error(IO.mapInteger(HeapAllocSite.CodeOffset)); 332*46225b19SZachary Turner error(IO.mapInteger(HeapAllocSite.Segment)); 333*46225b19SZachary Turner error(IO.mapInteger(HeapAllocSite.CallInstructionSize)); 334*46225b19SZachary Turner error(IO.mapInteger(HeapAllocSite.Type)); 335*46225b19SZachary Turner 336*46225b19SZachary Turner return Error::success(); 337*46225b19SZachary Turner } 338*46225b19SZachary Turner 339*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 340*46225b19SZachary Turner InlineSiteSym &InlineSite) { 341*46225b19SZachary Turner 342*46225b19SZachary Turner error(IO.mapInteger(InlineSite.Parent)); 343*46225b19SZachary Turner error(IO.mapInteger(InlineSite.End)); 344*46225b19SZachary Turner error(IO.mapInteger(InlineSite.Inlinee)); 345*46225b19SZachary Turner error(IO.mapByteVectorTail(InlineSite.AnnotationData)); 346*46225b19SZachary Turner 347*46225b19SZachary Turner return Error::success(); 348*46225b19SZachary Turner } 349*46225b19SZachary Turner 350*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 351*46225b19SZachary Turner RegisterSym &Register) { 352*46225b19SZachary Turner 353*46225b19SZachary Turner error(IO.mapInteger(Register.Index)); 354*46225b19SZachary Turner error(IO.mapEnum(Register.Register)); 355*46225b19SZachary Turner error(IO.mapStringZ(Register.Name)); 356*46225b19SZachary Turner 357*46225b19SZachary Turner return Error::success(); 358*46225b19SZachary Turner } 359*46225b19SZachary Turner 360*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 361*46225b19SZachary Turner PublicSym32 &Public) { 362*46225b19SZachary Turner 363*46225b19SZachary Turner error(IO.mapInteger(Public.Index)); 364*46225b19SZachary Turner error(IO.mapInteger(Public.Offset)); 365*46225b19SZachary Turner error(IO.mapInteger(Public.Segment)); 366*46225b19SZachary Turner error(IO.mapStringZ(Public.Name)); 367*46225b19SZachary Turner 368*46225b19SZachary Turner return Error::success(); 369*46225b19SZachary Turner } 370*46225b19SZachary Turner 371*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 372*46225b19SZachary Turner ProcRefSym &ProcRef) { 373*46225b19SZachary Turner 374*46225b19SZachary Turner error(IO.mapInteger(ProcRef.SumName)); 375*46225b19SZachary Turner error(IO.mapInteger(ProcRef.SymOffset)); 376*46225b19SZachary Turner error(IO.mapInteger(ProcRef.Module)); 377*46225b19SZachary Turner error(IO.mapStringZ(ProcRef.Name)); 378*46225b19SZachary Turner 379*46225b19SZachary Turner return Error::success(); 380*46225b19SZachary Turner } 381*46225b19SZachary Turner 382*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LabelSym &Label) { 383*46225b19SZachary Turner 384*46225b19SZachary Turner error(IO.mapInteger(Label.CodeOffset)); 385*46225b19SZachary Turner error(IO.mapInteger(Label.Segment)); 386*46225b19SZachary Turner error(IO.mapEnum(Label.Flags)); 387*46225b19SZachary Turner error(IO.mapStringZ(Label.Name)); 388*46225b19SZachary Turner 389*46225b19SZachary Turner return Error::success(); 390*46225b19SZachary Turner } 391*46225b19SZachary Turner 392*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LocalSym &Local) { 393*46225b19SZachary Turner error(IO.mapInteger(Local.Type)); 394*46225b19SZachary Turner error(IO.mapEnum(Local.Flags)); 395*46225b19SZachary Turner error(IO.mapStringZ(Local.Name)); 396*46225b19SZachary Turner 397*46225b19SZachary Turner return Error::success(); 398*46225b19SZachary Turner } 399*46225b19SZachary Turner 400*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 401*46225b19SZachary Turner ObjNameSym &ObjName) { 402*46225b19SZachary Turner 403*46225b19SZachary Turner error(IO.mapInteger(ObjName.Signature)); 404*46225b19SZachary Turner error(IO.mapStringZ(ObjName.Name)); 405*46225b19SZachary Turner 406*46225b19SZachary Turner return Error::success(); 407*46225b19SZachary Turner } 408*46225b19SZachary Turner 409*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ProcSym &Proc) { 410*46225b19SZachary Turner error(IO.mapInteger(Proc.Parent)); 411*46225b19SZachary Turner error(IO.mapInteger(Proc.End)); 412*46225b19SZachary Turner error(IO.mapInteger(Proc.Next)); 413*46225b19SZachary Turner error(IO.mapInteger(Proc.CodeSize)); 414*46225b19SZachary Turner error(IO.mapInteger(Proc.DbgStart)); 415*46225b19SZachary Turner error(IO.mapInteger(Proc.DbgEnd)); 416*46225b19SZachary Turner error(IO.mapInteger(Proc.FunctionType)); 417*46225b19SZachary Turner error(IO.mapInteger(Proc.CodeOffset)); 418*46225b19SZachary Turner error(IO.mapInteger(Proc.Segment)); 419*46225b19SZachary Turner error(IO.mapEnum(Proc.Flags)); 420*46225b19SZachary Turner error(IO.mapStringZ(Proc.Name)); 421*46225b19SZachary Turner return Error::success(); 422*46225b19SZachary Turner } 423*46225b19SZachary Turner 424*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 425*46225b19SZachary Turner ScopeEndSym &ScopeEnd) { 426*46225b19SZachary Turner return Error::success(); 427*46225b19SZachary Turner } 428*46225b19SZachary Turner 429*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, CallerSym &Caller) { 430*46225b19SZachary Turner error(IO.mapVectorN<uint32_t>( 431*46225b19SZachary Turner Caller.Indices, 432*46225b19SZachary Turner [](CodeViewRecordIO &IO, TypeIndex &N) { return IO.mapInteger(N); })); 433*46225b19SZachary Turner return Error::success(); 434*46225b19SZachary Turner } 435*46225b19SZachary Turner 436*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 437*46225b19SZachary Turner RegRelativeSym &RegRel) { 438*46225b19SZachary Turner 439*46225b19SZachary Turner error(IO.mapInteger(RegRel.Offset)); 440*46225b19SZachary Turner error(IO.mapInteger(RegRel.Type)); 441*46225b19SZachary Turner error(IO.mapInteger(RegRel.Register)); 442*46225b19SZachary Turner error(IO.mapStringZ(RegRel.Name)); 443*46225b19SZachary Turner 444*46225b19SZachary Turner return Error::success(); 445*46225b19SZachary Turner } 446*46225b19SZachary Turner 447*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, 448*46225b19SZachary Turner ThreadLocalDataSym &Data) { 449*46225b19SZachary Turner 450*46225b19SZachary Turner error(IO.mapInteger(Data.Type)); 451*46225b19SZachary Turner error(IO.mapInteger(Data.DataOffset)); 452*46225b19SZachary Turner error(IO.mapInteger(Data.Segment)); 453*46225b19SZachary Turner error(IO.mapStringZ(Data.Name)); 454*46225b19SZachary Turner 455*46225b19SZachary Turner return Error::success(); 456*46225b19SZachary Turner } 457*46225b19SZachary Turner 458*46225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, UDTSym &UDT) { 459*46225b19SZachary Turner 460*46225b19SZachary Turner error(IO.mapInteger(UDT.Type)); 461*46225b19SZachary Turner error(IO.mapStringZ(UDT.Name)); 462*46225b19SZachary Turner 463*46225b19SZachary Turner return Error::success(); 464*46225b19SZachary Turner } 465