mirror of
https://github.com/RPCSX/llvm.git
synced 2026-01-31 01:05:23 +01:00
This adds support for Symbols, StringTable, and FrameData subsection types. Even though these subsections rarely if ever appear in a PDB file (they are usually in object files), there's no theoretical reason why they *couldn't* appear in a PDB. The real issue though is that in order to add support for dumping and writing them (which will be useful for object files), we need a way to test them. And since there is no support for reading and writing them to / from object files yet, making PDB support them is the best way to both add support for the underlying format and add support for tests at the same time. Later, when we go to add support for reading / writing them from object files, we'll need only minimal changes in the underlying read/write code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305037 91177308-0d34-0410-b5e6-96231b3b80d8
57 lines
1.6 KiB
C++
57 lines
1.6 KiB
C++
//===- DebugSymbolsSubsection.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_DEBUGSYMBOLSSUBSECTION_H
|
|
#define LLVM_DEBUGINFO_CODEVIEW_DEBUGSYMBOLSSUBSECTION_H
|
|
|
|
#include "llvm/DebugInfo/CodeView/DebugSubsection.h"
|
|
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
|
|
#include "llvm/Support/Error.h"
|
|
|
|
namespace llvm {
|
|
namespace codeview {
|
|
class DebugSymbolsSubsectionRef final : public DebugSubsectionRef {
|
|
public:
|
|
DebugSymbolsSubsectionRef()
|
|
: DebugSubsectionRef(DebugSubsectionKind::Symbols) {}
|
|
|
|
static bool classof(const DebugSubsectionRef *S) {
|
|
return S->kind() == DebugSubsectionKind::Symbols;
|
|
}
|
|
|
|
Error initialize(BinaryStreamReader Reader);
|
|
|
|
CVSymbolArray::Iterator begin() const { return Records.begin(); }
|
|
CVSymbolArray::Iterator end() const { return Records.end(); }
|
|
|
|
private:
|
|
CVSymbolArray Records;
|
|
};
|
|
|
|
class DebugSymbolsSubsection final : public DebugSubsection {
|
|
public:
|
|
DebugSymbolsSubsection() : DebugSubsection(DebugSubsectionKind::Symbols) {}
|
|
static bool classof(const DebugSubsection *S) {
|
|
return S->kind() == DebugSubsectionKind::Symbols;
|
|
}
|
|
|
|
uint32_t calculateSerializedSize() const override;
|
|
Error commit(BinaryStreamWriter &Writer) const override;
|
|
|
|
void addSymbol(CVSymbol Symbol);
|
|
|
|
private:
|
|
uint32_t Length = 0;
|
|
std::vector<CVSymbol> Records;
|
|
};
|
|
}
|
|
}
|
|
|
|
#endif
|