Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.