blob: 3241000b06db05834926c82d746fe264d889f131 [file] [log] [blame]
Adrian McCarthy4d93d662017-03-29 19:27:08 +00001//===- 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
10#include "llvm/DebugInfo/PDB/Native/NativeExeSymbol.h"
11
Adrian McCarthy4aedc812017-06-22 18:57:51 +000012#include "llvm/ADT/STLExtras.h"
Adrian McCarthy4d93d662017-03-29 19:27:08 +000013#include "llvm/DebugInfo/PDB/Native/DbiStream.h"
14#include "llvm/DebugInfo/PDB/Native/InfoStream.h"
15#include "llvm/DebugInfo/PDB/Native/NativeEnumModules.h"
16#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
17
18namespace llvm {
19namespace pdb {
20
Adrian McCarthy8d090fc2017-07-12 19:38:11 +000021NativeExeSymbol::NativeExeSymbol(NativeSession &Session, SymIndexId SymbolId)
Adrian McCarthy31bcb6f2017-06-22 18:43:18 +000022 : NativeRawSymbol(Session, SymbolId), File(Session.getPDBFile()) {}
23
24std::unique_ptr<NativeRawSymbol> NativeExeSymbol::clone() const {
Adrian McCarthy4aedc812017-06-22 18:57:51 +000025 return llvm::make_unique<NativeExeSymbol>(Session, SymbolId);
Adrian McCarthy31bcb6f2017-06-22 18:43:18 +000026}
Adrian McCarthy4d93d662017-03-29 19:27:08 +000027
28std::unique_ptr<IPDBEnumSymbols>
29NativeExeSymbol::findChildren(PDB_SymType Type) const {
30 switch (Type) {
31 case PDB_SymType::Compiland: {
32 auto Dbi = File.getPDBDbiStream();
33 if (Dbi) {
Zachary Turner1eb9a022017-05-04 23:53:29 +000034 const DbiModuleList &Modules = Dbi->modules();
Adrian McCarthy4d93d662017-03-29 19:27:08 +000035 return std::unique_ptr<IPDBEnumSymbols>(
36 new NativeEnumModules(Session, Modules));
37 }
38 consumeError(Dbi.takeError());
39 break;
40 }
41 default:
42 break;
43 }
44 return nullptr;
45}
46
47uint32_t NativeExeSymbol::getAge() const {
48 auto IS = File.getPDBInfoStream();
49 if (IS)
50 return IS->getAge();
51 consumeError(IS.takeError());
52 return 0;
53}
54
55std::string NativeExeSymbol::getSymbolsFileName() const {
56 return File.getFilePath();
57}
58
Reid Kleckner67653ee2017-07-17 23:59:44 +000059codeview::GUID NativeExeSymbol::getGuid() const {
Adrian McCarthy4d93d662017-03-29 19:27:08 +000060 auto IS = File.getPDBInfoStream();
61 if (IS)
62 return IS->getGuid();
63 consumeError(IS.takeError());
Reid Kleckner67653ee2017-07-17 23:59:44 +000064 return codeview::GUID{{0}};
Adrian McCarthy4d93d662017-03-29 19:27:08 +000065}
66
67bool NativeExeSymbol::hasCTypes() const {
68 auto Dbi = File.getPDBDbiStream();
69 if (Dbi)
70 return Dbi->hasCTypes();
71 consumeError(Dbi.takeError());
72 return false;
73}
74
75bool NativeExeSymbol::hasPrivateSymbols() const {
76 auto Dbi = File.getPDBDbiStream();
77 if (Dbi)
78 return !Dbi->isStripped();
79 consumeError(Dbi.takeError());
80 return false;
81}
82
83} // namespace pdb
84} // namespace llvm