LLVM 19.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
148public:
153
156
162
164
166};
167
168class CallerSym : public SymbolRecord {
169public:
173
174 std::vector<TypeIndex> Indices;
175
177};
178
185 int32_t S1 = 0;
186};
187
189 : public iterator_facade_base<BinaryAnnotationIterator,
190 std::forward_iterator_tag,
191 DecodedAnnotation> {
195 : Data(Other.Data) {}
196
198 return Data == Other.Data;
199 }
200
202 Data = Other.Data;
203 return *this;
204 }
205
207 if (!ParseCurrentAnnotation()) {
208 *this = BinaryAnnotationIterator();
209 return *this;
210 }
211 Data = Next;
212 Next = ArrayRef<uint8_t>();
213 Current.reset();
214 return *this;
215 }
216
218 ParseCurrentAnnotation();
219 return *Current;
220 }
221
222private:
223 static uint32_t GetCompressedAnnotation(ArrayRef<uint8_t> &Annotations) {
224 if (Annotations.empty())
225 return -1;
226
227 uint8_t FirstByte = Annotations.front();
228 Annotations = Annotations.drop_front();
229
230 if ((FirstByte & 0x80) == 0x00)
231 return FirstByte;
232
233 if (Annotations.empty())
234 return -1;
235
236 uint8_t SecondByte = Annotations.front();
237 Annotations = Annotations.drop_front();
238
239 if ((FirstByte & 0xC0) == 0x80)
240 return ((FirstByte & 0x3F) << 8) | SecondByte;
241
242 if (Annotations.empty())
243 return -1;
244
245 uint8_t ThirdByte = Annotations.front();
246 Annotations = Annotations.drop_front();
247
248 if (Annotations.empty())
249 return -1;
250
251 uint8_t FourthByte = Annotations.front();
252 Annotations = Annotations.drop_front();
253
254 if ((FirstByte & 0xE0) == 0xC0)
255 return ((FirstByte & 0x1F) << 24) | (SecondByte << 16) |
256 (ThirdByte << 8) | FourthByte;
257
258 return -1;
259 }
260
261 static int32_t DecodeSignedOperand(uint32_t Operand) {
262 if (Operand & 1)
263 return -(Operand >> 1);
264 return Operand >> 1;
265 }
266
267 static int32_t DecodeSignedOperand(ArrayRef<uint8_t> &Annotations) {
268 return DecodeSignedOperand(GetCompressedAnnotation(Annotations));
269 }
270
271 bool ParseCurrentAnnotation() {
272 if (Current)
273 return true;
274
275 Next = Data;
276 uint32_t Op = GetCompressedAnnotation(Next);
277 DecodedAnnotation Result;
278 Result.OpCode = static_cast<BinaryAnnotationsOpCode>(Op);
279 switch (Result.OpCode) {
281 Result.Name = "Invalid";
282 Next = ArrayRef<uint8_t>();
283 break;
285 Result.Name = "CodeOffset";
286 Result.U1 = GetCompressedAnnotation(Next);
287 break;
289 Result.Name = "ChangeCodeOffsetBase";
290 Result.U1 = GetCompressedAnnotation(Next);
291 break;
293 Result.Name = "ChangeCodeOffset";
294 Result.U1 = GetCompressedAnnotation(Next);
295 break;
297 Result.Name = "ChangeCodeLength";
298 Result.U1 = GetCompressedAnnotation(Next);
299 break;
301 Result.Name = "ChangeFile";
302 Result.U1 = GetCompressedAnnotation(Next);
303 break;
305 Result.Name = "ChangeLineEndDelta";
306 Result.U1 = GetCompressedAnnotation(Next);
307 break;
309 Result.Name = "ChangeRangeKind";
310 Result.U1 = GetCompressedAnnotation(Next);
311 break;
313 Result.Name = "ChangeColumnStart";
314 Result.U1 = GetCompressedAnnotation(Next);
315 break;
317 Result.Name = "ChangeColumnEnd";
318 Result.U1 = GetCompressedAnnotation(Next);
319 break;
321 Result.Name = "ChangeLineOffset";
322 Result.S1 = DecodeSignedOperand(Next);
323 break;
325 Result.Name = "ChangeColumnEndDelta";
326 Result.S1 = DecodeSignedOperand(Next);
327 break;
329 Result.Name = "ChangeCodeOffsetAndLineOffset";
330 uint32_t Annotation = GetCompressedAnnotation(Next);
331 Result.S1 = DecodeSignedOperand(Annotation >> 4);
332 Result.U1 = Annotation & 0xf;
333 break;
334 }
336 Result.Name = "ChangeCodeLengthAndCodeOffset";
337 Result.U1 = GetCompressedAnnotation(Next);
338 Result.U2 = GetCompressedAnnotation(Next);
339 break;
340 }
341 }
342 Result.Bytes = Data.take_front(Data.size() - Next.size());
343 Current = Result;
344 return true;
345 }
346
347 std::optional<DecodedAnnotation> Current;
348 ArrayRef<uint8_t> Data;
349 ArrayRef<uint8_t> Next;
350};
351
352// S_INLINESITE
354public:
359
363 }
364
368 std::vector<uint8_t> AnnotationData;
369
371};
372
374 ulittle32_t Flags;
375 ulittle32_t Offset;
376 ulittle16_t Segment;
377 // char Name[];
378};
379
380// S_PUB32
381class PublicSym32 : public SymbolRecord {
382public:
388
393
395};
396
397// S_REGISTER
398class RegisterSym : public SymbolRecord {
399public:
404
408
410};
411
412// S_PROCREF, S_LPROCREF
413class ProcRefSym : public SymbolRecord {
414public:
418 }
419
424
425 uint16_t modi() const { return Module - 1; }
427};
428
429// S_LOCAL
430class LocalSym : public SymbolRecord {
431public:
435
439
441};
442
447};
448
452};
453
454enum : uint16_t { MaxDefRange = 0xf000 };
455
456// S_DEFRANGE
457class DefRangeSym : public SymbolRecord {
458 static constexpr uint32_t RelocationOffset = 8;
459
460public:
465
467 return RecordOffset + RelocationOffset;
468 }
469
472 std::vector<LocalVariableAddrGap> Gaps;
473
475};
476
477// S_DEFRANGE_SUBFIELD
479 static constexpr uint32_t RelocationOffset = 12;
480
481public:
486
488 return RecordOffset + RelocationOffset;
489 }
490
494 std::vector<LocalVariableAddrGap> Gaps;
495
497};
498
500 ulittle16_t Register;
501 ulittle16_t MayHaveNoName;
502};
503
504// S_DEFRANGE_REGISTER
506public:
511
513
516 std::vector<LocalVariableAddrGap> Gaps;
517
519};
520
522 ulittle16_t Register;
523 ulittle16_t MayHaveNoName;
524 ulittle32_t OffsetInParent;
525};
526
527// S_DEFRANGE_SUBFIELD_REGISTER
529public:
531 : SymbolRecord(Kind) {}
535
537
540 std::vector<LocalVariableAddrGap> Gaps;
541
543};
544
546 little32_t Offset;
547};
548
549// S_DEFRANGE_FRAMEPOINTER_REL
551 static constexpr uint32_t RelocationOffset = 8;
552
553public:
555 : SymbolRecord(Kind) {}
559
561 return RecordOffset + RelocationOffset;
562 }
563
566 std::vector<LocalVariableAddrGap> Gaps;
567
569};
570
572 ulittle16_t Register;
573 ulittle16_t Flags;
575};
576
577// S_DEFRANGE_REGISTER_REL
579public:
584
585 // The flags implement this notional bitfield:
586 // uint16_t IsSubfield : 1;
587 // uint16_t Padding : 3;
588 // uint16_t OffsetInParent : 12;
589 enum : uint16_t {
592 };
593
594 bool hasSpilledUDTMember() const { return Hdr.Flags & IsSubfieldFlag; }
596
598
601 std::vector<LocalVariableAddrGap> Gaps;
602
604};
605
606// S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
608public:
610 : SymbolRecord(Kind) {}
614
615 int32_t Offset = 0;
616
618};
619
620// S_BLOCK32
621class BlockSym : public SymbolRecord {
622 static constexpr uint32_t RelocationOffset = 16;
623
624public:
628
630 return RecordOffset + RelocationOffset;
631 }
632
639
641};
642
643// S_LABEL32
644class LabelSym : public SymbolRecord {
645 static constexpr uint32_t RelocationOffset = 4;
646
647public:
651
653 return RecordOffset + RelocationOffset;
654 }
655
660
662};
663
664// S_OBJNAME
665class ObjNameSym : public SymbolRecord {
666public:
671 }
672
675
677};
678
679// S_ENVBLOCK
680class EnvBlockSym : public SymbolRecord {
681public:
686
687 std::vector<StringRef> Fields;
688
690};
691
692// S_EXPORT
693class ExportSym : public SymbolRecord {
694public:
698
702
704};
705
706// S_FILESTATIC
708public:
713
718
720};
721
722// S_COMPILE2
723class Compile2Sym : public SymbolRecord {
724public:
729
739 std::vector<StringRef> ExtraStrings;
740
741 uint8_t getLanguage() const { return static_cast<uint32_t>(Flags) & 0xFF; }
742 uint32_t getFlags() const { return static_cast<uint32_t>(Flags) & ~0xFF; }
743
745};
746
747// S_COMPILE3
748class Compile3Sym : public SymbolRecord {
749public:
755
767
769 Flags = CompileSym3Flags((uint32_t(Flags) & 0xFFFFFF00) | uint32_t(Lang));
770 }
771
773 return static_cast<SourceLanguage>(static_cast<uint32_t>(Flags) & 0xFF);
774 }
776 return static_cast<CompileSym3Flags>(static_cast<uint32_t>(Flags) & ~0xFF);
777 }
778
779 bool hasOptimizations() const {
780 return CompileSym3Flags::None !=
782 }
783
785};
786
787// S_FRAMEPROC
789public:
794
802
803 /// Extract the register this frame uses to refer to local variables.
805 return decodeFramePtrReg(
806 EncodedFramePtrReg((uint32_t(Flags) >> 14U) & 0x3U), CPU);
807 }
808
809 /// Extract the register this frame uses to refer to parameters.
811 return decodeFramePtrReg(
812 EncodedFramePtrReg((uint32_t(Flags) >> 16U) & 0x3U), CPU);
813 }
814
816
817private:
818};
819
820// S_CALLSITEINFO
822 static constexpr uint32_t RelocationOffset = 4;
823
824public:
828
830 return RecordOffset + RelocationOffset;
831 }
832
836
838};
839
840// S_HEAPALLOCSITE
842 static constexpr uint32_t RelocationOffset = 4;
843
844public:
849
851 return RecordOffset + RelocationOffset;
852 }
853
858
860};
861
862// S_FRAMECOOKIE
864 static constexpr uint32_t RelocationOffset = 4;
865
866public:
870
872 return RecordOffset + RelocationOffset;
873 }
874
878 uint8_t Flags = 0;
879
881};
882
883// S_UDT, S_COBOLUDT
884class UDTSym : public SymbolRecord {
885public:
889
892
894};
895
896// S_BUILDINFO
898public:
903
905
907};
908
909// S_BPREL32
911public:
916
917 int32_t Offset = 0;
920
922};
923
924// S_REGREL32
926public:
931
936
938};
939
940// S_CONSTANT, S_MANCONSTANT
941class ConstantSym : public SymbolRecord {
942public:
947
951
953};
954
955// S_LDATA32, S_GDATA32, S_LMANDATA, S_GMANDATA
956class DataSym : public SymbolRecord {
957 static constexpr uint32_t RelocationOffset = 8;
958
959public:
963
965 return RecordOffset + RelocationOffset;
966 }
967
972
974};
975
976// S_LTHREAD32, S_GTHREAD32
978 static constexpr uint32_t RelocationOffset = 8;
979
980public:
985
987 return RecordOffset + RelocationOffset;
988 }
989
994
996};
997
998// S_UNAMESPACE
1000public:
1005
1007
1009};
1010
1011// S_ANNOTATION
1013public:
1018
1021 std::vector<StringRef> Strings;
1022
1024};
1025
1028
1029} // end namespace codeview
1030} // end namespace llvm
1031
1032#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:228
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:165
BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.
Tagged union holding either a T or a Error.
Definition: Error.h:474
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)
AnnotationSym(SymbolRecordKind Kind)
BPRelativeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:913
BPRelativeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:912
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:629
BlockSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:626
BlockSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:625
BuildInfoSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:899
BuildInfoSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:900
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:829
CallSiteInfoSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:825
CallSiteInfoSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:826
CallerSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:171
std::vector< TypeIndex > Indices
Definition: SymbolRecord.h:174
CallerSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:170
CoffGroupSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:125
CoffGroupSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:126
uint8_t getLanguage() const
Definition: SymbolRecord.h:741
Compile2Sym(uint32_t RecordOffset)
Definition: SymbolRecord.h:726
uint32_t getFlags() const
Definition: SymbolRecord.h:742
Compile2Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:725
std::vector< StringRef > ExtraStrings
Definition: SymbolRecord.h:739
CompileSym3Flags getFlags() const
Definition: SymbolRecord.h:775
Compile3Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:751
Compile3Sym(uint32_t RecordOffset)
Definition: SymbolRecord.h:752
SourceLanguage getLanguage() const
Definition: SymbolRecord.h:772
void setLanguage(SourceLanguage Lang)
Definition: SymbolRecord.h:768
ConstantSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:943
ConstantSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:944
DataSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:961
DataSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:960
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:964
DefRangeFramePointerRelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:554
DefRangeFramePointerRelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:556
DefRangeFramePointerRelHeader Hdr
Definition: SymbolRecord.h:564
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:566
DefRangeRegisterRelHeader Hdr
Definition: SymbolRecord.h:599
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:601
DefRangeRegisterRelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:581
DefRangeRegisterRelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:580
DefRangeRegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:507
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:516
LocalVariableAddrRange Range
Definition: SymbolRecord.h:515
DefRangeRegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:508
DefRangeSubfieldRegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:530
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:540
DefRangeSubfieldRegisterHeader Hdr
Definition: SymbolRecord.h:538
DefRangeSubfieldRegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:532
DefRangeSubfieldSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:482
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:494
DefRangeSubfieldSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:483
LocalVariableAddrRange Range
Definition: SymbolRecord.h:493
DefRangeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:461
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:472
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:466
DefRangeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:462
LocalVariableAddrRange Range
Definition: SymbolRecord.h:471
EnvBlockSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:682
std::vector< StringRef > Fields
Definition: SymbolRecord.h:687
EnvBlockSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:683
ExportSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:695
ExportSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:696
FileStaticSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:710
FileStaticSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:709
FrameCookieSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:867
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:871
FrameCookieSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:868
FrameProcSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:790
FrameProcSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:791
RegisterId getLocalFramePtrReg(CPUType CPU) const
Extract the register this frame uses to refer to local variables.
Definition: SymbolRecord.h:804
RegisterId getParamFramePtrReg(CPUType CPU) const
Extract the register this frame uses to refer to parameters.
Definition: SymbolRecord.h:810
FrameProcedureOptions Flags
Definition: SymbolRecord.h:801
HeapAllocationSiteSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:846
HeapAllocationSiteSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:845
std::vector< uint8_t > AnnotationData
Definition: SymbolRecord.h:368
InlineSiteSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:355
iterator_range< BinaryAnnotationIterator > annotations() const
Definition: SymbolRecord.h:360
InlineSiteSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:356
JumpTableSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:149
JumpTableEntrySize SwitchType
Definition: SymbolRecord.h:157
JumpTableSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:150
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:652
LabelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:648
LabelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:649
LocalSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:432
LocalSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:433
ObjNameSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:668
ObjNameSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:669
ProcRefSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:416
ProcRefSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:415
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:384
PublicSym32(uint32_t RecordOffset)
Definition: SymbolRecord.h:385
RegRelativeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:927
RegRelativeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:928
RegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:401
RegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:400
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:982
ThreadLocalDataSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:981
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:886
UDTSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:887
UsingNamespaceSym(uint32_t RecordOffset)
UsingNamespaceSym(SymbolRecordKind Kind)
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:443
LocalSymFlags
Corresponds to CV_LVARFLAGS bitfield.
Definition: CodeView.h:416
CompileSym2Flags
Corresponds to COMPILESYM2::Flags bitfield.
Definition: CodeView.h:457
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn....
Definition: CodeView.h:76
CompileSym3Flags
Corresponds to COMPILESYM3::Flags bitfield.
Definition: CodeView.h:473
SymbolRecordKind
Distinguishes individual records in the Symbols subsection of a .debug$S section.
Definition: CodeView.h:41
ThunkOrdinal
These values correspond to the THUNK_ORDINAL enumeration.
Definition: CodeView.h:563
EncodedFramePtrReg
Two-bit value indicating which register is the designated frame pointer register.
Definition: CodeView.h:551
RegisterId decodeFramePtrReg(EncodedFramePtrReg EncodedReg, CPUType CPU)
PublicSymFlags
Corresponds to the CV_PUBSYMFLAGS bitfield.
Definition: CodeView.h:433
SourceLanguage
These values correspond to the CV_CFL_LANG enumeration in the Microsoft Debug Interface Access SDK,...
Definition: CodeView.h:146
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:456
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
DWARFExpression::Operation Op
BinaryAnnotationIterator & operator=(const BinaryAnnotationIterator Other)
Definition: SymbolRecord.h:201
BinaryAnnotationIterator & operator++()
Definition: SymbolRecord.h:206
BinaryAnnotationIterator(const BinaryAnnotationIterator &Other)
Definition: SymbolRecord.h:194
const DecodedAnnotation & operator*()
Definition: SymbolRecord.h:217
bool operator==(BinaryAnnotationIterator Other) const
Definition: SymbolRecord.h:197
BinaryAnnotationIterator(ArrayRef< uint8_t > Annotations)
Definition: SymbolRecord.h:193
BinaryAnnotationsOpCode OpCode
Definition: SymbolRecord.h:182