[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

` }

`