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