1 //===- DebugSymbolsSubsection.h --------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_DEBUGINFO_CODEVIEW_DEBUGSYMBOLSSUBSECTION_H 10 #define LLVM_DEBUGINFO_CODEVIEW_DEBUGSYMBOLSSUBSECTION_H 11 12 #include "llvm/DebugInfo/CodeView/CVRecord.h" 13 #include "llvm/DebugInfo/CodeView/DebugSubsection.h" 14 #include "llvm/Support/Error.h" 15 16 namespace llvm { 17 namespace codeview { 18 class DebugSymbolsSubsectionRef final : public DebugSubsectionRef { 19 public: DebugSymbolsSubsectionRef()20 DebugSymbolsSubsectionRef() 21 : DebugSubsectionRef(DebugSubsectionKind::Symbols) {} 22 classof(const DebugSubsectionRef * S)23 static bool classof(const DebugSubsectionRef *S) { 24 return S->kind() == DebugSubsectionKind::Symbols; 25 } 26 27 Error initialize(BinaryStreamReader Reader); 28 begin()29 CVSymbolArray::Iterator begin() const { return Records.begin(); } end()30 CVSymbolArray::Iterator end() const { return Records.end(); } 31 32 private: 33 CVSymbolArray Records; 34 }; 35 36 class DebugSymbolsSubsection final : public DebugSubsection { 37 public: DebugSymbolsSubsection()38 DebugSymbolsSubsection() : DebugSubsection(DebugSubsectionKind::Symbols) {} classof(const DebugSubsection * S)39 static bool classof(const DebugSubsection *S) { 40 return S->kind() == DebugSubsectionKind::Symbols; 41 } 42 43 uint32_t calculateSerializedSize() const override; 44 Error commit(BinaryStreamWriter &Writer) const override; 45 46 void addSymbol(CVSymbol Symbol); 47 48 private: 49 uint32_t Length = 0; 50 std::vector<CVSymbol> Records; 51 }; 52 } 53 } 54 55 #endif 56