lkml.org 
[lkml]   [2021]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 04/13] Kbuild: Rust support
On Mon, Apr 19, 2021 at 09:58:51PM +0200, David Sterba wrote:
> On Fri, Apr 16, 2021 at 07:34:51PM +0200, Miguel Ojeda wrote:
> > something like:
> >
> > [ 0.903456] rust_begin_unwind+0x9/0x10
> > [ 0.903456] ? _RNvNtCsbDqzXfLQacH_4core9panicking9panic_fmt+0x29/0x30
> > [ 0.903456] ? _RNvNtCsbDqzXfLQacH_4core9panicking5panic+0x44/0x50
> > [ 0.903456] ? _RNvCsbDqzXfLQacH_12rust_minimal1h+0x1c/0x20
> > [ 0.903456] ? _RNvCsbDqzXfLQacH_12rust_minimal1g+0x9/0x10
> > [ 0.903456] ? _RNvCsbDqzXfLQacH_12rust_minimal1f+0x9/0x10
> > [ 0.903456] ?
> > _RNvXCsbDqzXfLQacH_12rust_minimalNtB2_11RustMinimalNtCsbDqzXfLQacH_6kernel12KernelModule4init+0x73/0x80
> > [ 0.903456] ? _RNvXsa_NtCsbDqzXfLQacH_4core3fmtbNtB5_5Debug3fmt+0x30/0x30
> > [ 0.903456] ? __rust_minimal_init+0x11/0x20
>
> Are there plans to unmangle the symbols when printing stacks? c++filt
> says:
>
> rust_begin_unwind+0x9/0x10
> ? core[8787f43e282added]::panicking::panic_fmt+0x29/0x30
> ? core[8787f43e282added]::panicking::panic+0x44/0x50
> ? rust_minimal[8787f43e282added]::h+0x1c/0x20
> ? rust_minimal[8787f43e282added]::g+0x9/0x10
> ? rust_minimal[8787f43e282added]::f+0x9/0x10
> ? <rust_minimal[8787f43e282added]::RustMinimal as kernel[8787f43e282added]::KernelModule>::init+0x73/0x80
> ? <bool as core[8787f43e282added]::fmt::Debug>::fmt+0x30/0x30
> ? __rust_minimal_init+0x11/0x20
>
> for simple functions it's barely parseable but the following is hardly
> readable
>
> > _RNvXs5_NtCsbDqzXfLQacH_11rust_binder11range_allocNtB5_15DescriptorStateNtNtCsbDqzXfLQacH_4core3fmt5Debug3fmt+0x60/0x60
>
> translates to
>
> <rust_binder[8787f43e282added]::range_alloc::DescriptorState as core[8787f43e282added]::fmt::Debug>::fmt

Yes, I agree, we need a better story for name mangling.
My proposal is that we store a pretty name which matches the source
(eg rust_binder::range_alloc) and a sha1 of the mangled symbol
(40 bytes of uninteresting hex). Symbol resolution is performed against
the sha1. Printing is of the pretty name. It should be obvious from
the stack trace which variant of a function is being called, no?

\
 
 \ /
  Last update: 2021-04-19 22:19    [W:0.160 / U:0.272 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site