LLVM 23.0.0git
SymbolRecordMapping.cpp
Go to the documentation of this file.
1//===- SymbolRecordMapping.cpp -----------------------------------*- C++-*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
10
11using namespace llvm;
12using namespace llvm::codeview;
13
14#define error(X) \
15 if (auto EC = X) \
16 return EC;
17
18namespace {
19struct MapGap {
20 Error operator()(CodeViewRecordIO &IO, LocalVariableAddrGap &Gap) const {
22 error(IO.mapInteger(Gap.Range));
23 return Error::success();
24 }
25};
26}
27
30 error(IO.mapInteger(Range.OffsetStart));
31 error(IO.mapInteger(Range.ISectStart));
32 error(IO.mapInteger(Range.Range));
33 return Error::success();
34}
35
40
42 error(IO.padToAlignment(alignOf(Container)));
43 error(IO.endRecord());
44 return Error::success();
45}
46
47Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, BlockSym &Block) {
48
49 error(IO.mapInteger(Block.Parent));
50 error(IO.mapInteger(Block.End));
51 error(IO.mapInteger(Block.CodeSize));
52 error(IO.mapInteger(Block.CodeOffset));
53 error(IO.mapInteger(Block.Segment));
54 error(IO.mapStringZ(Block.Name));
55
56 return Error::success();
57}
58
59Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, Thunk32Sym &Thunk) {
60
61 error(IO.mapInteger(Thunk.Parent));
62 error(IO.mapInteger(Thunk.End));
63 error(IO.mapInteger(Thunk.Next));
64 error(IO.mapInteger(Thunk.Offset));
65 error(IO.mapInteger(Thunk.Segment));
66 error(IO.mapInteger(Thunk.Length));
67 error(IO.mapEnum(Thunk.Thunk));
68 error(IO.mapStringZ(Thunk.Name));
69 error(IO.mapByteVectorTail(Thunk.VariantData));
70
71 return Error::success();
72}
73
74Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
75 TrampolineSym &Tramp) {
76
77 error(IO.mapEnum(Tramp.Type));
78 error(IO.mapInteger(Tramp.Size));
79 error(IO.mapInteger(Tramp.ThunkOffset));
80 error(IO.mapInteger(Tramp.TargetOffset));
81 error(IO.mapInteger(Tramp.ThunkSection));
83
84 return Error::success();
85}
86
87Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
88 SectionSym &Section) {
89 uint8_t Padding = 0;
90
91 error(IO.mapInteger(Section.SectionNumber));
92 error(IO.mapInteger(Section.Alignment));
93 error(IO.mapInteger(Padding));
94 error(IO.mapInteger(Section.Rva));
95 error(IO.mapInteger(Section.Length));
96 error(IO.mapInteger(Section.Characteristics));
97 error(IO.mapStringZ(Section.Name));
98
99 return Error::success();
100}
101
102Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
103 CoffGroupSym &CoffGroup) {
104
105 error(IO.mapInteger(CoffGroup.Size));
106 error(IO.mapInteger(CoffGroup.Characteristics));
107 error(IO.mapInteger(CoffGroup.Offset));
108 error(IO.mapInteger(CoffGroup.Segment));
109 error(IO.mapStringZ(CoffGroup.Name));
110
111 return Error::success();
112}
113
114Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
115 BPRelativeSym &BPRel) {
116
117 error(IO.mapInteger(BPRel.Offset));
118 error(IO.mapInteger(BPRel.Type));
119 error(IO.mapStringZ(BPRel.Name));
120
121 return Error::success();
122}
123
124Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
125 BuildInfoSym &BuildInfo) {
126
127 error(IO.mapInteger(BuildInfo.BuildId));
128
129 return Error::success();
130}
131
132Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
134 uint16_t Padding = 0;
135
136 error(IO.mapInteger(CallSiteInfo.CodeOffset));
137 error(IO.mapInteger(CallSiteInfo.Segment));
138 error(IO.mapInteger(Padding));
139 error(IO.mapInteger(CallSiteInfo.Type));
140
141 return Error::success();
142}
143
144Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
145 EnvBlockSym &EnvBlock) {
146
147 uint8_t Reserved = 0;
148 error(IO.mapInteger(Reserved));
149 error(IO.mapStringZVectorZ(EnvBlock.Fields));
150
151 return Error::success();
152}
153
154Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
155 FileStaticSym &FileStatic) {
156
157 error(IO.mapInteger(FileStatic.Index));
158 error(IO.mapInteger(FileStatic.ModFilenameOffset));
159 error(IO.mapEnum(FileStatic.Flags));
160 error(IO.mapStringZ(FileStatic.Name));
161
162 return Error::success();
163}
164
165Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ExportSym &Export) {
166
167 error(IO.mapInteger(Export.Ordinal));
168 error(IO.mapEnum(Export.Flags));
169 error(IO.mapStringZ(Export.Name));
170
171 return Error::success();
172}
173
174Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
175 Compile2Sym &Compile2) {
176
177 error(IO.mapEnum(Compile2.Flags));
178 error(IO.mapEnum(Compile2.Machine));
179 error(IO.mapInteger(Compile2.VersionFrontendMajor));
180 error(IO.mapInteger(Compile2.VersionFrontendMinor));
181 error(IO.mapInteger(Compile2.VersionFrontendBuild));
182 error(IO.mapInteger(Compile2.VersionBackendMajor));
183 error(IO.mapInteger(Compile2.VersionBackendMinor));
184 error(IO.mapInteger(Compile2.VersionBackendBuild));
185 error(IO.mapStringZ(Compile2.Version));
186 error(IO.mapStringZVectorZ(Compile2.ExtraStrings));
187
188 return Error::success();
189}
190
191Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
192 Compile3Sym &Compile3) {
193
194 error(IO.mapEnum(Compile3.Flags));
195 error(IO.mapEnum(Compile3.Machine));
196 error(IO.mapInteger(Compile3.VersionFrontendMajor));
197 error(IO.mapInteger(Compile3.VersionFrontendMinor));
198 error(IO.mapInteger(Compile3.VersionFrontendBuild));
199 error(IO.mapInteger(Compile3.VersionFrontendQFE));
200 error(IO.mapInteger(Compile3.VersionBackendMajor));
201 error(IO.mapInteger(Compile3.VersionBackendMinor));
202 error(IO.mapInteger(Compile3.VersionBackendBuild));
203 error(IO.mapInteger(Compile3.VersionBackendQFE));
204 error(IO.mapStringZ(Compile3.Version));
205
206 return Error::success();
207}
208
209Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
210 ConstantSym &Constant) {
211
212 error(IO.mapInteger(Constant.Type));
213 error(IO.mapEncodedInteger(Constant.Value));
214 error(IO.mapStringZ(Constant.Name));
215
216 return Error::success();
217}
218
219Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, DataSym &Data) {
220
221 error(IO.mapInteger(Data.Type));
222 error(IO.mapInteger(Data.DataOffset));
223 error(IO.mapInteger(Data.Segment));
224 error(IO.mapStringZ(Data.Name));
225
226 return Error::success();
227}
228
229Error SymbolRecordMapping::visitKnownRecord(
230 CVSymbol &CVR, DefRangeFramePointerRelSym &DefRangeFramePointerRel) {
231
232 error(IO.mapObject(DefRangeFramePointerRel.Hdr.Offset));
233 error(mapLocalVariableAddrRange(IO, DefRangeFramePointerRel.Range));
234 error(IO.mapVectorTail(DefRangeFramePointerRel.Gaps, MapGap()));
235
236 return Error::success();
237}
238
239Error SymbolRecordMapping::visitKnownRecord(
240 CVSymbol &CVR,
241 DefRangeFramePointerRelFullScopeSym &DefRangeFramePointerRelFullScope) {
242
243 error(IO.mapInteger(DefRangeFramePointerRelFullScope.Offset));
244
245 return Error::success();
246}
247
248Error SymbolRecordMapping::visitKnownRecord(
249 CVSymbol &CVR, DefRangeRegisterRelSym &DefRangeRegisterRel) {
250
251 error(IO.mapObject(DefRangeRegisterRel.Hdr.Register));
252 error(IO.mapObject(DefRangeRegisterRel.Hdr.Flags));
253 error(IO.mapObject(DefRangeRegisterRel.Hdr.BasePointerOffset));
254 error(mapLocalVariableAddrRange(IO, DefRangeRegisterRel.Range));
255 error(IO.mapVectorTail(DefRangeRegisterRel.Gaps, MapGap()));
256
257 return Error::success();
258}
259
260Error SymbolRecordMapping::visitKnownRecord(
261 CVSymbol &CVR, DefRangeRegisterRelIndirSym &DefRangeRegisterRelIndir) {
262
263 error(IO.mapObject(DefRangeRegisterRelIndir.Hdr.Register));
264 error(IO.mapObject(DefRangeRegisterRelIndir.Hdr.Flags));
265 error(IO.mapObject(DefRangeRegisterRelIndir.Hdr.BasePointerOffset));
266 error(IO.mapObject(DefRangeRegisterRelIndir.Hdr.OffsetInUdt));
267 error(mapLocalVariableAddrRange(IO, DefRangeRegisterRelIndir.Range));
268 error(IO.mapVectorTail(DefRangeRegisterRelIndir.Gaps, MapGap()));
269
270 return Error::success();
271}
272
273Error SymbolRecordMapping::visitKnownRecord(
274 CVSymbol &CVR, DefRangeRegisterSym &DefRangeRegister) {
275
276 error(IO.mapObject(DefRangeRegister.Hdr.Register));
277 error(IO.mapObject(DefRangeRegister.Hdr.MayHaveNoName));
278 error(mapLocalVariableAddrRange(IO, DefRangeRegister.Range));
279 error(IO.mapVectorTail(DefRangeRegister.Gaps, MapGap()));
280
281 return Error::success();
282}
283
284Error SymbolRecordMapping::visitKnownRecord(
285 CVSymbol &CVR, DefRangeSubfieldRegisterSym &DefRangeSubfieldRegister) {
286
287 error(IO.mapObject(DefRangeSubfieldRegister.Hdr.Register));
288 error(IO.mapObject(DefRangeSubfieldRegister.Hdr.MayHaveNoName));
289 error(IO.mapObject(DefRangeSubfieldRegister.Hdr.OffsetInParent));
290 error(mapLocalVariableAddrRange(IO, DefRangeSubfieldRegister.Range));
291 error(IO.mapVectorTail(DefRangeSubfieldRegister.Gaps, MapGap()));
292
293 return Error::success();
294}
295
296Error SymbolRecordMapping::visitKnownRecord(
297 CVSymbol &CVR, DefRangeSubfieldSym &DefRangeSubfield) {
298
299 error(IO.mapInteger(DefRangeSubfield.Program));
300 error(IO.mapInteger(DefRangeSubfield.OffsetInParent));
301 error(mapLocalVariableAddrRange(IO, DefRangeSubfield.Range));
302 error(IO.mapVectorTail(DefRangeSubfield.Gaps, MapGap()));
303
304 return Error::success();
305}
306
307Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
308 DefRangeSym &DefRange) {
309
310 error(IO.mapInteger(DefRange.Program));
312 error(IO.mapVectorTail(DefRange.Gaps, MapGap()));
313
314 return Error::success();
315}
316
317Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
318 FrameCookieSym &FrameCookie) {
319
320 error(IO.mapInteger(FrameCookie.CodeOffset));
321 error(IO.mapInteger(FrameCookie.Register));
322 error(IO.mapEnum(FrameCookie.CookieKind));
323 error(IO.mapInteger(FrameCookie.Flags));
324
325 return Error::success();
326}
327
328Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
329 FrameProcSym &FrameProc) {
330 error(IO.mapInteger(FrameProc.TotalFrameBytes));
331 error(IO.mapInteger(FrameProc.PaddingFrameBytes));
332 error(IO.mapInteger(FrameProc.OffsetToPadding));
333 error(IO.mapInteger(FrameProc.BytesOfCalleeSavedRegisters));
334 error(IO.mapInteger(FrameProc.OffsetOfExceptionHandler));
335 error(IO.mapInteger(FrameProc.SectionIdOfExceptionHandler));
336 error(IO.mapEnum(FrameProc.Flags));
337
338 return Error::success();
339}
340
341Error SymbolRecordMapping::visitKnownRecord(
342 CVSymbol &CVR, HeapAllocationSiteSym &HeapAllocSite) {
343
344 error(IO.mapInteger(HeapAllocSite.CodeOffset));
345 error(IO.mapInteger(HeapAllocSite.Segment));
346 error(IO.mapInteger(HeapAllocSite.CallInstructionSize));
347 error(IO.mapInteger(HeapAllocSite.Type));
348
349 return Error::success();
350}
351
352Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
354
355 error(IO.mapInteger(InlineSite.Parent));
356 error(IO.mapInteger(InlineSite.End));
357 error(IO.mapInteger(InlineSite.Inlinee));
358 error(IO.mapByteVectorTail(InlineSite.AnnotationData));
359
360 return Error::success();
361}
362
363Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
365
366 error(IO.mapInteger(Register.Index));
367 error(IO.mapEnum(Register.Register));
368 error(IO.mapStringZ(Register.Name));
369
370 return Error::success();
371}
372
373Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
375
376 error(IO.mapEnum(Public.Flags));
377 error(IO.mapInteger(Public.Offset));
378 error(IO.mapInteger(Public.Segment));
379 error(IO.mapStringZ(Public.Name));
380
381 return Error::success();
382}
383
384Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
385 ProcRefSym &ProcRef) {
386
387 error(IO.mapInteger(ProcRef.SumName));
388 error(IO.mapInteger(ProcRef.SymOffset));
389 error(IO.mapInteger(ProcRef.Module));
390 error(IO.mapStringZ(ProcRef.Name));
391
392 return Error::success();
393}
394
395Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LabelSym &Label) {
396
397 error(IO.mapInteger(Label.CodeOffset));
398 error(IO.mapInteger(Label.Segment));
399 error(IO.mapEnum(Label.Flags));
400 error(IO.mapStringZ(Label.Name));
401
402 return Error::success();
403}
404
405Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, LocalSym &Local) {
406 error(IO.mapInteger(Local.Type));
407 error(IO.mapEnum(Local.Flags));
408 error(IO.mapStringZ(Local.Name));
409
410 return Error::success();
411}
412
413Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
414 ObjNameSym &ObjName) {
415
416 error(IO.mapInteger(ObjName.Signature));
417 error(IO.mapStringZ(ObjName.Name));
418
419 return Error::success();
420}
421
422Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, ProcSym &Proc) {
423 error(IO.mapInteger(Proc.Parent));
424 error(IO.mapInteger(Proc.End));
425 error(IO.mapInteger(Proc.Next));
426 error(IO.mapInteger(Proc.CodeSize));
427 error(IO.mapInteger(Proc.DbgStart));
428 error(IO.mapInteger(Proc.DbgEnd));
429 error(IO.mapInteger(Proc.FunctionType));
430 error(IO.mapInteger(Proc.CodeOffset));
431 error(IO.mapInteger(Proc.Segment));
432 error(IO.mapEnum(Proc.Flags));
433 error(IO.mapStringZ(Proc.Name));
434 return Error::success();
435}
436
437Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
438 ScopeEndSym &ScopeEnd) {
439 return Error::success();
440}
441
442Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, CallerSym &Caller) {
443 error(IO.mapVectorN<uint32_t>(
444 Caller.Indices,
445 [](CodeViewRecordIO &IO, TypeIndex &N) { return IO.mapInteger(N); }));
446 return Error::success();
447}
448
449Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
450 RegRelativeSym &RegRel) {
451
452 error(IO.mapInteger(RegRel.Offset));
453 error(IO.mapInteger(RegRel.Type));
454 error(IO.mapEnum(RegRel.Register));
455 error(IO.mapStringZ(RegRel.Name));
456
457 return Error::success();
458}
459
460Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
461 RegRelativeIndirSym &RegRelIndir) {
462 error(IO.mapInteger(RegRelIndir.Offset));
463 error(IO.mapInteger(RegRelIndir.Type));
464 error(IO.mapInteger(RegRelIndir.OffsetInUdt));
465 error(IO.mapEnum(RegRelIndir.Register));
466 error(IO.mapStringZ(RegRelIndir.Name));
467
468 return Error::success();
469}
470
471Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
473
474 error(IO.mapInteger(Data.Type));
475 error(IO.mapInteger(Data.DataOffset));
476 error(IO.mapInteger(Data.Segment));
477 error(IO.mapStringZ(Data.Name));
478
479 return Error::success();
480}
481
482Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, UDTSym &UDT) {
483
484 error(IO.mapInteger(UDT.Type));
485 error(IO.mapStringZ(UDT.Name));
486
487 return Error::success();
488}
489
490Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
491 UsingNamespaceSym &UN) {
492
493 error(IO.mapStringZ(UN.Name));
494
495 return Error::success();
496}
497
498Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
499 AnnotationSym &Annot) {
500
501 error(IO.mapInteger(Annot.CodeOffset));
502 error(IO.mapInteger(Annot.Segment));
503 error(IO.mapVectorN<uint16_t>(
504 Annot.Strings,
505 [](CodeViewRecordIO &IO, StringRef &S) { return IO.mapStringZ(S); }));
506
507 return Error::success();
508}
509
510Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
511 JumpTableSym &JumpTable) {
512 error(IO.mapInteger(JumpTable.BaseOffset));
513 error(IO.mapInteger(JumpTable.BaseSegment));
514 error(IO.mapEnum(JumpTable.SwitchType));
515 error(IO.mapInteger(JumpTable.BranchOffset));
516 error(IO.mapInteger(JumpTable.TableOffset));
517 error(IO.mapInteger(JumpTable.BranchSegment));
518 error(IO.mapInteger(JumpTable.TableSegment));
519 error(IO.mapInteger(JumpTable.EntriesCount));
520 return Error::success();
521}
522
523Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
524 HotPatchFuncSym &HotPatchFunc) {
525 error(IO.mapInteger(HotPatchFunc.Function));
526 error(IO.mapStringZ(HotPatchFunc.Name));
527 return Error::success();
528}
529
531 CPUType CPU) {
532 assert(unsigned(EncodedReg) < 4);
533 switch (CPU) {
534 // FIXME: Add ARM and AArch64 variants here.
535 default:
536 break;
542 case CPUType::Pentium:
545 switch (EncodedReg) {
546 case EncodedFramePtrReg::None: return RegisterId::NONE;
547 case EncodedFramePtrReg::StackPtr: return RegisterId::VFRAME;
548 case EncodedFramePtrReg::FramePtr: return RegisterId::EBP;
549 case EncodedFramePtrReg::BasePtr: return RegisterId::EBX;
550 }
551 llvm_unreachable("bad encoding");
552 case CPUType::X64:
553 switch (EncodedReg) {
554 case EncodedFramePtrReg::None: return RegisterId::NONE;
555 case EncodedFramePtrReg::StackPtr: return RegisterId::RSP;
556 case EncodedFramePtrReg::FramePtr: return RegisterId::RBP;
557 case EncodedFramePtrReg::BasePtr: return RegisterId::R13;
558 }
559 llvm_unreachable("bad encoding");
560 }
561 return RegisterId::NONE;
562}
563
565 switch (CPU) {
566 // FIXME: Add ARM and AArch64 variants here.
567 default:
568 break;
574 case CPUType::Pentium:
577 switch (Reg) {
578 case RegisterId::VFRAME:
580 case RegisterId::EBP:
582 case RegisterId::EBX:
584 default:
585 break;
586 }
587 break;
588 case CPUType::X64:
589 switch (Reg) {
590 case RegisterId::RSP:
592 case RegisterId::RBP:
594 case RegisterId::R13:
596 default:
597 break;
598 }
599 break;
600 }
602}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
@ CallSiteInfo
Promote Memory to Register
Definition Mem2Reg.cpp:110
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
static Error mapLocalVariableAddrRange(CodeViewRecordIO &IO, LocalVariableAddrRange &Range)
#define error(X)
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
static ErrorSuccess success()
Create a success value.
Definition Error.h:336
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="")
std::vector< StringRef > ExtraStrings
DefRangeFramePointerRelHeader Hdr
std::vector< LocalVariableAddrGap > Gaps
S_DEFRANGE_REGISTER_REL_INDIR.
std::vector< LocalVariableAddrGap > Gaps
DefRangeRegisterRelIndirHeader Hdr
std::vector< LocalVariableAddrGap > Gaps
std::vector< LocalVariableAddrGap > Gaps
std::vector< LocalVariableAddrGap > Gaps
DefRangeSubfieldRegisterHeader Hdr
std::vector< LocalVariableAddrGap > Gaps
std::vector< LocalVariableAddrGap > Gaps
LocalVariableAddrRange Range
std::vector< StringRef > Fields
FrameProcedureOptions Flags
Error visitSymbolEnd(CVSymbol &Record) override
Error visitSymbolBegin(CVSymbol &Record) override
#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....
Definition CodeView.h:76
CVRecord< SymbolKind > CVSymbol
Definition CVRecord.h:65
uint32_t alignOf(CodeViewContainer Container)
Definition CodeView.h:594
EncodedFramePtrReg
Two-bit value indicating which register is the designated frame pointer register.
Definition CodeView.h:523
LLVM_ABI RegisterId decodeFramePtrReg(EncodedFramePtrReg EncodedReg, CPUType CPU)
LLVM_ABI EncodedFramePtrReg encodeFramePtrReg(RegisterId Reg, CPUType CPU)
This is an optimization pass for GlobalISel generic memory operations.
Definition Types.h:26
std::tuple< uint64_t, uint32_t > InlineSite
@ Export
Export information to summary.
Definition IPO.h:57
FunctionAddr VTableAddr uintptr_t uintptr_t Data
Definition InstrProf.h:189
#define N
little32_t OffsetInUdt
Offset to add after dereferencing Register + BasePointerOffset.