1de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===-- SymbolDumper.cpp - CodeView symbol info dumper ----------*- 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#include "llvm/DebugInfo/CodeView/SymbolDumper.h" 11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/ADT/DenseMap.h" 12de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/ADT/SmallString.h" 13de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/CVSymbolVisitor.h" 14de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/EnumTables.h" 15de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/SymbolDumpDelegate.h" 16de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/SymbolRecord.h" 17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/TypeDumper.h" 18de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/TypeIndex.h" 19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/Support/ScopedPrinter.h" 20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 21de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <system_error> 22de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm; 24de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm::codeview; 25de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 26de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarnamespace { 27de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar/// Use this private dumper implementation to keep implementation details about 28de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar/// the visitor out of SymbolDumper.h. 29de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass CVSymbolDumperImpl : public CVSymbolVisitor<CVSymbolDumperImpl> { 30de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic: 31de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVSymbolDumperImpl(CVTypeDumper &CVTD, SymbolDumpDelegate *ObjDelegate, 32de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ScopedPrinter &W, bool PrintRecordBytes) 33de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar : CVSymbolVisitor(ObjDelegate), CVTD(CVTD), ObjDelegate(ObjDelegate), 34de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W(W), PrintRecordBytes(PrintRecordBytes), InFunctionScope(false) {} 35de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar/// CVSymbolVisitor overrides. 37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#define SYMBOL_RECORD(EnumName, EnumVal, Name) \ 38de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void visit##Name(SymbolKind Kind, Name &Record); 39de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) 40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/CVSymbolTypes.def" 41de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 42de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void visitSymbolBegin(SymbolKind Kind, ArrayRef<uint8_t> Data); 43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void visitSymbolEnd(SymbolKind Kind, ArrayRef<uint8_t> OriginalSymData); 44de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void visitUnknownSymbol(SymbolKind Kind, ArrayRef<uint8_t> Data); 45de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 46de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarprivate: 47de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void printLocalVariableAddrRange(const LocalVariableAddrRange &Range, 48de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t RelocationOffset); 49de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void printLocalVariableAddrGap(ArrayRef<LocalVariableAddrGap> Gaps); 50de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 51de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTypeDumper &CVTD; 52de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolDumpDelegate *ObjDelegate; 53de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ScopedPrinter &W; 54de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 55de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool PrintRecordBytes; 56de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool InFunctionScope; 57de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}; 58de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 59de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 60de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::printLocalVariableAddrRange( 61de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const LocalVariableAddrRange &Range, uint32_t RelocationOffset) { 62de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "LocalVariableAddrRange"); 63de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) 64de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField("OffsetStart", RelocationOffset, 65de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Range.OffsetStart); 66de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("ISectStart", Range.ISectStart); 67de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Range", Range.Range); 68de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 69de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 70de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::printLocalVariableAddrGap( 71de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<LocalVariableAddrGap> Gaps) { 72de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (auto &Gap : Gaps) { 73de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ListScope S(W, "LocalVariableAddrGap"); 74de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("GapStartOffset", Gap.GapStartOffset); 75de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Range", Gap.Range); 76de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 77de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 78de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 79de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitSymbolBegin(SymbolKind Kind, 80de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> Data) {} 81de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 82de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitSymbolEnd(SymbolKind Kind, 83de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> OriginalSymData) { 84de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (PrintRecordBytes && ObjDelegate) 85de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printBinaryBlockWithRelocs("SymData", OriginalSymData); 86de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 87de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 88de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitBlockSym(SymbolKind Kind, BlockSym &Block) { 89de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "BlockStart"); 90de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 91de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 92de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PtrParent", Block.Header.PtrParent); 93de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PtrEnd", Block.Header.PtrEnd); 94de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("CodeSize", Block.Header.CodeSize); 95de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 96de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField("CodeOffset", Block.getRelocationOffset(), 97de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Block.Header.CodeOffset, &LinkageName); 98de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 99de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Segment", Block.Header.Segment); 100de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("BlockName", Block.Name); 101de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("LinkageName", LinkageName); 102de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 103de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 104de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitThunk32Sym(SymbolKind Kind, Thunk32Sym &Thunk) { 105de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "Thunk32"); 106de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Parent", Thunk.Header.Parent); 107de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("End", Thunk.Header.End); 108de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Next", Thunk.Header.Next); 109de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Off", Thunk.Header.Off); 110de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Seg", Thunk.Header.Seg); 111de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Len", Thunk.Header.Len); 112de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Ordinal", Thunk.Header.Ord, getThunkOrdinalNames()); 113de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 114de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 115de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitTrampolineSym(SymbolKind Kind, 116de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TrampolineSym &Tramp) { 117de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "Trampoline"); 118de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Type", Tramp.Header.Type, getTrampolineNames()); 119de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Size", Tramp.Header.Size); 120de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("ThunkOff", Tramp.Header.ThunkOff); 121de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("TargetOff", Tramp.Header.TargetOff); 122de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("ThunkSection", Tramp.Header.ThunkSection); 123de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("TargetSection", Tramp.Header.TargetSection); 124de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 125de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 126de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitSectionSym(SymbolKind Kind, SectionSym &Section) { 127de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "Section"); 128de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("SectionNumber", Section.Header.SectionNumber); 129de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Alignment", Section.Header.Alignment); 130de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Reserved", Section.Header.Reserved); 131de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Rva", Section.Header.Rva); 132de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Length", Section.Header.Length); 133de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Characteristics", Section.Header.Characteristics, 134de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getImageSectionCharacteristicNames(), 135de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar COFF::SectionCharacteristics(0x00F00000)); 136de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 137de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", Section.Name); 138de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 139de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 140de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitCoffGroupSym(SymbolKind Kind, 141de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CoffGroupSym &CoffGroup) { 142de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "COFF Group"); 143de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Size", CoffGroup.Header.Size); 144de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Characteristics", CoffGroup.Header.Characteristics, 145de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getImageSectionCharacteristicNames(), 146de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar COFF::SectionCharacteristics(0x00F00000)); 147de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Offset", CoffGroup.Header.Offset); 148de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Segment", CoffGroup.Header.Segment); 149de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", CoffGroup.Name); 150de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 151de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 152de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitBPRelativeSym(SymbolKind Kind, 153de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BPRelativeSym &BPRel) { 154de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "BPRelativeSym"); 155de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 156de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Offset", BPRel.Header.Offset); 157de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", BPRel.Header.Type); 158de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("VarName", BPRel.Name); 159de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 160de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 161de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitBuildInfoSym(SymbolKind Kind, 162de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar BuildInfoSym &BuildInfo) { 163de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "BuildInfo"); 164de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 165de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("BuildId", BuildInfo.Header.BuildId); 166de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 167de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 168de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitCallSiteInfoSym(SymbolKind Kind, 169de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CallSiteInfoSym &CallSiteInfo) { 170de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "CallSiteInfo"); 171de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 172de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 173de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 174de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField( 175de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar "CodeOffset", CallSiteInfo.getRelocationOffset(), 176de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CallSiteInfo.Header.CodeOffset, &LinkageName); 177de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 178de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Segment", CallSiteInfo.Header.Segment); 179de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Reserved", CallSiteInfo.Header.Reserved); 180de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", CallSiteInfo.Header.Type); 181de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!LinkageName.empty()) 182de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("LinkageName", LinkageName); 183de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 184de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 185de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitEnvBlockSym(SymbolKind Kind, 186de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EnvBlockSym &EnvBlock) { 187de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "EnvBlock"); 188de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 189de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Reserved", EnvBlock.Header.Reserved); 190de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ListScope L(W, "Entries"); 191de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (auto Entry : EnvBlock.Fields) { 192de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString(Entry); 193de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 194de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 195de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 196de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitFileStaticSym(SymbolKind Kind, 197de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FileStaticSym &FileStatic) { 198de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "FileStatic"); 199de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Index", FileStatic.Header.Index); 200de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("ModFilenameOffset", FileStatic.Header.ModFilenameOffset); 201de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", uint16_t(FileStatic.Header.Flags), getLocalFlagNames()); 202de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", FileStatic.Name); 203de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 204de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 205de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitExportSym(SymbolKind Kind, ExportSym &Export) { 206de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "Export"); 207de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Ordinal", Export.Header.Ordinal); 208de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", Export.Header.Flags, getExportSymFlagNames()); 209de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", Export.Name); 210de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 211de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 212de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitCompile2Sym(SymbolKind Kind, 213de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Compile2Sym &Compile2) { 214de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "CompilerFlags2"); 215de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 216de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Language", Compile2.Header.getLanguage(), 217de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getSourceLanguageNames()); 218de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", Compile2.Header.flags & ~0xff, 219de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getCompileSym2FlagNames()); 220de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Machine", unsigned(Compile2.Header.Machine), getCPUTypeNames()); 221de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::string FrontendVersion; 222de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar { 223de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar raw_string_ostream Out(FrontendVersion); 224de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Out << Compile2.Header.VersionFrontendMajor << '.' 225de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile2.Header.VersionFrontendMinor << '.' 226de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile2.Header.VersionFrontendBuild; 227de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 228de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::string BackendVersion; 229de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar { 230de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar raw_string_ostream Out(BackendVersion); 231de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Out << Compile2.Header.VersionBackendMajor << '.' 232de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile2.Header.VersionBackendMinor << '.' 233de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile2.Header.VersionBackendBuild; 234de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 235de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("FrontendVersion", FrontendVersion); 236de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("BackendVersion", BackendVersion); 237de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("VersionName", Compile2.Version); 238de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 239de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 240de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitCompile3Sym(SymbolKind Kind, 241de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Compile3Sym &Compile3) { 242de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "CompilerFlags3"); 243de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 244de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Language", Compile3.Header.getLanguage(), 245de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getSourceLanguageNames()); 246de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", Compile3.Header.flags & ~0xff, 247de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getCompileSym3FlagNames()); 248de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Machine", unsigned(Compile3.Header.Machine), getCPUTypeNames()); 249de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::string FrontendVersion; 250de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar { 251de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar raw_string_ostream Out(FrontendVersion); 252de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Out << Compile3.Header.VersionFrontendMajor << '.' 253de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile3.Header.VersionFrontendMinor << '.' 254de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile3.Header.VersionFrontendBuild << '.' 255de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile3.Header.VersionFrontendQFE; 256de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 257de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::string BackendVersion; 258de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar { 259de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar raw_string_ostream Out(BackendVersion); 260de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Out << Compile3.Header.VersionBackendMajor << '.' 261de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile3.Header.VersionBackendMinor << '.' 262de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile3.Header.VersionBackendBuild << '.' 263de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << Compile3.Header.VersionBackendQFE; 264de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 265de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("FrontendVersion", FrontendVersion); 266de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("BackendVersion", BackendVersion); 267de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("VersionName", Compile3.Version); 268de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 269de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 270de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitConstantSym(SymbolKind Kind, 271de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ConstantSym &Constant) { 272de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "Constant"); 273de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 274de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", Constant.Header.Type); 275de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Value", Constant.Value); 276de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", Constant.Name); 277de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 278de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 279de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDataSym(SymbolKind Kind, DataSym &Data) { 280de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DataSym"); 281de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 282de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Kind", uint16_t(Kind), getSymbolTypeNames()); 283de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 284de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 285de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField("DataOffset", Data.getRelocationOffset(), 286de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Data.Header.DataOffset, &LinkageName); 287de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 288de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", Data.Header.Type); 289de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("DisplayName", Data.Name); 290de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!LinkageName.empty()) 291de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("LinkageName", LinkageName); 292de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 293de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 294de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDefRangeFramePointerRelFullScopeSym( 295de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolKind Kind, 296de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeFramePointerRelFullScopeSym &DefRangeFramePointerRelFullScope) { 297de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DefRangeFramePointerRelFullScope"); 298de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Offset", DefRangeFramePointerRelFullScope.Header.Offset); 299de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 300de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 301de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDefRangeFramePointerRelSym( 302de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolKind Kind, DefRangeFramePointerRelSym &DefRangeFramePointerRel) { 303de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DefRangeFramePointerRel"); 304de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 305de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Offset", DefRangeFramePointerRel.Header.Offset); 306de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrRange(DefRangeFramePointerRel.Header.Range, 307de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeFramePointerRel.getRelocationOffset()); 308de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrGap(DefRangeFramePointerRel.Gaps); 309de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 310de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 311de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDefRangeRegisterRelSym( 312de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolKind Kind, DefRangeRegisterRelSym &DefRangeRegisterRel) { 313de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DefRangeRegisterRel"); 314de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 315de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("BaseRegister", DefRangeRegisterRel.Header.BaseRegister); 316de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printBoolean("HasSpilledUDTMember", 317de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegisterRel.hasSpilledUDTMember()); 318de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("OffsetInParent", DefRangeRegisterRel.offsetInParent()); 319de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("BasePointerOffset", 320de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegisterRel.Header.BasePointerOffset); 321de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrRange(DefRangeRegisterRel.Header.Range, 322de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegisterRel.getRelocationOffset()); 323de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrGap(DefRangeRegisterRel.Gaps); 324de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 325de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 326de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDefRangeRegisterSym( 327de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolKind Kind, DefRangeRegisterSym &DefRangeRegister) { 328de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DefRangeRegister"); 329de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 330de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Register", DefRangeRegister.Header.Register); 331de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("MayHaveNoName", DefRangeRegister.Header.MayHaveNoName); 332de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrRange(DefRangeRegister.Header.Range, 333de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeRegister.getRelocationOffset()); 334de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrGap(DefRangeRegister.Gaps); 335de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 336de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 337de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDefRangeSubfieldRegisterSym( 338de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolKind Kind, DefRangeSubfieldRegisterSym &DefRangeSubfieldRegister) { 339de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DefRangeSubfieldRegister"); 340de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 341de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Register", DefRangeSubfieldRegister.Header.Register); 342de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("MayHaveNoName", DefRangeSubfieldRegister.Header.MayHaveNoName); 343de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("OffsetInParent", 344de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSubfieldRegister.Header.OffsetInParent); 345de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrRange(DefRangeSubfieldRegister.Header.Range, 346de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSubfieldRegister.getRelocationOffset()); 347de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrGap(DefRangeSubfieldRegister.Gaps); 348de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 349de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 350de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDefRangeSubfieldSym( 351de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolKind Kind, DefRangeSubfieldSym &DefRangeSubfield) { 352de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DefRangeSubfield"); 353de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 354de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 355de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef StringTable = ObjDelegate->getStringTable(); 356de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar auto ProgramStringTableOffset = DefRangeSubfield.Header.Program; 357de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ProgramStringTableOffset >= StringTable.size()) 358de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return parseError(); 359de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Program = 360de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringTable.drop_front(ProgramStringTableOffset).split('\0').first; 361de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Program", Program); 362de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 363de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("OffsetInParent", DefRangeSubfield.Header.OffsetInParent); 364de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrRange(DefRangeSubfield.Header.Range, 365de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSubfield.getRelocationOffset()); 366de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrGap(DefRangeSubfield.Gaps); 367de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 368de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 369de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitDefRangeSym(SymbolKind Kind, 370de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRangeSym &DefRange) { 371de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "DefRange"); 372de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 373de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 374de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef StringTable = ObjDelegate->getStringTable(); 375de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar auto ProgramStringTableOffset = DefRange.Header.Program; 376de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ProgramStringTableOffset >= StringTable.size()) 377de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return parseError(); 378de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Program = 379de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringTable.drop_front(ProgramStringTableOffset).split('\0').first; 380de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Program", Program); 381de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 382de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrRange(DefRange.Header.Range, 383de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DefRange.getRelocationOffset()); 384de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar printLocalVariableAddrGap(DefRange.Gaps); 385de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 386de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 387de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitFrameCookieSym(SymbolKind Kind, 388de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameCookieSym &FrameCookie) { 389de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "FrameCookie"); 390de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 391de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 392de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 393de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField( 394de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar "CodeOffset", FrameCookie.getRelocationOffset(), 395de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameCookie.Header.CodeOffset, &LinkageName); 396de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 397de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Register", FrameCookie.Header.Register); 398de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("CookieKind", uint16_t(FrameCookie.Header.CookieKind), 399de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getFrameCookieKindNames()); 400de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Flags", FrameCookie.Header.Flags); 401de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 402de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 403de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitFrameProcSym(SymbolKind Kind, 404de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameProcSym &FrameProc) { 405de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "FrameProc"); 406de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 407de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("TotalFrameBytes", FrameProc.Header.TotalFrameBytes); 408de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PaddingFrameBytes", FrameProc.Header.PaddingFrameBytes); 409de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("OffsetToPadding", FrameProc.Header.OffsetToPadding); 410de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("BytesOfCalleeSavedRegisters", 411de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameProc.Header.BytesOfCalleeSavedRegisters); 412de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("OffsetOfExceptionHandler", 413de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameProc.Header.OffsetOfExceptionHandler); 414de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("SectionIdOfExceptionHandler", 415de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FrameProc.Header.SectionIdOfExceptionHandler); 416de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", FrameProc.Header.Flags, getFrameProcSymFlagNames()); 417de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 418de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 419de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitHeapAllocationSiteSym( 420de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SymbolKind Kind, HeapAllocationSiteSym &HeapAllocSite) { 421de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "HeapAllocationSite"); 422de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 423de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 424de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 425de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField( 426de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar "CodeOffset", HeapAllocSite.getRelocationOffset(), 427de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar HeapAllocSite.Header.CodeOffset, &LinkageName); 428de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 429de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Segment", HeapAllocSite.Header.Segment); 430de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("CallInstructionSize", HeapAllocSite.Header.CallInstructionSize); 431de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", HeapAllocSite.Header.Type); 432de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!LinkageName.empty()) 433de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("LinkageName", LinkageName); 434de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 435de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 436de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitInlineSiteSym(SymbolKind Kind, 437de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar InlineSiteSym &InlineSite) { 438de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "InlineSite"); 439de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 440de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PtrParent", InlineSite.Header.PtrParent); 441de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PtrEnd", InlineSite.Header.PtrEnd); 442de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Inlinee", InlineSite.Header.Inlinee); 443de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 444de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ListScope BinaryAnnotations(W, "BinaryAnnotations"); 445de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (auto &Annotation : InlineSite.annotations()) { 446de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar switch (Annotation.OpCode) { 447de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::Invalid: 448de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return parseError(); 449de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::CodeOffset: 450de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeOffset: 451de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeLength: 452de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex(Annotation.Name, Annotation.U1); 453de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 454de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeOffsetBase: 455de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeLineEndDelta: 456de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeRangeKind: 457de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeColumnStart: 458de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeColumnEnd: 459de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber(Annotation.Name, Annotation.U1); 460de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 461de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeLineOffset: 462de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeColumnEndDelta: 463de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber(Annotation.Name, Annotation.S1); 464de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 465de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeFile: 466de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 467de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("ChangeFile", 468de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->getFileNameForFileOffset(Annotation.U1), 469de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Annotation.U1); 470de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } else { 471de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("ChangeFile", Annotation.U1); 472de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 473de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 474de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 475de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeOffsetAndLineOffset: { 476de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.startLine() << "ChangeCodeOffsetAndLineOffset: {CodeOffset: " 477de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << W.hex(Annotation.U1) << ", LineOffset: " << Annotation.S1 478de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << "}\n"; 479de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 480de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 481de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar case BinaryAnnotationsOpCode::ChangeCodeLengthAndCodeOffset: { 482de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.startLine() << "ChangeCodeLengthAndCodeOffset: {CodeOffset: " 483de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << W.hex(Annotation.U2) 484de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar << ", Length: " << W.hex(Annotation.U1) << "}\n"; 485de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar break; 486de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 487de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 488de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 489de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 490de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 491de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitRegisterSym(SymbolKind Kind, 492de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RegisterSym &Register) { 493de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "RegisterSym"); 494de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Type", Register.Header.Index); 495de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Seg", uint16_t(Register.Header.Register), getRegisterNames()); 496de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", Register.Name); 497de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 498de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 499de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitPublicSym32(SymbolKind Kind, 500de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar PublicSym32 &Public) { 501de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "PublicSym"); 502de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Type", Public.Header.Index); 503de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Seg", Public.Header.Seg); 504de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Off", Public.Header.Off); 505de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", Public.Name); 506de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 507de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 508de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitProcRefSym(SymbolKind Kind, ProcRefSym &ProcRef) { 509de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "ProcRef"); 510de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("SumName", ProcRef.Header.SumName); 511de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("SymOffset", ProcRef.Header.SymOffset); 512de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Mod", ProcRef.Header.Mod); 513de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("Name", ProcRef.Name); 514de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 515de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 516de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitLabelSym(SymbolKind Kind, LabelSym &Label) { 517de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "Label"); 518de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 519de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 520de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 521de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField("CodeOffset", Label.getRelocationOffset(), 522de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Label.Header.CodeOffset, &LinkageName); 523de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 524de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Segment", Label.Header.Segment); 525de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Flags", Label.Header.Flags); 526de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", Label.Header.Flags, getProcSymFlagNames()); 527de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("DisplayName", Label.Name); 528de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!LinkageName.empty()) 529de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("LinkageName", LinkageName); 530de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 531de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 532de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitLocalSym(SymbolKind Kind, LocalSym &Local) { 533de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "Local"); 534de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 535de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", Local.Header.Type); 536de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", uint16_t(Local.Header.Flags), getLocalFlagNames()); 537de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("VarName", Local.Name); 538de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 539de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 540de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitObjNameSym(SymbolKind Kind, ObjNameSym &ObjName) { 541de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "ObjectName"); 542de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 543de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Signature", ObjName.Header.Signature); 544de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("ObjectName", ObjName.Name); 545de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 546de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 547de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitProcSym(SymbolKind Kind, ProcSym &Proc) { 548de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "ProcStart"); 549de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 550de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (InFunctionScope) 551de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return parseError(); 552de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 553de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar InFunctionScope = true; 554de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 555de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 556de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Kind", uint16_t(Kind), getSymbolTypeNames()); 557de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PtrParent", Proc.Header.PtrParent); 558de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PtrEnd", Proc.Header.PtrEnd); 559de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("PtrNext", Proc.Header.PtrNext); 560de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("CodeSize", Proc.Header.CodeSize); 561de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("DbgStart", Proc.Header.DbgStart); 562de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("DbgEnd", Proc.Header.DbgEnd); 563de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("FunctionType", Proc.Header.FunctionType); 564de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 565de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField("CodeOffset", Proc.getRelocationOffset(), 566de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Proc.Header.CodeOffset, &LinkageName); 567de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 568de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Segment", Proc.Header.Segment); 569de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printFlags("Flags", static_cast<uint8_t>(Proc.Header.Flags), 570de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar getProcSymFlagNames()); 571de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("DisplayName", Proc.Name); 572de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!LinkageName.empty()) 573de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("LinkageName", LinkageName); 574de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 575de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 576de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitScopeEndSym(SymbolKind Kind, 577de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ScopeEndSym &ScopeEnd) { 578de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Kind == SymbolKind::S_END) 579de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "BlockEnd"); 580de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar else if (Kind == SymbolKind::S_PROC_ID_END) 581de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "ProcEnd"); 582de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar else if (Kind == SymbolKind::S_INLINESITE_END) 583de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "InlineSiteEnd"); 584de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 585de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar InFunctionScope = false; 586de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 587de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 588de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitCallerSym(SymbolKind Kind, CallerSym &Caller) { 589de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ListScope S(W, Kind == S_CALLEES ? "Callees" : "Callers"); 590de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (auto FuncID : Caller.Indices) 591de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("FuncID", FuncID); 592de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 593de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 594de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitRegRelativeSym(SymbolKind Kind, 595de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RegRelativeSym &RegRel) { 596de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "RegRelativeSym"); 597de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 598de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Offset", RegRel.Header.Offset); 599de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", RegRel.Header.Type); 600de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printHex("Register", RegRel.Header.Register); 601de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("VarName", RegRel.Name); 602de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 603de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 604de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitThreadLocalDataSym(SymbolKind Kind, 605de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ThreadLocalDataSym &Data) { 606de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "ThreadLocalDataSym"); 607de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 608de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef LinkageName; 609de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (ObjDelegate) { 610de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ObjDelegate->printRelocatedField("DataOffset", Data.getRelocationOffset(), 611de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Data.Header.DataOffset, &LinkageName); 612de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 613de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", Data.Header.Type); 614de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("DisplayName", Data.Name); 615de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!LinkageName.empty()) 616de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("LinkageName", LinkageName); 617de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 618de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 619de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitUDTSym(SymbolKind Kind, UDTSym &UDT) { 620de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "UDT"); 621de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVTD.printTypeIndex("Type", UDT.Header.Type); 622de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printString("UDTName", UDT.Name); 623de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 624de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 625de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid CVSymbolDumperImpl::visitUnknownSymbol(SymbolKind Kind, 626de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> Data) { 627de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar DictScope S(W, "UnknownSym"); 628de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printEnum("Kind", uint16_t(Kind), getSymbolTypeNames()); 629de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar W.printNumber("Length", uint32_t(Data.size())); 630de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 631de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 632de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool CVSymbolDumper::dump(const CVRecord<SymbolKind> &Record) { 633de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVSymbolDumperImpl Dumper(CVTD, ObjDelegate.get(), W, PrintRecordBytes); 634de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Dumper.visitSymbolRecord(Record); 635de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return !Dumper.hadError(); 636de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 637de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 638de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool CVSymbolDumper::dump(const CVSymbolArray &Symbols) { 639de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CVSymbolDumperImpl Dumper(CVTD, ObjDelegate.get(), W, PrintRecordBytes); 640de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Dumper.visitSymbolStream(Symbols); 641de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return !Dumper.hadError(); 642de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 643