scripts: decode_stacktrace: demangle Rust symbols
[ Upstream commit 99115db4ec
]
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>
This commit is contained in:
Родитель
1ce4ac55d9
Коммит
473791d286
|
@ -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)"
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче