Closed
Description
Problem
With recent nightly toolchains, cargo segfaults on FreeBSD x86_64. The 2024-10-17 toolchain worked fine, but the bug was present in the 2024-10-24 toolchain . The segfault is dependent on the RUST_BACKTRACE=1
environment variable being set. This bug is causing rust-lang/libc's CI to fail.
An example CI failure:
https://github.com/rust-lang/libc/runs/32002285710
The stack trace of the segfault:
Program received signal SIGSEGV, Segmentation fault.
Address not mapped to object.
libunwind::CFI_Parser<libunwind::LocalAddressSpace>::parseCIE (addressSpace=..., cie=18446744073501904251, cieInfo=0x7fffffffacb0)
at /usr/home/somers/src/freebsd.org/src/contrib/llvm-project/libunwind/src/DwarfParser.hpp:332
332 pint_t cieLength = (pint_t)addressSpace.get32(p);
(gdb) bt
#0 libunwind::CFI_Parser<libunwind::LocalAddressSpace>::parseCIE (addressSpace=..., cie=18446744073501904251, cieInfo=0x7fffffffacb0)
at /usr/home/somers/src/freebsd.org/src/contrib/llvm-project/libunwind/src/DwarfParser.hpp:332
rust-lang/cargo#1 0x0000000802b4ea0c in libunwind::CFI_Parser<libunwind::LocalAddressSpace>::findFDE (addressSpace=..., pc=pc@entry=19184556, ehSectionStart=41958640, sectionLength=<optimized out>,
fdeHint=fdeHint@entry=0, fdeInfo=fdeInfo@entry=0x7ffffffface8, cieInfo=0x7fffffffacb0) at /usr/home/somers/src/freebsd.org/src/contrib/llvm-project/libunwind/src/DwarfParser.hpp:264
rust-lang/cargo#2 0x0000000802b4e6a2 in libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getInfoFromDwarfSection (this=this@entry=0x7fffffffb330, pc=pc@entry=19184556,
sects=..., fdeSectionOffsetHint=fdeSectionOffsetHint@entry=0) at /usr/home/somers/src/freebsd.org/src/contrib/llvm-project/libunwind/src/UnwindCursor.hpp:1689
rust-lang/cargo#3 0x0000000802b4bb60 in libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::setInfoBasedOnIPRegister (this=0x7fffffffb330, isReturnAddress=true)
at /usr/home/somers/src/freebsd.org/src/contrib/llvm-project/libunwind/src/UnwindCursor.hpp:2634
rust-lang/cargo#4 0x0000000802b4b9b2 in libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::step (this=0x7fffffffb330, stage2=<optimized out>)
at /usr/home/somers/src/freebsd.org/src/contrib/llvm-project/libunwind/src/UnwindCursor.hpp:2946
rust-lang/cargo#5 0x0000000802b48ef9 in _Unwind_Backtrace (callback=0x25720d0 <std::backtrace_rs::backtrace::libunwind::trace::trace_fn>, ref=0x7fffffffb4d8)
at /usr/home/somers/src/freebsd.org/src/contrib/llvm-project/libunwind/src/UnwindLevel1-gcc-ext.c:156
rust-lang/cargo#6 0x0000000002558fd5 in std::backtrace_rs::backtrace::libunwind::trace () at std/src/../../backtrace/src/backtrace/libunwind.rs:116
rust-lang/cargo#7 std::backtrace_rs::backtrace::trace_unsynchronized<std::backtrace::{impl#4}::create::{closure_env#0}> () at std/src/../../backtrace/src/backtrace/mod.rs:66
rust-lang/cargo#8 std::backtrace::Backtrace::create () at std/src/backtrace.rs:331
rust-lang/cargo#9 0x0000000002558e40 in std::backtrace::Backtrace::capture () at std/src/backtrace.rs:296
rust-lang/cargo#10 0x00000000011d5c08 in <anyhow::Error as core::convert::From<clap_builder::error::Error>>::from ()
rust-lang/cargo#11 0x00000000018a1f26 in <cargo::util::errors::CliError as core::convert::From<clap_builder::error::Error>>::from ()
rust-lang/cargo#12 0x00000000012de941 in cargo::cli::main ()
rust-lang/cargo#13 0x00000000012d14e4 in cargo::main ()
rust-lang/cargo#14 0x00000000012c98e3 in std::sys::backtrace::__rust_begin_short_backtrace::<fn(), ()> ()
rust-lang/cargo#15 0x00000000012eebf9 in std::rt::lang_start::<()>::{closure#0} ()
rust-lang/cargo#16 0x0000000002558047 in core::ops::function::impls::{impl#2}::call_once<(), (dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)>
() at core/src/ops/function.rs:284
rust-lang/cargo#17 std::panicking::try::do_call<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> () at std/src/panicking.rs:557
rust-lang/cargo#18 std::panicking::try<i32, &(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)> () at std/src/panicking.rs:520
rust-lang/cargo#19 std::panic::catch_unwind<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> () at std/src/panic.rs:358
rust-lang/cargo#20 std::rt::lang_start_internal::{closure#1} () at std/src/rt.rs:174
rust-lang/cargo#21 std::panicking::try::do_call<std::rt::lang_start_internal::{closure_env#1}, isize> () at std/src/panicking.rs:557
rust-lang/cargo#22 std::panicking::try<isize, std::rt::lang_start_internal::{closure_env#1}> () at std/src/panicking.rs:520
rust-lang/cargo#23 std::panic::catch_unwind<std::rt::lang_start_internal::{closure_env#1}, isize> () at std/src/panic.rs:358
rust-lang/cargo#24 std::rt::lang_start_internal () at std/src/rt.rs:174
rust-lang/cargo#25 0x00000000012d58d5 in main ()
Steps
In a FreeBSD x86_64 environment with the latest nightly toolchain installed:
- git clone git@github.com:rust-lang/libc.git
- cd libc
- env RUST_BACKTRACE=1 cargo test --features extra_traits --manifest-path libc-test/Cargo.toml --target x86_64-unknown-freebsd
Possible Solution(s)
No response
Notes
No response
Version
> cargo version --verbose
cargo 1.84.0-nightly (cf53cc54b 2024-10-18)
release: 1.84.0-nightly
commit-hash: cf53cc54bb593b5ec3dc2be4b1702f50c36d24d5
commit-date: 2024-10-18
host: x86_64-unknown-freebsd
libgit2: 1.8.1 (sys:0.19.0 vendored)
libcurl: 8.9.0-DEV (sys:0.4.74+curl-8.9.0 vendored ssl:OpenSSL/1.1.1w)
ssl: OpenSSL 1.1.1w 11 Sep 2023
os: FreeBSD 15.0-CURRENT [64-bit]