diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2025-06-24 17:55:48 -0400 |
|---|---|---|
| committer | Alexander Taylor <alex@vector35.com> | 2025-06-25 18:36:47 -0400 |
| commit | c41f264a1dba68c89b4a224a70e3a5783f7fa879 (patch) | |
| tree | 00bb6e91d86b708bff7265ed7179a6ef2793b7fb /plugins/rtti | |
| parent | b1a7666164a000c5255f90568ed9597b58ce276a (diff) | |
Remove implicit conversions from Confidence to underlying type, these can cause bugs and also issues with C++20
Diffstat (limited to 'plugins/rtti')
| -rw-r--r-- | plugins/rtti/itanium.cpp | 25 | ||||
| -rw-r--r-- | plugins/rtti/microsoft.cpp | 21 |
2 files changed, 22 insertions, 24 deletions
diff --git a/plugins/rtti/itanium.cpp b/plugins/rtti/itanium.cpp index bd031f6a..b8320ec8 100644 --- a/plugins/rtti/itanium.cpp +++ b/plugins/rtti/itanium.cpp @@ -691,20 +691,19 @@ std::optional<VirtualFunctionTableInfo> ItaniumRTTIProcessor::ProcessVFT(uint64_ Type::PointerType(addrSize, vFuncType, true), vFuncName, vFuncOffset); vFuncIdx++; } - m_view->DefineType(typeId, vftTypeName, - Confidence(TypeBuilder::StructureType(vftBuilder.Finalize()).Finalize(), RTTI_CONFIDENCE)); - } + m_view->DefineType(typeId, vftTypeName, TypeBuilder::StructureType(vftBuilder.Finalize()).Finalize()); + } - auto vftName = fmt::format("_vtable_for_{}", classInfo.className); - // TODO: How to display base classes? - if (baseClassInfo.has_value()) - vftName += fmt::format("{{for `{}'}}", baseClassInfo->className); - auto vftSymbol = m_view->GetSymbolByAddress(vftAddr); - if (vftSymbol != nullptr) - m_view->UndefineAutoSymbol(vftSymbol); - m_view->DefineAutoSymbol(new Symbol{DataSymbol, vftName, vftAddr}); - m_view->DefineDataVariable(vftAddr, Confidence(Type::NamedType(m_view, vftTypeName), RTTI_CONFIDENCE)); - return vftInfo; + auto vftName = fmt::format("_vtable_for_{}", classInfo.className); + // TODO: How to display base classes? + if (baseClassInfo.has_value()) + vftName += fmt::format("{{for `{}'}}", baseClassInfo->className); + auto vftSymbol = m_view->GetSymbolByAddress(vftAddr); + if (vftSymbol != nullptr) + m_view->UndefineAutoSymbol(vftSymbol); + m_view->DefineAutoSymbol(new Symbol {DataSymbol, vftName, vftAddr}); + m_view->DefineDataVariable(vftAddr, Confidence(Type::NamedType(m_view, vftTypeName), RTTI_CONFIDENCE)); + return vftInfo; } diff --git a/plugins/rtti/microsoft.cpp b/plugins/rtti/microsoft.cpp index d5e14648..856661b4 100644 --- a/plugins/rtti/microsoft.cpp +++ b/plugins/rtti/microsoft.cpp @@ -601,18 +601,17 @@ std::optional<VirtualFunctionTableInfo> MicrosoftRTTIProcessor::ProcessVFT(uint6 auto redirectTypeId = Type::GenerateAutoDebugTypeId(rootRedirectName); // This will now create the redirect type MyClass::VTable for uninformed analysis to use. // MyClass -> MyBase::MyClass::VTable (when MyBase offset is 0). - m_view->DefineType(redirectTypeId, rootRedirectName, rootRedirectType); - } - m_view->DefineType(typeId, vftTypeName, - Confidence(TypeBuilder::StructureType(vftBuilder.Finalize()).Finalize(), RTTI_CONFIDENCE)); - } + m_view->DefineType(redirectTypeId, rootRedirectName, rootRedirectType.GetValue()); + } + m_view->DefineType(typeId, vftTypeName, TypeBuilder::StructureType(vftBuilder.Finalize()).Finalize()); + } - auto vftName = fmt::format("{}::`vftable'", classInfo.className); - if (baseClassInfo.has_value()) - vftName += fmt::format("{{for `{}'}}", baseClassInfo->className); - m_view->DefineAutoSymbol(new Symbol{DataSymbol, vftName, vftAddr}); - m_view->DefineDataVariable(vftAddr, Confidence(Type::NamedType(m_view, vftTypeName), RTTI_CONFIDENCE)); - return vftInfo; + auto vftName = fmt::format("{}::`vftable'", classInfo.className); + if (baseClassInfo.has_value()) + vftName += fmt::format("{{for `{}'}}", baseClassInfo->className); + m_view->DefineAutoSymbol(new Symbol {DataSymbol, vftName, vftAddr}); + m_view->DefineDataVariable(vftAddr, Confidence(Type::NamedType(m_view, vftTypeName), RTTI_CONFIDENCE)); + return vftInfo; } |
