[lldb] Enable Rust v0 symbol demangling · llvm/llvm-project@0a2d4f3 (original) (raw)
`@@ -72,6 +72,9 @@ Mangled::ManglingScheme Mangled::GetManglingScheme(llvm::StringRef const name) {
`
72
72
`if (name.startswith("?"))
`
73
73
`return Mangled::eManglingSchemeMSVC;
`
74
74
``
``
75
`+
if (name.startswith("_R"))
`
``
76
`+
return Mangled::eManglingSchemeRustV0;
`
``
77
+
75
78
`if (name.startswith("_Z"))
`
76
79
`return Mangled::eManglingSchemeItanium;
`
77
80
``
`@@ -199,6 +202,19 @@ static char *GetItaniumDemangledStr(const char *M) {
`
199
202
`return demangled_cstr;
`
200
203
`}
`
201
204
``
``
205
`+
static char *GetRustV0DemangledStr(const char *M) {
`
``
206
`+
char *demangled_cstr = llvm::rustDemangle(M, nullptr, nullptr, nullptr);
`
``
207
+
``
208
`+
if (Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_DEMANGLE)) {
`
``
209
`+
if (demangled_cstr && demangled_cstr[0])
`
``
210
`+
LLDB_LOG(log, "demangled rustv0: {0} -> "{1}"", M, demangled_cstr);
`
``
211
`+
else
`
``
212
`+
LLDB_LOG(log, "demangled rustv0: {0} -> error: failed to demangle", M);
`
``
213
`+
}
`
``
214
+
``
215
`+
return demangled_cstr;
`
``
216
`+
}
`
``
217
+
202
218
`// Explicit demangling for scheduled requests during batch processing. This
`
203
219
`// makes use of ItaniumPartialDemangler's rich demangle info
`
204
220
`bool Mangled::DemangleWithRichManglingInfo(
`
`@@ -256,6 +272,10 @@ bool Mangled::DemangleWithRichManglingInfo(
`
256
272
`return context.FromCxxMethodName(m_demangled);
`
257
273
` }
`
258
274
` }
`
``
275
+
``
276
`+
case eManglingSchemeRustV0:
`
``
277
`+
// Rich demangling scheme is not supported for Rust
`
``
278
`+
return false;
`
259
279
` }
`
260
280
`llvm_unreachable("Fully covered switch above!");
`
261
281
`}
`
`@@ -284,6 +304,9 @@ ConstString Mangled::GetDemangledName() const {
`
284
304
` demangled_name = GetItaniumDemangledStr(mangled_name);
`
285
305
`break;
`
286
306
` }
`
``
307
`+
case eManglingSchemeRustV0:
`
``
308
`+
demangled_name = GetRustV0DemangledStr(mangled_name);
`
``
309
`+
break;
`
287
310
`case eManglingSchemeNone:
`
288
311
`llvm_unreachable("eManglingSchemeNone was handled already");
`
289
312
` }
`