@@ -247,17 +247,15 @@ std::optional<ClassInfo> ItaniumRTTIProcessor::ProcessRTTI(uint64_t objectAddr)
247247 return std::nullopt ;
248248
249249 auto typeInfo = TypeInfo (m_view, objectAddr);
250- auto className = DemangleNameGNU3 (m_view, allowMangledClassNames, typeInfo.type_name );
250+ auto className = DemangleNameItanium (m_view, allowMangledClassNames, typeInfo.type_name );
251251 if (!className.has_value ())
252252 return std::nullopt ;
253253 auto classInfo = ClassInfo{className.value ()};
254254
255- // TODO: className starts with 7, 9, 14
256- // 7 == class_type
257- // 9 == si_class_type
258- // 14 == vmi_class_type
259-
260255 auto typeInfoName = fmt::format (" _typeinfo_for_{}" , classInfo.className );
256+ auto typeInfoSymbol = m_view->GetSymbolByAddress (objectAddr);
257+ if (typeInfoSymbol != nullptr )
258+ m_view->UndefineAutoSymbol (typeInfoSymbol);
261259 m_view->DefineAutoSymbol (new Symbol{DataSymbol, typeInfoName, objectAddr});
262260
263261 if (typeInfoVariant == TIVSIClass)
@@ -269,7 +267,7 @@ std::optional<ClassInfo> ItaniumRTTIProcessor::ProcessRTTI(uint64_t objectAddr)
269267 return std::nullopt ;
270268 auto subTypeInfo = TypeInfo (m_view, siClassTypeInfo.base_type );
271269 // Demangle base class name and set
272- auto baseClassName = DemangleNameGNU3 (m_view, allowMangledClassNames, subTypeInfo.type_name );
270+ auto baseClassName = DemangleNameItanium (m_view, allowMangledClassNames, subTypeInfo.type_name );
273271 if (!baseClassName.has_value ())
274272 {
275273 m_logger->LogWarn (" Skipping base class with mangled name %llx" , siClassTypeInfo.base_type );
0 commit comments