]> granicus.if.org Git - llvm/commit
[PDB] Use two DBs when dumping the IPI stream
authorReid Kleckner <rnk@google.com>
Thu, 23 Mar 2017 21:36:25 +0000 (21:36 +0000)
committerReid Kleckner <rnk@google.com>
Thu, 23 Mar 2017 21:36:25 +0000 (21:36 +0000)
commit8e0e0731b185fc9d50eb58036a70f082daa707be
tree455932668f75d1bf91875f9ba0444280ba20684d
parent20547eda74d0007c08c5305bd703050e9f401fdb
[PDB] Use two DBs when dumping the IPI stream

Summary:
When dumping these records from an object file section, we should use
only one type database. However, when dumping from a PDB, we should use
two: one for the type stream and one for the IPI stream.

Certain type records that normally live in the .debug$T object file
section get moved over to the IPI stream of the PDB file and they get
new indices.

So far, I've noticed that the MSVC linker always moves these records
into IPI:
- LF_FUNC_ID
- LF_MFUNC_ID
- LF_STRING_ID
- LF_SUBSTR_LIST
- LF_BUILDINFO
- LF_UDT_MOD_SRC_LINE

These records have index fields that can point into TPI or IPI. In
particular, LF_SUBSTR_LIST and LF_BUILDINFO point to LF_STRING_ID
records to describe compilation command lines.

I've modified the dumper to have an optional pointer to the item DB, and
to do type name lookup of these fields in that DB. See printItemIndex.
The result is that our pdbdump-headers.test is more faithful to the PDB
contents and the output is less confusing.

Reviewers: ruiu

Subscribers: amccarth, zturner, llvm-commits

Differential Revision: https://reviews.llvm.org/D31309

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298649 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/DebugInfo/CodeView/TypeDumpVisitor.h
lib/DebugInfo/CodeView/TypeDumpVisitor.cpp
test/DebugInfo/PDB/pdbdump-headers.test
tools/llvm-pdbdump/LLVMOutputStyle.cpp
tools/llvm-pdbdump/LLVMOutputStyle.h