ci: fix Windows asio-sys link failure; improve Linux crash diagnostics

oakaudio: drop cpal's `asio` feature. asio-sys needs the proprietary
Steinberg ASIO SDK at link time (undefined ASIOGetSamplePosition etc.
on the GNU toolchain); WASAPI remains the Windows backend.

ci: the failure-only gdb step passed test args without --args, so gdb
treated --nocapture as a core file. Also collect loader-stage evidence
for the copier_test dl_main SIGSEGV: IRELATIVE reloc count, LD_DEBUG
tail, full backtrace and registers.
This commit is contained in:
2026-08-21 10:29:54 +08:00
parent b5a2ea7697
commit e837277557
2 changed files with 20 additions and 3 deletions
+16 -2
View File
@@ -207,7 +207,12 @@ jobs:
run: xvfb-run -a -s "-screen 0 1920x1080x24" cargo test --workspace --locked
# A crashing (SIGSEGV) test gives no Rust backtrace; rerun the
# plugin test binaries under gdb to capture the native stack.
# crashing test binaries under gdb to capture the native stack.
# `--args` is required — plain `--` makes gdb treat the test args as
# a core file. The extra probes target loader-stage crashes (the
# copier_test SIGSEGV happens inside ld.so's dl_main): how many
# IRELATIVE (ifunc) relocs the binary has, and what the loader was
# doing when it died (LD_DEBUG tail).
- name: Backtrace on test failure (Linux)
if: failure()
run: |
@@ -215,7 +220,16 @@ jobs:
for name in node_e2e_test suites_test copier_test; do
BIN=$(ls -t target/debug/deps/$name-* | grep -v '\.d$' | head -1)
[ -n "$BIN" ] || continue
xvfb-run -a gdb -batch -ex run -ex bt -- "$BIN" --nocapture || true
echo "===== $BIN ====="
file "$BIN" || true
echo "IRELATIVE relocs: $(readelf -rW "$BIN" 2>/dev/null | grep -c IRELATIVE)"
LD_DEBUG=files,reloc "$BIN" --list 2>&1 | tail -30 || true
xvfb-run -a gdb -batch \
-ex run \
-ex 'bt full' \
-ex 'info registers rip rsp rbp' \
-ex 'x/6i $rip' \
--args "$BIN" --nocapture || true
done
- name: Test (macOS)
+4 -1
View File
@@ -19,6 +19,9 @@ oakcodec = { path = "../oakcodec" }
# dependency above emits the transitive link flags of the static FFmpeg.
ffmpeg-next = "9"
cpal = {version = "0.18", features = ["pulseaudio", "pipewire", "jack", "asio"]}
# ASIO is intentionally not enabled: the asio-sys crate needs the proprietary
# Steinberg ASIO SDK at link time, which CI and most dev machines do not have.
# WASAPI (the default Windows backend) covers Windows on its own.
cpal = {version = "0.18", features = ["pulseaudio", "pipewire", "jack"]}
# `std::error::Error` impls for the crate-internal error enum.
thiserror = "2"