146225b19SZachary Turner //===- SymbolRecordMapping.cpp -----------------------------------*- C++-*-===//
246225b19SZachary Turner //
346225b19SZachary Turner //                     The LLVM Compiler Infrastructure
446225b19SZachary Turner //
546225b19SZachary Turner // This file is distributed under the University of Illinois Open Source
646225b19SZachary Turner // License. See LICENSE.TXT for details.
746225b19SZachary Turner //
846225b19SZachary Turner //===----------------------------------------------------------------------===//
946225b19SZachary Turner 
1046225b19SZachary Turner #include "llvm/DebugInfo/CodeView/SymbolRecordMapping.h"
1146225b19SZachary Turner 
1246225b19SZachary Turner using namespace llvm;
1346225b19SZachary Turner using namespace llvm::codeview;
1446225b19SZachary Turner 
1546225b19SZachary Turner #define error(X)                                                               \
1646225b19SZachary Turner   if (auto EC = X)                                                             \
1746225b19SZachary Turner     return EC;
1846225b19SZachary Turner 
1946225b19SZachary Turner namespace {
2046225b19SZachary Turner struct MapGap {
2146225b19SZachary Turner   Error operator()(CodeViewRecordIO &IO, LocalVariableAddrGap &Gap) const {
2246225b19SZachary Turner     error(IO.mapInteger(Gap.GapStartOffset));
2346225b19SZachary Turner     error(IO.mapInteger(Gap.Range));
2446225b19SZachary Turner     return Error::success();
2546225b19SZachary Turner   }
2646225b19SZachary Turner };
2746225b19SZachary Turner }
2846225b19SZachary Turner 
2946225b19SZachary Turner static Error mapLocalVariableAddrRange(CodeViewRecordIO &IO,
3046225b19SZachary Turner                                        LocalVariableAddrRange &Range) {
3146225b19SZachary Turner   error(IO.mapInteger(Range.OffsetStart));
3246225b19SZachary Turner   error(IO.mapInteger(Range.ISectStart));
3346225b19SZachary Turner   error(IO.mapInteger(Range.Range));
3446225b19SZachary Turner   return Error::success();
3546225b19SZachary Turner }
3646225b19SZachary Turner 
3746225b19SZachary Turner Error SymbolRecordMapping::visitSymbolBegin(CVSymbol &Record) {
3846225b19SZachary Turner   error(IO.beginRecord(MaxRecordLength - sizeof(RecordPrefix)));
3946225b19SZachary Turner   return Error::success();
4046225b19SZachary Turner }
4146225b19SZachary Turner 
4246225b19SZachary Turner Error SymbolRecordMapping::visitSymbolEnd(CVSymbol &Record) {
43ebd3ae83SZachary Turner   error(IO.padToAlignment(alignOf(Container)));
4446225b19SZachary Turner   error(IO.endRecord());
4546225b19SZachary Turner   return Error::success();
4646225b19SZachary Turner }
4746225b19SZachary Turner 
4846225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, BlockSym &Block) {
4946225b19SZachary Turner 
5046225b19SZachary Turner   error(IO.mapInteger(Block.Parent));
5146225b19SZachary Turner   error(IO.mapInteger(Block.End));
5246225b19SZachary Turner   error(IO.mapInteger(Block.CodeSize));
5346225b19SZachary Turner   error(IO.mapInteger(Block.CodeOffset));
5446225b19SZachary Turner   error(IO.mapInteger(Block.Segment));
5546225b19SZachary Turner   error(IO.mapStringZ(Block.Name));
5646225b19SZachary Turner 
5746225b19SZachary Turner   return Error::success();
5846225b19SZachary Turner }
5946225b19SZachary Turner 
6046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, Thunk32Sym &Thunk) {
6146225b19SZachary Turner 
6246225b19SZachary Turner   error(IO.mapInteger(Thunk.Parent));
6346225b19SZachary Turner   error(IO.mapInteger(Thunk.End));
6446225b19SZachary Turner   error(IO.mapInteger(Thunk.Next));
6546225b19SZachary Turner   error(IO.mapInteger(Thunk.Offset));
6646225b19SZachary Turner   error(IO.mapInteger(Thunk.Segment));
6746225b19SZachary Turner   error(IO.mapInteger(Thunk.Length));
6846225b19SZachary Turner   error(IO.mapEnum(Thunk.Thunk));
6946225b19SZachary Turner   error(IO.mapStringZ(Thunk.Name));
7046225b19SZachary Turner   error(IO.mapByteVectorTail(Thunk.VariantData));
7146225b19SZachary Turner 
7246225b19SZachary Turner   return Error::success();
7346225b19SZachary Turner }
7446225b19SZachary Turner 
7546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
7646225b19SZachary Turner                                             TrampolineSym &Tramp) {
7746225b19SZachary Turner 
7846225b19SZachary Turner   error(IO.mapEnum(Tramp.Type));
7946225b19SZachary Turner   error(IO.mapInteger(Tramp.Size));
8046225b19SZachary Turner   error(IO.mapInteger(Tramp.ThunkOffset));
8146225b19SZachary Turner   error(IO.mapInteger(Tramp.TargetOffset));
8246225b19SZachary Turner   error(IO.mapInteger(Tramp.ThunkSection));
8346225b19SZachary Turner   error(IO.mapInteger(Tramp.TargetSection));
8446225b19SZachary Turner 
8546225b19SZachary Turner   return Error::success();
8646225b19SZachary Turner }
8746225b19SZachary Turner 
8846225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
8946225b19SZachary Turner                                             SectionSym &Section) {
9046225b19SZachary Turner   uint8_t Padding = 0;
9146225b19SZachary Turner 
9246225b19SZachary Turner   error(IO.mapInteger(Section.SectionNumber));
9346225b19SZachary Turner   error(IO.mapInteger(Section.Alignment));
9446225b19SZachary Turner   error(IO.mapInteger(Padding));
9546225b19SZachary Turner   error(IO.mapInteger(Section.Rva));
9646225b19SZachary Turner   error(IO.mapInteger(Section.Length));
9746225b19SZachary Turner   error(IO.mapInteger(Section.Characteristics));
9846225b19SZachary Turner   error(IO.mapStringZ(Section.Name));
9946225b19SZachary Turner 
10046225b19SZachary Turner   return Error::success();
10146225b19SZachary Turner }
10246225b19SZachary Turner 
10346225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
10446225b19SZachary Turner                                             CoffGroupSym &CoffGroup) {
10546225b19SZachary Turner 
10646225b19SZachary Turner   error(IO.mapInteger(CoffGroup.Size));
10746225b19SZachary Turner   error(IO.mapInteger(CoffGroup.Characteristics));
10846225b19SZachary Turner   error(IO.mapInteger(CoffGroup.Offset));
10946225b19SZachary Turner   error(IO.mapInteger(CoffGroup.Segment));
11046225b19SZachary Turner   error(IO.mapStringZ(CoffGroup.Name));
11146225b19SZachary Turner 
11246225b19SZachary Turner   return Error::success();
11346225b19SZachary Turner }
11446225b19SZachary Turner 
11546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
11646225b19SZachary Turner                                             BPRelativeSym &BPRel) {
11746225b19SZachary Turner 
11846225b19SZachary Turner   error(IO.mapInteger(BPRel.Offset));
11946225b19SZachary Turner   error(IO.mapInteger(BPRel.Type));
12046225b19SZachary Turner   error(IO.mapStringZ(BPRel.Name));
12146225b19SZachary Turner 
12246225b19SZachary Turner   return Error::success();
12346225b19SZachary Turner }
12446225b19SZachary Turner 
12546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
12646225b19SZachary Turner                                             BuildInfoSym &BuildInfo) {
12746225b19SZachary Turner 
12846225b19SZachary Turner   error(IO.mapInteger(BuildInfo.BuildId));
12946225b19SZachary Turner 
13046225b19SZachary Turner   return Error::success();
13146225b19SZachary Turner }
13246225b19SZachary Turner 
13346225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
13446225b19SZachary Turner                                             CallSiteInfoSym &CallSiteInfo) {
13546225b19SZachary Turner   uint16_t Padding = 0;
13646225b19SZachary Turner 
13746225b19SZachary Turner   error(IO.mapInteger(CallSiteInfo.CodeOffset));
13846225b19SZachary Turner   error(IO.mapInteger(CallSiteInfo.Segment));
13946225b19SZachary Turner   error(IO.mapInteger(Padding));
14046225b19SZachary Turner   error(IO.mapInteger(CallSiteInfo.Type));
14146225b19SZachary Turner 
14246225b19SZachary Turner   return Error::success();
14346225b19SZachary Turner }
14446225b19SZachary Turner 
14546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
14646225b19SZachary Turner                                             EnvBlockSym &EnvBlock) {
14746225b19SZachary Turner 
14846225b19SZachary Turner   uint8_t Reserved = 0;
14946225b19SZachary Turner   error(IO.mapInteger(Reserved));
15046225b19SZachary Turner   error(IO.mapStringZVectorZ(EnvBlock.Fields));
15146225b19SZachary Turner 
15246225b19SZachary Turner   return Error::success();
15346225b19SZachary Turner }
15446225b19SZachary Turner 
15546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
15646225b19SZachary Turner                                             FileStaticSym &FileStatic) {
15746225b19SZachary Turner 
15846225b19SZachary Turner   error(IO.mapInteger(FileStatic.Index));
15946225b19SZachary Turner   error(IO.mapInteger(FileStatic.ModFilenameOffset));
16046225b19SZachary Turner   error(IO.mapEnum(FileStatic.Flags));
16146225b19SZachary Turner   error(IO.mapStringZ(FileStatic.Name));
16246225b19SZachary Turner 
16346225b19SZachary Turner   return Error::success();
16446225b19SZachary Turner }
16546225b19SZachary Turner 
16646225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ExportSym &Export) {
16746225b19SZachary Turner 
16846225b19SZachary Turner   error(IO.mapInteger(Export.Ordinal));
16946225b19SZachary Turner   error(IO.mapEnum(Export.Flags));
17046225b19SZachary Turner   error(IO.mapStringZ(Export.Name));
17146225b19SZachary Turner 
17246225b19SZachary Turner   return Error::success();
17346225b19SZachary Turner }
17446225b19SZachary Turner 
17546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
17646225b19SZachary Turner                                             Compile2Sym &Compile2) {
17746225b19SZachary Turner 
17846225b19SZachary Turner   error(IO.mapEnum(Compile2.Flags));
17946225b19SZachary Turner   error(IO.mapEnum(Compile2.Machine));
18046225b19SZachary Turner   error(IO.mapInteger(Compile2.VersionFrontendMajor));
18146225b19SZachary Turner   error(IO.mapInteger(Compile2.VersionFrontendMinor));
18246225b19SZachary Turner   error(IO.mapInteger(Compile2.VersionFrontendBuild));
18346225b19SZachary Turner   error(IO.mapInteger(Compile2.VersionBackendMajor));
18446225b19SZachary Turner   error(IO.mapInteger(Compile2.VersionBackendMinor));
18546225b19SZachary Turner   error(IO.mapInteger(Compile2.VersionBackendBuild));
18646225b19SZachary Turner   error(IO.mapStringZ(Compile2.Version));
18746225b19SZachary Turner   error(IO.mapStringZVectorZ(Compile2.ExtraStrings));
18846225b19SZachary Turner 
18946225b19SZachary Turner   return Error::success();
19046225b19SZachary Turner }
19146225b19SZachary Turner 
19246225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
19346225b19SZachary Turner                                             Compile3Sym &Compile3) {
19446225b19SZachary Turner 
19546225b19SZachary Turner   error(IO.mapEnum(Compile3.Flags));
19646225b19SZachary Turner   error(IO.mapEnum(Compile3.Machine));
19746225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionFrontendMajor));
19846225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionFrontendMinor));
19946225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionFrontendBuild));
20046225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionFrontendQFE));
20146225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionBackendMajor));
20246225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionBackendMinor));
20346225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionBackendBuild));
20446225b19SZachary Turner   error(IO.mapInteger(Compile3.VersionBackendQFE));
20546225b19SZachary Turner   error(IO.mapStringZ(Compile3.Version));
20646225b19SZachary Turner 
20746225b19SZachary Turner   return Error::success();
20846225b19SZachary Turner }
20946225b19SZachary Turner 
21046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
21146225b19SZachary Turner                                             ConstantSym &Constant) {
21246225b19SZachary Turner 
21346225b19SZachary Turner   error(IO.mapInteger(Constant.Type));
21446225b19SZachary Turner   error(IO.mapEncodedInteger(Constant.Value));
21546225b19SZachary Turner   error(IO.mapStringZ(Constant.Name));
21646225b19SZachary Turner 
21746225b19SZachary Turner   return Error::success();
21846225b19SZachary Turner }
21946225b19SZachary Turner 
22046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, DataSym &Data) {
22146225b19SZachary Turner 
22246225b19SZachary Turner   error(IO.mapInteger(Data.Type));
22346225b19SZachary Turner   error(IO.mapInteger(Data.DataOffset));
22446225b19SZachary Turner   error(IO.mapInteger(Data.Segment));
22546225b19SZachary Turner   error(IO.mapStringZ(Data.Name));
22646225b19SZachary Turner 
22746225b19SZachary Turner   return Error::success();
22846225b19SZachary Turner }
22946225b19SZachary Turner 
23046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(
23146225b19SZachary Turner     CVSymbol &CVR, DefRangeFramePointerRelSym &DefRangeFramePointerRel) {
23246225b19SZachary Turner 
23346225b19SZachary Turner   error(IO.mapInteger(DefRangeFramePointerRel.Offset));
23446225b19SZachary Turner   error(mapLocalVariableAddrRange(IO, DefRangeFramePointerRel.Range));
23546225b19SZachary Turner   error(IO.mapVectorTail(DefRangeFramePointerRel.Gaps, MapGap()));
23646225b19SZachary Turner 
23746225b19SZachary Turner   return Error::success();
23846225b19SZachary Turner }
23946225b19SZachary Turner 
24046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(
24146225b19SZachary Turner     CVSymbol &CVR,
24246225b19SZachary Turner     DefRangeFramePointerRelFullScopeSym &DefRangeFramePointerRelFullScope) {
24346225b19SZachary Turner 
24446225b19SZachary Turner   error(IO.mapInteger(DefRangeFramePointerRelFullScope.Offset));
24546225b19SZachary Turner 
24646225b19SZachary Turner   return Error::success();
24746225b19SZachary Turner }
24846225b19SZachary Turner 
24946225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(
25046225b19SZachary Turner     CVSymbol &CVR, DefRangeRegisterRelSym &DefRangeRegisterRel) {
25146225b19SZachary Turner 
25246225b19SZachary Turner   error(IO.mapObject(DefRangeRegisterRel.Hdr.Register));
25346225b19SZachary Turner   error(IO.mapObject(DefRangeRegisterRel.Hdr.Flags));
25446225b19SZachary Turner   error(IO.mapObject(DefRangeRegisterRel.Hdr.BasePointerOffset));
25546225b19SZachary Turner   error(mapLocalVariableAddrRange(IO, DefRangeRegisterRel.Range));
25646225b19SZachary Turner   error(IO.mapVectorTail(DefRangeRegisterRel.Gaps, MapGap()));
25746225b19SZachary Turner 
25846225b19SZachary Turner   return Error::success();
25946225b19SZachary Turner }
26046225b19SZachary Turner 
26146225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(
26246225b19SZachary Turner     CVSymbol &CVR, DefRangeRegisterSym &DefRangeRegister) {
26346225b19SZachary Turner 
26446225b19SZachary Turner   error(IO.mapObject(DefRangeRegister.Hdr.Register));
26546225b19SZachary Turner   error(IO.mapObject(DefRangeRegister.Hdr.MayHaveNoName));
26646225b19SZachary Turner   error(mapLocalVariableAddrRange(IO, DefRangeRegister.Range));
26746225b19SZachary Turner   error(IO.mapVectorTail(DefRangeRegister.Gaps, MapGap()));
26846225b19SZachary Turner 
26946225b19SZachary Turner   return Error::success();
27046225b19SZachary Turner }
27146225b19SZachary Turner 
27246225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(
27346225b19SZachary Turner     CVSymbol &CVR, DefRangeSubfieldRegisterSym &DefRangeSubfieldRegister) {
27446225b19SZachary Turner 
27546225b19SZachary Turner   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.Register));
27646225b19SZachary Turner   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.MayHaveNoName));
27746225b19SZachary Turner   error(IO.mapObject(DefRangeSubfieldRegister.Hdr.OffsetInParent));
27846225b19SZachary Turner   error(mapLocalVariableAddrRange(IO, DefRangeSubfieldRegister.Range));
27946225b19SZachary Turner   error(IO.mapVectorTail(DefRangeSubfieldRegister.Gaps, MapGap()));
28046225b19SZachary Turner 
28146225b19SZachary Turner   return Error::success();
28246225b19SZachary Turner }
28346225b19SZachary Turner 
28446225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(
28546225b19SZachary Turner     CVSymbol &CVR, DefRangeSubfieldSym &DefRangeSubfield) {
28646225b19SZachary Turner 
28746225b19SZachary Turner   error(IO.mapInteger(DefRangeSubfield.Program));
28846225b19SZachary Turner   error(IO.mapInteger(DefRangeSubfield.OffsetInParent));
28946225b19SZachary Turner   error(mapLocalVariableAddrRange(IO, DefRangeSubfield.Range));
29046225b19SZachary Turner   error(IO.mapVectorTail(DefRangeSubfield.Gaps, MapGap()));
29146225b19SZachary Turner 
29246225b19SZachary Turner   return Error::success();
29346225b19SZachary Turner }
29446225b19SZachary Turner 
29546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
29646225b19SZachary Turner                                             DefRangeSym &DefRange) {
29746225b19SZachary Turner 
29846225b19SZachary Turner   error(IO.mapInteger(DefRange.Program));
29946225b19SZachary Turner   error(mapLocalVariableAddrRange(IO, DefRange.Range));
30046225b19SZachary Turner   error(IO.mapVectorTail(DefRange.Gaps, MapGap()));
30146225b19SZachary Turner 
30246225b19SZachary Turner   return Error::success();
30346225b19SZachary Turner }
30446225b19SZachary Turner 
30546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
30646225b19SZachary Turner                                             FrameCookieSym &FrameCookie) {
30746225b19SZachary Turner 
30846225b19SZachary Turner   error(IO.mapInteger(FrameCookie.CodeOffset));
30946225b19SZachary Turner   error(IO.mapInteger(FrameCookie.Register));
31063055455SZachary Turner   error(IO.mapEnum(FrameCookie.CookieKind));
31146225b19SZachary Turner   error(IO.mapInteger(FrameCookie.Flags));
31246225b19SZachary Turner 
31346225b19SZachary Turner   return Error::success();
31446225b19SZachary Turner }
31546225b19SZachary Turner 
31646225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
31746225b19SZachary Turner                                             FrameProcSym &FrameProc) {
31846225b19SZachary Turner   error(IO.mapInteger(FrameProc.TotalFrameBytes));
31946225b19SZachary Turner   error(IO.mapInteger(FrameProc.PaddingFrameBytes));
32046225b19SZachary Turner   error(IO.mapInteger(FrameProc.OffsetToPadding));
32146225b19SZachary Turner   error(IO.mapInteger(FrameProc.BytesOfCalleeSavedRegisters));
32246225b19SZachary Turner   error(IO.mapInteger(FrameProc.OffsetOfExceptionHandler));
32346225b19SZachary Turner   error(IO.mapInteger(FrameProc.SectionIdOfExceptionHandler));
32446225b19SZachary Turner   error(IO.mapEnum(FrameProc.Flags));
32546225b19SZachary Turner 
32646225b19SZachary Turner   return Error::success();
32746225b19SZachary Turner }
32846225b19SZachary Turner 
32946225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(
33046225b19SZachary Turner     CVSymbol &CVR, HeapAllocationSiteSym &HeapAllocSite) {
33146225b19SZachary Turner 
33246225b19SZachary Turner   error(IO.mapInteger(HeapAllocSite.CodeOffset));
33346225b19SZachary Turner   error(IO.mapInteger(HeapAllocSite.Segment));
33446225b19SZachary Turner   error(IO.mapInteger(HeapAllocSite.CallInstructionSize));
33546225b19SZachary Turner   error(IO.mapInteger(HeapAllocSite.Type));
33646225b19SZachary Turner 
33746225b19SZachary Turner   return Error::success();
33846225b19SZachary Turner }
33946225b19SZachary Turner 
34046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
34146225b19SZachary Turner                                             InlineSiteSym &InlineSite) {
34246225b19SZachary Turner 
34346225b19SZachary Turner   error(IO.mapInteger(InlineSite.Parent));
34446225b19SZachary Turner   error(IO.mapInteger(InlineSite.End));
34546225b19SZachary Turner   error(IO.mapInteger(InlineSite.Inlinee));
34646225b19SZachary Turner   error(IO.mapByteVectorTail(InlineSite.AnnotationData));
34746225b19SZachary Turner 
34846225b19SZachary Turner   return Error::success();
34946225b19SZachary Turner }
35046225b19SZachary Turner 
35146225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
35246225b19SZachary Turner                                             RegisterSym &Register) {
35346225b19SZachary Turner 
35446225b19SZachary Turner   error(IO.mapInteger(Register.Index));
35546225b19SZachary Turner   error(IO.mapEnum(Register.Register));
35646225b19SZachary Turner   error(IO.mapStringZ(Register.Name));
35746225b19SZachary Turner 
35846225b19SZachary Turner   return Error::success();
35946225b19SZachary Turner }
36046225b19SZachary Turner 
36146225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
36246225b19SZachary Turner                                             PublicSym32 &Public) {
36346225b19SZachary Turner 
36418d90e17SReid Kleckner   error(IO.mapEnum(Public.Flags));
36546225b19SZachary Turner   error(IO.mapInteger(Public.Offset));
36646225b19SZachary Turner   error(IO.mapInteger(Public.Segment));
36746225b19SZachary Turner   error(IO.mapStringZ(Public.Name));
36846225b19SZachary Turner 
36946225b19SZachary Turner   return Error::success();
37046225b19SZachary Turner }
37146225b19SZachary Turner 
37246225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
37346225b19SZachary Turner                                             ProcRefSym &ProcRef) {
37446225b19SZachary Turner 
37546225b19SZachary Turner   error(IO.mapInteger(ProcRef.SumName));
37646225b19SZachary Turner   error(IO.mapInteger(ProcRef.SymOffset));
37746225b19SZachary Turner   error(IO.mapInteger(ProcRef.Module));
37846225b19SZachary Turner   error(IO.mapStringZ(ProcRef.Name));
37946225b19SZachary Turner 
38046225b19SZachary Turner   return Error::success();
38146225b19SZachary Turner }
38246225b19SZachary Turner 
38346225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LabelSym &Label) {
38446225b19SZachary Turner 
38546225b19SZachary Turner   error(IO.mapInteger(Label.CodeOffset));
38646225b19SZachary Turner   error(IO.mapInteger(Label.Segment));
38746225b19SZachary Turner   error(IO.mapEnum(Label.Flags));
38846225b19SZachary Turner   error(IO.mapStringZ(Label.Name));
38946225b19SZachary Turner 
39046225b19SZachary Turner   return Error::success();
39146225b19SZachary Turner }
39246225b19SZachary Turner 
39346225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LocalSym &Local) {
39446225b19SZachary Turner   error(IO.mapInteger(Local.Type));
39546225b19SZachary Turner   error(IO.mapEnum(Local.Flags));
39646225b19SZachary Turner   error(IO.mapStringZ(Local.Name));
39746225b19SZachary Turner 
39846225b19SZachary Turner   return Error::success();
39946225b19SZachary Turner }
40046225b19SZachary Turner 
40146225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
40246225b19SZachary Turner                                             ObjNameSym &ObjName) {
40346225b19SZachary Turner 
40446225b19SZachary Turner   error(IO.mapInteger(ObjName.Signature));
40546225b19SZachary Turner   error(IO.mapStringZ(ObjName.Name));
40646225b19SZachary Turner 
40746225b19SZachary Turner   return Error::success();
40846225b19SZachary Turner }
40946225b19SZachary Turner 
41046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ProcSym &Proc) {
41146225b19SZachary Turner   error(IO.mapInteger(Proc.Parent));
41246225b19SZachary Turner   error(IO.mapInteger(Proc.End));
41346225b19SZachary Turner   error(IO.mapInteger(Proc.Next));
41446225b19SZachary Turner   error(IO.mapInteger(Proc.CodeSize));
41546225b19SZachary Turner   error(IO.mapInteger(Proc.DbgStart));
41646225b19SZachary Turner   error(IO.mapInteger(Proc.DbgEnd));
41746225b19SZachary Turner   error(IO.mapInteger(Proc.FunctionType));
41846225b19SZachary Turner   error(IO.mapInteger(Proc.CodeOffset));
41946225b19SZachary Turner   error(IO.mapInteger(Proc.Segment));
42046225b19SZachary Turner   error(IO.mapEnum(Proc.Flags));
42146225b19SZachary Turner   error(IO.mapStringZ(Proc.Name));
42246225b19SZachary Turner   return Error::success();
42346225b19SZachary Turner }
42446225b19SZachary Turner 
42546225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
42646225b19SZachary Turner                                             ScopeEndSym &ScopeEnd) {
42746225b19SZachary Turner   return Error::success();
42846225b19SZachary Turner }
42946225b19SZachary Turner 
43046225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, CallerSym &Caller) {
43146225b19SZachary Turner   error(IO.mapVectorN<uint32_t>(
43246225b19SZachary Turner       Caller.Indices,
43346225b19SZachary Turner       [](CodeViewRecordIO &IO, TypeIndex &N) { return IO.mapInteger(N); }));
43446225b19SZachary Turner   return Error::success();
43546225b19SZachary Turner }
43646225b19SZachary Turner 
43746225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
43846225b19SZachary Turner                                             RegRelativeSym &RegRel) {
43946225b19SZachary Turner 
44046225b19SZachary Turner   error(IO.mapInteger(RegRel.Offset));
44146225b19SZachary Turner   error(IO.mapInteger(RegRel.Type));
44263055455SZachary Turner   error(IO.mapEnum(RegRel.Register));
44346225b19SZachary Turner   error(IO.mapStringZ(RegRel.Name));
44446225b19SZachary Turner 
44546225b19SZachary Turner   return Error::success();
44646225b19SZachary Turner }
44746225b19SZachary Turner 
44846225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
44946225b19SZachary Turner                                             ThreadLocalDataSym &Data) {
45046225b19SZachary Turner 
45146225b19SZachary Turner   error(IO.mapInteger(Data.Type));
45246225b19SZachary Turner   error(IO.mapInteger(Data.DataOffset));
45346225b19SZachary Turner   error(IO.mapInteger(Data.Segment));
45446225b19SZachary Turner   error(IO.mapStringZ(Data.Name));
45546225b19SZachary Turner 
45646225b19SZachary Turner   return Error::success();
45746225b19SZachary Turner }
45846225b19SZachary Turner 
45946225b19SZachary Turner Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, UDTSym &UDT) {
46046225b19SZachary Turner 
46146225b19SZachary Turner   error(IO.mapInteger(UDT.Type));
46246225b19SZachary Turner   error(IO.mapStringZ(UDT.Name));
46346225b19SZachary Turner 
46446225b19SZachary Turner   return Error::success();
46546225b19SZachary Turner }
466*ee8a7200SAlexandre Ganea 
467*ee8a7200SAlexandre Ganea Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
468*ee8a7200SAlexandre Ganea                                             UsingNamespaceSym &UN) {
469*ee8a7200SAlexandre Ganea 
470*ee8a7200SAlexandre Ganea   error(IO.mapStringZ(UN.Name));
471*ee8a7200SAlexandre Ganea 
472*ee8a7200SAlexandre Ganea   return Error::success();
473*ee8a7200SAlexandre Ganea }
474