Home | History | Annotate | Download | only in ObjectYAML
      1 //=- CodeViewYAMLDebugSections.h - CodeView YAMLIO debug sections -*- C++ -*-=//
      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/ADT/ArrayRef.h"
     19 #include "llvm/ADT/StringRef.h"
     20 #include "llvm/DebugInfo/CodeView/CodeView.h"
     21 #include "llvm/DebugInfo/CodeView/DebugSubsection.h"
     22 #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
     23 #include "llvm/Support/Error.h"
     24 #include "llvm/Support/YAMLTraits.h"
     25 #include <cstdint>
     26 #include <memory>
     27 #include <vector>
     28 
     29 namespace llvm {
     30 
     31 namespace codeview {
     32 
     33 class StringsAndChecksums;
     34 class StringsAndChecksumsRef;
     35 
     36 } // end namespace codeview
     37 
     38 namespace CodeViewYAML {
     39 
     40 namespace detail {
     41 
     42 struct YAMLSubsectionBase;
     43 
     44 } // end namespace detail
     45 
     46 struct YAMLFrameData {
     47   uint32_t RvaStart;
     48   uint32_t CodeSize;
     49   uint32_t LocalSize;
     50   uint32_t ParamsSize;
     51   uint32_t MaxStackSize;
     52   StringRef FrameFunc;
     53   uint32_t PrologSize;
     54   uint32_t SavedRegsSize;
     55   uint32_t Flags;
     56 };
     57 
     58 struct YAMLCrossModuleImport {
     59   StringRef ModuleName;
     60   std::vector<uint32_t> ImportIds;
     61 };
     62 
     63 struct SourceLineEntry {
     64   uint32_t Offset;
     65   uint32_t LineStart;
     66   uint32_t EndDelta;
     67   bool IsStatement;
     68 };
     69 
     70 struct SourceColumnEntry {
     71   uint16_t StartColumn;
     72   uint16_t EndColumn;
     73 };
     74 
     75 struct SourceLineBlock {
     76   StringRef FileName;
     77   std::vector<SourceLineEntry> Lines;
     78   std::vector<SourceColumnEntry> Columns;
     79 };
     80 
     81 struct HexFormattedString {
     82   std::vector<uint8_t> Bytes;
     83 };
     84 
     85 struct SourceFileChecksumEntry {
     86   StringRef FileName;
     87   codeview::FileChecksumKind Kind;
     88   HexFormattedString ChecksumBytes;
     89 };
     90 
     91 struct SourceLineInfo {
     92   uint32_t RelocOffset;
     93   uint32_t RelocSegment;
     94   codeview::LineFlags Flags;
     95   uint32_t CodeSize;
     96   std::vector<SourceLineBlock> Blocks;
     97 };
     98 
     99 struct InlineeSite {
    100   uint32_t Inlinee;
    101   StringRef FileName;
    102   uint32_t SourceLineNum;
    103   std::vector<StringRef> ExtraFiles;
    104 };
    105 
    106 struct InlineeInfo {
    107   bool HasExtraFiles;
    108   std::vector<InlineeSite> Sites;
    109 };
    110 
    111 struct YAMLDebugSubsection {
    112   static Expected<YAMLDebugSubsection>
    113   fromCodeViewSubection(const codeview::StringsAndChecksumsRef &SC,
    114                         const codeview::DebugSubsectionRecord &SS);
    115 
    116   std::shared_ptr<detail::YAMLSubsectionBase> Subsection;
    117 };
    118 
    119 struct DebugSubsectionState {};
    120 
    121 Expected<std::vector<std::shared_ptr<codeview::DebugSubsection>>>
    122 toCodeViewSubsectionList(BumpPtrAllocator &Allocator,
    123                          ArrayRef<YAMLDebugSubsection> Subsections,
    124                          const codeview::StringsAndChecksums &SC);
    125 
    126 std::vector<YAMLDebugSubsection>
    127 fromDebugS(ArrayRef<uint8_t> Data, const codeview::StringsAndChecksumsRef &SC);
    128 
    129 void initializeStringsAndChecksums(ArrayRef<YAMLDebugSubsection> Sections,
    130                                    codeview::StringsAndChecksums &SC);
    131 
    132 } // end namespace CodeViewYAML
    133 
    134 } // end namespace llvm
    135 
    136 LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::YAMLDebugSubsection)
    137 
    138 LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::YAMLDebugSubsection)
    139 
    140 #endif // LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
    141