mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
We have a lot of very similarly named classes related to dealing with module debug info. This patch has NFC, it just renames some classes to be more descriptive (albeit slightly more to type). The mapping from old to new class names is as follows: Old | New ModInfo | DbiModuleDescriptor ModuleSubstream | ModuleDebugFragment ModStream | ModuleDebugStream With the corresponding Builder classes renamed accordingly. Differential Revision: https://reviews.llvm.org/D32506 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301555 91177308-0d34-0410-b5e6-96231b3b80d8
88 lines
3.0 KiB
C++
88 lines
3.0 KiB
C++
//===- ModuleDebugFragment.h ------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_DEBUGINFO_CODEVIEW_MODULEDEBUGFRAGMENT_H
|
|
#define LLVM_DEBUGINFO_CODEVIEW_MODULEDEBUGFRAGMENT_H
|
|
|
|
#include "llvm/DebugInfo/CodeView/CodeView.h"
|
|
#include "llvm/Support/BinaryStreamArray.h"
|
|
#include "llvm/Support/BinaryStreamRef.h"
|
|
#include "llvm/Support/Endian.h"
|
|
#include "llvm/Support/Error.h"
|
|
|
|
namespace llvm {
|
|
namespace codeview {
|
|
|
|
// Corresponds to the `CV_DebugSSubsectionHeader_t` structure.
|
|
struct ModuleDebugFragmentHeader {
|
|
support::ulittle32_t Kind; // codeview::ModuleDebugFragmentKind enum
|
|
support::ulittle32_t Length; // number of bytes occupied by this record.
|
|
};
|
|
|
|
// Corresponds to the `CV_DebugSLinesHeader_t` structure.
|
|
struct LineFragmentHeader {
|
|
support::ulittle32_t RelocOffset; // Code offset of line contribution.
|
|
support::ulittle16_t RelocSegment; // Code segment of line contribution.
|
|
support::ulittle16_t Flags; // See LineFlags enumeration.
|
|
support::ulittle32_t CodeSize; // Code size of this line contribution.
|
|
};
|
|
|
|
// Corresponds to the `CV_DebugSLinesFileBlockHeader_t` structure.
|
|
struct LineBlockFragmentHeader {
|
|
support::ulittle32_t NameIndex; // Index in DBI name buffer of filename.
|
|
support::ulittle32_t NumLines; // Number of lines
|
|
support::ulittle32_t BlockSize; // Code size of block, in bytes.
|
|
// The following two variable length arrays appear immediately after the
|
|
// header. The structure definitions follow.
|
|
// LineNumberEntry Lines[NumLines];
|
|
// ColumnNumberEntry Columns[NumLines];
|
|
};
|
|
|
|
// Corresponds to `CV_Line_t` structure
|
|
struct LineNumberEntry {
|
|
support::ulittle32_t Offset; // Offset to start of code bytes for line number
|
|
support::ulittle32_t Flags; // Start:24, End:7, IsStatement:1
|
|
};
|
|
|
|
// Corresponds to `CV_Column_t` structure
|
|
struct ColumnNumberEntry {
|
|
support::ulittle16_t StartColumn;
|
|
support::ulittle16_t EndColumn;
|
|
};
|
|
|
|
class ModuleDebugFragment {
|
|
public:
|
|
ModuleDebugFragment();
|
|
ModuleDebugFragment(ModuleDebugFragmentKind Kind, BinaryStreamRef Data);
|
|
static Error initialize(BinaryStreamRef Stream, ModuleDebugFragment &Info);
|
|
uint32_t getRecordLength() const;
|
|
ModuleDebugFragmentKind kind() const;
|
|
BinaryStreamRef getRecordData() const;
|
|
|
|
private:
|
|
ModuleDebugFragmentKind Kind;
|
|
BinaryStreamRef Data;
|
|
};
|
|
|
|
typedef VarStreamArray<ModuleDebugFragment> ModuleDebugFragmentArray;
|
|
} // namespace codeview
|
|
|
|
template <> struct VarStreamArrayExtractor<codeview::ModuleDebugFragment> {
|
|
Error operator()(BinaryStreamRef Stream, uint32_t &Length,
|
|
codeview::ModuleDebugFragment &Info) const {
|
|
if (auto EC = codeview::ModuleDebugFragment::initialize(Stream, Info))
|
|
return EC;
|
|
Length = Info.getRecordLength();
|
|
return Error::success();
|
|
}
|
|
};
|
|
} // namespace llvm
|
|
|
|
#endif // LLVM_DEBUGINFO_CODEVIEW_MODULEDEBUGFRAGMENT_H
|