NativeExeSymbol.cpp revision 320397
155682Smarkm//===- NativeExeSymbol.cpp - native impl for PDBSymbolExe -------*- C++ -*-===//
2233294Sstas//
3233294Sstas//                     The LLVM Compiler Infrastructure
4233294Sstas//
555682Smarkm// This file is distributed under the University of Illinois Open Source
6233294Sstas// License. See LICENSE.TXT for details.
7233294Sstas//
8233294Sstas//===----------------------------------------------------------------------===//
955682Smarkm
10233294Sstas#include "llvm/DebugInfo/PDB/Native/NativeExeSymbol.h"
11233294Sstas
1255682Smarkm#include "llvm/ADT/STLExtras.h"
13233294Sstas#include "llvm/DebugInfo/PDB/Native/DbiStream.h"
14233294Sstas#include "llvm/DebugInfo/PDB/Native/InfoStream.h"
15233294Sstas#include "llvm/DebugInfo/PDB/Native/NativeEnumModules.h"
1655682Smarkm#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
17233294Sstas
18233294Sstasnamespace llvm {
19233294Sstasnamespace pdb {
2055682Smarkm
21233294SstasNativeExeSymbol::NativeExeSymbol(NativeSession &Session, uint32_t SymbolId)
22233294Sstas    : NativeRawSymbol(Session, SymbolId), File(Session.getPDBFile()) {}
23233294Sstas
24233294Sstasstd::unique_ptr<NativeRawSymbol> NativeExeSymbol::clone() const {
25233294Sstas  return llvm::make_unique<NativeExeSymbol>(Session, SymbolId);
26233294Sstas}
27233294Sstas
28233294Sstasstd::unique_ptr<IPDBEnumSymbols>
29233294SstasNativeExeSymbol::findChildren(PDB_SymType Type) const {
30233294Sstas  switch (Type) {
31233294Sstas  case PDB_SymType::Compiland: {
3255682Smarkm    auto Dbi = File.getPDBDbiStream();
3355682Smarkm    if (Dbi) {
3455682Smarkm      const DbiModuleList &Modules = Dbi->modules();
3555682Smarkm      return std::unique_ptr<IPDBEnumSymbols>(
36233294Sstas          new NativeEnumModules(Session, Modules));
3755682Smarkm    }
3855682Smarkm    consumeError(Dbi.takeError());
3955682Smarkm    break;
4055682Smarkm  }
4155682Smarkm  default:
4255682Smarkm    break;
43178825Sdfr  }
4455682Smarkm  return nullptr;
4555682Smarkm}
46233294Sstas
47178825Sdfruint32_t NativeExeSymbol::getAge() const {
48178825Sdfr  auto IS = File.getPDBInfoStream();
4955682Smarkm  if (IS)
50178825Sdfr    return IS->getAge();
51233294Sstas  consumeError(IS.takeError());
52178825Sdfr  return 0;
53178825Sdfr}
54178825Sdfr
55178825Sdfrstd::string NativeExeSymbol::getSymbolsFileName() const {
56178825Sdfr  return File.getFilePath();
57178825Sdfr}
58178825Sdfr
59178825SdfrPDB_UniqueId NativeExeSymbol::getGuid() const {
60178825Sdfr  auto IS = File.getPDBInfoStream();
61178825Sdfr  if (IS)
62178825Sdfr    return IS->getGuid();
63233294Sstas  consumeError(IS.takeError());
64178825Sdfr  return PDB_UniqueId{{0}};
65178825Sdfr}
6672445Sassar
6772445Sassarbool NativeExeSymbol::hasCTypes() const {
6855682Smarkm  auto Dbi = File.getPDBDbiStream();
6972445Sassar  if (Dbi)
7055682Smarkm    return Dbi->hasCTypes();
7172445Sassar  consumeError(Dbi.takeError());
7272445Sassar  return false;
7372445Sassar}
7472445Sassar
75178825Sdfrbool NativeExeSymbol::hasPrivateSymbols() const {
76178825Sdfr  auto Dbi = File.getPDBDbiStream();
77178825Sdfr  if (Dbi)
78178825Sdfr    return !Dbi->isStripped();
79178825Sdfr  consumeError(Dbi.takeError());
80178825Sdfr  return false;
81178825Sdfr}
82178825Sdfr
83178825Sdfr} // namespace pdb
84178825Sdfr} // namespace llvm
85178825Sdfr