Example #1
0
static void dumpNamedStream(ScopedPrinter &P, PDBFile &File, StringRef Stream) {
  InfoStream &IS = File.getPDBInfoStream();
  uint32_t NameStreamIndex = IS.getNamedStreamIndex(Stream);

  if (NameStreamIndex != 0) {
    std::string Name("Stream '");
    Name += Stream;
    Name += "'";
    DictScope D(P, Name);
    P.printNumber("Index", NameStreamIndex);

    MappedBlockStream NameStream(NameStreamIndex, File);
    StreamReader Reader(NameStream);

    NameHashTable NameTable;
    NameTable.load(Reader);
    P.printHex("Signature", NameTable.getSignature());
    P.printNumber("Version", NameTable.getHashVersion());
    P.printNumber("Name Count", NameTable.getNameCount());
    ListScope L(P, "Names");
    for (uint32_t ID : NameTable.name_ids()) {
      StringRef Str = NameTable.getStringForID(ID);
      if (!Str.empty())
        P.printString(Str);
    }
  }
}
Example #2
0
Error LLVMOutputStyle::dumpNamedStream() {
  if (opts::raw::DumpStreamDataName.empty())
    return Error::success();

  auto IS = File.getPDBInfoStream();
  if (!IS)
    return IS.takeError();

  uint32_t NameStreamIndex =
      IS->getNamedStreamIndex(opts::raw::DumpStreamDataName);
  if (NameStreamIndex == 0 || NameStreamIndex >= File.getNumStreams())
    return make_error<RawError>(raw_error_code::no_stream);

  if (NameStreamIndex != 0) {
    std::string Name("Stream '");
    Name += opts::raw::DumpStreamDataName;
    Name += "'";
    DictScope D(P, Name);
    P.printNumber("Index", NameStreamIndex);

    auto NameStream =
        MappedBlockStream::createIndexedStream(NameStreamIndex, File);
    if (!NameStream)
      return NameStream.takeError();
    codeview::StreamReader Reader(**NameStream);

    NameHashTable NameTable;
    if (auto EC = NameTable.load(Reader))
      return EC;

    P.printHex("Signature", NameTable.getSignature());
    P.printNumber("Version", NameTable.getHashVersion());
    P.printNumber("Name Count", NameTable.getNameCount());
    ListScope L(P, "Names");
    for (uint32_t ID : NameTable.name_ids()) {
      StringRef Str = NameTable.getStringForID(ID);
      if (!Str.empty())
        P.printString(to_string(ID), Str);
    }
  }
  return Error::success();
}