LLVM  6.0.0svn
NativeExeSymbol.cpp
Go to the documentation of this file.
1 //===- NativeExeSymbol.cpp - native impl for PDBSymbolExe -------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
11 
12 #include "llvm/ADT/STLExtras.h"
19 
20 namespace llvm {
21 namespace pdb {
22 
24  : NativeRawSymbol(Session, SymbolId), File(Session.getPDBFile()) {}
25 
26 std::unique_ptr<NativeRawSymbol> NativeExeSymbol::clone() const {
27  return llvm::make_unique<NativeExeSymbol>(Session, SymbolId);
28 }
29 
30 std::unique_ptr<IPDBEnumSymbols>
32  switch (Type) {
34  auto Dbi = File.getPDBDbiStream();
35  if (Dbi) {
36  const DbiModuleList &Modules = Dbi->modules();
37  return std::unique_ptr<IPDBEnumSymbols>(
38  new NativeEnumModules(Session, Modules));
39  }
40  consumeError(Dbi.takeError());
41  break;
42  }
43  case PDB_SymType::Enum:
44  return Session.createTypeEnumerator(codeview::LF_ENUM);
45  default:
46  break;
47  }
48  return nullptr;
49 }
50 
52  auto IS = File.getPDBInfoStream();
53  if (IS)
54  return IS->getAge();
55  consumeError(IS.takeError());
56  return 0;
57 }
58 
60  return File.getFilePath();
61 }
62 
64  auto IS = File.getPDBInfoStream();
65  if (IS)
66  return IS->getGuid();
67  consumeError(IS.takeError());
68  return codeview::GUID{{0}};
69 }
70 
72  auto Dbi = File.getPDBDbiStream();
73  if (Dbi)
74  return Dbi->hasCTypes();
75  consumeError(Dbi.takeError());
76  return false;
77 }
78 
80  auto Dbi = File.getPDBDbiStream();
81  if (Dbi)
82  return !Dbi->isStripped();
83  consumeError(Dbi.takeError());
84  return false;
85 }
86 
87 } // namespace pdb
88 } // namespace llvm
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
bool hasCTypes() const override
bool hasPrivateSymbols() const override
std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type) const override
This represents the &#39;GUID&#39; type from windows.h.
Definition: GUID.h:22
PDB_SymType
These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/bkedss5f.aspx.
Definition: PDBTypes.h:162
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
codeview::GUID getGuid() const override
uint32_t getAge() const override
std::unique_ptr< NativeRawSymbol > clone() const override
void consumeError(Error Err)
Consume a Error without doing anything.
Definition: Error.h:962
Expected< DbiStream & > getPDBDbiStream()
Definition: PDBFile.cpp:287
std::unique_ptr< IPDBEnumSymbols > createTypeEnumerator(codeview::TypeLeafKind Kind)
NativeExeSymbol(NativeSession &Session, SymIndexId SymbolId)
StringRef getFilePath() const
Definition: PDBFile.cpp:48
Expected< InfoStream & > getPDBInfoStream()
Definition: PDBFile.cpp:274
std::string getSymbolsFileName() const override