LLVM 22.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"
23#include "llvm/Support/Endian.h"
24#include <cstdint>
25#include <vector>
26
27namespace llvm {
28namespace codeview {
29
31protected:
33
34public:
35 SymbolRecordKind getKind() const { return Kind; }
36
38};
39
40// S_GPROC32, S_LPROC32, S_GPROC32_ID, S_LPROC32_ID, S_LPROC32_DPC or
41// S_LPROC32_DPC_ID
42class ProcSym : public SymbolRecord {
43 static constexpr uint32_t RelocationOffset = 32;
44
45public:
49
51 return RecordOffset + RelocationOffset;
52 }
53
65
67};
68
69// S_THUNK32
70class Thunk32Sym : public SymbolRecord {
71public:
75
85
87};
88
89// S_TRAMPOLINE
91public:
95
102
104};
105
106// S_SECTION
107class SectionSym : public SymbolRecord {
108public:
112
119
121};
122
123// S_COFFGROUP
125public:
129
135
137};
138
139class ScopeEndSym : public SymbolRecord {
140public:
144
146};
147
149public:
154
157
163
165
167};
168
169class CallerSym : public SymbolRecord {
170public:
174
175 std::vector<TypeIndex> Indices;
176
178};
179
181public:
186
187 // This is an ItemID in the IPI stream, which points to an LF_FUNC_ID or
188 // LF_MFUNC_ID record.
191
193};
194
201 int32_t S1 = 0;
202};
203
205 : public iterator_facade_base<BinaryAnnotationIterator,
206 std::forward_iterator_tag,
207 DecodedAnnotation> {
211 : Data(Other.Data) {}
212
214 return Data == Other.Data;
215 }
216
218 Data = Other.Data;
219 return *this;
220 }
221
223 if (!ParseCurrentAnnotation()) {
224 *this = BinaryAnnotationIterator();
225 return *this;
226 }
227 Data = Next;
228 Next = ArrayRef<uint8_t>();
229 Current.reset();
230 return *this;
231 }
232
234 ParseCurrentAnnotation();
235 return *Current;
236 }
237
238private:
239 static uint32_t GetCompressedAnnotation(ArrayRef<uint8_t> &Annotations) {
240 if (Annotations.empty())
241 return -1;
242
243 uint8_t FirstByte = Annotations.consume_front();
244
245 if ((FirstByte & 0x80) == 0x00)
246 return FirstByte;
247
248 if (Annotations.empty())
249 return -1;
250
251 uint8_t SecondByte = Annotations.consume_front();
252
253 if ((FirstByte & 0xC0) == 0x80)
254 return ((FirstByte & 0x3F) << 8) | SecondByte;
255
256 if (Annotations.empty())
257 return -1;
258
259 uint8_t ThirdByte = Annotations.consume_front();
260
261 if (Annotations.empty())
262 return -1;
263
264 uint8_t FourthByte = Annotations.consume_front();
265
266 if ((FirstByte & 0xE0) == 0xC0)
267 return ((FirstByte & 0x1F) << 24) | (SecondByte << 16) |
268 (ThirdByte << 8) | FourthByte;
269
270 return -1;
271 }
272
273 static int32_t DecodeSignedOperand(uint32_t Operand) {
274 if (Operand & 1)
275 return -(Operand >> 1);
276 return Operand >> 1;
277 }
278
279 static int32_t DecodeSignedOperand(ArrayRef<uint8_t> &Annotations) {
280 return DecodeSignedOperand(GetCompressedAnnotation(Annotations));
281 }
282
283 bool ParseCurrentAnnotation() {
284 if (Current)
285 return true;
286
287 Next = Data;
288 uint32_t Op = GetCompressedAnnotation(Next);
289 DecodedAnnotation Result;
290 Result.OpCode = static_cast<BinaryAnnotationsOpCode>(Op);
291 switch (Result.OpCode) {
293 Result.Name = "Invalid";
294 Next = ArrayRef<uint8_t>();
295 break;
297 Result.Name = "CodeOffset";
298 Result.U1 = GetCompressedAnnotation(Next);
299 break;
301 Result.Name = "ChangeCodeOffsetBase";
302 Result.U1 = GetCompressedAnnotation(Next);
303 break;
305 Result.Name = "ChangeCodeOffset";
306 Result.U1 = GetCompressedAnnotation(Next);
307 break;
309 Result.Name = "ChangeCodeLength";
310 Result.U1 = GetCompressedAnnotation(Next);
311 break;
313 Result.Name = "ChangeFile";
314 Result.U1 = GetCompressedAnnotation(Next);
315 break;
317 Result.Name = "ChangeLineEndDelta";
318 Result.U1 = GetCompressedAnnotation(Next);
319 break;
321 Result.Name = "ChangeRangeKind";
322 Result.U1 = GetCompressedAnnotation(Next);
323 break;
325 Result.Name = "ChangeColumnStart";
326 Result.U1 = GetCompressedAnnotation(Next);
327 break;
329 Result.Name = "ChangeColumnEnd";
330 Result.U1 = GetCompressedAnnotation(Next);
331 break;
333 Result.Name = "ChangeLineOffset";
334 Result.S1 = DecodeSignedOperand(Next);
335 break;
337 Result.Name = "ChangeColumnEndDelta";
338 Result.S1 = DecodeSignedOperand(Next);
339 break;
341 Result.Name = "ChangeCodeOffsetAndLineOffset";
342 uint32_t Annotation = GetCompressedAnnotation(Next);
343 Result.S1 = DecodeSignedOperand(Annotation >> 4);
344 Result.U1 = Annotation & 0xf;
345 break;
346 }
348 Result.Name = "ChangeCodeLengthAndCodeOffset";
349 Result.U1 = GetCompressedAnnotation(Next);
350 Result.U2 = GetCompressedAnnotation(Next);
351 break;
352 }
353 }
354 Result.Bytes = Data.take_front(Data.size() - Next.size());
355 Current = Result;
356 return true;
357 }
358
359 std::optional<DecodedAnnotation> Current;
360 ArrayRef<uint8_t> Data;
361 ArrayRef<uint8_t> Next;
362};
363
364// S_INLINESITE
366public:
371
375 }
376
380 std::vector<uint8_t> AnnotationData;
381
383};
384
386 ulittle32_t Flags;
387 ulittle32_t Offset;
388 ulittle16_t Segment;
389 // char Name[];
390};
391
392// S_PUB32
393class PublicSym32 : public SymbolRecord {
394public:
400
405
407};
408
409// S_REGISTER
410class RegisterSym : public SymbolRecord {
411public:
416
420
422};
423
424// S_PROCREF, S_LPROCREF
425class ProcRefSym : public SymbolRecord {
426public:
430 }
431
436
437 uint16_t modi() const { return Module - 1; }
439};
440
441// S_LOCAL
442class LocalSym : public SymbolRecord {
443public:
447
451
453};
454
459};
460
464};
465
466enum : uint16_t { MaxDefRange = 0xf000 };
467
468// S_DEFRANGE
469class DefRangeSym : public SymbolRecord {
470 static constexpr uint32_t RelocationOffset = 8;
471
472public:
477
479 return RecordOffset + RelocationOffset;
480 }
481
484 std::vector<LocalVariableAddrGap> Gaps;
485
487};
488
489// S_DEFRANGE_SUBFIELD
491 static constexpr uint32_t RelocationOffset = 12;
492
493public:
498
500 return RecordOffset + RelocationOffset;
501 }
502
506 std::vector<LocalVariableAddrGap> Gaps;
507
509};
510
512 ulittle16_t Register;
513 ulittle16_t MayHaveNoName;
514};
515
516// S_DEFRANGE_REGISTER
518public:
523
525
528 std::vector<LocalVariableAddrGap> Gaps;
529
531};
532
534 ulittle16_t Register;
535 ulittle16_t MayHaveNoName;
536 ulittle32_t OffsetInParent;
537};
538
539// S_DEFRANGE_SUBFIELD_REGISTER
541public:
543 : SymbolRecord(Kind) {}
547
549
552 std::vector<LocalVariableAddrGap> Gaps;
553
555};
556
558 little32_t Offset;
559};
560
561// S_DEFRANGE_FRAMEPOINTER_REL
563 static constexpr uint32_t RelocationOffset = 8;
564
565public:
567 : SymbolRecord(Kind) {}
571
573 return RecordOffset + RelocationOffset;
574 }
575
578 std::vector<LocalVariableAddrGap> Gaps;
579
581};
582
584 ulittle16_t Register;
585 ulittle16_t Flags;
587};
588
589// S_DEFRANGE_REGISTER_REL
591public:
596
597 // The flags implement this notional bitfield:
598 // uint16_t IsSubfield : 1;
599 // uint16_t Padding : 3;
600 // uint16_t OffsetInParent : 12;
601 enum : uint16_t {
604 };
605
606 bool hasSpilledUDTMember() const { return Hdr.Flags & IsSubfieldFlag; }
608
610
613 std::vector<LocalVariableAddrGap> Gaps;
614
616};
617
618// S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
620public:
622 : SymbolRecord(Kind) {}
626
627 int32_t Offset = 0;
628
630};
631
632// S_BLOCK32
633class BlockSym : public SymbolRecord {
634 static constexpr uint32_t RelocationOffset = 16;
635
636public:
640
642 return RecordOffset + RelocationOffset;
643 }
644
651
653};
654
655// S_LABEL32
656class LabelSym : public SymbolRecord {
657 static constexpr uint32_t RelocationOffset = 4;
658
659public:
663
665 return RecordOffset + RelocationOffset;
666 }
667
672
674};
675
676// S_OBJNAME
677class ObjNameSym : public SymbolRecord {
678public:
683 }
684
687
689};
690
691// S_ENVBLOCK
692class EnvBlockSym : public SymbolRecord {
693public:
698
699 std::vector<StringRef> Fields;
700
702};
703
704// S_EXPORT
705class ExportSym : public SymbolRecord {
706public:
710
714
716};
717
718// S_FILESTATIC
720public:
725
730
732};
733
734// S_COMPILE2
735class Compile2Sym : public SymbolRecord {
736public:
741
751 std::vector<StringRef> ExtraStrings;
752
753 uint8_t getLanguage() const { return static_cast<uint32_t>(Flags) & 0xFF; }
754 uint32_t getFlags() const { return static_cast<uint32_t>(Flags) & ~0xFF; }
755
757};
758
759// S_COMPILE3
760class Compile3Sym : public SymbolRecord {
761public:
767
779
781 Flags = CompileSym3Flags((uint32_t(Flags) & 0xFFFFFF00) | uint32_t(Lang));
782 }
783
785 return static_cast<SourceLanguage>(static_cast<uint32_t>(Flags) & 0xFF);
786 }
788 return static_cast<CompileSym3Flags>(static_cast<uint32_t>(Flags) & ~0xFF);
789 }
790
791 bool hasOptimizations() const {
792 return CompileSym3Flags::None !=
794 }
795
797};
798
799// S_FRAMEPROC
801public:
806
814
815 /// Extract the register this frame uses to refer to local variables.
817 return decodeFramePtrReg(
818 EncodedFramePtrReg((uint32_t(Flags) >> 14U) & 0x3U), CPU);
819 }
820
821 /// Extract the register this frame uses to refer to parameters.
823 return decodeFramePtrReg(
824 EncodedFramePtrReg((uint32_t(Flags) >> 16U) & 0x3U), CPU);
825 }
826
828
829private:
830};
831
832// S_CALLSITEINFO
834 static constexpr uint32_t RelocationOffset = 4;
835
836public:
840
842 return RecordOffset + RelocationOffset;
843 }
844
848
850};
851
852// S_HEAPALLOCSITE
854 static constexpr uint32_t RelocationOffset = 4;
855
856public:
861
863 return RecordOffset + RelocationOffset;
864 }
865
870
872};
873
874// S_FRAMECOOKIE
876 static constexpr uint32_t RelocationOffset = 4;
877
878public:
882
884 return RecordOffset + RelocationOffset;
885 }
886
891
893};
894
895// S_UDT, S_COBOLUDT
896class UDTSym : public SymbolRecord {
897public:
901
904
906};
907
908// S_BUILDINFO
910public:
915
917
919};
920
921// S_BPREL32
923public:
928
929 int32_t Offset = 0;
932
934};
935
936// S_REGREL32
938public:
943
948
950};
951
952// S_CONSTANT, S_MANCONSTANT
953class ConstantSym : public SymbolRecord {
954public:
959
963
965};
966
967// S_LDATA32, S_GDATA32, S_LMANDATA, S_GMANDATA
968class DataSym : public SymbolRecord {
969 static constexpr uint32_t RelocationOffset = 8;
970
971public:
975
977 return RecordOffset + RelocationOffset;
978 }
979
984
986};
987
988// S_LTHREAD32, S_GTHREAD32
990 static constexpr uint32_t RelocationOffset = 8;
991
992public:
997
999 return RecordOffset + RelocationOffset;
1000 }
1001
1006
1008};
1009
1010// S_UNAMESPACE
1012public:
1017
1019
1021};
1022
1023// S_ANNOTATION
1025public:
1030
1033 std::vector<StringRef> Strings;
1034
1036};
1037
1040
1041} // end namespace codeview
1042} // end namespace llvm
1043
1044#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.
#define LLVM_ABI
Definition: Compiler.h:213
An arbitrary precision integer that knows its signedness.
Definition: APSInt.h:24
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:224
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:147
BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.
Tagged union holding either a T or a Error.
Definition: Error.h:485
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:67
Wrapper class representing virtual and physical registers.
Definition: Register.h:19
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:55
std::vector< StringRef > Strings
AnnotationSym(uint32_t RecordOffset)
AnnotationSym(SymbolRecordKind Kind)
BPRelativeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:925
BPRelativeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:924
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:641
BlockSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:638
BlockSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:637
BuildInfoSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:911
BuildInfoSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:912
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:841
CallSiteInfoSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:837
CallSiteInfoSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:838
CallerSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:172
std::vector< TypeIndex > Indices
Definition: SymbolRecord.h:175
CallerSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:171
CoffGroupSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:126
CoffGroupSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:127
uint8_t getLanguage() const
Definition: SymbolRecord.h:753
Compile2Sym(uint32_t RecordOffset)
Definition: SymbolRecord.h:738
uint32_t getFlags() const
Definition: SymbolRecord.h:754
Compile2Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:737
std::vector< StringRef > ExtraStrings
Definition: SymbolRecord.h:751
CompileSym3Flags getFlags() const
Definition: SymbolRecord.h:787
Compile3Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:763
Compile3Sym(uint32_t RecordOffset)
Definition: SymbolRecord.h:764
SourceLanguage getLanguage() const
Definition: SymbolRecord.h:784
void setLanguage(SourceLanguage Lang)
Definition: SymbolRecord.h:780
ConstantSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:955
ConstantSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:956
DataSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:973
DataSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:972
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:976
DefRangeFramePointerRelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:566
DefRangeFramePointerRelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:568
DefRangeFramePointerRelHeader Hdr
Definition: SymbolRecord.h:576
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:578
DefRangeRegisterRelHeader Hdr
Definition: SymbolRecord.h:611
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:613
DefRangeRegisterRelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:593
DefRangeRegisterRelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:592
DefRangeRegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:519
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:528
LocalVariableAddrRange Range
Definition: SymbolRecord.h:527
DefRangeRegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:520
DefRangeSubfieldRegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:542
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:552
DefRangeSubfieldRegisterHeader Hdr
Definition: SymbolRecord.h:550
DefRangeSubfieldRegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:544
DefRangeSubfieldSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:494
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:506
DefRangeSubfieldSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:495
LocalVariableAddrRange Range
Definition: SymbolRecord.h:505
DefRangeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:473
std::vector< LocalVariableAddrGap > Gaps
Definition: SymbolRecord.h:484
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:478
DefRangeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:474
LocalVariableAddrRange Range
Definition: SymbolRecord.h:483
EnvBlockSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:694
std::vector< StringRef > Fields
Definition: SymbolRecord.h:699
EnvBlockSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:695
ExportSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:707
ExportSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:708
FileStaticSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:722
FileStaticSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:721
FrameCookieSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:879
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:883
FrameCookieSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:880
FrameProcSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:802
FrameProcSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:803
RegisterId getLocalFramePtrReg(CPUType CPU) const
Extract the register this frame uses to refer to local variables.
Definition: SymbolRecord.h:816
RegisterId getParamFramePtrReg(CPUType CPU) const
Extract the register this frame uses to refer to parameters.
Definition: SymbolRecord.h:822
FrameProcedureOptions Flags
Definition: SymbolRecord.h:813
HeapAllocationSiteSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:858
HeapAllocationSiteSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:857
HotPatchFuncSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:182
HotPatchFuncSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:183
std::vector< uint8_t > AnnotationData
Definition: SymbolRecord.h:380
InlineSiteSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:367
iterator_range< BinaryAnnotationIterator > annotations() const
Definition: SymbolRecord.h:372
InlineSiteSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:368
JumpTableSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:150
JumpTableEntrySize SwitchType
Definition: SymbolRecord.h:158
JumpTableSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:151
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:664
LabelSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:660
LabelSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:661
LocalSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:444
LocalSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:445
ObjNameSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:680
ObjNameSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:681
ProcRefSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:428
ProcRefSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:427
ProcSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:47
uint32_t getRelocationOffset() const
Definition: SymbolRecord.h:50
ProcSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:46
PublicSym32(SymbolRecordKind Kind)
Definition: SymbolRecord.h:396
PublicSym32(uint32_t RecordOffset)
Definition: SymbolRecord.h:397
RegRelativeSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:939
RegRelativeSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:940
RegisterSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:413
RegisterSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:412
ScopeEndSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:142
ScopeEndSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:141
SectionSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:109
SectionSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:110
SymbolRecord(SymbolRecordKind Kind)
Definition: SymbolRecord.h:32
SymbolRecordKind getKind() const
Definition: SymbolRecord.h:35
ThreadLocalDataSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:994
ThreadLocalDataSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:993
ArrayRef< uint8_t > VariantData
Definition: SymbolRecord.h:84
Thunk32Sym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:73
Thunk32Sym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:72
TrampolineSym(SymbolRecordKind Kind, uint32_t RecordOffset)
Definition: SymbolRecord.h:93
TrampolineSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:92
A 32-bit type reference.
Definition: TypeIndex.h:97
UDTSym(SymbolRecordKind Kind)
Definition: SymbolRecord.h:898
UDTSym(uint32_t RecordOffset)
Definition: SymbolRecord.h:899
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:416
LocalSymFlags
Corresponds to CV_LVARFLAGS bitfield.
Definition: CodeView.h:389
CompileSym2Flags
Corresponds to COMPILESYM2::Flags bitfield.
Definition: CodeView.h:430
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn....
Definition: CodeView.h:77
CompileSym3Flags
Corresponds to COMPILESYM3::Flags bitfield.
Definition: CodeView.h:446
SymbolRecordKind
Distinguishes individual records in the Symbols subsection of a .debug$S section.
Definition: CodeView.h:42
ThunkOrdinal
These values correspond to the THUNK_ORDINAL enumeration.
Definition: CodeView.h:537
EncodedFramePtrReg
Two-bit value indicating which register is the designated frame pointer register.
Definition: CodeView.h:524
LLVM_ABI RegisterId decodeFramePtrReg(EncodedFramePtrReg EncodedReg, CPUType CPU)
PublicSymFlags
Corresponds to the CV_PUBSYMFLAGS bitfield.
Definition: CodeView.h:406
SourceLanguage
These values correspond to the CV_CFL_LANG enumeration in the Microsoft Debug Interface Access SDK,...
Definition: CodeView.h:147
LLVM_ABI 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:477
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:217
BinaryAnnotationIterator & operator++()
Definition: SymbolRecord.h:222
BinaryAnnotationIterator(const BinaryAnnotationIterator &Other)
Definition: SymbolRecord.h:210
const DecodedAnnotation & operator*()
Definition: SymbolRecord.h:233
bool operator==(BinaryAnnotationIterator Other) const
Definition: SymbolRecord.h:213
BinaryAnnotationIterator(ArrayRef< uint8_t > Annotations)
Definition: SymbolRecord.h:209
BinaryAnnotationsOpCode OpCode
Definition: SymbolRecord.h:198