asm updated this revision to Diff 351481.
asm marked an inline comment as done.
asm added a comment.
code style fixes, use modern log
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104054/new/
https://reviews.llvm.org/D104054
Files:
lldb/include/lldb/Core/Mangled.h
lldb/source/Core/Mangled.cpp
lldb/source/Symbol/Symtab.cpp
lldb/unittests/Core/MangledTest.cpp
Index: lldb/unittests/Core/MangledTest.cpp
===================================================================
--- lldb/unittests/Core/MangledTest.cpp
+++ lldb/unittests/Core/MangledTest.cpp
@@ -55,6 +55,23 @@
EXPECT_STREQ("", TheDemangled.GetCString());
}
+TEST(MangledTest, ResultForValidRustV0Name) {
+ ConstString mangled_name("_RNvC1a4main");
+ Mangled the_mangled(mangled_name);
+ ConstString the_demangled = the_mangled.GetDemangledName();
+
+ ConstString expected_result("a::main");
+ EXPECT_STREQ(expected_result.GetCString(), the_demangled.GetCString());
+}
+
+TEST(MangledTest, EmptyForInvalidRustV0Name) {
+ ConstString mangled_name("_RRR");
+ Mangled the_mangled(mangled_name);
+ ConstString the_demangled = the_mangled.GetDemangledName();
+
+ EXPECT_STREQ("", the_demangled.GetCString());
+}
+
TEST(MangledTest, NameIndexes_FindFunctionSymbols) {
SubsystemRAII<FileSystem, HostInfo, ObjectFileELF, SymbolFileSymtab>
subsystems;
Index: lldb/source/Symbol/Symtab.cpp
===================================================================
--- lldb/source/Symbol/Symtab.cpp
+++ lldb/source/Symbol/Symtab.cpp
@@ -240,6 +240,10 @@
case Mangled::eManglingSchemeMSVC:
return false;
+ // No filters for this scheme yet. Include all names in indexing.
+ case Mangled::eManglingSchemeRustV0:
+ return false;
+
// Don't try and demangle things we can't categorize.
case Mangled::eManglingSchemeNone:
return true;
Index: lldb/source/Core/Mangled.cpp
===================================================================
--- lldb/source/Core/Mangled.cpp
+++ lldb/source/Core/Mangled.cpp
@@ -72,6 +72,9 @@
if (name.startswith("?"))
return Mangled::eManglingSchemeMSVC;
+ if (name.startswith("_R"))
+ return Mangled::eManglingSchemeRustV0;
+
if (name.startswith("_Z"))
return Mangled::eManglingSchemeItanium;
@@ -199,6 +202,19 @@
return demangled_cstr;
}
+static char *GetRustV0DemangledStr(const char *M) {
+ char *demangled_cstr = llvm::rustDemangle(M, nullptr, nullptr, nullptr);
+
+ if (Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_DEMANGLE)) {
+ if (demangled_cstr && demangled_cstr[0])
+ LLDB_LOG(log, "demangled rustv0: {0} -> \"{1}\"", M, demangled_cstr);
+ else
+ LLDB_LOG(log, "demangled rustv0: {0} -> error: failed to demangle", M);
+ }
+
+ return demangled_cstr;
+}
+
// Explicit demangling for scheduled requests during batch processing. This
// makes use of ItaniumPartialDemangler's rich demangle info
bool Mangled::DemangleWithRichManglingInfo(
@@ -256,6 +272,10 @@
return context.FromCxxMethodName(m_demangled);
}
}
+
+ case eManglingSchemeRustV0:
+ // Rich demangling scheme is not supported for Rust
+ return false;
}
llvm_unreachable("Fully covered switch above!");
}
@@ -284,6 +304,9 @@
demangled_name = GetItaniumDemangledStr(mangled_name);
break;
}
+ case eManglingSchemeRustV0:
+ demangled_name = GetRustV0DemangledStr(mangled_name);
+ break;
case eManglingSchemeNone:
llvm_unreachable("eManglingSchemeNone was handled already");
}
Index: lldb/include/lldb/Core/Mangled.h
===================================================================
--- lldb/include/lldb/Core/Mangled.h
+++ lldb/include/lldb/Core/Mangled.h
@@ -43,7 +43,8 @@
enum ManglingScheme {
eManglingSchemeNone = 0,
eManglingSchemeMSVC,
- eManglingSchemeItanium
+ eManglingSchemeItanium,
+ eManglingSchemeRustV0
};
/// Default constructor.
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits