rust-cross / cargo-zigbuild

Compile Cargo project with zig as linker
MIT License
1.43k stars 51 forks source link

No backtrace symbols on MacOS w/ Apple Silicon #204

Closed ramosbugs closed 8 months ago

ramosbugs commented 8 months ago

I originally filed this issue as cargo-lambda/cargo-lambda#577, but the issue is probably more closely tied to Zig.

I'm building a Lambda function by invoking:

$ RUSTFLAGS="-C strip=none" cargo lambda build --arm64

I'm running on ARM64 MacOS:

$ uname -a
Darwin Ramos-M1 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000 arm64

As expected, this produces a binary that appears to contain debug symbols:

$ file ../../target/lambda/bootstrap/bootstrap 
../../target/lambda/bootstrap/bootstrap: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 2.0.0, with debug_info, not stripped

However, all of the backtraces I generate via the backtrace crate look like:

 0: <unknown>    
 1: <unknown>    
...
31: <unknown>    
32: __libc_start_call_main    
33: __libc_start_main_impl

Panics with RUST_BACKTRACE=1 are similarly empty:

thread 'main' panicked at 'not yet implemented', src/lib.rs:173:5
stack backtrace:
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Interestingly, everything works fine when I directly build the Lambda via the Homebrew musl-cross toolchain:

$ export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-gcc
$ cargo build --target aarch64-unknown-linux-musl --release

Even in release mode, the Lambda built with musl-cross prints backtrace symbols.

Is there a known issue in cargo-zigbuild with debug symbols when cross-compiling from aarch64 Darwin to aarch64 Linux?

messense commented 8 months ago

This has came up before in https://github.com/rust-cross/cargo-zigbuild/pull/6, the underlying problem should have been fixed in https://github.com/ziglang/zig/pull/11207, I don't know if it's a regression from zig.

ramosbugs commented 8 months ago

The output of the file command on the binary shows with debug_info, not stripped. Are you sure it's the same issue?

messense commented 8 months ago

The output of the file command on the binary shows with debug_info, not stripped.

That's because in #6 we added -g flag.

I'm not saying it's the same issue, just that the missing debuginfo issue was fixed in #6 and zig, so if backtrace is empty, it might be a zig issue/regression assuming you are not using a super old zig version.

ramosbugs commented 8 months ago

Thanks, I filed this issue as ziglang/zig#18280.