LLVM: lib/DebugInfo/PDB/PDBSymbol.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

47#include

48

49using namespace llvm;

51

53

56

58

59#define FACTORY_SYMTAG_CASE(Tag, Type) \

60 case PDB_SymType::Tag: \

61 return std::unique_ptr(new Type(PDBSession));

62

63std::unique_ptr

65 switch (Tag) {

96 default:

97 return std::unique_ptr(new PDBSymbolUnknown(PDBSession));

98 }

99}

100

101std::unique_ptr

103 std::unique_ptr RawSymbol) {

104 auto SymbolPtr = createSymbol(PDBSession, RawSymbol->getSymTag());

105 SymbolPtr->RawSymbol = RawSymbol.get();

106 SymbolPtr->OwnedRawSymbol = std::move(RawSymbol);

107 return SymbolPtr;

108}

109

112 auto SymbolPtr = createSymbol(PDBSession, RawSymbol.getSymTag());

113 SymbolPtr->RawSymbol = &RawSymbol;

114 return SymbolPtr;

115}

116

120 RawSymbol->dump(OS, Indent, ShowFlags, RecurseFlags);

121}

122

128

132 outs() << "\n";

133 for (auto &Stat : Stats) {

134 outs() << Stat.first << ": " << Stat.second << "\n";

135 }

137}

138

141

145

146std::unique_ptr

150

151std::unique_ptr

156

157std::unique_ptr

160 return RawSymbol->findChildrenByRVA(Type, Name, Flags, RVA);

161}

162

163std::unique_ptr

165 return RawSymbol->findInlineFramesByVA(VA);

166}

167

168std::unique_ptr

170 return RawSymbol->findInlineFramesByRVA(RVA);

171}

172

173std::unique_ptr

177

178std::unique_ptr

182

184

185std::unique_ptr

187 std::unique_ptr Result(findAllChildren());

188 if (!Result)

189 return nullptr;

191 while (auto Child = Result->getNext()) {

192 ++Stats[Child->getSymTag()];

193 }

194 Result->reset();

195 return Result;

196}

197

199 return Session.getSymbolById(Id);

200}

201

209 return;

210

211 OS << "\n";

213 OS << Name << ": " << Value;

214

216 return;

217

219 return;

220

222

223

224

225 if (!Child)

226 return;

227

228

229

231}

block placement Basic Block Placement Stats

#define FACTORY_SYMTAG_CASE(Tag, Type)

Definition PDBSymbol.cpp:59

StringRef - Represent a constant reference to a string, i.e.

LLVM Value Representation.

IPDBRawSymbol defines an interface used to represent an arbitrary symbol.

IPDBSession defines an interface used to provide a context for querying debug information from a debu...

virtual std::unique_ptr< PDBSymbol > getSymbolById(SymIndexId SymbolId) const =0

PDBSymbolCustom represents symbols that are compiler-specific and do not fit anywhere else in the lex...

uint32_t getSymIndexId() const

Definition PDBSymbol.cpp:140

PDB_SymType getSymTag() const

Definition PDBSymbol.cpp:139

void dumpChildStats() const

Definition PDBSymbol.cpp:129

const IPDBSession & Session

std::unique_ptr< PDBSymbol > getSymbolByIdHelper(uint32_t Id) const

Definition PDBSymbol.cpp:198

std::unique_ptr< ConcreteSymbolEnumerator< T > > findAllChildren() const

std::unique_ptr< IPDBEnumSymbols > findInlineFramesByVA(uint64_t VA) const

Definition PDBSymbol.cpp:164

void dumpProperties() const

Definition PDBSymbol.cpp:123

std::unique_ptr< IPDBEnumSymbols > findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags, uint32_t RVA) const

Definition PDBSymbol.cpp:158

std::unique_ptr< IPDBEnumLineNumbers > findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const

Definition PDBSymbol.cpp:179

std::unique_ptr< IPDBEnumSymbols > findInlineFramesByRVA(uint32_t RVA) const

Definition PDBSymbol.cpp:169

std::string getName() const

Definition PDBSymbol.cpp:183

PDBSymbol(const IPDBSession &PDBSession)

Definition PDBSymbol.cpp:52

void defaultDump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags) const

Definition PDBSymbol.cpp:117

std::unique_ptr< IPDBEnumLineNumbers > findInlineeLinesByVA(uint64_t VA, uint32_t Length) const

Definition PDBSymbol.cpp:174

IPDBRawSymbol * RawSymbol

std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags) const

Definition PDBSymbol.cpp:152

static std::unique_ptr< PDBSymbol > create(const IPDBSession &PDBSession, std::unique_ptr< IPDBRawSymbol > RawSymbol)

Definition PDBSymbol.cpp:102

std::unique_ptr< IPDBEnumSymbols > getChildStats(TagStats &Stats) const

Definition PDBSymbol.cpp:186

This class implements an extremely fast bulk output stream that can only output to a stream.

raw_ostream & indent(unsigned NumSpaces)

indent - Insert 'NumSpaces' spaces.

PDB_NameSearchFlags

Defines flags used for enumerating child symbols.

PDB_SymType

These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn....

std::unordered_map< PDB_SymType, int > TagStats

LLVM_ABI void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value, int Indent, const IPDBSession &Session, PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags)

Definition PDBSymbol.cpp:202

This is an optimization pass for GlobalISel generic memory operations.

LLVM_ABI raw_fd_ostream & outs()

This returns a reference to a raw_fd_ostream for standard output.

FunctionAddr VTableAddr uintptr_t uintptr_t Data

OutputIt move(R &&Range, OutputIt Out)

Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.

Implement std::hash so that hash_code can be used in STL containers.