Home | History | Annotate | Line # | Download | only in ObjectYAML
      1 //==- CodeViewYAMLTypes.h - CodeView YAMLIO Type implementation --*- 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_CODEVIEWYAMLTYPES_H
     15 #define LLVM_OBJECTYAML_CODEVIEWYAMLTYPES_H
     16 
     17 #include "llvm/ADT/ArrayRef.h"
     18 #include "llvm/DebugInfo/CodeView/TypeRecord.h"
     19 #include "llvm/Support/Allocator.h"
     20 #include "llvm/Support/Error.h"
     21 #include "llvm/Support/YAMLTraits.h"
     22 #include <cstdint>
     23 #include <memory>
     24 #include <vector>
     25 
     26 namespace llvm {
     27 
     28 namespace codeview {
     29 class AppendingTypeTableBuilder;
     30 }
     31 
     32 namespace CodeViewYAML {
     33 
     34 namespace detail {
     35 
     36 struct LeafRecordBase;
     37 struct MemberRecordBase;
     38 
     39 } // end namespace detail
     40 
     41 struct MemberRecord {
     42   std::shared_ptr<detail::MemberRecordBase> Member;
     43 };
     44 
     45 struct LeafRecord {
     46   std::shared_ptr<detail::LeafRecordBase> Leaf;
     47 
     48   codeview::CVType
     49   toCodeViewRecord(codeview::AppendingTypeTableBuilder &Serializer) const;
     50   static Expected<LeafRecord> fromCodeViewRecord(codeview::CVType Type);
     51 };
     52 
     53 std::vector<LeafRecord> fromDebugT(ArrayRef<uint8_t> DebugTorP,
     54                                    StringRef SectionName);
     55 ArrayRef<uint8_t> toDebugT(ArrayRef<LeafRecord>, BumpPtrAllocator &Alloc,
     56                            StringRef SectionName);
     57 
     58 } // end namespace CodeViewYAML
     59 
     60 } // end namespace llvm
     61 
     62 LLVM_YAML_DECLARE_SCALAR_TRAITS(codeview::GUID, QuotingType::Single)
     63 
     64 LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::LeafRecord)
     65 LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::MemberRecord)
     66 
     67 LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::LeafRecord)
     68 LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::MemberRecord)
     69 
     70 #endif // LLVM_OBJECTYAML_CODEVIEWYAMLTYPES_H
     71