LLVM 17.0.0git
SymbolRecord.h
Go to the documentation of this file.
1//===- SymbolRecord.h -------------------------------------------*- 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
9#ifndef LLVM_DEBUGINFO_CODEVIEW_SYMBOLRECORD_H
10#define LLVM_DEBUGINFO_CODEVIEW_SYMBOLRECORD_H
11
12#include "llvm/ADT/APSInt.h"
13#include "llvm/ADT/ArrayRef.h"
14#include "llvm/ADT/StringRef.h"
15#include "llvm/ADT/iterator.h"
22#include "llvm/Support/Endian.h"
23#include <cstdint>
24#include <vector>
25
26namespace llvm {
27namespace codeview {
28
30protected:
32
33public:
34 SymbolRecordKind getKind() const { return Kind; }
35
37};
38
39// S_GPROC32, S_LPROC32, S_GPROC32_ID, S_LPROC32_ID, S_LPROC32_DPC or
40// S_LPROC32_DPC_ID
41class ProcSym : public SymbolRecord {
42 static constexpr uint32_t RelocationOffset = 32;
43
44public:
48
50 return RecordOffset + RelocationOffset;
51 }
52
64
66};
67
68// S_THUNK32
69class Thunk32Sym : public SymbolRecord {
70public:
74
84
86};
87
88// S_TRAMPOLINE
90public:
94
101
103};
104
105// S_SECTION
106class SectionSym : public SymbolRecord {
107public:
111
113 uint8_t Alignment = 0;
118
120};
121
122// S_COFFGROUP
124public:
128
134
136};
137
138class ScopeEndSym : public SymbolRecord {
139public:
143
145};
146
147class CallerSym : public SymbolRecord {
148public:
152
153 std::vector<TypeIndex> Indices;
154
156};
157
164 int32_t S1 = 0;
165};
166
168 : public iterator_facade_base<BinaryAnnotationIterator,
169 std::forward_iterator_tag,
170 DecodedAnnotation> {
174 : Data(Other.Data) {}
175
177 return Data == Other.Data;
178 }
179
181 Data = Other.Data;
182 return *this;
183 }
184
186 if (!ParseCurrentAnnotation()) {
187 *this = BinaryAnnotationIterator();
188 return *this;
189 }
190 Data = Next;
191 Next = ArrayRef<uint8_t>();
192 Current.reset();
193 return *this;
194 }
195
197 ParseCurrentAnnotation();
198 return *Current;
199 }
200
201private:
202 static uint32_t GetCompressedAnnotation(ArrayRef<uint8_t> &Annotations) {
203 if (Annotations.empty())
204 return -1;
205
206 uint8_t FirstByte = Annotations.front();
207 Annotations = Annotations.drop_front();
208
209 if ((FirstByte & 0x80) == 0x00)
210 return FirstByte;
211
212 if (Annotations.empty())
213 return -1;
214
215 uint8_t SecondByte = Annotations.front();
216 Annotations = Annotations.drop_front();
217
218 if ((FirstByte & 0xC0) == 0x80)
219 return ((FirstByte & 0x3F) << 8) | SecondByte;
220
221 if (Annotations.empty())
222 return -1;
223
224 uint8_t ThirdByte = Annotations.front();
225 Annotations = Annotations.drop_front();
226
227 if (Annotations.empty())
228 return -1;
229
230 uint8_t FourthByte = Annotations.front();
231 Annotations = Annotations.drop_front();
232
233 if ((FirstByte & 0xE0) == 0xC0)
234 return ((FirstByte & 0x1F) << 24) | (SecondByte << 16) |
235 (ThirdByte << 8) | FourthByte;
236
237 return -1;
238 }
239
240 static int32_t DecodeSignedOperand(uint32_t Operand) {
241 if (Operand & 1)
242 return -(Operand >> 1);
243 return Operand >> 1;
244 }
245
246 static int32_t DecodeSignedOperand(ArrayRef<uint8_t> &Annotations) {
247 return DecodeSignedOperand(GetCompressedAnnotation(Annotations));
248 }
249
250 bool ParseCurrentAnnotation() {
251 if (Current)
252 return true;
253
254 Next = Data;
255 uint32_t Op = GetCompressedAnnotation(Next);
256 DecodedAnnotation Result;
257 Result.OpCode = static_cast<BinaryAnnotationsOpCode>(Op);
258 switch (Result.OpCode) {
260 Result.Name = "Invalid";
261 Next = ArrayRef<uint8_t>();
262 break;
264 Result.Name = "CodeOffset";
265 Result.U1 = GetCompressedAnnotation(Next);
266 break;
268 Result.Name = "ChangeCodeOffsetBase";
269 Result.U1 = GetCompressedAnnotation(Next);
270 break;
272 Result.Name = "ChangeCodeOffset";
273 Result.U1 = GetCompressedAnnotation(Next);
274 break;
276 Result.Name = "ChangeCodeLength";
277 Result.U1 = GetCompressedAnnotation(Next);
278 break;
280 Result.Name = "ChangeFile";
281 Result.U1 = GetCompressedAnnotation(Next);
282 break;
284 Result.Name = "ChangeLineEndDelta";
285 Result.U1 = GetCompressedAnnotation(Next);
286 break;
288 Result.Name = "ChangeRangeKind";
289 Result.U1 = GetCompressedAnnotation(Next);
290 break;
292 Result.Name = "ChangeColumnStart";
293 Result.U1 = GetCompressedAnnotation(Next);
294 break;
296 Result.Name = "ChangeColumnEnd";
297 Result.U1 = GetCompressedAnnotation(Next);
298 break;
300 Result.Name = "ChangeLineOffset";
301 Result.S1 = DecodeSignedOperand(Next);
302 break;
304 Result.Name = "ChangeColumnEndDelta";
305 Result.S1 = DecodeSignedOperand(Next);
306 break;
308 Result.Name = "ChangeCodeOffsetAndLineOffset";
309 uint32_t Annotation = GetCompressedAnnotation(Next);
310 Result.S1 = DecodeSignedOperand(Annotation >> 4);
311 Result.U1 = Annotation & 0xf;
312 break;
313 }
315 Result.Name = "ChangeCodeLengthAndCodeOffset";
316 Result.U1 = GetCompressedAnnotation(Next);
317 Result.U2 = GetCompressedAnnotation(Next);
318 break;
319 }
320 }
321 Result.Bytes = Data.take_front(Data.size() - Next.size());
322 Current = Result;
323 return true;
324 }
325
326 std::optional<DecodedAnnotation> Current;
327 ArrayRef<uint8_t> Data;
328 ArrayRef<uint8_t> Next;
329};
330
331// S_INLINESITE
333public:
338
342 }
343
347 std::vector<uint8_t> AnnotationData;
348
350};
351
353 ulittle32_t Flags;
354 ulittle32_t Offset;
355 ulittle16_t Segment;
356 // char Name[];
357};
358
359// S_PUB32
360class PublicSym32 : public SymbolRecord {
361public:
367
372
374};
375
376// S_REGISTER
377class RegisterSym : public SymbolRecord {
378public:
383
387
389};
390
391// S_PROCREF, S_LPROCREF
392class ProcRefSym : public SymbolRecord {
393public:
397 }
398
403
404 uint16_t modi() const { return Module - 1; }
406};
407
408// S_LOCAL
409class LocalSym : public SymbolRecord {
410public:
414
418
420};
421
426};
427
431};
432
433enum : uint16_t { MaxDefRange = 0xf000 };
434
435// S_DEFRANGE
436class DefRangeSym : public SymbolRecord {
437 static constexpr uint32_t RelocationOffset = 8;
438
439public:
444
446 return RecordOffset + RelocationOffset;
447 }
448
451 std::vector<LocalVariableAddrGap> Gaps;
452
454};
455
456// S_DEFRANGE_SUBFIELD
458 static constexpr uint32_t RelocationOffset = 12;
459
460public:
465
467 return RecordOffset + RelocationOffset;
468 }
469
473 std::vector<LocalVariableAddrGap> Gaps;
474
476};
477
479 ulittle16_t Register;
480 ulittle16_t MayHaveNoName;
481};
482
483// S_DEFRANGE_REGISTER
485public:
490
492
495 std::vector<LocalVariableAddrGap> Gaps;
496
498};
499
501 ulittle16_t Register;
502 ulittle16_t MayHaveNoName;
503 ulittle32_t OffsetInParent;
504};
505
506// S_DEFRANGE_SUBFIELD_REGISTER
508public:
510 : SymbolRecord(Kind) {}
514
516
519 std::vector<LocalVariableAddrGap> Gaps;
520
522};
523
525 little32_t Offset;
526};
527
528// S_DEFRANGE_FRAMEPOINTER_REL
530 static constexpr uint32_t RelocationOffset = 8;
531
532public:
534 : SymbolRecord(Kind) {}
538
540 return RecordOffset + RelocationOffset;
541 }
542
545 std::vector<LocalVariableAddrGap> Gaps;
546
548};
549
551 ulittle16_t Register;
552 ulittle16_t Flags;
554};
555
556// S_DEFRANGE_REGISTER_REL
558public:
563
564 // The flags implement this notional bitfield:
565 // uint16_t IsSubfield : 1;
566 // uint16_t Padding : 3;
567 // uint16_t OffsetInParent : 12;
568 enum : uint16_t {
571 };
572
573 bool hasSpilledUDTMember() const { return Hdr.Flags & IsSubfieldFlag; }
575
577
580 std::vector<LocalVariableAddrGap> Gaps;
581
583};
584
585// S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
587public:
589 : SymbolRecord(Kind) {}
593
594 int32_t Offset = 0;
595
597};
598
599// S_BLOCK32
600class BlockSym : public SymbolRecord {
601 static constexpr uint32_t RelocationOffset = 16;
602
603public:
607
609 return RecordOffset + RelocationOffset;
610 }
611
618
620};
621
622// S_LABEL32
623class LabelSym : public SymbolRecord {
624 static constexpr uint32_t RelocationOffset = 4;
625
626public:
630
632 return RecordOffset + RelocationOffset;
633 }
634
639
641};
642
643// S_OBJNAME
644class ObjNameSym : public SymbolRecord {
645public:
650 }
651
654
656};
657
658// S_ENVBLOCK
659class EnvBlockSym : public SymbolRecord {
660public:
665
666 std::vector<StringRef> Fields;
667
669};
670
671// S_EXPORT
672class ExportSym : public SymbolRecord {
673public:
677
681
683};
684
685// S_FILESTATIC
687public:
692
697
699};
700
701// S_COMPILE2
702class Compile2Sym : public SymbolRecord {
703public:
708
718 std::vector<StringRef> ExtraStrings;
719
720 uint8_t getLanguage() const { return static_cast<uint32_t>(Flags) & 0xFF; }
721 uint32_t getFlags() const { return static_cast<uint32_t>(Flags) & ~0xFF; }
722
724};
725
726// S_COMPILE3
727class Compile3Sym : public SymbolRecord {
728public:
734
746
748 Flags = CompileSym3Flags((uint32_t(Flags) & 0xFFFFFF00) | uint32_t(Lang));
749 }
750
752 return static_cast<SourceLanguage>(static_cast<uint32_t>(Flags) & 0xFF);
753 }
755 return static_cast<CompileSym3Flags>(static_cast<uint32_t>(Flags) & ~0xFF);
756 }
757
758 bool hasOptimizations() const {
759 return CompileSym3Flags::None !=
761 }
762
764};
765
766// S_FRAMEPROC
768public:
773
781
782 /// Extract the register this frame uses to refer to local variables.
784 return decodeFramePtrReg(
785 EncodedFramePtrReg((uint32_t(Flags) >> 14U) & 0x3U), CPU);
786 }
787
788 /// Extract the register this frame uses to refer to parameters.
790 return decodeFramePtrReg(
791 EncodedFramePtrReg((uint32_t(Flags) >> 16U) & 0x3U), CPU);
792 }
793
795
796private:
797};
798
799// S_CALLSITEINFO
801 static constexpr uint32_t RelocationOffset = 4;
802
803public:
807
809 return RecordOffset + RelocationOffset;
810 }
811
815
817};
818
819// S_HEAPALLOCSITE
821 static constexpr uint32_t RelocationOffset = 4;
822
823public:
828
830 return RecordOffset + RelocationOffset;
831 }
832
837
839};
840
841// S_FRAMECOOKIE
843 static constexpr uint32_t RelocationOffset = 4;
844
845public:
849
851 return RecordOffset + RelocationOffset;
852 }
853
857 uint8_t Flags = 0;
858
860};
861
862// S_UDT, S_COBOLUDT
863class UDTSym : public SymbolRecord {
864public:
868
871
873};
874
875// S_BUILDINFO
877public:
882
884
886};
887
888// S_BPREL32
890public:
895
896 int32_t Offset = 0;
899
901};
902
903// S_REGREL32
905public:
910
915
917};
918
919// S_CONSTANT, S_MANCONSTANT
920class ConstantSym : public SymbolRecord {
921public:
926
930
932};
933
934// S_LDATA32, S_GDATA32, S_LMANDATA, S_GMANDATA
935class DataSym : public SymbolRecord {
936 static constexpr uint32_t RelocationOffset = 8;
937
938public:
942
944 return RecordOffset + RelocationOffset;
945 }
946
951
953};
954
955// S_LTHREAD32, S_GTHREAD32
957 static constexpr uint32_t RelocationOffset = 8;
958
959public:
964
966 return RecordOffset + RelocationOffset;
967 }
968
973
975};
976
977// S_UNAMESPACE
979public:
984
986
988};
989
990// S_ANNOTATION
992public:
997
1000 std::vector<StringRef> Strings;
1001
1003};
1004
1007
1008} // end namespace codeview
1009} // end namespace llvm
1010
1011#endif // LLVM_DEBUGINFO_CODEVIEW_SYMBOLRECORD_H
This file implements the APSInt class, which is a simple class that represents an arbitrary sized int...
Lightweight arrays that are backed by an arbitrary BinaryStream.
An arbitrary precision integer that knows its signedness.
Definition: APSInt.h:23
Annotations lets you mark points and ranges inside source code, for tests:
Definition: Annotations.h:53
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:41
ArrayRef< T > take_front(size_t N=1) const
Return a copy of *this with only the first N elements.
Definition: ArrayRef.h:226
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:163
BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.
Tagged union holding either a T or a Error.
Definition: Error.h:470
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
Wrapper class representing virtual and physical registers.
Definition: Register.h:19
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
std::vector< StringRef > Strings
AnnotationSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:994
AnnotationSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:993
BPRelativeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:892
BPRelativeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:891
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:608
BlockSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:605
BlockSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:604
BuildInfoSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:878
BuildInfoSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:879
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:808
CallSiteInfoSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:804
CallSiteInfoSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:805
CallerSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:150
std::vector< TypeIndex > Indices
Definition: SymbolRecord.h:153
CallerSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:149
CoffGroupSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:125
CoffGroupSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:126
uint8_t getLanguage() const
Definition: SymbolRecord.h:720
Compile2Sym(uint32_t RecordOffset)
Definition: SymbolRecord.h:705
uint32_t getFlags() const
Definition: SymbolRecord.h:721
Compile2Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:704
std::vector< StringRef > ExtraStrings
Definition: SymbolRecord.h:718
CompileSym3Flags getFlags() const
Definition: SymbolRecord.h:754
Compile3Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:730
Compile3Sym(uint32_t RecordOffset)
Definition: SymbolRecord.h:731
SourceLanguage getLanguage() const
Definition: SymbolRecord.h:751
void setLanguage(SourceLanguage Lang)
Definition: SymbolRecord.h:747
ConstantSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:922
ConstantSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:923
DataSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:940
DataSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:939
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:943
DefRangeFramePointerRelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:533
DefRangeFramePointerRelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:535
DefRangeFramePointerRelHeader Hdr
Definition: SymbolRecord.h:543
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:545
DefRangeRegisterRelHeader Hdr
Definition: SymbolRecord.h:578
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:580
DefRangeRegisterRelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:560
DefRangeRegisterRelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:559
DefRangeRegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:486
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:495
LocalVariableAddrRange Range
Definition: SymbolRecord.h:494
DefRangeRegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:487
DefRangeSubfieldRegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:509
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:519
DefRangeSubfieldRegisterHeader Hdr
Definition: SymbolRecord.h:517
DefRangeSubfieldRegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:511
DefRangeSubfieldSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:461
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:473
DefRangeSubfieldSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:462
LocalVariableAddrRange Range
Definition: SymbolRecord.h:472
DefRangeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:440
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:451
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:445
DefRangeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:441
LocalVariableAddrRange Range
Definition: SymbolRecord.h:450
EnvBlockSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:661
std::vector< StringRef > Fields
Definition: SymbolRecord.h:666
EnvBlockSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:662
ExportSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:674
ExportSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:675
FileStaticSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:689
FileStaticSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:688
FrameCookieSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:846
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:850
FrameCookieSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:847
FrameProcSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:769
FrameProcSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:770
RegisterId getLocalFramePtrReg(CPUType CPU) const
Extract the register this frame uses to refer to local variables.
Definition: SymbolRecord.h:783
RegisterId getParamFramePtrReg(CPUType CPU) const
Extract the register this frame uses to refer to parameters.
Definition: SymbolRecord.h:789
FrameProcedureOptions Flags
Definition: SymbolRecord.h:780
HeapAllocationSiteSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:825
HeapAllocationSiteSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:824
std::vector< uint8_t > AnnotationData
Definition: SymbolRecord.h:347
InlineSiteSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:334
iterator_range< BinaryAnnotationIterator > annotations() const
Definition: SymbolRecord.h:339
InlineSiteSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:335
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:631
LabelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:627
LabelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:628
LocalSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:411
LocalSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:412
ObjNameSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:647
ObjNameSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:648
ProcRefSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:395
ProcRefSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:394
ProcSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:46
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:49
ProcSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:45
PublicSym32(SymbolRecordKind Kind)
Definition: SymbolRecord.h:363
PublicSym32(uint32_t RecordOffset)
Definition: SymbolRecord.h:364
RegRelativeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:906
RegRelativeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:907
RegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:380
RegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:379
ScopeEndSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:141
ScopeEndSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:140
SectionSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:108
SectionSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:109
SymbolRecord(SymbolRecordKind Kind)
Definition: SymbolRecord.h:31
SymbolRecordKind getKind() const
Definition: SymbolRecord.h:34
ThreadLocalDataSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:961
ThreadLocalDataSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:960
ArrayRef< uint8_t > VariantData
Definition: SymbolRecord.h:83
Thunk32Sym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:72
Thunk32Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:71
TrampolineSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:92
TrampolineSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:91
A 32-bit type reference.
Definition: TypeIndex.h:96
UDTSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:865
UDTSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:866
UsingNamespaceSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:981
UsingNamespaceSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:980
CRTP base class which implements the entire standard iterator facade in terms of a minimal subset of ...
Definition: iterator.h:80
A range adaptor for a pair of iterators.
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
ProcSymFlags
Corresponds to the CV_PROCFLAGS bitfield.
Definition: CodeView.h:435
LocalSymFlags
Corresponds to CV_LVARFLAGS bitfield.
Definition: CodeView.h:408
CompileSym2Flags
Corresponds to COMPILESYM2::Flags bitfield.
Definition: CodeView.h:449
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn....
Definition: CodeView.h:75
CompileSym3Flags
Corresponds to COMPILESYM3::Flags bitfield.
Definition: CodeView.h:465
SymbolRecordKind
Distinguishes individual records in the Symbols subsection of a .debug$S section.
Definition: CodeView.h:40
ThunkOrdinal
These values correspond to the THUNK_ORDINAL enumeration.
Definition: CodeView.h:555
EncodedFramePtrReg
Two-bit value indicating which register is the designated frame pointer register.
Definition: CodeView.h:543
RegisterId decodeFramePtrReg(EncodedFramePtrReg EncodedReg, CPUType CPU)
PublicSymFlags
Corresponds to the CV_PUBSYMFLAGS bitfield.
Definition: CodeView.h:425
SourceLanguage
These values correspond to the CV_CFL_LANG enumeration in the Microsoft Debug Interface Access SDK.
Definition: CodeView.h:143
Expected< CVSymbol > readSymbolFromStream(BinaryStreamRef Stream, uint32_t Offset)
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
@ Offset
Definition: DWP.cpp:406
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
BinaryAnnotationIterator & operator=(const BinaryAnnotationIterator Other)
Definition: SymbolRecord.h:180
BinaryAnnotationIterator & operator++()
Definition: SymbolRecord.h:185
BinaryAnnotationIterator(const BinaryAnnotationIterator &Other)
Definition: SymbolRecord.h:173
const DecodedAnnotation & operator*()
Definition: SymbolRecord.h:196
bool operator==(BinaryAnnotationIterator Other) const
Definition: SymbolRecord.h:176
BinaryAnnotationIterator(ArrayRef< uint8_t > Annotations)
Definition: SymbolRecord.h:172
BinaryAnnotationsOpCode OpCode
Definition: SymbolRecord.h:161