You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- NativeExeSymbol.cpp - native impl for PDBSymbolExe -------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "llvm/DebugInfo/PDB/Native/NativeExeSymbol.h"
 | |
| 
 | |
| #include "llvm/ADT/STLExtras.h"
 | |
| #include "llvm/DebugInfo/PDB/Native/DbiStream.h"
 | |
| #include "llvm/DebugInfo/PDB/Native/InfoStream.h"
 | |
| #include "llvm/DebugInfo/PDB/Native/NativeEnumModules.h"
 | |
| #include "llvm/DebugInfo/PDB/Native/PDBFile.h"
 | |
| 
 | |
| namespace llvm {
 | |
| namespace pdb {
 | |
| 
 | |
| NativeExeSymbol::NativeExeSymbol(NativeSession &Session, SymIndexId SymbolId)
 | |
|     : NativeRawSymbol(Session, SymbolId), File(Session.getPDBFile()) {}
 | |
| 
 | |
| std::unique_ptr<NativeRawSymbol> NativeExeSymbol::clone() const {
 | |
|   return llvm::make_unique<NativeExeSymbol>(Session, SymbolId);
 | |
| }
 | |
| 
 | |
| std::unique_ptr<IPDBEnumSymbols>
 | |
| NativeExeSymbol::findChildren(PDB_SymType Type) const {
 | |
|   switch (Type) {
 | |
|   case PDB_SymType::Compiland: {
 | |
|     auto Dbi = File.getPDBDbiStream();
 | |
|     if (Dbi) {
 | |
|       const DbiModuleList &Modules = Dbi->modules();
 | |
|       return std::unique_ptr<IPDBEnumSymbols>(
 | |
|           new NativeEnumModules(Session, Modules));
 | |
|     }
 | |
|     consumeError(Dbi.takeError());
 | |
|     break;
 | |
|   }
 | |
|   case PDB_SymType::Enum:
 | |
|     return Session.createTypeEnumerator(codeview::LF_ENUM);
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| uint32_t NativeExeSymbol::getAge() const {
 | |
|   auto IS = File.getPDBInfoStream();
 | |
|   if (IS)
 | |
|     return IS->getAge();
 | |
|   consumeError(IS.takeError());
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| std::string NativeExeSymbol::getSymbolsFileName() const {
 | |
|   return File.getFilePath();
 | |
| }
 | |
| 
 | |
| codeview::GUID NativeExeSymbol::getGuid() const {
 | |
|   auto IS = File.getPDBInfoStream();
 | |
|   if (IS)
 | |
|     return IS->getGuid();
 | |
|   consumeError(IS.takeError());
 | |
|   return codeview::GUID{{0}};
 | |
| }
 | |
| 
 | |
| bool NativeExeSymbol::hasCTypes() const {
 | |
|   auto Dbi = File.getPDBDbiStream();
 | |
|   if (Dbi)
 | |
|     return Dbi->hasCTypes();
 | |
|   consumeError(Dbi.takeError());
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| bool NativeExeSymbol::hasPrivateSymbols() const {
 | |
|   auto Dbi = File.getPDBDbiStream();
 | |
|   if (Dbi)
 | |
|     return !Dbi->isStripped();
 | |
|   consumeError(Dbi.takeError());
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| } // namespace pdb
 | |
| } // namespace llvm
 |