mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-25 04:35:32 -04:00
Resubmit "Support embedding natvis files in PDBs."
The issue causing this to fail in certain configurations should be fixed. It was due to the fact that DIA apparently expects there to be a null string at ID 1 in the string table. I'm not sure why this is important but it seems to make a difference, so set it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328002 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -46,12 +46,15 @@ DebugStringTableSubsection::DebugStringTableSubsection()
|
||||
: DebugSubsection(DebugSubsectionKind::StringTable) {}
|
||||
|
||||
uint32_t DebugStringTableSubsection::insert(StringRef S) {
|
||||
auto P = Strings.insert({S, StringSize});
|
||||
auto P = StringToId.insert({S, StringSize});
|
||||
|
||||
// If a given string didn't exist in the string table, we want to increment
|
||||
// the string table size.
|
||||
if (P.second)
|
||||
// the string table size and insert it into the reverse lookup.
|
||||
if (P.second) {
|
||||
IdToString.insert({P.first->getValue(), P.first->getKey()});
|
||||
StringSize += S.size() + 1; // +1 for '\0'
|
||||
}
|
||||
|
||||
return P.first->second;
|
||||
}
|
||||
|
||||
@@ -67,7 +70,7 @@ Error DebugStringTableSubsection::commit(BinaryStreamWriter &Writer) const {
|
||||
if (auto EC = Writer.writeCString(StringRef()))
|
||||
return EC;
|
||||
|
||||
for (auto &Pair : Strings) {
|
||||
for (auto &Pair : StringToId) {
|
||||
StringRef S = Pair.getKey();
|
||||
uint32_t Offset = Begin + Pair.getValue();
|
||||
Writer.setOffset(Offset);
|
||||
@@ -81,10 +84,16 @@ Error DebugStringTableSubsection::commit(BinaryStreamWriter &Writer) const {
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
uint32_t DebugStringTableSubsection::size() const { return Strings.size(); }
|
||||
uint32_t DebugStringTableSubsection::size() const { return StringToId.size(); }
|
||||
|
||||
uint32_t DebugStringTableSubsection::getStringId(StringRef S) const {
|
||||
auto Iter = Strings.find(S);
|
||||
assert(Iter != Strings.end());
|
||||
uint32_t DebugStringTableSubsection::getIdForString(StringRef S) const {
|
||||
auto Iter = StringToId.find(S);
|
||||
assert(Iter != StringToId.end());
|
||||
return Iter->second;
|
||||
}
|
||||
|
||||
StringRef DebugStringTableSubsection::getStringForId(uint32_t Id) const {
|
||||
auto Iter = IdToString.find(Id);
|
||||
assert(Iter != IdToString.end());
|
||||
return Iter->second;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user