| From 701fdb2fff3ddaf22147d8d0b2032d4b8322efcf Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 5 Dec 2021 19:00:43 +0100 |
| Subject: scripts: decode_stacktrace: demangle Rust symbols |
| |
| From: Miguel Ojeda <ojeda@kernel.org> |
| |
| [ Upstream commit 99115db4ecc87af73415939439ec604ea0531e6f ] |
| |
| Recent versions of both Binutils (`c++filt`) and LLVM (`llvm-cxxfilt`) |
| provide Rust v0 mangling support. |
| |
| Reviewed-by: Kees Cook <keescook@chromium.org> |
| Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Co-developed-by: Alex Gaynor <alex.gaynor@gmail.com> |
| Signed-off-by: Alex Gaynor <alex.gaynor@gmail.com> |
| Co-developed-by: Wedson Almeida Filho <wedsonaf@google.com> |
| Signed-off-by: Wedson Almeida Filho <wedsonaf@google.com> |
| Signed-off-by: Miguel Ojeda <ojeda@kernel.org> |
| Stable-dep-of: efbd63983533 ("scripts/decode_stacktrace.sh: optionally use LLVM utilities") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| scripts/decode_stacktrace.sh | 14 ++++++++++++++ |
| 1 file changed, 14 insertions(+) |
| |
| diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh |
| index 7075e26ab2c4..564c5632e1a2 100755 |
| --- a/scripts/decode_stacktrace.sh |
| +++ b/scripts/decode_stacktrace.sh |
| @@ -8,6 +8,14 @@ usage() { |
| echo " $0 -r <release> | <vmlinux> [<base path>|auto] [<modules path>]" |
| } |
| |
| +# Try to find a Rust demangler |
| +if type llvm-cxxfilt >/dev/null 2>&1 ; then |
| + cppfilt=llvm-cxxfilt |
| +elif type c++filt >/dev/null 2>&1 ; then |
| + cppfilt=c++filt |
| + cppfilt_opts=-i |
| +fi |
| + |
| if [[ $1 == "-r" ]] ; then |
| vmlinux="" |
| basepath="auto" |
| @@ -180,6 +188,12 @@ parse_symbol() { |
| # In the case of inlines, move everything to same line |
| code=${code//$'\n'/' '} |
| |
| + # Demangle if the name looks like a Rust symbol and if |
| + # we got a Rust demangler |
| + if [[ $name =~ ^_R && $cppfilt != "" ]] ; then |
| + name=$("$cppfilt" "$cppfilt_opts" "$name") |
| + fi |
| + |
| # Replace old address with pretty line numbers |
| symbol="$segment$name ($code)" |
| } |
| -- |
| 2.43.0 |
| |