[PATCH] D37589: COFF: PDB: Allow multiple modules with the same name.

Peter Collingbourne via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 7 13:41:12 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL312744: COFF: PDB: Allow multiple modules with the same name. (authored by pcc).

Changed prior to commit:
  https://reviews.llvm.org/D37589?vs=114246&id=114250#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D37589

Files:
  lld/trunk/test/COFF/pdb-same-name.test
  llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
  llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp
  llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp


Index: lld/trunk/test/COFF/pdb-same-name.test
===================================================================
--- lld/trunk/test/COFF/pdb-same-name.test
+++ lld/trunk/test/COFF/pdb-same-name.test
@@ -0,0 +1,23 @@
+# RUN: rm -rf %t1 %t2
+# RUN: mkdir %t1 %t2
+# RUN: yaml2obj < %p/Inputs/pdb1.yaml > %t1/foo.obj
+# RUN: llvm-ar cru %t1/foo.lib %t1/foo.obj
+# RUN: yaml2obj < %p/Inputs/pdb2.yaml > %t2/foo.obj
+# RUN: llvm-ar cru %t2/foo.lib %t2/foo.obj
+
+# RUN: rm -f %t.dll %t.pdb
+# RUN: lld-link /debug /pdb:%t.pdb /dll /out:%t.dll /entry:main /nodefaultlib \
+# RUN:   %t1/foo.lib %t2/foo.lib
+
+# RUN: llvm-pdbutil dump -modules %t.pdb | FileCheck -check-prefix RAW %s
+
+RAW:                               Modules
+RAW-NEXT: ============================================================
+RAW-NEXT:   Mod 0000 | `foo.obj`:
+RAW-NEXT:              Obj: `{{.*}}1\foo.lib`:
+RAW-NEXT:              debug stream: 9, # files: 1, has ec info: false
+RAW-NEXT:              pdb file ni: 0 ``, src file ni: 0 ``
+RAW-NEXT:   Mod 0001 | `foo.obj`:
+RAW-NEXT:              Obj: `{{.*}}2\foo.lib`:
+RAW-NEXT:              debug stream: 10, # files: 1, has ec info: false
+RAW-NEXT:              pdb file ni: 0 ``, src file ni: 0 ``
Index: llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp
===================================================================
--- llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp
+++ llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp
@@ -90,24 +90,9 @@
 Expected<DbiModuleDescriptorBuilder &>
 DbiStreamBuilder::addModuleInfo(StringRef ModuleName) {
   uint32_t Index = ModiList.size();
-  auto MIB =
-      llvm::make_unique<DbiModuleDescriptorBuilder>(ModuleName, Index, Msf);
-  auto M = MIB.get();
-  auto Result = ModiMap.insert(std::make_pair(ModuleName, std::move(MIB)));
-
-  if (!Result.second)
-    return make_error<RawError>(raw_error_code::duplicate_entry,
-                                "The specified module already exists");
-  ModiList.push_back(M);
-  return *M;
-}
-
-Error DbiStreamBuilder::addModuleSourceFile(StringRef Module, StringRef File) {
-  auto ModIter = ModiMap.find(Module);
-  if (ModIter == ModiMap.end())
-    return make_error<RawError>(raw_error_code::no_entry,
-                                "The specified module was not found");
-  return addModuleSourceFile(*ModIter->second, File);
+  ModiList.push_back(
+      llvm::make_unique<DbiModuleDescriptorBuilder>(ModuleName, Index, Msf));
+  return *ModiList.back();
 }
 
 Error DbiStreamBuilder::addModuleSourceFile(DbiModuleDescriptorBuilder &Module,
Index: llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp
===================================================================
--- llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp
+++ llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp
@@ -704,7 +704,7 @@
     ModiBuilder.setObjFileName(MI.Obj);
 
     for (auto S : MI.SourceFiles)
-      ExitOnErr(DbiBuilder.addModuleSourceFile(MI.Mod, S));
+      ExitOnErr(DbiBuilder.addModuleSourceFile(ModiBuilder, S));
     if (MI.Modi.hasValue()) {
       const auto &ModiStream = *MI.Modi;
       for (auto Symbol : ModiStream.Symbols) {
Index: llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
===================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
@@ -64,7 +64,6 @@
   void setSymbolRecordStreamIndex(uint32_t Index);
 
   Expected<DbiModuleDescriptorBuilder &> addModuleInfo(StringRef ModuleName);
-  Error addModuleSourceFile(StringRef Module, StringRef File);
   Error addModuleSourceFile(DbiModuleDescriptorBuilder &Module, StringRef File);
   Expected<uint32_t> getSourceFileNameIndex(StringRef FileName);
 
@@ -113,8 +112,7 @@
 
   const DbiStreamHeader *Header;
 
-  StringMap<std::unique_ptr<DbiModuleDescriptorBuilder>> ModiMap;
-  std::vector<DbiModuleDescriptorBuilder *> ModiList;
+  std::vector<std::unique_ptr<DbiModuleDescriptorBuilder>> ModiList;
 
   StringMap<uint32_t> SourceFileNames;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37589.114250.patch
Type: text/x-patch
Size: 4097 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170907/70a65c55/attachment.bin>


More information about the llvm-commits mailing list