Files
bun.sh/src
robobun f00e1816ef Fix crash handler not dumping stack traces on Linux aarch64 (#23549)
### What does this PR do?

Fixes the crash handler failing to capture and display stack traces on
Linux ARM64 systems.

**Before:**
```
============================================================
panic(main thread): cast causes pointer to be null
```
No stack trace shown.

**After:**
```
============================================================
panic(main thread): cast causes pointer to be null
bun.js.api.FFIObject.Reader.u8
/workspace/bun/src/bun.js/api/FFIObject.zig:67:41

bun.js.jsc.host_fn.toJSHostCall__anon_2545765
/workspace/bun/src/bun.js/jsc/host_fn.zig:93:5
```
Full stack trace with source locations.

#### Root Cause
- Zig's `std.debug.captureStackTrace` uses `StackIterator.init()` which
falls back to frame pointer-based unwinding when no context is provided
- Frame pointer-based unwinding doesn't work reliably on ARM64, even
with `-fno-omit-frame-pointer` enabled
- This resulted in 0 frames being captured (`trace.index == 0`)

#### Changes
1. **Use glibc's backtrace() on Linux**: On Linux with glibc (not musl),
always use glibc's `backtrace()` function instead of Zig's
StackIterator. glibc's implementation properly uses DWARF unwinding
information from `.eh_frame` sections.

2. **Skip crash handler frames**: After capturing with `backtrace()`,
find the desired `begin_addr` in the trace (within 128 byte tolerance)
and filter out crash handler internal frames for cleaner output. If
`begin_addr` is not found, use the complete backtrace.

3. **Preserve existing behavior**:
   - Non-debug builds: Use WTF printer (fast, no external deps)
- Debug builds: Fall through to llvm-symbolizer (detailed source info)

### How did you verify your code works?

Reproduced the crash:
```bash
bun-debug --print 'Bun.FFI.read.u8(0)'
```

Verified that:
-  Stack traces now appear on Linux ARM64 with proper source locations
-  Crash handler frames are properly filtered out
-  llvm-symbolizer integration works for debug builds
-  WTF printer is used for release builds
-  When begin_addr is not found, complete backtrace is used

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-12 14:00:11 -07:00
..
2025-07-21 13:26:47 -07:00
2025-10-06 05:39:22 -07:00
2025-09-09 20:41:10 -07:00
2025-07-21 13:26:47 -07:00
2025-10-04 02:17:55 -07:00
2025-07-29 19:35:46 -07:00
2025-09-30 05:26:32 -07:00
2025-07-21 13:26:47 -07:00
2025-10-06 20:03:46 -07:00
2025-10-03 17:13:22 -07:00
2025-07-21 13:26:47 -07:00
2025-07-21 13:26:47 -07:00
2025-09-09 20:41:10 -07:00
2025-10-06 05:39:22 -07:00
2025-09-30 05:26:32 -07:00
2025-09-11 23:29:53 -07:00
2025-09-09 20:41:10 -07:00
2025-07-21 13:26:47 -07:00
2025-10-03 17:13:22 -07:00
2025-07-21 13:26:47 -07:00
2025-09-09 20:41:10 -07:00
2025-07-21 13:26:47 -07:00
2025-10-11 08:23:25 -07:00
2025-07-21 13:26:47 -07:00
2025-07-21 13:26:47 -07:00
2025-07-21 13:26:47 -07:00