No backtrace symbols on MacOS w/ Apple Silicon when cross-compiling to aarch64 Linux
ramosbugs opened this issue · 0 comments
Zig Version
0.11.0
Steps to Reproduce and Observed Behavior
I originally filed this issue as cargo-lambda/cargo-lambda#577, then rust-cross/cargo-zigbuild#204, but the issue is probably within the Zig toolchain somewhere.
I'm building an AWS 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.
I searched but wasn't able to find any relevant Zig issues related to missing debug symbols when cross-compiling from aarch64 Darwin to aarch64 Linux.
Expected Behavior
Stack trace should print symbol names