Home | History | Annotate | Download | only in ObjectYAML
      1 //===- CodeViewYAMLDebugSections.h - CodeView YAMLIO debug sections -------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file defines classes for handling the YAML representation of CodeView
     11 // Debug Info.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
     16 #define LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
     17 
     18 #include "llvm/DebugInfo/CodeView/CodeView.h"
     19 #include "llvm/DebugInfo/CodeView/DebugSubsection.h"
     20 #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
     21 #include "llvm/ObjectYAML/YAML.h"
     22 
     23 namespace llvm {
     24 
     25 namespace codeview {
     26 class DebugStringTableSubsection;
     27 class DebugStringTableSubsectionRef;
     28 class DebugChecksumsSubsectionRef;
     29 class DebugStringTableSubsection;
     30 class DebugChecksumsSubsection;
     31 class StringsAndChecksums;
     32 class StringsAndChecksumsRef;
     33 }
     34 namespace CodeViewYAML {
     35 
     36 namespace detail {
     37 struct YAMLSubsectionBase;
     38 }
     39 
     40 struct YAMLFrameData {
     41   uint32_t RvaStart;
     42   uint32_t CodeSize;
     43   uint32_t LocalSize;
     44   uint32_t ParamsSize;
     45   uint32_t MaxStackSize;
     46   StringRef FrameFunc;
     47   uint32_t PrologSize;
     48   uint32_t SavedRegsSize;
     49   uint32_t Flags;
     50 };
     51 
     52 struct YAMLCrossModuleImport {
     53   StringRef ModuleName;
     54   std::vector<uint32_t> ImportIds;
     55 };
     56 
     57 struct SourceLineEntry {
     58   uint32_t Offset;
     59   uint32_t LineStart;
     60   uint32_t EndDelta;
     61   bool IsStatement;
     62 };
     63 
     64 struct SourceColumnEntry {
     65   uint16_t StartColumn;
     66   uint16_t EndColumn;
     67 };
     68 
     69 struct SourceLineBlock {
     70   StringRef FileName;
     71   std::vector<SourceLineEntry> Lines;
     72   std::vector<SourceColumnEntry> Columns;
     73 };
     74 
     75 struct HexFormattedString {
     76   std::vector<uint8_t> Bytes;
     77 };
     78 
     79 struct SourceFileChecksumEntry {
     80   StringRef FileName;
     81   codeview::FileChecksumKind Kind;
     82   HexFormattedString ChecksumBytes;
     83 };
     84 
     85 struct SourceLineInfo {
     86   uint32_t RelocOffset;
     87   uint32_t RelocSegment;
     88   codeview::LineFlags Flags;
     89   uint32_t CodeSize;
     90 
     91   std::vector<SourceLineBlock> Blocks;
     92 };
     93 
     94 struct InlineeSite {
     95   uint32_t Inlinee;
     96   StringRef FileName;
     97   uint32_t SourceLineNum;
     98   std::vector<StringRef> ExtraFiles;
     99 };
    100 
    101 struct InlineeInfo {
    102   bool HasExtraFiles;
    103   std::vector<InlineeSite> Sites;
    104 };
    105 
    106 struct YAMLDebugSubsection {
    107   static Expected<YAMLDebugSubsection>
    108   fromCodeViewSubection(const codeview::StringsAndChecksumsRef &SC,
    109                         const codeview::DebugSubsectionRecord &SS);
    110 
    111   std::shared_ptr<detail::YAMLSubsectionBase> Subsection;
    112 };
    113 
    114 struct DebugSubsectionState {};
    115 
    116 Expected<std::vector<std::shared_ptr<codeview::DebugSubsection>>>
    117 toCodeViewSubsectionList(BumpPtrAllocator &Allocator,
    118                          ArrayRef<YAMLDebugSubsection> Subsections,
    119                          const codeview::StringsAndChecksums &SC);
    120 
    121 std::vector<YAMLDebugSubsection>
    122 fromDebugS(ArrayRef<uint8_t> Data, const codeview::StringsAndChecksumsRef &SC);
    123 
    124 void initializeStringsAndChecksums(ArrayRef<YAMLDebugSubsection> Sections,
    125                                    codeview::StringsAndChecksums &SC);
    126 
    127 } // namespace CodeViewYAML
    128 } // namespace llvm
    129 
    130 LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::YAMLDebugSubsection)
    131 
    132 LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::YAMLDebugSubsection)
    133 
    134 #endif
    135