libsysprof: Support demangling rust symbols using the v0 scheme

This doesn't add support for the legacy symbol mangling scheme which is
currently the default pending support in tools for the v0 symbol
mangling scheme. The legacy symbol mangling scheme is similar enough to
C++'s symbol mangling scheme that demangling them using the C++
demangler generally produces readable symbols. The v0 scheme is entirely
custom and due to backreferences and encoding all generic arguments not
very readable when mangled, so supporting it is more important than
supporting the legacy scheme.
This commit is contained in:
bjorn3
2023-08-31 19:40:46 +02:00
parent 501e35803a
commit 3994635a2a
5 changed files with 1309 additions and 2 deletions

View File

@ -434,7 +434,7 @@ sysprof_elf_get_symbol_at_address_internal (SysprofElf *self,
name = elf_parser_get_sym_name (self->parser, symbol);
if (name != NULL && name[0] == '_' && name[1] == 'Z')
if (name != NULL && name[0] == '_' && ((name[1] == 'Z') || (name[1] == 'R')))
ret = elf_demangle (name);
else
ret = g_strdup (name);