diff options
-rw-r--r-- | lld/COFF/PDB.cpp | 12 | ||||
-rw-r--r-- | llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/DebugInfo/PDB/Native/DbiStream.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h | 4 | ||||
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Native/DbiStream.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp | 12 | ||||
-rw-r--r-- | llvm/test/DebugInfo/PDB/pdbdump-headers.test | 50 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp | 7 |
9 files changed, 94 insertions, 5 deletions
diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index 85d5678ef1a..d2cccef6674 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -411,6 +411,10 @@ void coff::createPDB(StringRef Path, SymbolTable *Symtab, auto &InfoBuilder = Builder.getInfoBuilder(); InfoBuilder.setAge(DI ? DI->PDB70.Age : 0); + llvm::SmallString<128> NativePath(Path.begin(), Path.end()); + llvm::sys::fs::make_absolute(NativePath); + llvm::sys::path::native(NativePath); + pdb::PDB_UniqueId uuid{}; if (DI) memcpy(&uuid, &DI->PDB70.Signature, sizeof(uuid)); @@ -419,10 +423,13 @@ void coff::createPDB(StringRef Path, SymbolTable *Symtab, InfoBuilder.setSignature(0); InfoBuilder.setVersion(pdb::PdbRaw_ImplVer::PdbImplVC70); - // Add an empty DPI stream. + // Add an empty DBI stream. pdb::DbiStreamBuilder &DbiBuilder = Builder.getDbiBuilder(); DbiBuilder.setVersionHeader(pdb::PdbDbiV110); + // It's not entirely clear what this is, but the * Linker * module uses it. + uint32_t PdbFilePathNI = DbiBuilder.addECName(NativePath); + TypeTableBuilder TypeTable(BAlloc); TypeTableBuilder IDTable(BAlloc); addObjectsToPDB(Alloc, Symtab, Builder, TypeTable, IDTable); @@ -438,7 +445,8 @@ void coff::createPDB(StringRef Path, SymbolTable *Symtab, pdb::DbiStreamBuilder::createSectionMap(Sections); DbiBuilder.setSectionMap(SectionMap); - ExitOnErr(DbiBuilder.addModuleInfo("* Linker *")); + auto &LinkerModule = ExitOnErr(DbiBuilder.addModuleInfo("* Linker *")); + LinkerModule.setPdbFilePathNI(PdbFilePathNI); // Add COFF section header stream. ExitOnErr( diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h b/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h index 64b195034f5..c918a5d5e97 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h @@ -47,6 +47,7 @@ public: DbiModuleDescriptorBuilder & operator=(const DbiModuleDescriptorBuilder &) = delete; + void setPdbFilePathNI(uint32_t NI); void setObjFileName(StringRef Name); void addSymbol(codeview::CVSymbol Symbol); @@ -85,6 +86,7 @@ private: msf::MSFBuilder &MSF; uint32_t SymbolByteSize = 0; + uint32_t PdbFilePathNI = 0; std::string ModuleName; std::string ObjFileName; std::vector<std::string> SourceFiles; diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/DbiStream.h b/llvm/include/llvm/DebugInfo/PDB/Native/DbiStream.h index 3bf79072665..4be113f28d6 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/DbiStream.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/DbiStream.h @@ -83,6 +83,8 @@ public: FixedStreamArray<SecMapEntry> getSectionMap() const; void visitSectionContributions(ISectionContribVisitor &Visitor) const; + Expected<StringRef> getECName(uint32_t NI) const; + private: Error initializeSectionContributionData(); Error initializeSectionHeadersData(); diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h b/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h index 74441185418..7d11cf3d6bb 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h @@ -15,6 +15,7 @@ #include "llvm/Support/Error.h" #include "llvm/DebugInfo/PDB/Native/PDBFile.h" +#include "llvm/DebugInfo/PDB/Native/PDBStringTableBuilder.h" #include "llvm/DebugInfo/PDB/Native/RawConstants.h" #include "llvm/DebugInfo/PDB/PDBTypes.h" #include "llvm/Support/BinaryByteStream.h" @@ -54,6 +55,8 @@ public: // Add given bytes as a new stream. Error addDbgStream(pdb::DbgHeaderType Type, ArrayRef<uint8_t> Data); + uint32_t addECName(StringRef Name); + uint32_t calculateSerializedLength() const; Expected<DbiModuleDescriptorBuilder &> addModuleInfo(StringRef ModuleName); @@ -108,6 +111,7 @@ private: StringMap<uint32_t> SourceFileNames; + PDBStringTableBuilder ECNamesBuilder; WritableBinaryStreamRef NamesBuffer; MutableBinaryByteStream FileInfoBuffer; std::vector<SectionContrib> SectionContribs; diff --git a/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp b/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp index 745dd742aad..897f78c5103 100644 --- a/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp +++ b/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp @@ -65,6 +65,10 @@ void DbiModuleDescriptorBuilder::setObjFileName(StringRef Name) { ObjFileName = Name; } +void DbiModuleDescriptorBuilder::setPdbFilePathNI(uint32_t NI) { + PdbFilePathNI = NI; +} + void DbiModuleDescriptorBuilder::addSymbol(CVSymbol Symbol) { Symbols.push_back(Symbol); // Symbols written to a PDB file are required to be 4 byte aligned. The same @@ -111,7 +115,7 @@ void DbiModuleDescriptorBuilder::finalize() { (void)Layout.Mod; // Set in constructor (void)Layout.ModDiStream; // Set in finalizeMsfLayout Layout.NumFiles = SourceFiles.size(); - Layout.PdbFilePathNI = 0; + Layout.PdbFilePathNI = PdbFilePathNI; Layout.SrcFileNameNI = 0; // This value includes both the signature field as well as the record bytes diff --git a/llvm/lib/DebugInfo/PDB/Native/DbiStream.cpp b/llvm/lib/DebugInfo/PDB/Native/DbiStream.cpp index a1f0671dec3..78cf2c551c2 100644 --- a/llvm/lib/DebugInfo/PDB/Native/DbiStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Native/DbiStream.cpp @@ -225,6 +225,10 @@ void DbiStream::visitSectionContributions( } } +Expected<StringRef> DbiStream::getECName(uint32_t NI) const { + return ECNames.getStringForID(NI); +} + Error DbiStream::initializeSectionContributionData() { if (SecContrSubstream.empty()) return Error::success(); diff --git a/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp b/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp index aad247ea185..2993f788434 100644 --- a/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp +++ b/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp @@ -63,11 +63,16 @@ Error DbiStreamBuilder::addDbgStream(pdb::DbgHeaderType Type, return Error::success(); } +uint32_t DbiStreamBuilder::addECName(StringRef Name) { + return ECNamesBuilder.insert(Name); +} + uint32_t DbiStreamBuilder::calculateSerializedLength() const { // For now we only support serializing the header. return sizeof(DbiStreamHeader) + calculateFileInfoSubstreamSize() + calculateModiSubstreamSize() + calculateSectionContribsStreamSize() + - calculateSectionMapStreamSize() + calculateDbgStreamsSize(); + calculateSectionMapStreamSize() + calculateDbgStreamsSize() + + ECNamesBuilder.calculateSerializedSize(); } Expected<DbiModuleDescriptorBuilder &> @@ -247,7 +252,7 @@ Error DbiStreamBuilder::finalize() { H->PdbDllVersion = PdbDllVersion; H->MachineType = static_cast<uint16_t>(MachineType); - H->ECSubstreamSize = 0; + H->ECSubstreamSize = ECNamesBuilder.calculateSerializedSize(); H->FileInfoSize = FileInfoBuffer.getLength(); H->ModiSubstreamSize = calculateModiSubstreamSize(); H->OptionalDbgHdrSize = DbgStreams.size() * sizeof(uint16_t); @@ -383,6 +388,9 @@ Error DbiStreamBuilder::commit(const msf::MSFLayout &Layout, if (auto EC = Writer.writeStreamRef(FileInfoBuffer)) return EC; + if (auto EC = ECNamesBuilder.commit(Writer)) + return EC; + for (auto &Stream : DbgStreams) if (auto EC = Writer.writeInteger(Stream.StreamNumber)) return EC; diff --git a/llvm/test/DebugInfo/PDB/pdbdump-headers.test b/llvm/test/DebugInfo/PDB/pdbdump-headers.test index c3eb9bdb8b7..1887af2e826 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-headers.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-headers.test @@ -67,9 +67,11 @@ ALL-NEXT: ============================================================ ALL-NEXT: Mod 0000 | Name: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: ALL-NEXT: Obj: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: ALL-NEXT: debug stream: 12, # files: 1, has ec info: false +ALL-NEXT: pdb file ni: 0 ``, src file ni: 0 `` ALL-NEXT: Mod 0001 | Name: `* Linker *`: ALL-NEXT: Obj: ``: ALL-NEXT: debug stream: 14, # files: 0, has ec info: false +ALL-NEXT: pdb file ni: 1 `{{.*empty.pdb}}`, src file ni: 0 `` ALL: Files ALL-NEXT: ============================================================ ALL-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: @@ -568,147 +570,195 @@ BIG-NEXT: ============================================================ BIG-NEXT: Mod 0000 | Name: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: BIG-NEXT: Obj: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: BIG-NEXT: debug stream: 12, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0001 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_cpu_disp_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 14, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0002 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_initsect_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 15, # files: 19, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0003 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_sehprolg4_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 16, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 1 `f:\dd\vctools\crt\vcstartup\src\eh\i386\sehprolg4.asm` BIG-NEXT: Mod 0004 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_chandler4gs_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 17, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0005 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_secchk_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 18, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0006 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_cookie.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 19, # files: 9, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0007 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_report.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 20, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0008 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_support.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 21, # files: 10, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0009 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\checkcfg.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 22, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0010 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\guard_support.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 23, # files: 10, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0011 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\loadcfg.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 24, # files: 9, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0012 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_dtor.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 25, # files: 11, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0013 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_init.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 26, # files: 10, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0014 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr_detection.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 27, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0015 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_detection.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 28, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0016 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\argv_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 29, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0017 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\commit_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 30, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0018 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_local_stdio_options.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 31, # files: 24, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0019 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\denormal_control.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 32, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0020 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\env_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 33, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0021 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\file_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 34, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0022 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\invalid_parameter_handler.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 35, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0023 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 36, # files: 2, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0024 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\new_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 37, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0025 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\thread_locale.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 38, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0026 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\tncleanup.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 39, # files: 21, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0027 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\exe_main.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 40, # files: 26, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0028 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\initializers.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 41, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0029 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 42, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0030 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_stubs.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 43, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0031 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility_desktop.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 44, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0032 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_precision.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 45, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0033 | Name: `Import:KERNEL32.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`: BIG-NEXT: debug stream: 47, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0034 | Name: `KERNEL32.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`: BIG-NEXT: debug stream: 46, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0035 | Name: `Import:VCRUNTIME140.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`: BIG-NEXT: debug stream: 49, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0036 | Name: `VCRUNTIME140.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`: BIG-NEXT: debug stream: 48, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0037 | Name: `Import:api-ms-win-crt-stdio-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 59, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0038 | Name: `api-ms-win-crt-stdio-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 58, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0039 | Name: `Import:api-ms-win-crt-runtime-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 57, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0040 | Name: `api-ms-win-crt-runtime-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 56, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0041 | Name: `Import:api-ms-win-crt-math-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 55, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0042 | Name: `api-ms-win-crt-math-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 54, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0043 | Name: `Import:api-ms-win-crt-locale-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 53, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0044 | Name: `api-ms-win-crt-locale-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 52, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0045 | Name: `Import:api-ms-win-crt-heap-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 51, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0046 | Name: `api-ms-win-crt-heap-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 50, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0047 | Name: `* Linker *`: BIG-NEXT: Obj: ``: BIG-NEXT: debug stream: 60, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 55 `{{.*test.pdb}}`, src file ni: 0 `` BIG: Files BIG-NEXT: ============================================================ BIG-NEXT: Mod 0000 | `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: diff --git a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp index a1f919b4dd0..0642d841fd9 100644 --- a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -418,6 +418,13 @@ Error DumpOutputStyle::dumpModules() { P.formatLine(" debug stream: {0}, # files: {1}, has ec info: {2}", Modi.getModuleStreamIndex(), Modi.getNumberOfFiles(), Modi.hasECInfo()); + StringRef PdbFilePath = + Err(Stream.getECName(Modi.getPdbFilePathNameIndex())); + StringRef SrcFilePath = + Err(Stream.getECName(Modi.getSourceFileNameIndex())); + P.formatLine(" pdb file ni: {0} `{1}`, src file ni: {2} `{3}`", + Modi.getPdbFilePathNameIndex(), PdbFilePath, + Modi.getSourceFileNameIndex(), SrcFilePath); } return Error::success(); } |