<div dir="ltr">Ok, weird to see "post-commit" review on Phab.</div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 21, 2016 at 8:26 AM, Rui Ueyama <span dir="ltr"><<a href="mailto:ruiu@google.com" target="_blank">ruiu@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">These are post commit reviews. Zach accepted it before them.</div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 20, 2016 at 9:54 PM, Sean Silva <span dir="ltr"><<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Was this commit intentional? It seems like there is still ongoing review in <a href="http://reviews.llvm.org/D20480" rel="noreferrer" style="font-size:12.8px" target="_blank">http://reviews.llvm.org/D20480</a></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 20, 2016 at 12:55 PM, Rui Ueyama via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ruiu<br>
Date: Fri May 20 14:55:17 2016<br>
New Revision: 270262<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=270262&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=270262&view=rev</a><br>
Log:<br>
pdbdump: print out symbol names referred by publics stream.<br>
<br>
DBI stream contains a stream number of the symbol record stream.<br>
Symbol record streams is an array of length-type-value members.<br>
Each member represents one symbol.<br>
<br>
Publics stream contains offsets to the symbol record stream.<br>
This patch is to print out all symbols that are referenced by<br>
the publics stream.<br>
<br>
Note that even with this patch, llvm-pdbdump cannot dump all the<br>
information in a publics stream since it contains more information<br>
than symbol names. I'll improve it in followup patches.<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D20480" rel="noreferrer" target="_blank">http://reviews.llvm.org/D20480</a><br>
<br>
Added:<br>
    llvm/trunk/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h<br>
    llvm/trunk/lib/DebugInfo/PDB/Raw/SymbolStream.cpp<br>
Modified:<br>
    llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PDBFile.h<br>
    llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h<br>
    llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt<br>
    llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFile.cpp<br>
    llvm/trunk/lib/DebugInfo/PDB/Raw/PublicsStream.cpp<br>
    llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test<br>
    llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PDBFile.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PDBFile.h?rev=270262&r1=270261&r2=270262&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PDBFile.h?rev=270262&r1=270261&r2=270262&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PDBFile.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PDBFile.h Fri May 20 14:55:17 2016<br>
@@ -25,6 +25,7 @@ struct PDBFileContext;<br>
 class DbiStream;<br>
 class InfoStream;<br>
 class PublicsStream;<br>
+class SymbolStream;<br>
 class TpiStream;<br>
<br>
 class PDBFile {<br>
@@ -64,6 +65,7 @@ public:<br>
   Expected<DbiStream &> getPDBDbiStream();<br>
   Expected<TpiStream &> getPDBTpiStream();<br>
   Expected<PublicsStream &> getPDBPublicsStream();<br>
+  Expected<SymbolStream &> getPDBSymbolStream();<br>
<br>
 private:<br>
   std::unique_ptr<PDBFileContext> Context;<br>
@@ -71,6 +73,7 @@ private:<br>
   std::unique_ptr<DbiStream> Dbi;<br>
   std::unique_ptr<TpiStream> Tpi;<br>
   std::unique_ptr<PublicsStream> Publics;<br>
+  std::unique_ptr<SymbolStream> Symbols;<br>
 };<br>
 }<br>
 }<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h?rev=270262&r1=270261&r2=270262&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h?rev=270262&r1=270261&r2=270262&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h Fri May 20 14:55:17 2016<br>
@@ -20,12 +20,13 @@<br>
<br>
 namespace llvm {<br>
 namespace pdb {<br>
+class DbiStream;<br>
 class PDBFile;<br>
<br>
 class PublicsStream {<br>
-  struct HeaderInfo;<br>
   struct GSIHashHeader;<br>
-  struct HRFile;<br>
+  struct HashRecord;<br>
+  struct HeaderInfo;<br>
<br>
 public:<br>
   PublicsStream(PDBFile &File, uint32_t StreamNum);<br>
@@ -36,15 +37,21 @@ public:<br>
   uint32_t getSymHash() const;<br>
   uint32_t getAddrMap() const;<br>
   uint32_t getNumBuckets() const { return NumBuckets; }<br>
+  std::vector<std::string> getSymbols() const;<br>
   ArrayRef<uint32_t> getHashBuckets() const { return HashBuckets; }<br>
   ArrayRef<uint32_t> getAddressMap() const { return AddressMap; }<br>
   ArrayRef<uint32_t> getThunkMap() const { return ThunkMap; }<br>
   ArrayRef<uint32_t> getSectionOffsets() const { return SectionOffsets; }<br>
<br>
 private:<br>
+  Error readSymbols();<br>
+<br>
+  PDBFile &Pdb;<br>
+<br>
   uint32_t StreamNum;<br>
   MappedBlockStream Stream;<br>
   uint32_t NumBuckets = 0;<br>
+  std::vector<HashRecord> HashRecords;<br>
   std::vector<uint32_t> HashBuckets;<br>
   std::vector<uint32_t> AddressMap;<br>
   std::vector<uint32_t> ThunkMap;<br>
<br>
Added: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h?rev=270262&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h?rev=270262&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h (added)<br>
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h Fri May 20 14:55:17 2016<br>
@@ -0,0 +1,39 @@<br>
+//===- SymbolStream.cpp - PDB Symbol Stream Access --------------*- C++ -*-===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#ifndef LLVM_DEBUGINFO_PDB_RAW_PDBSYMBOLSTREAM_H<br>
+#define LLVM_DEBUGINFO_PDB_RAW_PDBSYMBOLSTREAM_H<br>
+<br>
+#include "llvm/DebugInfo/CodeView/TypeStream.h"<br>
+#include "llvm/DebugInfo/PDB/PDBTypes.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"<br>
+<br>
+#include "llvm/Support/Error.h"<br>
+<br>
+namespace llvm {<br>
+namespace pdb {<br>
+class PDBFile;<br>
+<br>
+class SymbolStream {<br>
+public:<br>
+  SymbolStream(PDBFile &File, uint32_t StreamNum);<br>
+  ~SymbolStream();<br>
+  Error reload();<br>
+<br>
+  Expected<std::string> getSymbolName(uint32_t Offset) const;<br>
+<br>
+private:<br>
+  MappedBlockStream Stream;<br>
+};<br>
+}<br>
+}<br>
+<br>
+#endif<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt?rev=270262&r1=270261&r2=270262&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt?rev=270262&r1=270261&r2=270262&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt (original)<br>
+++ llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt Fri May 20 14:55:17 2016<br>
@@ -41,6 +41,7 @@ add_pdb_impl_folder(Raw<br>
   Raw/RawError.cpp<br>
   Raw/RawSession.cpp<br>
   Raw/StreamReader.cpp<br>
+  Raw/SymbolStream.cpp<br>
   Raw/TpiStream.cpp)<br>
<br>
 list(APPEND LIBPDB_ADDITIONAL_HEADER_DIRS "${LLVM_MAIN_INCLUDE_DIR}/llvm/DebugInfo/PDB")<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFile.cpp?rev=270262&r1=270261&r2=270262&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFile.cpp?rev=270262&r1=270261&r2=270262&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFile.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFile.cpp Fri May 20 14:55:17 2016<br>
@@ -13,6 +13,7 @@<br>
 #include "llvm/DebugInfo/PDB/Raw/InfoStream.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/PublicsStream.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/RawError.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/SymbolStream.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/TpiStream.h"<br>
 #include "llvm/Support/Endian.h"<br>
 #include "llvm/Support/MemoryBuffer.h"<br>
@@ -307,3 +308,17 @@ Expected<PublicsStream &> PDBFile::getPD<br>
   }<br>
   return *Publics;<br>
 }<br>
+<br>
+Expected<SymbolStream &> PDBFile::getPDBSymbolStream() {<br>
+  if (!Symbols) {<br>
+    auto DbiS = getPDBDbiStream();<br>
+    if (auto EC = DbiS.takeError())<br>
+      return std::move(EC);<br>
+    uint32_t SymbolStreamNum = DbiS->getSymRecordStreamIndex();<br>
+<br>
+    Symbols.reset(new SymbolStream(*this, SymbolStreamNum));<br>
+    if (auto EC = Symbols->reload())<br>
+      return std::move(EC);<br>
+  }<br>
+  return *Symbols;<br>
+}<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/PublicsStream.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/PublicsStream.cpp?rev=270262&r1=270261&r2=270262&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/PublicsStream.cpp?rev=270262&r1=270261&r2=270262&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/PDB/Raw/PublicsStream.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/PublicsStream.cpp Fri May 20 14:55:17 2016<br>
@@ -27,9 +27,11 @@<br>
 #include "llvm/DebugInfo/CodeView/CodeView.h"<br>
 #include "llvm/DebugInfo/CodeView/TypeRecord.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/RawConstants.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/RawError.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/StreamReader.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/SymbolStream.h"<br>
<br>
 #include "llvm/ADT/BitVector.h"<br>
 #include "llvm/Support/Endian.h"<br>
@@ -56,8 +58,7 @@ struct PublicsStream::HeaderInfo {<br>
   ulittle32_t NumSections;<br>
 };<br>
<br>
-<br>
-// This is GSIHashHdr struct defined in<br>
+// This is GSIHashHdr.<br>
 struct PublicsStream::GSIHashHeader {<br>
   enum : unsigned {<br>
     HdrSignature = ~0U,<br>
@@ -69,8 +70,9 @@ struct PublicsStream::GSIHashHeader {<br>
   ulittle32_t NumBuckets;<br>
 };<br>
<br>
-struct PublicsStream::HRFile {<br>
-  ulittle32_t Off;<br>
+// This is HRFile.<br>
+struct PublicsStream::HashRecord {<br>
+  ulittle32_t Off; // Offset in the symbol record stream<br>
   ulittle32_t CRef;<br>
 };<br>
<br>
@@ -84,7 +86,7 @@ struct SectionOffset {<br>
 }<br>
<br>
 PublicsStream::PublicsStream(PDBFile &File, uint32_t StreamNum)<br>
-    : StreamNum(StreamNum), Stream(StreamNum, File) {}<br>
+    : Pdb(File), StreamNum(StreamNum), Stream(StreamNum, File) {}<br>
<br>
 PublicsStream::~PublicsStream() {}<br>
<br>
@@ -114,12 +116,12 @@ Error PublicsStream::reload() {<br>
     return make_error<RawError>(raw_error_code::corrupt_file,<br>
                                 "Publics Stream does not contain a header.");<br>
<br>
-  // An array of HRFile follows. Read them.<br>
-  if (HashHdr->HrSize % sizeof(HRFile))<br>
+  // An array of HashRecord follows. Read them.<br>
+  if (HashHdr->HrSize % sizeof(HashRecord))<br>
     return make_error<RawError>(raw_error_code::corrupt_file,<br>
                                 "Invalid HR array size.");<br>
-  std::vector<HRFile> HRs(HashHdr->HrSize / sizeof(HRFile));<br>
-  if (auto EC = Reader.readArray<HRFile>(HRs))<br>
+  HashRecords.resize(HashHdr->HrSize / sizeof(HashRecord));<br>
+  if (auto EC = Reader.readArray<HashRecord>(HashRecords))<br>
     return make_error<RawError>(raw_error_code::corrupt_file,<br>
                                 "Could not read an HR array");<br>
<br>
@@ -178,3 +180,20 @@ Error PublicsStream::reload() {<br>
                                 "Corrupted publics stream.");<br>
   return Error::success();<br>
 }<br>
+<br>
+std::vector<std::string> PublicsStream::getSymbols() const {<br>
+  auto SymbolS = Pdb.getPDBSymbolStream();<br>
+  if (SymbolS.takeError())<br>
+    return {};<br>
+  SymbolStream &SS = SymbolS.get();<br>
+<br>
+  std::vector<std::string> Ret;<br>
+  for (const HashRecord &HR : HashRecords) {<br>
+    // For some reason, symbol offset is biased by one.<br>
+    Expected<std::string> Name = SS.getSymbolName(HR.Off - 1);<br>
+    if (Name.takeError())<br>
+      return Ret;<br>
+    Ret.push_back(std::move(Name.get()));<br>
+  }<br>
+  return Ret;<br>
+}<br>
<br>
Added: llvm/trunk/lib/DebugInfo/PDB/Raw/SymbolStream.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/SymbolStream.cpp?rev=270262&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/SymbolStream.cpp?rev=270262&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/PDB/Raw/SymbolStream.cpp (added)<br>
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/SymbolStream.cpp Fri May 20 14:55:17 2016<br>
@@ -0,0 +1,85 @@<br>
+//===- SymbolStream.cpp - PDB Symbol Stream Access ------------------------===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#include "llvm/DebugInfo/PDB/Raw/SymbolStream.h"<br>
+<br>
+#include "llvm/DebugInfo/CodeView/CodeView.h"<br>
+#include "llvm/DebugInfo/CodeView/TypeRecord.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/RawError.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"<br>
+<br>
+#include "llvm/Support/Endian.h"<br>
+<br>
+using namespace llvm;<br>
+using namespace llvm::support;<br>
+using namespace llvm::pdb;<br>
+<br>
+// Symbol stream is an array of symbol records. Each record starts with<br>
+// length and type fields followed by type-specfic fields.<br>
+namespace {<br>
+struct SymbolHeader {<br>
+  ulittle16_t Len; // Record length<br>
+  ulittle16_t Type;<br>
+};<br>
+<br>
+// For S_PUB32 symbol type.<br>
+struct DataSym32 {<br>
+  ulittle32_t TypIndex; // Type index, or Metadata token if a managed symbol<br>
+  ulittle32_t off;<br>
+  ulittle16_t seg;<br>
+  char name[1];<br>
+};<br>
+<br>
+// For S_PROCREF symbol type.<br>
+struct RefSym {<br>
+  ulittle32_t SumName;   // SUC of the name (?)<br>
+  ulittle32_t SymOffset; // Offset of actual symbol in $$Symbols<br>
+  ulittle16_t Mod;       // Module containing the actual symbol<br>
+  char name[1];<br>
+};<br>
+}<br>
+<br>
+SymbolStream::SymbolStream(PDBFile &File, uint32_t StreamNum)<br>
+    : Stream(StreamNum, File) {}<br>
+<br>
+SymbolStream::~SymbolStream() {}<br>
+<br>
+Error SymbolStream::reload() { return Error::success(); }<br>
+<br>
+static StringRef makeStringRef(char *p) { return {p, strlen(p)}; }<br>
+<br>
+Expected<std::string> SymbolStream::getSymbolName(uint32_t Off) const {<br>
+  StreamReader Reader(Stream);<br>
+  Reader.setOffset(Off);<br>
+<br>
+  // Read length field.<br>
+  SymbolHeader Hdr;<br>
+  if (Reader.readObject(&Hdr))<br>
+    return make_error<RawError>(raw_error_code::corrupt_file,<br>
+                                "Corrupted symbol stream.");<br>
+<br>
+  // Read the entire record.<br>
+  std::vector<uint8_t> Buf(Hdr.Len - sizeof(Hdr.Type));<br>
+  if (Reader.readBytes(Buf))<br>
+    return make_error<RawError>(raw_error_code::corrupt_file,<br>
+                                "Corrupted symbol stream.");<br>
+<br>
+  switch (Hdr.Type) {<br>
+  case codeview::S_PUB32:<br>
+    return makeStringRef(reinterpret_cast<DataSym32 *>(Buf.data())->name);<br>
+  case codeview::S_PROCREF:<br>
+    return makeStringRef(reinterpret_cast<RefSym *>(Buf.data())->name);<br>
+  default:<br>
+    return make_error<RawError>(raw_error_code::corrupt_file,<br>
+                                "Unknown symbol type");<br>
+  }<br>
+  return Error::success();<br>
+}<br>
<br>
Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=270262&r1=270261&r2=270262&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=270262&r1=270261&r2=270262&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)<br>
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Fri May 20 14:55:17 2016<br>
@@ -317,6 +317,7 @@<br>
 ; EMPTY-NEXT:   Address Map: [36, 0]<br>
 ; EMPTY-NEXT:   Thunk Map: [4112]<br>
 ; EMPTY-NEXT:   Section Offsets: [4096, 1]<br>
+; EMPTY-NEXT:   Symbols: [?__purecall@@3PAXA, _main]<br>
 ; EMPTY-NEXT: }<br>
<br>
 ; BIG:      FileHeaders {<br>
<br>
Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=270262&r1=270261&r2=270262&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=270262&r1=270261&r2=270262&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)<br>
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Fri May 20 14:55:17 2016<br>
@@ -415,6 +415,7 @@ static Error dumpPublicsStream(ScopedPri<br>
   P.printList("Address Map", Publics.getAddressMap());<br>
   P.printList("Thunk Map", Publics.getThunkMap());<br>
   P.printList("Section Offsets", Publics.getSectionOffsets());<br>
+  P.printList("Symbols", Publics.getSymbols());<br>
   return Error::success();<br>
 }<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>