|
|
@@ -0,0 +1,58 @@
|
|
|
+# Session save — 2026-09-28: V3 self-hosting FIXPOINT reached
|
|
|
+
|
|
|
+`master` — suite **111/111**, tree clean except the user's uncommitted
|
|
|
+`compiler/toto.mod` edit.
|
|
|
+
|
|
|
+## Headline: the fixpoint
|
|
|
+
|
|
|
+`bootstrap/fixpoint.sh`:
|
|
|
+
|
|
|
+```
|
|
|
+Stage 1: gm2 builds V3 (CR -m) -> m2s1
|
|
|
+Stage 2: m2s1 compiles the whole compiler -> stage2.ssa (assembled -> m2s2)
|
|
|
+Stage 3: m2s2 compiles the whole compiler -> stage3.ssa
|
|
|
+cmp stage2.ssa stage3.ssa *** FIXPOINT OK (1,991,439 bytes) ***
|
|
|
+```
|
|
|
+
|
|
|
+The V3 compiler now rebuilds itself to a **byte-identical image**.
|
|
|
+Tags: `v3-fixpoint`, `v3-bootstrap`.
|
|
|
+
|
|
|
+## The last fix (`b6ae57b`)
|
|
|
+
|
|
|
+`QbeGen.InitHeap` allocated each nested element sub-array (`ARRAY … OF
|
|
|
+ARRAY …` on the heap/stack) but never initialised its descriptor
|
|
|
+header, so a local `ARRAY [0..15] OF Name` handed garbage to
|
|
|
+`GetName` (scanner) when `names[i]` was passed as an `ARRAY OF CHAR`.
|
|
|
+Now `InitHeap(eb, elem)` is called on each sub-array.
|
|
|
+
|
|
|
+## Arc completed
|
|
|
+
|
|
|
+From "sources compile and link" to the fixpoint — every step a real V3
|
|
|
+runtime/ABI bug with a minimal repro: nested modules; inline record
|
|
|
+array fields; the NUL-terminated string model; `p^` as a `VAR` actual;
|
|
|
+de-eagered NIL guards; off-by-one string scans; short-circuit `AND`/`OR`;
|
|
|
+nested-array heap initialisation.
|
|
|
+
|
|
|
+## Codebases / tags of interest
|
|
|
+
|
|
|
+- `v3-fixpoint` — `b6ae57b` (the fix + `docs/summary_fixpoint.md`).
|
|
|
+- `v3-bootstrap` — `42cbe36` (`bootstrap/fixpoint.sh`).
|
|
|
+- Earlier: `v3-short-circuit`, `v3-selfcompiles`, `v3-inline-array-fields`,
|
|
|
+ `v3-nul-strings`, `v3-deref-var-actual`, `v3-selfcompile-image`, …
|
|
|
+
|
|
|
+## Remaining polish
|
|
|
+
|
|
|
+- Cross-stage `FileIO` selection is implicit (stage 1 uses the host
|
|
|
+ `FileIO`; the compiled image embeds the self-hosted one). Make it
|
|
|
+ explicit if desired.
|
|
|
+- Optionally `M2make`-driven build; more stdlib; unicode (step 6 plan).
|
|
|
+- The toolchain still needs gm2 only for Stage 1 (bootstrapping the
|
|
|
+ seed binary); `fixpoint.sh` documents the stage-aware CR flag.
|
|
|
+
|
|
|
+## Resume
|
|
|
+
|
|
|
+```sh
|
|
|
+cd .../m2compiler-V3
|
|
|
+./bootstrap/fixpoint.sh # FIXPOINT OK: stage2.ssa == stage3.ssa
|
|
|
+cd compiler && ./build.sh && ./run_tests.sh # 111/111
|
|
|
+```
|