summaryrefslogtreecommitdiff
path: root/plugins/rtti
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2025-06-24 17:55:48 -0400
committerAlexander Taylor <alex@vector35.com>2025-06-25 18:36:47 -0400
commitc41f264a1dba68c89b4a224a70e3a5783f7fa879 (patch)
tree00bb6e91d86b708bff7265ed7179a6ef2793b7fb /plugins/rtti
parentb1a7666164a000c5255f90568ed9597b58ce276a (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.cpp25
-rw-r--r--plugins/rtti/microsoft.cpp21
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;
}