1*8c099fe0SZachary Turner //===- DebugSubsectionVisitor.cpp ---------------------------*- C++ -*-===// 2*8c099fe0SZachary Turner // 3*8c099fe0SZachary Turner // The LLVM Compiler Infrastructure 4*8c099fe0SZachary Turner // 5*8c099fe0SZachary Turner // This file is distributed under the University of Illinois Open Source 6*8c099fe0SZachary Turner // License. See LICENSE.TXT for details. 7*8c099fe0SZachary Turner // 8*8c099fe0SZachary Turner //===----------------------------------------------------------------------===// 9*8c099fe0SZachary Turner 10*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h" 11*8c099fe0SZachary Turner 12*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h" 13*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h" 14*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h" 15*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h" 16*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h" 17*8c099fe0SZachary Turner #include "llvm/Support/BinaryStreamReader.h" 18*8c099fe0SZachary Turner #include "llvm/Support/BinaryStreamRef.h" 19*8c099fe0SZachary Turner 20*8c099fe0SZachary Turner using namespace llvm; 21*8c099fe0SZachary Turner using namespace llvm::codeview; 22*8c099fe0SZachary Turner 23*8c099fe0SZachary Turner Error llvm::codeview::visitDebugSubsection(const DebugSubsectionRecord &R, 24*8c099fe0SZachary Turner DebugSubsectionVisitor &V) { 25*8c099fe0SZachary Turner BinaryStreamReader Reader(R.getRecordData()); 26*8c099fe0SZachary Turner switch (R.kind()) { 27*8c099fe0SZachary Turner case DebugSubsectionKind::Lines: { 28*8c099fe0SZachary Turner DebugLinesSubsectionRef Fragment; 29*8c099fe0SZachary Turner if (auto EC = Fragment.initialize(Reader)) 30*8c099fe0SZachary Turner return EC; 31*8c099fe0SZachary Turner 32*8c099fe0SZachary Turner return V.visitLines(Fragment); 33*8c099fe0SZachary Turner } 34*8c099fe0SZachary Turner case DebugSubsectionKind::FileChecksums: { 35*8c099fe0SZachary Turner DebugChecksumsSubsectionRef Fragment; 36*8c099fe0SZachary Turner if (auto EC = Fragment.initialize(Reader)) 37*8c099fe0SZachary Turner return EC; 38*8c099fe0SZachary Turner 39*8c099fe0SZachary Turner return V.visitFileChecksums(Fragment); 40*8c099fe0SZachary Turner } 41*8c099fe0SZachary Turner case DebugSubsectionKind::InlineeLines: { 42*8c099fe0SZachary Turner DebugInlineeLinesSubsectionRef Fragment; 43*8c099fe0SZachary Turner if (auto EC = Fragment.initialize(Reader)) 44*8c099fe0SZachary Turner return EC; 45*8c099fe0SZachary Turner return V.visitInlineeLines(Fragment); 46*8c099fe0SZachary Turner } 47*8c099fe0SZachary Turner default: { 48*8c099fe0SZachary Turner DebugUnknownSubsectionRef Fragment(R.kind(), R.getRecordData()); 49*8c099fe0SZachary Turner return V.visitUnknown(Fragment); 50*8c099fe0SZachary Turner } 51*8c099fe0SZachary Turner } 52*8c099fe0SZachary Turner } 53