LLVM 18.0.0git
NativeExeSymbol.cpp
Go to the documentation of this file.
1//===- NativeExeSymbol.cpp - native impl for PDBSymbolExe -------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
10
19
20using namespace llvm;
21using namespace llvm::pdb;
22
25 if (DbiS)
26 return &DbiS.get();
27
28 consumeError(DbiS.takeError());
29 return nullptr;
30}
31
33 : NativeRawSymbol(Session, PDB_SymType::Exe, SymbolId),
34 Dbi(getDbiStreamPtr(Session)) {}
35
36std::unique_ptr<IPDBEnumSymbols>
38 switch (Type) {
40 return std::unique_ptr<IPDBEnumSymbols>(new NativeEnumModules(Session));
41 break;
42 }
44 return Session.getSymbolCache().createTypeEnumerator(codeview::LF_ARRAY);
46 return Session.getSymbolCache().createTypeEnumerator(codeview::LF_ENUM);
48 return Session.getSymbolCache().createTypeEnumerator(codeview::LF_POINTER);
51 {codeview::LF_STRUCTURE, codeview::LF_CLASS, codeview::LF_UNION,
52 codeview::LF_INTERFACE});
54 return Session.getSymbolCache().createTypeEnumerator(codeview::LF_VTSHAPE);
57 {codeview::LF_PROCEDURE, codeview::LF_MFUNCTION});
59 return Session.getSymbolCache().createGlobalsEnumerator(codeview::S_UDT);
60
61 default:
62 break;
63 }
64 return nullptr;
65}
66
69 if (IS)
70 return IS->getAge();
71 consumeError(IS.takeError());
72 return 0;
73}
74
76 return std::string(Session.getPDBFile().getFilePath());
77}
78
81 if (IS)
82 return IS->getGuid();
83 consumeError(IS.takeError());
84 return codeview::GUID{{0}};
85}
86
88 auto Dbi = Session.getPDBFile().getPDBDbiStream();
89 if (Dbi)
90 return Dbi->hasCTypes();
91 consumeError(Dbi.takeError());
92 return false;
93}
94
96 auto Dbi = Session.getPDBFile().getPDBDbiStream();
97 if (Dbi)
98 return !Dbi->isStripped();
99 consumeError(Dbi.takeError());
100 return false;
101}
static DbiStream * getDbiStreamPtr(NativeSession &Session)
Tagged union holding either a T or a Error.
Definition: Error.h:474
Error takeError()
Take ownership of the stored error.
Definition: Error.h:601
reference get()
Returns a reference to the stored T value.
Definition: Error.h:571
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
bool isStripped() const
Definition: DbiStream.cpp:170
bool hasCTypes() const
Definition: DbiStream.cpp:166
std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type) const override
codeview::GUID getGuid() const override
uint32_t getAge() const override
bool hasCTypes() const override
bool hasPrivateSymbols() const override
NativeExeSymbol(NativeSession &Session, SymIndexId Id)
std::string getSymbolsFileName() const override
SymbolCache & getSymbolCache()
Expected< DbiStream & > getPDBDbiStream()
Definition: PDBFile.cpp:288
Expected< InfoStream & > getPDBInfoStream()
Definition: PDBFile.cpp:275
StringRef getFilePath() const
Definition: PDBFile.cpp:48
std::unique_ptr< IPDBEnumSymbols > createGlobalsEnumerator(codeview::SymbolKind Kind)
std::unique_ptr< IPDBEnumSymbols > createTypeEnumerator(codeview::TypeLeafKind Kind)
Definition: SymbolCache.cpp:89
PDB_SymType
These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:243
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
void consumeError(Error Err)
Consume a Error without doing anything.
Definition: Error.h:1041
This represents the 'GUID' type from windows.h.
Definition: GUID.h:21