1de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===- SymbolRecord.h -------------------------------------------*- C++ -*-===// 2de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 3de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// The LLVM Compiler Infrastructure 4de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 5de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 6de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// License. See LICENSE.TXT for details. 7de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 8de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===// 9de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 10de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#ifndef LLVM_DEBUGINFO_CODEVIEW_SYMBOLRECORD_H 11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#define LLVM_DEBUGINFO_CODEVIEW_SYMBOLRECORD_H 12de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 13de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/ADT/APSInt.h" 14de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/ADT/Optional.h" 15de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/CVRecord.h" 16de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/CodeView.h" 17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/RecordSerialization.h" 18de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/StreamArray.h" 19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/StreamInterface.h" 20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/TypeIndex.h" 21de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/Support/Endian.h" 22de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/Support/Error.h" 23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 24de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarnamespace llvm { 25de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarnamespace codeview { 26de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 27de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing llvm::support::ulittle16_t; 28de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing llvm::support::ulittle32_t; 29de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing llvm::support::little32_t; 30de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 31de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass SymbolRecord { 32de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarprotected: 33de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar explicit SymbolRecord(SymbolRecordKind Kind) : Kind(Kind) {} 34de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 35de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolRecordKind getKind() const { return Kind; } 37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 38de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarprivate: 39de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolRecordKind Kind; 40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 41de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 42de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_GPROC32, S_LPROC32, S_GPROC32_ID, S_LPROC32_ID, S_LPROC32_DPC or 43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_LPROC32_DPC_ID 44de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass ProcSym : public SymbolRecord { 45de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 46de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 47de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PtrParent; 48de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PtrEnd; 49de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PtrNext; 50de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeSize; 51de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t DbgStart; 52de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t DbgEnd; 53de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex FunctionType; 54de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeOffset; 55de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 56de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Flags; // ProcSymFlags enum 57de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 58de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 59de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 60de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ProcSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H, 61de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name) 62de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H), Name(Name) { 63de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 64de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 65de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<ProcSym> deserialize(SymbolRecordKind Kind, 66de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 67de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 68de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 69de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 70de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 71de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 72de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ProcSym(Kind, RecordOffset, H, Name); 73de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 74de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 75de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 76de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, CodeOffset); 77de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 78de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 79de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 80de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 81de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 82de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 83de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 84de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_THUNK32 85de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass Thunk32Sym : public SymbolRecord { 86de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 87de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 88de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Parent; 89de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t End; 90de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Next; 91de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Off; 92de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Seg; 93de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Len; 94de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Ord; // ThunkOrdinal enumeration 95de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 96de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Variant portion of thunk 97de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 98de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 99de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Thunk32Sym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H, 100de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name, ArrayRef<uint8_t> VariantData) 101de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H), Name(Name), 102de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar VariantData(VariantData) {} 103de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 104de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<Thunk32Sym> deserialize(SymbolRecordKind Kind, 105de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 106de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 107de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 108de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 109de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> VariantData; 110de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 111de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name, CV_ARRAY_FIELD_TAIL(VariantData)); 112de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 113de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Thunk32Sym(Kind, RecordOffset, H, Name, VariantData); 114de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 115de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 116de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 117de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 118de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 119de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> VariantData; 120de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 121de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 122de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_TRAMPOLINE 123de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass TrampolineSym : public SymbolRecord { 124de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 125de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 126de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Type; // TrampolineType enum 127de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Size; 128de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t ThunkOff; 129de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t TargetOff; 130de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t ThunkSection; 131de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t TargetSection; 132de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 133de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 134de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TrampolineSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H) 135de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H) {} 136de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 137de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<TrampolineSym> deserialize(SymbolRecordKind Kind, 138de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 139de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 140de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 141de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 142de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H); 143de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 144de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return TrampolineSym(Kind, RecordOffset, H); 145de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 146de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 147de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 148de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 149de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 150de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 151de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_SECTION 152de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass SectionSym : public SymbolRecord { 153de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 154de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 155de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t SectionNumber; 156de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Alignment; 157de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Reserved; // Must be 0 158de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Rva; 159de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Length; 160de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Characteristics; 161de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 162de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 163de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 164de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SectionSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H, 165de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name) 166de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H), Name(Name) { 167de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 168de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 169de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<SectionSym> deserialize(SymbolRecordKind Kind, 170de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 171de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 172de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 173de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 174de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 175de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 176de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 177de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return SectionSym(Kind, RecordOffset, H, Name); 178de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 179de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 180de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 181de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 182de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 183de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 184de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 185de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_COFFGROUP 186de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass CoffGroupSym : public SymbolRecord { 187de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 188de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 189de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Size; 190de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Characteristics; 191de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Offset; 192de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 193de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 194de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 195de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 196de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CoffGroupSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H, 197de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name) 198de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H), Name(Name) { 199de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 200de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 201de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<CoffGroupSym> deserialize(SymbolRecordKind Kind, 202de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 203de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 204de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 205de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 206de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 207de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 208de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 209de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return CoffGroupSym(Kind, RecordOffset, H, Name); 210de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 211de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 212de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 213de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 214de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 215de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 216de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 217de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass ScopeEndSym : public SymbolRecord { 218de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 219de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ScopeEndSym(SymbolRecordKind Kind, uint32_t RecordOffset) 220de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(Kind), RecordOffset(RecordOffset) {} 221de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 222de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<ScopeEndSym> deserialize(SymbolRecordKind Kind, 223de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 224de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 225de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ScopeEndSym(Kind, RecordOffset); 226de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 227de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 228de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 229de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 230de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass CallerSym : public SymbolRecord { 231de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 232de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 233de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Count; 234de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 235de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 236de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CallerSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *Header, 237de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<TypeIndex> Indices) 238de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*Header), 239de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Indices(Indices) {} 240de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 241de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<CallerSym> deserialize(SymbolRecordKind Kind, 242de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 243de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 244de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *Header; 245de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<TypeIndex> Indices; 246de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 247de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, Header, CV_ARRAY_FIELD_N(Indices, Header->Count)); 248de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 249de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return CallerSym(Kind, RecordOffset, Header, Indices); 250de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 251de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 252de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 253de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 254de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<TypeIndex> Indices; 255de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 256de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 257de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarstruct BinaryAnnotationIterator { 258de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct AnnotationData { 259de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationsOpCode OpCode; 260de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 261de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t U1; 262de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t U2; 263de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar int32_t S1; 264de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 265de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 266de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator(ArrayRef<uint8_t> Annotations) : Data(Annotations) {} 267de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator() {} 268de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator(const BinaryAnnotationIterator &Other) 269de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : Data(Other.Data) {} 270de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 271de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool operator==(BinaryAnnotationIterator Other) const { 272de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Data == Other.Data; 273de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 274de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 275de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool operator!=(BinaryAnnotationIterator Other) const { 276de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return !(*this == Other); 277de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 278de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 279de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator &operator=(const BinaryAnnotationIterator Other) { 280de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Data = Other.Data; 281de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return *this; 282de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 283de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 284de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator &operator++() { 285de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!ParseCurrentAnnotation()) { 286de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar *this = BinaryAnnotationIterator(); 287de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return *this; 288de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 289de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Data = Next; 290de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Next = ArrayRef<uint8_t>(); 291de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Current.reset(); 292de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return *this; 293de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 294de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 295de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator operator++(int) { 296de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator Orig(*this); 297de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ++(*this); 298de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Orig; 299de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 300de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 301de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const AnnotationData &operator*() { 302de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ParseCurrentAnnotation(); 303de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Current.getValue(); 304de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 305de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 306de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarprivate: 307de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static uint32_t GetCompressedAnnotation(ArrayRef<uint8_t> &Annotations) { 308de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Annotations.empty()) 309de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return -1; 310de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 311de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t FirstByte = Annotations.front(); 312de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Annotations = Annotations.drop_front(); 313de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 314de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if ((FirstByte & 0x80) == 0x00) 315de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return FirstByte; 316de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 317de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Annotations.empty()) 318de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return -1; 319de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 320de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t SecondByte = Annotations.front(); 321de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Annotations = Annotations.drop_front(); 322de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 323de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if ((FirstByte & 0xC0) == 0x80) 324de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ((FirstByte & 0x3F) << 8) | SecondByte; 325de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 326de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Annotations.empty()) 327de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return -1; 328de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 329de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t ThirdByte = Annotations.front(); 330de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Annotations = Annotations.drop_front(); 331de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 332de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Annotations.empty()) 333de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return -1; 334de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 335de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t FourthByte = Annotations.front(); 336de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Annotations = Annotations.drop_front(); 337de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 338de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if ((FirstByte & 0xE0) == 0xC0) 339de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ((FirstByte & 0x1F) << 24) | (SecondByte << 16) | 340de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar (ThirdByte << 8) | FourthByte; 341de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 342de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return -1; 343de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 344de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 345de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static int32_t DecodeSignedOperand(uint32_t Operand) { 346de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Operand & 1) 347de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return -(Operand >> 1); 348de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Operand >> 1; 349de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 350de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 351de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static int32_t DecodeSignedOperand(ArrayRef<uint8_t> &Annotations) { 352de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DecodeSignedOperand(GetCompressedAnnotation(Annotations)); 353de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 354de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 355de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool ParseCurrentAnnotation() { 356de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Current.hasValue()) 357de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return true; 358de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 359de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Next = Data; 360de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t Op = GetCompressedAnnotation(Next); 361de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar AnnotationData Result; 362de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.OpCode = static_cast<BinaryAnnotationsOpCode>(Op); 363de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar switch (Result.OpCode) { 364de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::Invalid: 365de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "Invalid"; 366de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Next = ArrayRef<uint8_t>(); 367de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 368de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::CodeOffset: 369de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "CodeOffset"; 370de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 371de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 372de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeOffsetBase: 373de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeCodeOffsetBase"; 374de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 375de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 376de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeOffset: 377de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeCodeOffset"; 378de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 379de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 380de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeLength: 381de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeCodeLength"; 382de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 383de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 384de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeFile: 385de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeFile"; 386de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 387de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 388de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeLineEndDelta: 389de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeLineEndDelta"; 390de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 391de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 392de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeRangeKind: 393de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeRangeKind"; 394de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 395de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 396de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeColumnStart: 397de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeColumnStart"; 398de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 399de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 400de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeColumnEnd: 401de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeColumnEnd"; 402de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 403de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 404de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeLineOffset: 405de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeLineOffset"; 406de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.S1 = DecodeSignedOperand(Next); 407de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 408de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeColumnEndDelta: 409de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeColumnEndDelta"; 410de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.S1 = DecodeSignedOperand(Next); 411de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 412de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeOffsetAndLineOffset: { 413de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeCodeOffsetAndLineOffset"; 414de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t Annotation = GetCompressedAnnotation(Next); 415de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.S1 = DecodeSignedOperand(Annotation >> 4); 416de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = Annotation & 0xf; 417de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 418de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 419de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeLengthAndCodeOffset: { 420de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.Name = "ChangeCodeLengthAndCodeOffset"; 421de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U1 = GetCompressedAnnotation(Next); 422de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Result.U2 = GetCompressedAnnotation(Next); 423de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 424de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 425de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 426de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Current = Result; 427de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return true; 428de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 429de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 430de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Optional<AnnotationData> Current; 431de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> Data; 432de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> Next; 433de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 434de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 435de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_INLINESITE 436de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass InlineSiteSym : public SymbolRecord { 437de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 438de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 439de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PtrParent; 440de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PtrEnd; 441de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Inlinee; 442de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // BinaryAnnotations 443de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 444de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 445de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar InlineSiteSym(uint32_t RecordOffset, const Hdr *H, 446de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> Annotations) 447de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::InlineSiteSym), 448de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Annotations(Annotations) {} 449de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 450de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<InlineSiteSym> deserialize(SymbolRecordKind Kind, 451de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 452de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 453de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 454de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> Annotations; 455de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_ARRAY_FIELD_TAIL(Annotations)); 456de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 457de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return InlineSiteSym(RecordOffset, H, Annotations); 458de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 459de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 460de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar llvm::iterator_range<BinaryAnnotationIterator> annotations() const { 461de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return llvm::make_range(BinaryAnnotationIterator(Annotations), 462de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BinaryAnnotationIterator()); 463de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 464de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 465de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 466de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 467de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 468de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarprivate: 469de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> Annotations; 470de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 471de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 472de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_PUB32 473de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass PublicSym32 : public SymbolRecord { 474de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 475de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 476de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Index; // Type index, or Metadata token if a managed symbol 477de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Off; 478de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Seg; 479de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 480de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 481de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 482de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar PublicSym32(uint32_t RecordOffset, const Hdr *H, StringRef Name) 483de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::PublicSym32), RecordOffset(RecordOffset), 484de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 485de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 486de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<PublicSym32> deserialize(SymbolRecordKind Kind, 487de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 488de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 489de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 490de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 491de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 492de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 493de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return PublicSym32(RecordOffset, H, Name); 494de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 495de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 496de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 497de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 498de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 499de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 500de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 501de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_REGISTER 502de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass RegisterSym : public SymbolRecord { 503de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 504de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 505de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Index; // Type index or Metadata token 506de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Register; // RegisterId enumeration 507de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 508de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 509de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 510de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RegisterSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 511de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::RegisterSym), RecordOffset(RecordOffset), 512de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 513de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 514de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<RegisterSym> deserialize(SymbolRecordKind Kind, 515de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 516de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 517de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 518de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 519de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 520de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 521de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RegisterSym(RecordOffset, H, Name); 522de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 523de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 524de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 525de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 526de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 527de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 528de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 529de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_PROCREF, S_LPROCREF 530de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass ProcRefSym : public SymbolRecord { 531de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 532de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 533de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t SumName; // SUC of the name (?) 534de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t SymOffset; // Offset of actual symbol in $$Symbols 535de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Mod; // Module containing the actual symbol 536de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 537de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 538de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 539de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ProcRefSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 540de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::ProcRefSym), RecordOffset(RecordOffset), 541de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 542de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 543de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<ProcRefSym> deserialize(SymbolRecordKind Kind, 544de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 545de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 546de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 547de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 548de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 549de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 550de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ProcRefSym(RecordOffset, H, Name); 551de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 552de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 553de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 554de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 555de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 556de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 557de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 558de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_LOCAL 559de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass LocalSym : public SymbolRecord { 560de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 561de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 562de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; 563de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Flags; // LocalSymFlags enum 564de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 565de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 566de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 567de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LocalSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 568de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::LocalSym), RecordOffset(RecordOffset), 569de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 570de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 571de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<LocalSym> deserialize(SymbolRecordKind Kind, 572de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 573de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 574de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 575de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 576de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 577de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 578de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return LocalSym(RecordOffset, H, Name); 579de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 580de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 581de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 582de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 583de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 584de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 585de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 586de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarstruct LocalVariableAddrRange { 587de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t OffsetStart; 588de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t ISectStart; 589de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Range; 590de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 591de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 592de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarstruct LocalVariableAddrGap { 593de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t GapStartOffset; 594de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Range; 595de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 596de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 597de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarenum : uint16_t { MaxDefRange = 0xf000 }; 598de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 599de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_DEFRANGE 600de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DefRangeSym : public SymbolRecord { 601de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 602de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 603de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Program; 604de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LocalVariableAddrRange Range; 605de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // LocalVariableAddrGap Gaps[]; 606de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 607de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 608de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSym(uint32_t RecordOffset, const Hdr *H, 609de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 610de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeSym), RecordOffset(RecordOffset), 611de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Gaps(Gaps) {} 612de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 613de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DefRangeSym> deserialize(SymbolRecordKind Kind, 614de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 615de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 616de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 617de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 618de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_ARRAY_FIELD_TAIL(Gaps)); 619de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 620de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DefRangeSym(RecordOffset, H, Gaps); 621de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 622de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 623de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 624de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, Range); 625de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 626de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 627de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 628de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 629de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 630de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 631de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 632de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_DEFRANGE_SUBFIELD 633de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DefRangeSubfieldSym : public SymbolRecord { 634de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 635de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 636de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Program; 637de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t OffsetInParent; 638de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LocalVariableAddrRange Range; 639de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // LocalVariableAddrGap Gaps[]; 640de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 641de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSubfieldSym(uint32_t RecordOffset, const Hdr *H, 642de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 643de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeSubfieldSym), 644de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Gaps(Gaps) {} 645de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 646de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DefRangeSubfieldSym> deserialize(SymbolRecordKind Kind, 647de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 648de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 649de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 650de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 651de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_ARRAY_FIELD_TAIL(Gaps)); 652de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 653de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DefRangeSubfieldSym(RecordOffset, H, Gaps); 654de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 655de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 656de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 657de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, Range); 658de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 659de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 660de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 661de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 662de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 663de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 664de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 665de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_DEFRANGE_REGISTER 666de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DefRangeRegisterSym : public SymbolRecord { 667de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 668de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 669de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Register; 670de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t MayHaveNoName; 671de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LocalVariableAddrRange Range; 672de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // LocalVariableAddrGap Gaps[]; 673de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 674de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 675de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegisterSym(uint32_t RecordOffset, const Hdr *H, 676de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 677de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeRegisterSym), 678de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Gaps(Gaps) {} 679de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 680de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegisterSym(uint16_t Register, uint16_t MayHaveNoName, 681de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t OffsetStart, uint16_t ISectStart, uint16_t Range, 682de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 683de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeRegisterSym), RecordOffset(0), 684de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Gaps(Gaps) { 685de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Register = Register; 686de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.MayHaveNoName = MayHaveNoName; 687de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Range.OffsetStart = OffsetStart; 688de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Range.ISectStart = ISectStart; 689de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Range.Range = Range; 690de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 691de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 692de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DefRangeRegisterSym> deserialize(SymbolRecordKind Kind, 693de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 694de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 695de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 696de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 697de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_ARRAY_FIELD_TAIL(Gaps)); 698de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 699de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DefRangeRegisterSym(RecordOffset, H, Gaps); 700de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 701de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 702de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 703de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, Range); 704de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 705de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 706de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 707de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 708de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 709de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 710de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 711de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_DEFRANGE_SUBFIELD_REGISTER 712de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DefRangeSubfieldRegisterSym : public SymbolRecord { 713de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 714de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 715de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Register; // Register to which the variable is relative 716de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t MayHaveNoName; 717de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t OffsetInParent; 718de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LocalVariableAddrRange Range; 719de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // LocalVariableAddrGap Gaps[]; 720de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 721de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 722de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSubfieldRegisterSym(uint32_t RecordOffset, const Hdr *H, 723de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 724de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeSubfieldRegisterSym), 725de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Gaps(Gaps) {} 726de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 727de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSubfieldRegisterSym(uint16_t Register, uint16_t MayHaveNoName, 728de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t OffsetInParent, 729de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 730de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeSubfieldRegisterSym), 731de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(0), Gaps(Gaps) { 732de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Register = Register; 733de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.MayHaveNoName = MayHaveNoName; 734de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.OffsetInParent = OffsetInParent; 735de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 736de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 737de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DefRangeSubfieldRegisterSym> 738de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar deserialize(SymbolRecordKind Kind, uint32_t RecordOffset, 739de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 740de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 741de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 742de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_ARRAY_FIELD_TAIL(Gaps)); 743de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 744de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DefRangeSubfieldRegisterSym(RecordOffset, H, Gaps); 745de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 746de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 747de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 748de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, Range); 749de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 750de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 751de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 752de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 753de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 754de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 755de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 756de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_DEFRANGE_FRAMEPOINTER_REL 757de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DefRangeFramePointerRelSym : public SymbolRecord { 758de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 759de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 760de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar little32_t Offset; // Offset from the frame pointer register 761de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LocalVariableAddrRange Range; 762de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // LocalVariableAddrGap Gaps[]; 763de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 764de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 765de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeFramePointerRelSym(uint32_t RecordOffset, const Hdr *H, 766de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 767de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeFramePointerRelSym), 768de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Gaps(Gaps) {} 769de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 770de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DefRangeFramePointerRelSym> 771de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar deserialize(SymbolRecordKind Kind, uint32_t RecordOffset, 772de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 773de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 774de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 775de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_ARRAY_FIELD_TAIL(Gaps)); 776de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 777de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DefRangeFramePointerRelSym(RecordOffset, H, Gaps); 778de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 779de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 780de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 781de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, Range); 782de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 783de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 784de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 785de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 786de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 787de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 788de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 789de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_DEFRANGE_REGISTER_REL 790de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DefRangeRegisterRelSym : public SymbolRecord { 791de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 792de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 793de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t BaseRegister; 794de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Flags; 795de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar little32_t BasePointerOffset; 796de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LocalVariableAddrRange Range; 797de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // LocalVariableAddrGap Gaps[]; 798de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 799de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 800de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegisterRelSym(uint32_t RecordOffset, const Hdr *H, 801de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 802de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeRegisterRelSym), 803de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Gaps(Gaps) {} 804de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 805de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegisterRelSym(uint16_t BaseRegister, uint16_t Flags, 806de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar int32_t BasePointerOffset, uint32_t OffsetStart, 807de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t ISectStart, uint16_t Range, 808de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) 809de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeRegisterRelSym), RecordOffset(0), 810de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Gaps(Gaps) { 811de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.BaseRegister = BaseRegister; 812de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Flags = Flags; 813de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.BasePointerOffset = BasePointerOffset; 814de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Range.OffsetStart = OffsetStart; 815de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Range.ISectStart = ISectStart; 816de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header.Range.Range = Range; 817de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 818de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 819de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DefRangeRegisterRelSym> deserialize(SymbolRecordKind Kind, 820de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 821de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 822de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 823de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 824de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_ARRAY_FIELD_TAIL(Gaps)); 825de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 826de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DefRangeRegisterRelSym(RecordOffset, H, Gaps); 827de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 828de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 829de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool hasSpilledUDTMember() const { return Header.Flags & 1; } 830de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t offsetInParent() const { return Header.Flags >> 4; } 831de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 832de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 833de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, Range); 834de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 835de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 836de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 837de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 838de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps; 839de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 840de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 841de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE 842de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DefRangeFramePointerRelFullScopeSym : public SymbolRecord { 843de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 844de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 845de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar little32_t Offset; // Offset from the frame pointer register 846de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 847de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 848de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeFramePointerRelFullScopeSym(uint32_t RecordOffset, const Hdr *H) 849de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DefRangeFramePointerRelFullScopeSym), 850de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H) {} 851de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 852de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DefRangeFramePointerRelFullScopeSym> 853de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar deserialize(SymbolRecordKind Kind, uint32_t RecordOffset, 854de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 855de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 856de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H); 857de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 858de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DefRangeFramePointerRelFullScopeSym(RecordOffset, H); 859de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 860de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 861de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 862de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 863de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 864de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 865de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_BLOCK32 866de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass BlockSym : public SymbolRecord { 867de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 868de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 869de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PtrParent; 870de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PtrEnd; 871de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeSize; 872de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeOffset; 873de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 874de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 875de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 876de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 877de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BlockSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 878de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::BlockSym), RecordOffset(RecordOffset), 879de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 880de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 881de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<BlockSym> deserialize(SymbolRecordKind Kind, 882de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 883de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 884de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 885de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 886de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 887de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 888de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return BlockSym(RecordOffset, H, Name); 889de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 890de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 891de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 892de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, CodeOffset); 893de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 894de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 895de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 896de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 897de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 898de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 899de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 900de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_LABEL32 901de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass LabelSym : public SymbolRecord { 902de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 903de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 904de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeOffset; 905de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 906de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Flags; // CV_PROCFLAGS 907de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 908de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 909de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 910de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LabelSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 911de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::LabelSym), RecordOffset(RecordOffset), 912de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 913de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 914de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<LabelSym> deserialize(SymbolRecordKind Kind, 915de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 916de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 917de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 918de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 919de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 920de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 921de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return LabelSym(RecordOffset, H, Name); 922de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 923de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 924de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 925de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, CodeOffset); 926de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 927de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 928de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 929de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 930de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 931de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 932de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 933de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_OBJNAME 934de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass ObjNameSym : public SymbolRecord { 935de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 936de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 937de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Signature; 938de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 939de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 940de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 941de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjNameSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 942de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::ObjNameSym), RecordOffset(RecordOffset), 943de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 944de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 945de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<ObjNameSym> deserialize(SymbolRecordKind Kind, 946de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 947de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 948de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 949de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 950de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 951de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 952de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ObjNameSym(RecordOffset, H, Name); 953de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 954de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 955de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 956de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 957de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 958de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 959de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 960de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_ENVBLOCK 961de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass EnvBlockSym : public SymbolRecord { 962de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 963de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 964de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Reserved; 965de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Sequence of zero terminated strings. 966de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 967de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 968de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EnvBlockSym(uint32_t RecordOffset, const Hdr *H, 969de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const std::vector<StringRef> &Fields) 970de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::EnvBlockSym), RecordOffset(RecordOffset), 971de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Fields(Fields) {} 972de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 973de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<EnvBlockSym> deserialize(SymbolRecordKind Kind, 974de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 975de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 976de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 977de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::vector<StringRef> Fields; 978de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, CV_STRING_ARRAY_NULL_TERM(Fields)); 979de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 980de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EnvBlockSym(RecordOffset, H, Fields); 981de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 982de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 983de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 984de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 985de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::vector<StringRef> Fields; 986de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 987de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 988de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_EXPORT 989de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass ExportSym : public SymbolRecord { 990de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 991de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 992de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Ordinal; 993de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Flags; // ExportFlags 994de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 995de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 996de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 997de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ExportSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 998de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::ExportSym), RecordOffset(RecordOffset), 999de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 1000de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1001de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<ExportSym> deserialize(SymbolRecordKind Kind, 1002de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1003de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1004de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1005de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1006de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 1007de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1008de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ExportSym(RecordOffset, H, Name); 1009de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1010de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1011de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1012de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1013de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1014de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1015de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1016de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_FILESTATIC 1017de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass FileStaticSym : public SymbolRecord { 1018de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1019de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1020de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Index; // Type Index 1021de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t ModFilenameOffset; // Index of mod filename in string table 1022de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Flags; // LocalSymFlags enum 1023de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 1024de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1025de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1026de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FileStaticSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 1027de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::FileStaticSym), 1028de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Name(Name) {} 1029de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1030de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<FileStaticSym> deserialize(SymbolRecordKind Kind, 1031de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1032de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1033de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1034de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1035de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 1036de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1037de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return FileStaticSym(RecordOffset, H, Name); 1038de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1039de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1040de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1041de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1042de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1043de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1044de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1045de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_COMPILE2 1046de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass Compile2Sym : public SymbolRecord { 1047de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1048de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1049de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t flags; // CompileSym2Flags enum 1050de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t getLanguage() const { return flags & 0xFF; } 1051de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned short Machine; // CPUType enum 1052de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned short VersionFrontendMajor; 1053de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned short VersionFrontendMinor; 1054de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned short VersionFrontendBuild; 1055de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned short VersionBackendMajor; 1056de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned short VersionBackendMinor; 1057de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned short VersionBackendBuild; 1058de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Version: The null-terminated version string follows. 1059de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Optional block of zero terminated strings terminated with a double zero. 1060de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1061de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1062de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Compile2Sym(uint32_t RecordOffset, const Hdr *H, StringRef Version) 1063de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::Compile2Sym), RecordOffset(RecordOffset), 1064de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Version(Version) {} 1065de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1066de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<Compile2Sym> deserialize(SymbolRecordKind Kind, 1067de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1068de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1069de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1070de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Version; 1071de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Version); 1072de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1073de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Compile2Sym(RecordOffset, H, Version); 1074de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1075de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1076de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1077de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1078de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Version; 1079de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1080de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1081de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_COMPILE3 1082de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass Compile3Sym : public SymbolRecord { 1083de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1084de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1085de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t flags; // CompileSym3Flags enum 1086de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t getLanguage() const { return flags & 0xff; } 1087de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Machine; // CPUType enum 1088de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionFrontendMajor; 1089de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionFrontendMinor; 1090de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionFrontendBuild; 1091de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionFrontendQFE; 1092de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionBackendMajor; 1093de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionBackendMinor; 1094de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionBackendBuild; 1095de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t VersionBackendQFE; 1096de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // VersionString: The null-terminated version string follows. 1097de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1098de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1099de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Compile3Sym(uint32_t RecordOffset, const Hdr *H, StringRef Version) 1100de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::Compile3Sym), RecordOffset(RecordOffset), 1101de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Version(Version) {} 1102de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1103de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<Compile3Sym> deserialize(SymbolRecordKind Kind, 1104de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1105de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1106de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1107de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Version; 1108de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Version); 1109de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1110de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Compile3Sym(RecordOffset, H, Version); 1111de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1112de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1113de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1114de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1115de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Version; 1116de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1117de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1118de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_FRAMEPROC 1119de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass FrameProcSym : public SymbolRecord { 1120de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1121de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1122de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t TotalFrameBytes; 1123de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t PaddingFrameBytes; 1124de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t OffsetToPadding; 1125de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t BytesOfCalleeSavedRegisters; 1126de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t OffsetOfExceptionHandler; 1127de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t SectionIdOfExceptionHandler; 1128de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Flags; 1129de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1130de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1131de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameProcSym(uint32_t RecordOffset, const Hdr *H) 1132de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::FrameProcSym), 1133de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H) {} 1134de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1135de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<FrameProcSym> deserialize(SymbolRecordKind Kind, 1136de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1137de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1138de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1139de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H); 1140de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1141de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return FrameProcSym(RecordOffset, H); 1142de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1143de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1144de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1145de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1146de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1147de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1148de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_CALLSITEINFO 1149de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass CallSiteInfoSym : public SymbolRecord { 1150de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1151de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1152de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeOffset; 1153de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 1154de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Reserved; 1155de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; 1156de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1157de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1158de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CallSiteInfoSym(uint32_t RecordOffset, const Hdr *H) 1159de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::CallSiteInfoSym), 1160de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H) {} 1161de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1162de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<CallSiteInfoSym> deserialize(SymbolRecordKind Kind, 1163de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1164de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1165de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1166de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H); 1167de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1168de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return CallSiteInfoSym(RecordOffset, H); 1169de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1170de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1171de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 1172de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, CodeOffset); 1173de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1174de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1175de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1176de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1177de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1178de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1179de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_HEAPALLOCSITE 1180de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass HeapAllocationSiteSym : public SymbolRecord { 1181de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1182de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1183de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeOffset; 1184de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 1185de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t CallInstructionSize; 1186de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; 1187de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1188de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1189de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar HeapAllocationSiteSym(uint32_t RecordOffset, const Hdr *H) 1190de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::HeapAllocationSiteSym), 1191de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H) {} 1192de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1193de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<HeapAllocationSiteSym> deserialize(SymbolRecordKind Kind, 1194de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1195de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1196de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1197de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H); 1198de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1199de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return HeapAllocationSiteSym(RecordOffset, H); 1200de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1201de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1202de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 1203de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, CodeOffset); 1204de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1205de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1206de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1207de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1208de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1209de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1210de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_FRAMECOOKIE 1211de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass FrameCookieSym : public SymbolRecord { 1212de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1213de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1214de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t CodeOffset; 1215de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Register; 1216de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t CookieKind; 1217de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Flags; 1218de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1219de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1220de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameCookieSym(uint32_t RecordOffset, const Hdr *H) 1221de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::FrameCookieSym), 1222de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H) {} 1223de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1224de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<FrameCookieSym> deserialize(SymbolRecordKind Kind, 1225de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1226de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1227de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1228de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H); 1229de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1230de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return FrameCookieSym(RecordOffset, H); 1231de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1232de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1233de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 1234de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, CodeOffset); 1235de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1236de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1237de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1238de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1239de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1240de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1241de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_UDT, S_COBOLUDT 1242de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass UDTSym : public SymbolRecord { 1243de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1244de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1245de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; // Type of the UDT 1246de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 1247de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1248de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1249de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar UDTSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 1250de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::UDTSym), RecordOffset(RecordOffset), 1251de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 1252de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1253de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<UDTSym> deserialize(SymbolRecordKind Kind, 1254de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1255de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1256de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1257de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1258de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 1259de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1260de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return UDTSym(RecordOffset, H, Name); 1261de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1262de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1263de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1264de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1265de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1266de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1267de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1268de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_BUILDINFO 1269de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass BuildInfoSym : public SymbolRecord { 1270de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1271de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1272de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t BuildId; 1273de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1274de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1275de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BuildInfoSym(uint32_t RecordOffset, const Hdr *H) 1276de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::BuildInfoSym), 1277de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H) {} 1278de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1279de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<BuildInfoSym> deserialize(SymbolRecordKind Kind, 1280de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1281de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1282de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1283de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H); 1284de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1285de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return BuildInfoSym(RecordOffset, H); 1286de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1287de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1288de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1289de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1290de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1291de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1292de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_BPREL32 1293de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass BPRelativeSym : public SymbolRecord { 1294de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1295de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1296de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar little32_t Offset; // Offset from the base pointer register 1297de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; // Type of the variable 1298de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 1299de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1300de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1301de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BPRelativeSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 1302de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::BPRelativeSym), 1303de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Name(Name) {} 1304de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1305de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<BPRelativeSym> deserialize(SymbolRecordKind Kind, 1306de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1307de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1308de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1309de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1310de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 1311de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1312de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return BPRelativeSym(RecordOffset, H, Name); 1313de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1314de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1315de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1316de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1317de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1318de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1319de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1320de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_REGREL32 1321de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass RegRelativeSym : public SymbolRecord { 1322de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1323de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1324de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t Offset; // Offset from the register 1325de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; // Type of the variable 1326de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Register; // Register to which the variable is relative 1327de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 1328de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1329de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1330de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RegRelativeSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 1331de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::RegRelativeSym), 1332de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Name(Name) {} 1333de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1334de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<RegRelativeSym> deserialize(SymbolRecordKind Kind, 1335de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1336de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1337de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1338de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1339de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 1340de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1341de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RegRelativeSym(RecordOffset, H, Name); 1342de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1343de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1344de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1345de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1346de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1347de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1348de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1349de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_CONSTANT, S_MANCONSTANT 1350de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass ConstantSym : public SymbolRecord { 1351de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1352de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1353de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; 1354de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Value: The value of the constant. 1355de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 1356de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1357de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1358de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ConstantSym(uint32_t RecordOffset, const Hdr *H, const APSInt &Value, 1359de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name) 1360de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::ConstantSym), RecordOffset(RecordOffset), 1361de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Value(Value), Name(Name) {} 1362de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1363de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<ConstantSym> deserialize(SymbolRecordKind Kind, 1364de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1365de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1366de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1367de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar APSInt Value; 1368de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1369de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Value, Name); 1370de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1371de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ConstantSym(RecordOffset, H, Value, Name); 1372de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1373de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1374de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1375de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1376de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar APSInt Value; 1377de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1378de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1379de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1380de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_LDATA32, S_GDATA32, S_LMANDATA, S_GMANDATA 1381de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass DataSym : public SymbolRecord { 1382de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1383de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1384de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; 1385de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t DataOffset; 1386de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 1387de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 1388de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1389de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1390de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DataSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 1391de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::DataSym), RecordOffset(RecordOffset), 1392de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Header(*H), Name(Name) {} 1393de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1394de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<DataSym> deserialize(SymbolRecordKind Kind, 1395de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1396de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1397de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1398de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1399de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 1400de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1401de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DataSym(RecordOffset, H, Name); 1402de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1403de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1404de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 1405de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, DataOffset); 1406de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1407de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1408de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1409de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1410de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1411de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1412de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1413de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// S_LTHREAD32, S_GTHREAD32 1414de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass ThreadLocalDataSym : public SymbolRecord { 1415de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 1416de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar struct Hdr { 1417de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex Type; 1418de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle32_t DataOffset; 1419de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ulittle16_t Segment; 1420de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Name: The null-terminated name follows. 1421de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar }; 1422de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1423de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ThreadLocalDataSym(uint32_t RecordOffset, const Hdr *H, StringRef Name) 1424de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : SymbolRecord(SymbolRecordKind::ThreadLocalDataSym), 1425de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecordOffset(RecordOffset), Header(*H), Name(Name) {} 1426de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1427de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static ErrorOr<ThreadLocalDataSym> deserialize(SymbolRecordKind Kind, 1428de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset, 1429de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 1430de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Hdr *H = nullptr; 1431de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1432de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, H, Name); 1433de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1434de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ThreadLocalDataSym(RecordOffset, H, Name); 1435de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1436de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1437de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t getRelocationOffset() const { 1438de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return RecordOffset + offsetof(Hdr, DataOffset); 1439de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 1440de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1441de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RecordOffset; 1442de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Hdr Header; 1443de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 1444de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 1445de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1446de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainartypedef CVRecord<SymbolKind> CVSymbol; 1447de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainartypedef VarStreamArray<CVSymbol> CVSymbolArray; 1448de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1449de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} // namespace codeview 1450de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} // namespace llvm 1451de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 1452de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#endif 1453