Skip to content

FreeBSD segfault when capturing backtrace with RUST_BACKTRACE=1 #132185

Closed
@asomers

Description

@asomers

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:

  1. git clone git@github.com:rust-lang/libc.git
  2. cd libc
  3. 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]

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.O-freebsdOperating system: FreeBSDS-needs-infoStatus: The issue lacks details necessary to triage or act on it.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions