LLVM: lib/DebugInfo/CodeView/SymbolRecordMapping.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
10
11using namespace llvm;
13
14#define error(X) \
15 if (auto EC = X) \
16 return EC;
17
18namespace {
19struct MapGap {
24 }
25};
26}
27
35
40
43 error(IO.endRecord());
45}
46
48
55
57}
58
60
70
72}
73
74Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
76
83
85}
86
87Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
90
93 error(IO.mapInteger(Padding));
96 error(IO.mapInteger(Section.Characteristics));
98
100}
101
102Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
104
110
112}
113
114Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
116
118 error(IO.mapInteger(BPRel.Type));
119 error(IO.mapStringZ(BPRel.Name));
120
122}
123
124Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
126
128
130}
131
132Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
135
138 error(IO.mapInteger(Padding));
140
142}
143
144Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
146
149 error(IO.mapStringZVectorZ(EnvBlock.Fields));
150
152}
153
154Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
156
161
163}
164
166
170
172}
173
174Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
176
187
189}
190
191Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
193
205
207}
208
209Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
211
215
217}
218
220
222 error(IO.mapInteger(Data.DataOffset));
223 error(IO.mapInteger(Data.Segment));
225
227}
228
229Error SymbolRecordMapping::visitKnownRecord(
231
232 error(IO.mapObject(DefRangeFramePointerRel.Hdr.Offset));
234 error(IO.mapVectorTail(DefRangeFramePointerRel.Gaps, MapGap()));
235
237}
238
239Error SymbolRecordMapping::visitKnownRecord(
242
243 error(IO.mapInteger(DefRangeFramePointerRelFullScope.Offset));
244
246}
247
248Error SymbolRecordMapping::visitKnownRecord(
250
252 error(IO.mapObject(DefRangeRegisterRel.Hdr.Flags));
255 error(IO.mapVectorTail(DefRangeRegisterRel.Gaps, MapGap()));
256
258}
259
260Error SymbolRecordMapping::visitKnownRecord(
262
266 error(IO.mapVectorTail(DefRangeRegister.Gaps, MapGap()));
267
269}
270
271Error SymbolRecordMapping::visitKnownRecord(
273
278 error(IO.mapVectorTail(DefRangeSubfieldRegister.Gaps, MapGap()));
279
281}
282
283Error SymbolRecordMapping::visitKnownRecord(
285
286 error(IO.mapInteger(DefRangeSubfield.Program));
289 error(IO.mapVectorTail(DefRangeSubfield.Gaps, MapGap()));
290
292}
293
294Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
296
299 error(IO.mapVectorTail(DefRange.Gaps, MapGap()));
300
302}
303
304Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
306
310 error(IO.mapInteger(FrameCookie.Flags));
311
313}
314
315Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
324
326}
327
328Error SymbolRecordMapping::visitKnownRecord(
330
334 error(IO.mapInteger(HeapAllocSite.Type));
335
337}
338
339Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
341
346
348}
349
350Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
352
356
358}
359
360Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
362
367
369}
370
371Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
373
377 error(IO.mapStringZ(ProcRef.Name));
378
380}
381
383
384 error(IO.mapInteger(Label.CodeOffset));
388
390}
391
396
398}
399
400Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
402
404 error(IO.mapStringZ(ObjName.Name));
405
407}
408
411 error(IO.mapInteger(Proc.End));
422}
423
424Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
427}
428
430 error(IO.mapVectorN<uint32_t>(
432 [](CodeViewRecordIO &IO, TypeIndex &N) { return IO.mapInteger(N); }));
434}
435
436Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
438
443
445}
446
447Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
449
451 error(IO.mapInteger(Data.DataOffset));
452 error(IO.mapInteger(Data.Segment));
454
456}
457
459
460 error(IO.mapInteger(UDT.Type));
461 error(IO.mapStringZ(UDT.Name));
462
464}
465
466Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
468
470
472}
473
474Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
476
479 error(IO.mapVectorN<uint16_t>(
481 [](CodeViewRecordIO &IO, StringRef &S) { return IO.mapStringZ(S); }));
482
484}
485
486Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
497}
498
499Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
502 error(IO.mapStringZ(HotPatchFunc.Name));
504}
505
508 assert(unsigned(EncodedReg) < 4);
509 switch (CPU) {
510
511 default:
512 break;
521 switch (EncodedReg) {
526 }
529 switch (EncodedReg) {
534 }
536 }
537 return RegisterId::NONE;
538}
539
541 switch (CPU) {
542
543 default:
544 break;
553 switch (Reg) {
554 case RegisterId::VFRAME:
556 case RegisterId::EBP:
558 case RegisterId::EBX:
560 default:
561 break;
562 }
563 break;
565 switch (Reg) {
566 case RegisterId::RSP:
568 case RegisterId::RBP:
570 case RegisterId::R13:
572 default:
573 break;
574 }
575 break;
576 }
578}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Promote Memory to Register
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
static Error mapLocalVariableAddrRange(CodeViewRecordIO &IO, LocalVariableAddrRange &Range)
Definition SymbolRecordMapping.cpp:28
#define error(X)
Definition SymbolRecordMapping.cpp:14
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
std::vector< StringRef > Strings
LLVM_ABI Error mapInteger(TypeIndex &TypeInd, const Twine &Comment="")
LLVM_ABI Error mapStringZ(StringRef &Value, const Twine &Comment="")
Error mapEnum(T &Value, const Twine &Comment="")
LLVM_ABI Error mapByteVectorTail(ArrayRef< uint8_t > &Bytes, const Twine &Comment="")
uint16_t VersionBackendMajor
uint16_t VersionFrontendMajor
uint16_t VersionBackendMinor
uint16_t VersionFrontendMinor
uint16_t VersionBackendBuild
uint16_t VersionFrontendBuild
std::vector< StringRef > ExtraStrings
uint16_t VersionBackendBuild
uint16_t VersionBackendQFE
uint16_t VersionFrontendMajor
uint16_t VersionBackendMajor
uint16_t VersionBackendMinor
uint16_t VersionFrontendBuild
uint16_t VersionFrontendMinor
uint16_t VersionFrontendQFE
DefRangeFramePointerRelHeader Hdr
LocalVariableAddrRange Range
std::vector< LocalVariableAddrGap > Gaps
DefRangeRegisterRelHeader Hdr
std::vector< LocalVariableAddrGap > Gaps
LocalVariableAddrRange Range
std::vector< LocalVariableAddrGap > Gaps
LocalVariableAddrRange Range
DefRangeRegisterHeader Hdr
LocalVariableAddrRange Range
std::vector< LocalVariableAddrGap > Gaps
DefRangeSubfieldRegisterHeader Hdr
std::vector< LocalVariableAddrGap > Gaps
LocalVariableAddrRange Range
std::vector< LocalVariableAddrGap > Gaps
LocalVariableAddrRange Range
std::vector< StringRef > Fields
FrameCookieKind CookieKind
uint32_t BytesOfCalleeSavedRegisters
uint16_t SectionIdOfExceptionHandler
uint32_t PaddingFrameBytes
uint32_t OffsetOfExceptionHandler
FrameProcedureOptions Flags
uint16_t CallInstructionSize
Error visitSymbolEnd(CVSymbol &Record) override
Definition SymbolRecordMapping.cpp:41
Error visitSymbolBegin(CVSymbol &Record) override
Definition SymbolRecordMapping.cpp:36
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn....
CVRecord< SymbolKind > CVSymbol
uint32_t alignOf(CodeViewContainer Container)
EncodedFramePtrReg
Two-bit value indicating which register is the designated frame pointer register.
LLVM_ABI RegisterId decodeFramePtrReg(EncodedFramePtrReg EncodedReg, CPUType CPU)
Definition SymbolRecordMapping.cpp:506
LLVM_ABI EncodedFramePtrReg encodeFramePtrReg(RegisterId Reg, CPUType CPU)
Definition SymbolRecordMapping.cpp:540
This is an optimization pass for GlobalISel generic memory operations.
std::tuple< uint64_t, uint32_t > InlineSite
@ Export
Export information to summary.
FunctionAddr VTableAddr uintptr_t uintptr_t Data