//=- CodeViewYAMLDebugSections.h - CodeView YAMLIO debug sections -*- C++ -*-=//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file defines classes for handling the YAML representation of CodeView
// Debug Info.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
#define LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H

#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
#include "llvm/DebugInfo/CodeView/DebugSubsection.h"
#include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/YAMLTraits.h"
#include <cstdint>
#include <memory>
#include <vector>

namespace llvm {

namespace codeview {

class StringsAndChecksums;
class StringsAndChecksumsRef;

} // end namespace codeview

namespace CodeViewYAML {

namespace detail {

struct YAMLSubsectionBase;

} // end namespace detail

struct YAMLFrameData {
  uint32_t RvaStart;
  uint32_t CodeSize;
  uint32_t LocalSize;
  uint32_t ParamsSize;
  uint32_t MaxStackSize;
  StringRef FrameFunc;
  uint32_t PrologSize;
  uint32_t SavedRegsSize;
  uint32_t Flags;
};

struct YAMLCrossModuleImport {
  StringRef ModuleName;
  std::vector<uint32_t> ImportIds;
};

struct SourceLineEntry {
  uint32_t Offset;
  uint32_t LineStart;
  uint32_t EndDelta;
  bool IsStatement;
};

struct SourceColumnEntry {
  uint16_t StartColumn;
  uint16_t EndColumn;
};

struct SourceLineBlock {
  StringRef FileName;
  std::vector<SourceLineEntry> Lines;
  std::vector<SourceColumnEntry> Columns;
};

struct HexFormattedString {
  std::vector<uint8_t> Bytes;
};

struct SourceFileChecksumEntry {
  StringRef FileName;
  codeview::FileChecksumKind Kind;
  HexFormattedString ChecksumBytes;
};

struct SourceLineInfo {
  uint32_t RelocOffset;
  uint32_t RelocSegment;
  codeview::LineFlags Flags;
  uint32_t CodeSize;
  std::vector<SourceLineBlock> Blocks;
};

struct InlineeSite {
  uint32_t Inlinee;
  StringRef FileName;
  uint32_t SourceLineNum;
  std::vector<StringRef> ExtraFiles;
};

struct InlineeInfo {
  bool HasExtraFiles;
  std::vector<InlineeSite> Sites;
};

struct YAMLDebugSubsection {
  static Expected<YAMLDebugSubsection>
  fromCodeViewSubection(const codeview::StringsAndChecksumsRef &SC,
                        const codeview::DebugSubsectionRecord &SS);

  std::shared_ptr<detail::YAMLSubsectionBase> Subsection;
};

struct DebugSubsectionState {};

Expected<std::vector<std::shared_ptr<codeview::DebugSubsection>>>
toCodeViewSubsectionList(BumpPtrAllocator &Allocator,
                         ArrayRef<YAMLDebugSubsection> Subsections,
                         const codeview::StringsAndChecksums &SC);

std::vector<YAMLDebugSubsection>
fromDebugS(ArrayRef<uint8_t> Data, const codeview::StringsAndChecksumsRef &SC);

void initializeStringsAndChecksums(ArrayRef<YAMLDebugSubsection> Sections,
                                   codeview::StringsAndChecksums &SC);

} // end namespace CodeViewYAML

} // end namespace llvm

LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::YAMLDebugSubsection)

LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::YAMLDebugSubsection)

#endif // LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
