[llvm] r270669 - [llvm-pdbdump] Decipher the remaining PDB streams.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Wed May 25 07:58:27 PDT 2016


On Tue, May 24, 2016 at 10:49 PM, Zachary Turner via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: zturner
> Date: Wed May 25 00:49:48 2016
> New Revision: 270669
>
> URL: http://llvm.org/viewvc/llvm-project?rev=270669&view=rev
> Log:
> [llvm-pdbdump] Decipher the remaining PDB streams.
>
> We know at least know the meaning of every stream of the
> PDB file.  Yay!
>

Nice! \o/


>
> Modified:
>     llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStream.h
>     llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawConstants.h
>     llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStream.cpp
>     llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
>     llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
>
> Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStream.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStream.h?rev=270669&r1=270668&r2=270669&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStream.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStream.h Wed May 25
> 00:49:48 2016
> @@ -51,6 +51,8 @@ public:
>
>    ArrayRef<ModuleInfoEx> modules() const;
>
> +  uint32_t getDebugStreamIndex(DbgHeaderType Type) const;
> +
>  private:
>    Error initializeFileInfo();
>
>
> Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawConstants.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawConstants.h?rev=270669&r1=270668&r2=270669&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawConstants.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawConstants.h Wed May 25
> 00:49:48 2016
> @@ -51,6 +51,21 @@ enum SpecialStream : uint32_t {
>    StreamIPI = 4,
>  };
>
> +enum class DbgHeaderType : uint16_t {
> +  FPO,
> +  Exception,
> +  Fixup,
> +  OmapToSrc,
> +  OmapFromSrc,
> +  SectionHdr,
> +  TokenRidMap,
> +  Xdata,
> +  Pdata,
> +  NewFPO,
> +  SectionHdrOrig,
> +  Max
> +};
> +
>  } // end namespace pdb
>  } // end namespace llvm
>
>
> Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStream.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStream.cpp?rev=270669&r1=270668&r2=270669&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStream.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStream.cpp Wed May 25 00:49:48 2016
> @@ -302,3 +302,15 @@ Error DbiStream::initializeFileInfo() {
>
>    return Error::success();
>  }
> +
> +uint32_t DbiStream::getDebugStreamIndex(DbgHeaderType Type) const {
> +  ArrayRef<uint8_t> DbgData;
> +  if (auto EC = DbgHeader.getArrayRef(0, DbgData, DbgHeader.getLength()))
> {
> +    consumeError(std::move(EC));
> +    return uint32_t(-1);
> +  }
> +  ArrayRef<ulittle16_t> DebugStreams(
> +      reinterpret_cast<const ulittle16_t *>(DbgData.data()),
> +      DbgData.size() / sizeof(ulittle16_t));
> +  return DebugStreams[static_cast<uint16_t>(Type)];
> +}
>
> Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=270669&r1=270668&r2=270669&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)
> +++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Wed May 25 00:49:48
> 2016
> @@ -29,8 +29,8 @@
>  ; EMPTY-NEXT:   Stream 7: [Public Symbol Hash] (604 bytes)
>  ; EMPTY-NEXT:   Stream 8: [Public Symbol Records] (104 bytes)
>  ; EMPTY-NEXT:   Stream 9: [Named Stream "/src/headerblock"] (0 bytes)
> -; EMPTY-NEXT:   Stream 10: [???] (160 bytes)
> -; EMPTY-NEXT:   Stream 11: [???] (32 bytes)
> +; EMPTY-NEXT:   Stream 10: [Section Header Data] (160 bytes)
> +; EMPTY-NEXT:   Stream 11: [New FPO Data] (32 bytes)
>  ; EMPTY-NEXT:   Stream 12: [Module
> "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes)
>  ; EMPTY-NEXT:   Stream 13: [Named Stream "/names"] (239 bytes)
>  ; EMPTY-NEXT:   Stream 14: [Module "* Linker *"] (520 bytes)
>
> Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=270669&r1=270668&r2=270669&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)
> +++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Wed May 25 00:49:48 2016
> @@ -272,6 +272,28 @@ static Error dumpStreamSummary(ScopedPri
>        Value = "IPI Hash";
>      else if (StreamIdx == TIS.getTypeHashStreamAuxIndex())
>        Value = "IPI Aux Hash";
> +    else if (StreamIdx ==
> DS.getDebugStreamIndex(DbgHeaderType::Exception))
> +      Value = "Exception Data";
> +    else if (StreamIdx == DS.getDebugStreamIndex(DbgHeaderType::Fixup))
> +      Value = "Fixup Data";
> +    else if (StreamIdx == DS.getDebugStreamIndex(DbgHeaderType::FPO))
> +      Value = "FPO Data";
> +    else if (StreamIdx == DS.getDebugStreamIndex(DbgHeaderType::NewFPO))
> +      Value = "New FPO Data";
> +    else if (StreamIdx ==
> DS.getDebugStreamIndex(DbgHeaderType::OmapFromSrc))
> +      Value = "Omap From Source Data";
> +    else if (StreamIdx ==
> DS.getDebugStreamIndex(DbgHeaderType::OmapToSrc))
> +      Value = "Omap To Source Data";
> +    else if (StreamIdx == DS.getDebugStreamIndex(DbgHeaderType::Pdata))
> +      Value = "Pdata";
> +    else if (StreamIdx ==
> DS.getDebugStreamIndex(DbgHeaderType::SectionHdr))
> +      Value = "Section Header Data";
> +    else if (StreamIdx ==
> DS.getDebugStreamIndex(DbgHeaderType::SectionHdrOrig))
> +      Value = "Section Header Original Data";
> +    else if (StreamIdx ==
> DS.getDebugStreamIndex(DbgHeaderType::TokenRidMap))
> +      Value = "Token Rid Data";
> +    else if (StreamIdx == DS.getDebugStreamIndex(DbgHeaderType::Xdata))
> +      Value = "Xdata";
>      else {
>        auto ModIter = ModStreams.find(StreamIdx);
>        auto NSIter = NamedStreams.find(StreamIdx);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160525/ad682ae0/attachment.html>


More information about the llvm-commits mailing list