rust-lang / rust-lang/stacker

stacker's smoke test fails on mips64el-unknown-linux-gnuabi64

Open
#85 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
360
Forks
78
PR merge metrics
No merged PRs in 30d

Description

Debian's mips64el rust-stacker package is failing to build due to the smoke test failing:

     Running `/<<PKGBUILDDIR>>/target/mips64el-unknown-linux-gnuabi64/debug/deps/smoke-983e0e8761f2ceb1`

running 5 tests
error: test failed, to rerun pass `--test smoke`

Caused by:
  process didn't exit successfully: `/<<PKGBUILDDIR>>/target/mips64el-unknown-linux-gnuabi64/debug/deps/smoke-983e0e8761f2ceb1` (signal: 11, SIGSEGV: invalid memory reference)
dh_auto_test: error: /usr/share/cargo/bin/cargo test --all returned exit code 101

I was able to reproduce it on one of the mips64el systems Debian has available (and locally via qemu) and this is the backtrace:

#0  _Unwind_GetPtr (context=0xfff4242070, index=7) at ../../../src/libgcc/unwind-dw2.c:249
#1  uw_update_context_1 (context=0xfff4242ef0, fs=0xfff42427f0) at ../../../src/libgcc/unwind-dw2.c:1174
#2  0x000000fff4e2ecfc in uw_update_context (context=0xfff4242ef0, fs=0xfff42427f0) at ../../../src/libgcc/unwind-dw2.c:1267
#3  _Unwind_Backtrace (trace=0xaaae2188f8 <std::backtrace_rs::backtrace::libunwind::trace::trace_fn>, trace_argument=0xfff4243718) at ../../../src/libgcc/unwind.inc:326
#4  0x000000aaae207df8 in std::backtrace_rs::backtrace::libunwind::trace (cb=...) at library/std/src/../../backtrace/src/backtrace/libunwind.rs:93
#5  std::backtrace_rs::backtrace::trace_unsynchronized<std::sys_common::backtrace::_print_fmt::{closure_env#1}> (cb=...) at library/std/src/../../backtrace/src/backtrace/mod.rs:66
#6  std::sys_common::backtrace::_print_fmt (print_fmt=std::backtrace_rs::print::PrintFmt::Short, fmt=<optimized out>) at library/std/src/sys_common/backtrace.rs:65
#7  std::sys_common::backtrace::_print::{impl#0}::fmt (self=<optimized out>, fmt=<optimized out>) at library/std/src/sys_common/backtrace.rs:44
#8  0x000000aaae25ef8c in core::fmt::write (output=..., args=...) at library/core/src/fmt/mod.rs:1254
#9  0x000000aaae245a98 in std::io::Write::write_fmt<alloc::vec::Vec<u8, alloc::alloc::Global>> (self=<optimized out>, fmt=...) at library/std/src/io/mod.rs:1698
#10 0x000000aaae207adc in std::sys_common::backtrace::_print (w=..., format=std::backtrace_rs::print::PrintFmt::Short) at library/std/src/sys_common/backtrace.rs:47
#11 std::sys_common::backtrace::print (w=..., format=<optimized out>) at library/std/src/sys_common/backtrace.rs:34
#12 0x000000aaae2124a4 in std::panicking::default_hook::{closure#1} (err=...) at library/std/src/panicking.rs:266
#13 0x000000aaae211d88 in std::panicking::default_hook (info=<optimized out>) at library/std/src/panicking.rs:285
#14 0x000000aaae20c474 in core::ops::function::Fn::call<fn(&core::panic::panic_info::PanicInfo), (&core::panic::panic_info::PanicInfo)> () at library/core/src/ops/function.rs:79
#15 0x000000aaae19f7a8 in alloc::boxed::{impl#47}::call<(&core::panic::panic_info::PanicInfo), (dyn core::ops::function::Fn<(&core::panic::panic_info::PanicInfo), Output=()> + core::marker::Send + core::marker::Sync), alloc::alloc::Global> (self=0xaab9d93540, args=...) at library/alloc/src/boxed.rs:1987
#16 test::test_main::{closure#0} (info=<optimized out>) at library/test/src/lib.rs:134
#17 0x000000aaae213088 in alloc::boxed::{impl#47}::call<(&core::panic::panic_info::PanicInfo), (dyn core::ops::function::Fn<(&core::panic::panic_info::PanicInfo), Output=()> + core::marker::Send + core::marker::Sync), alloc::alloc::Global> (self=<optimized out>, args=...) at library/alloc/src/boxed.rs:1987
#18 std::panicking::rust_panic_with_hook (payload=..., message=..., location=<optimized out>, can_unwind=<optimized out>) at library/std/src/panicking.rs:695
#19 0x000000aaae187ebc in std::panicking::begin_panic::{closure#0}<&str> () at /usr/src/rustc-1.70.0/library/std/src/panicking.rs:611
#20 0x000000aaae18421c in std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic::{closure_env#0}<&str>, !> (f=...)
    at /usr/src/rustc-1.70.0/library/std/src/sys_common/backtrace.rs:150
#21 0x000000aaae187db4 in std::panicking::begin_panic<&str> (msg=...) at /usr/src/rustc-1.70.0/library/std/src/panicking.rs:610
#22 0x000000aaae195c68 in smoke::catch_panic_leaf::{closure#0}::{closure#0} () at tests/smoke.rs:92
#23 0x000000aaae188440 in std::panicking::try::do_call<smoke::catch_panic_leaf::{closure#0}::{closure_env#0}, ()> (data=0xfff4243cd8)
    at /usr/src/rustc-1.70.0/library/std/src/panicking.rs:485
#24 0x000000aaae188e28 in __rust_try ()
#25 0x000000aaae188294 in std::panicking::try<(), smoke::catch_panic_leaf::{closure#0}::{closure_env#0}> (f=...) at /usr/src/rustc-1.70.0/library/std/src/panicking.rs:449
#26 0x000000aaae190dcc in std::panic::catch_unwind<smoke::catch_panic_leaf::{closure#0}::{closure_env#0}, ()> (f=...) at /usr/src/rustc-1.70.0/library/std/src/panic.rs:140
#27 0x000000aaae195b08 in smoke::catch_panic_leaf::{closure#0} () at tests/smoke.rs:92
#28 0x000000aaae187d28 in stacker::grow::{closure#0}<(), smoke::catch_panic_leaf::{closure_env#0}> () at src/lib.rs:79
#29 0x000000aaae200084 in core::ops::function::impls::{impl#4}::call_once<(), dyn core::ops::function::FnMut<(), Output=()>> (self=..., args=())
    at /usr/src/rustc-1.70.0/library/core/src/ops/function.rs:310
#30 0x000000aaae200054 in core::panic::unwind_safe::{impl#23}::call_once<(), &mut dyn core::ops::function::FnMut<(), Output=()>> (self=...)
    at /usr/src/rustc-1.70.0/library/core/src/panic/unwind_safe.rs:271
#31 0x000000aaae1ffdcc in std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<&mut dyn core::ops::function::FnMut<(), Output=()>>, ()> (data=0xfff4243eb0)
    at /usr/src/rustc-1.70.0/library/std/src/panicking.rs:485
#32 0x000000aaae1fff90 in __rust_try ()
#33 0x000000aaae1ffbfc in std::panicking::try<(), core::panic::unwind_safe::AssertUnwindSafe<&mut dyn core::ops::function::FnMut<(), Output=()>>> (f=...)
    at /usr/src/rustc-1.70.0/library/std/src/panicking.rs:449
#34 0x000000aaae1ff29c in std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<&mut dyn core::ops::function::FnMut<(), Output=()>>, ()> (f=...)
    at /usr/src/rustc-1.70.0/library/std/src/panic.rs:140
#35 0x000000aaae1febd0 in stacker::_grow::{closure#0} () at src/lib.rs:250
#36 0x000000aaae1fd0dc in psm::on_stack::with_on_stack<core::option::Option<alloc::boxed::Box<(dyn core::any::Any + core::marker::Send), alloc::alloc::Global>>, stacker::_grow::{closure_env#0}> (callback_ptr=1099317534008, return_ptr=1099317534024) at /usr/share/cargo/registry/psm-0.1.21/src/lib.rs:190
#37 0x000000aaae2001d4 in rust_psm_on_stack () at src/arch/mips64_eabi.s:76

Please let me know if there's any additional information needed. Cheers!

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with tests/smoke.rs, especially catch_panic_leaf, and trace the stack growth path through src/lib.rs. Reproduce the smoke test for mips64el-unknown-linux-gnuabi64 on the reported Debian system or via qemu, then inspect the psm entry point at src/arch/mips64_eabi.s. Done means the smoke test completes without the SIGSEGV on that target.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.