#241 asdf load on build/funcl: EMIT-U8 runs off the 8 MiB code arena at ~line 11900 (asdf/bundle) — grow to 32 MiB
closedNext domino after #240. With #239+#240 fixed, the build/funcl asdf load runs uiop end-to-end and dies at asdf/bundle (~line 11945 of 14k): SIGSEGV in EMIT-U8+188 storing at [0x40600000 + 8388600 + 8] — the session's ONE RWX code arena (mmap-rwx-bv-at-vaddr +elf-mmap-vaddr+ 8388608) is FULL, and byte-vector-push has no capacity check, so emission runs off the end of the mapping. gdb bt: EMIT-U8 <- ASM-JBE-REL32 <- GC-EMIT-CONSTANT-CAPACITY-CHECK <- GC-ENSURE-CONSTANT-ALLOCATION <- EMIT-IR-CONS <- EMIT-IR-* chain.
Precedent: cave#137 grew this same region 1 MiB -> 8 MiB for the same failure (ANSI deftest files). asdf-scale needs the next step: 8 -> 32 MiB at all lockstep sites (compiler.lisp file-compile arena, cold-fco loader arena, cold-bootstrap x2, warm repl boot + image-restore fallback, image.lisp restore mmap + save copy buffer).
Two follow-ons worth their own attention:
- FOUNDATIONAL: emit-ir-byte-vector-push emits NO capacity check — any overfull byte-vector silently clobbers adjacent memory (heap or unmapped). A checked push (capacity slot in the bv header, or at least a debug-mode guard) would turn this whole bug class from SIGSEGV/corruption into a clean error. The bv header currently stores only (length<<8)|widetag — no capacity — so this needs a layout decision.
- Also observed mid-load (default config, minors OFF): one symbol name prints as binary garbage (%COMPUTE--VALUE) around %refresh-component-inline-methods — the cave#238 signature previously seen only with minors ON. Non-fatal here; noting for the GC campaign.
Comments (2)
FIXED: the code arena is 32 MiB now (cold-bootstrap.lisp:438/466 mmap 33554432). build/funcl-asdf (asdf baked, 26 MB binary) built twice today without EMIT-U8 overrun.
Arena growth landed in 5f4ec1f: full ./asdf.lisp now loads END TO END on build/funcl (ASDF-LOAD-COMPLETE, ASDF/FOOTER), matching stage2. Suite 8/8, hosted 42, fixed point held. Leaving this issue OPEN for the two follow-ons in the description: (1) the foundational uncapped byte-vector-push (needs a capacity slot / checked push — layout decision), (2) the binary-garbage symbol name observed mid-load with minors OFF (cave#238 signature).