From 0bed51143009d2403792fd2793a36e506f289154 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 6 Nov 2023 20:04:49 -0800 Subject: [PATCH] libsysprof: demangle rust kernel symbols --- src/libsysprof/sysprof-kallsyms-symbolizer.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libsysprof/sysprof-kallsyms-symbolizer.c b/src/libsysprof/sysprof-kallsyms-symbolizer.c index c3241b32..939f68c7 100644 --- a/src/libsysprof/sysprof-kallsyms-symbolizer.c +++ b/src/libsysprof/sysprof-kallsyms-symbolizer.c @@ -22,6 +22,8 @@ #include +#include "rust-demangle.h" + #include "sysprof-kallsyms-symbolizer.h" #include "sysprof-document-private.h" #include "sysprof-strings-private.h" @@ -153,7 +155,15 @@ sysprof_kallsyms_symbolizer_prepare_worker (GTask *task, * array just detect the simple case and skip them now. */ if (address != last_address) - sysprof_kallsyms_symbolizer_add (self, address, type, name); + { + g_autofree char *demangle = NULL; + + /* If we got a Rust kernel symbol, demangle it */ + if (name[0] == '_' && name[1] == 'R' && name[2] == 'N') + name = demangle = sysprof_rust_demangle (name, 0); + + sysprof_kallsyms_symbolizer_add (self, address, type, name); + } last_address = address;