aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/libghostty-vt/pkg/wuffs/src (follow)
Commit message (Collapse)AuthorAge
* vendor: the wuffs calloc stub was hijacking the demo's allocatoruser2026-09-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The browser demo came up with `slosh: cannot start session main` and nothing else. The session server was segfaulting before its socket existed, on the first calloc() of the config parse -- because in that binary calloc() returned NULL, always. pkg/wuffs/src/main.zig exports weak `calloc`/`free` stubs whenever `!builtin.link_libc`, and callocStub returns null unconditionally. They are there because wuffs' generated `..._alloc()` helpers are the only code referencing libc's allocator, we never call them, and linker GC usually strips them; the stubs cover the case where it does not. The comment reasons that weak linkage means "any real definition wins". That holds for a shared libc and not for a static archive. Once the linker pulls this member in for another symbol, the weak calloc here *satisfies* the reference, so it never searches libc.a for musl's strong one -- and every allocation in the consuming program returns NULL while free becomes a no-op. Only the demo could hit it. It is the one build that must pass -Dsimd=false (highway emits RVV intrinsics that do not compile for rv64gc), GhosttyZig.zig sets `link_libc = if (cfg.simd) true else null`, and the guest links the result statically against musl. The host build links libc, never exported the stubs, and passed everything -- which is why the whole test suite was green over a demo that could not start a session. Patch 0002 adds `and builtin.output_mode == .Exe`. The stubs still do their job in a final link with no libc; a library stops interposing on the allocator of the binary that owns that choice. Worth sending upstream: the assumption is upstream's, not ours.
* vendor: libghostty-vt bedb6f2 -> 3c1ef5b3 (2026-09-01)user2026-09-02
| | | | | | | | | | | | | | | | | Three weeks of upstream: 504 commits, 120 touching the terminal core -- OSC 5522, kitty relative placements, C0 fixes, the wuffs pixel path. Rebuilt from ghostty's own dist step (zig build dist -Demit-lib-vt=true), zig floor unchanged at 0.16.0, and slosh's C usage compiled unmodified. Patch 0001 is re-implemented, not retired: upstream rewrote the area into ImageStorage.clearScreen but kept the behaviour we patch out -- a terminal clear still reclaims transmitted-but-unplaced images, which breaks the upload-once place-per-frame pattern the protocol's two verbs exist for. The patch now removes just that sweep; the placement clearing and orphan reaping stay upstream's. Their recent 'preserve data on unmatched delete' fixes the same class of bug, so sending ours upstream remains the way to actually retire it.
* sl0ptty: M0 — libghostty-vt vendored, one pane, compositor, diff renderersl0p2026-08-13
Design contract in DESIGN.md. libghostty-vt vendored fresh from ghostty main@bedb6f2 (zig 0.16), built to a 14MB static lib. M0: pty spawn (no libutil), a lib-vt terminal per pane, a screen cell buffer, a diff emitter that repaints only what changed, raw mode, SIGWINCH, and a ~120Hz frame cap that coalesces pty reads. Also the seed of the headless harness: --headless dumps the composited screen without a tty, so composition is testable in milliseconds. tests/live_m0.py covers what headless cannot: raw mode, the diff emitter, resize propagation, and the quit path. 6/6 green.