xref: /aosp_15_r20/external/llvm/tools/llvm-pdbdump/ExternalSymbolDumper.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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 Worker ExternalSymbolDumper::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 Worker void 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 Worker void 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