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