1*9880d681SAndroid Build Coastguard Worker //===- ExternalSymbolDumper.cpp -------------------------------- *- C++ *-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #include "ExternalSymbolDumper.h" 11*9880d681SAndroid Build Coastguard Worker #include "LinePrinter.h" 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBSymbolExe.h" 14*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h" 15*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Format.h" 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker using namespace llvm; 18*9880d681SAndroid Build Coastguard Worker using namespace llvm::pdb; 19*9880d681SAndroid Build Coastguard Worker ExternalSymbolDumper(LinePrinter & P)20*9880d681SAndroid Build Coastguard WorkerExternalSymbolDumper::ExternalSymbolDumper(LinePrinter &P) 21*9880d681SAndroid Build Coastguard Worker : PDBSymDumper(true), Printer(P) {} 22*9880d681SAndroid Build Coastguard Worker start(const PDBSymbolExe & Symbol)23*9880d681SAndroid Build Coastguard Workervoid ExternalSymbolDumper::start(const PDBSymbolExe &Symbol) { 24*9880d681SAndroid Build Coastguard Worker auto Vars = Symbol.findAllChildren<PDBSymbolPublicSymbol>(); 25*9880d681SAndroid Build Coastguard Worker while (auto Var = Vars->getNext()) 26*9880d681SAndroid Build Coastguard Worker Var->dump(*this); 27*9880d681SAndroid Build Coastguard Worker } 28*9880d681SAndroid Build Coastguard Worker dump(const PDBSymbolPublicSymbol & Symbol)29*9880d681SAndroid Build Coastguard Workervoid ExternalSymbolDumper::dump(const PDBSymbolPublicSymbol &Symbol) { 30*9880d681SAndroid Build Coastguard Worker std::string LinkageName = Symbol.getName(); 31*9880d681SAndroid Build Coastguard Worker if (Printer.IsSymbolExcluded(LinkageName)) 32*9880d681SAndroid Build Coastguard Worker return; 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker Printer.NewLine(); 35*9880d681SAndroid Build Coastguard Worker uint64_t Addr = Symbol.getVirtualAddress(); 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker Printer << "["; 38*9880d681SAndroid Build Coastguard Worker WithColor(Printer, PDB_ColorItem::Address).get() << format_hex(Addr, 10); 39*9880d681SAndroid Build Coastguard Worker Printer << "] "; 40*9880d681SAndroid Build Coastguard Worker WithColor(Printer, PDB_ColorItem::Identifier).get() << LinkageName; 41*9880d681SAndroid Build Coastguard Worker } 42