26 std::unique_ptr<IPDBSession> PDBSession)
30 Session->setLoadAddress(ImageBase.
get());
38 Result.FunctionName = getFunctionName(
Address.Address, Specifier.
FNKind);
41 std::unique_ptr<PDBSymbol> Symbol =
43 if (
auto Func = dyn_cast_or_null<PDBSymbolFunc>(Symbol.get())) {
44 Length = Func->getLength();
45 }
else if (
auto Data = dyn_cast_or_null<PDBSymbolData>(Symbol.get())) {
57 auto SourceFile = Session->getSourceFileById(LineInfo->getSourceFileId());
61 Result.FileName = SourceFile->getFileName();
62 Result.Column = LineInfo->getColumnNumber();
63 Result.Line = LineInfo->getLineNumber();
88 {LineInfo->getVirtualAddress(),
Address.SectionIndex}, Specifier);
89 Table.push_back(std::make_pair(LineInfo->getVirtualAddress(), LineEntry));
101 std::unique_ptr<PDBSymbol> ParentFunc =
108 auto Frames = ParentFunc->findInlineFramesByVA(
Address.Address);
109 if (!Frames || Frames->getChildCount() == 0) {
114 while (
auto Frame = Frames->getNext()) {
120 std::unique_ptr<IPDBLineNumber> Line =
LineNumbers->getNext();
125 auto SourceFile = Session->getSourceFileById(Line->getSourceFileId());
128 LineInfo.
FileName = SourceFile->getFileName();
129 LineInfo.
Line = Line->getLineNumber();
130 LineInfo.
Column = Line->getColumnNumber();
140 return std::vector<DILocal>();
143 std::string PDBContext::getFunctionName(
uint64_t Address,
146 return std::string();
148 std::unique_ptr<PDBSymbol> FuncSymbol =
150 auto *Func = dyn_cast_or_null<PDBSymbolFunc>(FuncSymbol.get());
158 if (
auto *PS = dyn_cast_or_null<PDBSymbolPublicSymbol>(PublicSym.get())) {
162 if (!Func || Func->getVirtualAddress() == PS->getVirtualAddress())
163 return PS->getName();
167 return Func ? Func->getName() : std::string();