- //=- CodeViewYAMLDebugSections.h - CodeView YAMLIO debug sections -*- C++ -*-=// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // This file defines classes for handling the YAML representation of CodeView 
- // Debug Info. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H 
- #define LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H 
-   
- #include "llvm/ADT/ArrayRef.h" 
- #include "llvm/ADT/StringRef.h" 
- #include "llvm/DebugInfo/CodeView/CodeView.h" 
- #include "llvm/DebugInfo/CodeView/DebugSubsection.h" 
- #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h" 
- #include "llvm/Support/Error.h" 
- #include "llvm/Support/YAMLTraits.h" 
- #include <cstdint> 
- #include <memory> 
- #include <vector> 
-   
- namespace llvm { 
-   
- namespace codeview { 
-   
- class StringsAndChecksums; 
- class StringsAndChecksumsRef; 
-   
- } // end namespace codeview 
-   
- namespace CodeViewYAML { 
-   
- namespace detail { 
-   
- struct YAMLSubsectionBase; 
-   
- } // end namespace detail 
-   
- struct YAMLFrameData { 
-   uint32_t RvaStart; 
-   uint32_t CodeSize; 
-   uint32_t LocalSize; 
-   uint32_t ParamsSize; 
-   uint32_t MaxStackSize; 
-   StringRef FrameFunc; 
-   uint32_t PrologSize; 
-   uint32_t SavedRegsSize; 
-   uint32_t Flags; 
- }; 
-   
- struct YAMLCrossModuleImport { 
-   StringRef ModuleName; 
-   std::vector<uint32_t> ImportIds; 
- }; 
-   
- struct SourceLineEntry { 
-   uint32_t Offset; 
-   uint32_t LineStart; 
-   uint32_t EndDelta; 
-   bool IsStatement; 
- }; 
-   
- struct SourceColumnEntry { 
-   uint16_t StartColumn; 
-   uint16_t EndColumn; 
- }; 
-   
- struct SourceLineBlock { 
-   StringRef FileName; 
-   std::vector<SourceLineEntry> Lines; 
-   std::vector<SourceColumnEntry> Columns; 
- }; 
-   
- struct HexFormattedString { 
-   std::vector<uint8_t> Bytes; 
- }; 
-   
- struct SourceFileChecksumEntry { 
-   StringRef FileName; 
-   codeview::FileChecksumKind Kind; 
-   HexFormattedString ChecksumBytes; 
- }; 
-   
- struct SourceLineInfo { 
-   uint32_t RelocOffset; 
-   uint32_t RelocSegment; 
-   codeview::LineFlags Flags; 
-   uint32_t CodeSize; 
-   std::vector<SourceLineBlock> Blocks; 
- }; 
-   
- struct InlineeSite { 
-   uint32_t Inlinee; 
-   StringRef FileName; 
-   uint32_t SourceLineNum; 
-   std::vector<StringRef> ExtraFiles; 
- }; 
-   
- struct InlineeInfo { 
-   bool HasExtraFiles; 
-   std::vector<InlineeSite> Sites; 
- }; 
-   
- struct YAMLDebugSubsection { 
-   static Expected<YAMLDebugSubsection> 
-   fromCodeViewSubection(const codeview::StringsAndChecksumsRef &SC, 
-                         const codeview::DebugSubsectionRecord &SS); 
-   
-   std::shared_ptr<detail::YAMLSubsectionBase> Subsection; 
- }; 
-   
- struct DebugSubsectionState {}; 
-   
- Expected<std::vector<std::shared_ptr<codeview::DebugSubsection>>> 
- toCodeViewSubsectionList(BumpPtrAllocator &Allocator, 
-                          ArrayRef<YAMLDebugSubsection> Subsections, 
-                          const codeview::StringsAndChecksums &SC); 
-   
- std::vector<YAMLDebugSubsection> 
- fromDebugS(ArrayRef<uint8_t> Data, const codeview::StringsAndChecksumsRef &SC); 
-   
- void initializeStringsAndChecksums(ArrayRef<YAMLDebugSubsection> Sections, 
-                                    codeview::StringsAndChecksums &SC); 
-   
- } // end namespace CodeViewYAML 
-   
- } // end namespace llvm 
-   
- LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::YAMLDebugSubsection) 
-   
- LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::YAMLDebugSubsection) 
-   
- #endif // LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H 
-