mirror of
https://github.com/oven-sh/bun
synced 2026-02-11 03:18:53 +00:00
## Summary Fixes bytecode alignment in standalone executables to prevent crashes when loading bytecode cache on Windows. The bytecode offset needs to be aligned such that when loaded at runtime, the bytecode pointer is 128-byte aligned. Previously, alignment was based on arbitrary memory addresses during compilation, which didn't account for the 8-byte section header prepended at runtime. This caused the bytecode to be misaligned, leading to segfaults in `JSC::CachedJSValue::decode` on Windows. ## Root Cause At runtime, embedded data starts 8 bytes after the PE/Mach-O section virtual address (which is page-aligned, hence 128-byte aligned). For bytecode at offset `O` to be aligned: ``` (section_va + 8 + O) % 128 == 0 => (8 + O) % 128 == 0 => O % 128 == 120 ``` The previous code used `std.mem.alignInSlice()` which found aligned addresses based on the compilation buffer's arbitrary address, not accounting for the 8-byte header offset at load time. ## Changes - **`src/StandaloneModuleGraph.zig`**: Calculate bytecode offset to satisfy `offset % 128 == 120` instead of using `alignInSlice` - **`test/regression/issue/26298.test.ts`**: Added regression tests for bytecode cache in standalone executables ## Test plan - [x] Added regression test `test/regression/issue/26298.test.ts` with 3 test cases - [x] Existing `HelloWorldBytecode` test passes - [x] Build succeeds Fixes #26298 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Bot <claude-bot@bun.sh> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
4.8 KiB
4.8 KiB