Skip to content

Short backtrace have regressed #47429

Closed
@SimonSapin

Description

@SimonSapin
% rustc +nightly -V
rustc 1.25.0-nightly (51b0b3734 2018-01-12)
% echo 'fn main() { panic!() }' > a.rs
% rustc +nightly -g a.rs
% RUST_BACKTRACE=1 ./a   
thread 'main' panicked at 'explicit panic', a.rs:1:13
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::print
             at libstd/sys_common/backtrace.rs:68
             at libstd/sys_common/backtrace.rs:57
   2: std::panicking::default_hook::{{closure}}
             at libstd/panicking.rs:380
   3: std::panicking::default_hook
             at libstd/panicking.rs:396
   4: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:576
   5: std::panicking::begin_panic
             at /checkout/src/libstd/panicking.rs:537
   6: a::main
             at ./a.rs:1
   7: std::rt::lang_start::{{closure}}
             at /checkout/src/libstd/rt.rs:74
   8: std::panicking::try::do_call
             at libstd/rt.rs:59
             at libstd/panicking.rs:479
   9: __rust_maybe_catch_panic
             at libpanic_unwind/lib.rs:102
  10: std::rt::lang_start_internal
             at libstd/panicking.rs:458
             at libstd/panic.rs:365
             at libstd/rt.rs:58
  11: std::rt::lang_start
             at /checkout/src/libstd/rt.rs:74
  12: main
  13: __libc_start_main
  14: _start
% RUST_BACKTRACE=full ./a
thread 'main' panicked at 'explicit panic', a.rs:1:13
stack backtrace:
   0:     0x557717de85fb - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::h5875a9b214742a4d
                               at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1:     0x557717deb9f1 - std::sys_common::backtrace::print::h143d03afdd7f5f00
                               at libstd/sys_common/backtrace.rs:68
                               at libstd/sys_common/backtrace.rs:57
   2:     0x557717de6620 - std::panicking::default_hook::{{closure}}::h8ff827baa6fe8dc7
                               at libstd/panicking.rs:380
   3:     0x557717de6158 - std::panicking::default_hook::h23592ba8d5e03a89
                               at libstd/panicking.rs:396
   4:     0x557717de69ab - std::panicking::rust_panic_with_hook::ha49ba53377acd9fa
                               at libstd/panicking.rs:576
   5:     0x557717de4677 - std::panicking::begin_panic::hb09c91adc2d20ae1
                               at /checkout/src/libstd/panicking.rs:537
   6:     0x557717de45cd - a::main::hed51cb165992ecb8
                               at /tmp/a.rs:1
   7:     0x557717de41a1 - std::rt::lang_start::{{closure}}::h996750b753d22e78
                               at /checkout/src/libstd/rt.rs:74
   8:     0x557717de66c7 - std::panicking::try::do_call::he88b5e1c2ad945b3
                               at libstd/rt.rs:59
                               at libstd/panicking.rs:479
   9:     0x557717df80be - __rust_maybe_catch_panic
                               at libpanic_unwind/lib.rs:102
  10:     0x557717de83cf - std::rt::lang_start_internal::h4b0a952236374327
                               at libstd/panicking.rs:458
                               at libstd/panic.rs:365
                               at libstd/rt.rs:58
  11:     0x557717de4181 - std::rt::lang_start::h9e17a65d1bce7359
                               at /checkout/src/libstd/rt.rs:74
  12:     0x557717de45fd - main
  13:     0x7ff5d955bf49 - __libc_start_main
  14:     0x557717de3f39 - _start
  15:                0x0 - <unknown>

1 v.s. full is less verbose, but I remember it also filtering out some stack frames in some previous compiler versions. (Only frame # 6 is really useful to me here.) Indeed, src/libstd/sys_common/backtrace.rs contains some code that looks for a __rust_begin_short_backtrace symbol on the stack to find out what to filter. It looks like some functionality has regressed.

Stepping through the program in gdb it looks like the __rust_begin_short_backtrace function is called, but despite #[inline(never)] there’s apparently no stack frame (anymore?) for it.

CC @Yamakaky and @alexcrichton for #41815, #38165, and #40264.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-runtimeArea: std's runtime and "pre-main" init for handling backtraces, unwinds, stack overflowsC-enhancementCategory: An issue proposing an enhancement or a PR with one.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions