Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inline Frame Regression on Linux in 0.3.17 #186

Closed
jan-auer opened this issue May 16, 2019 · 3 comments · Fixed by #187
Closed

Inline Frame Regression on Linux in 0.3.17 #186

jan-auer opened this issue May 16, 2019 · 3 comments · Fixed by #187

Comments

@jan-auer
Copy link

In 0.3.17 function names for inline frames are now incorrectly showing the name of the symbol they are inlined into. Repro case added below.

I haven't looked at the details, but it might have to do with #185. It is correct that the symbol table often contains better names than DWARF debug info for regular symbols, but this is obviously not the case for inline symbols.

Repro Code
use failure::err_msg;

#[inline(always)]
fn inline2() {
    println!("{}", err_msg("foo").backtrace());
}

#[inline(never)]
fn not_inline() {
    inline2()
}

#[inline(always)]
fn inline1() {
    not_inline()
}

fn main() {
    inline1()
}

Expected Backtrace: (truncated)

   2: <failure::error::error_impl::ErrorImpl as core::convert::From<F>>::from::h3bae66c036570137 (0x55a12174de62)
             at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/failure-0.1.5/src/error/error_impl.rs:19
      <failure::error::Error as core::convert::From<F>>::from::hc7d0d62dae166cea
             at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/failure-0.1.5/src/error/mod.rs:36
      failure::error_message::err_msg::he322d3ed9409189a
             at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/failure-0.1.5/src/error_message.rs:12
      rust::inline2::h562e5687710b6a71
             at src/main.rs:5
      rust::not_inline::h16f5b6019e5f0815
             at src/main.rs:10

Actual Backtrace: (truncated)

   2: rust::not_inline::hd7ebd5cbb18d0349 (0x55e3895a4c72)
             at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/failure-0.1.5/src/error/error_impl.rs:19
      rust::not_inline::hd7ebd5cbb18d0349
             at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/failure-0.1.5/src/error/mod.rs:36
      rust::not_inline::hd7ebd5cbb18d0349
             at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/failure-0.1.5/src/error_message.rs:12
      rust::not_inline::hd7ebd5cbb18d0349
             at src/main.rs:5
      rust::not_inline::hd7ebd5cbb18d0349
             at src/main.rs:10
@jan-auer
Copy link
Author

FWIW, I can't get inline frames to show up on macOS at all; but that's probably unrelated.

alexcrichton added a commit that referenced this issue May 16, 2019
This commit fixes an accidental regression with #185 where libbacktrace
was updated to match the standard library by always returning the symbol
table symbol. Turns out though this library was one-upping the standard
library by consulting debuginfo (what it was previously doing) because
debuginfo can have more accurate symbol information for inline
functions, for example.

The fix here is to always prefer the debuginfo function name, if
present, and otherwise fall back to the symbol table symbol if
necessary.

Closes #186
@alexcrichton
Copy link
Member

Oops, sorry for the regression! Thanks for the quick catch though and the report! I think this should be fixed at #187

@jan-auer
Copy link
Author

That was fast :) Thanks for the quick turnaround!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants