1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

COFF: PDB: Allow multiple modules with the same name.

It is possible for two modules to have the same name if they are
archive members with the same name, or if we are doing LTO (in which
case all modules will have the name "lto.tmp").

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

llvm-svn: 312744
This commit is contained in:
Peter Collingbourne 2017-09-07 20:39:46 +00:00
parent 573d7ff23a
commit 8cd9088e66
3 changed files with 5 additions and 22 deletions

View File

@ -64,7 +64,6 @@ public:
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 @@ private:
const DbiStreamHeader *Header;
StringMap<std::unique_ptr<DbiModuleDescriptorBuilder>> ModiMap;
std::vector<DbiModuleDescriptorBuilder *> ModiList;
std::vector<std::unique_ptr<DbiModuleDescriptorBuilder>> ModiList;
StringMap<uint32_t> SourceFileNames;

View File

@ -90,24 +90,9 @@ uint32_t DbiStreamBuilder::calculateSerializedLength() const {
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,

View File

@ -704,7 +704,7 @@ static void yamlToPdb(StringRef Path) {
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) {