A plan for the ABI marker, written before the code

This commit is contained in:
Joseph Ferano 2026-09-14 07:10:54 +07:00
parent 682cb745ac
commit b47f137b05

24
HANDOFF-x86-abi-marker.md Normal file
View File

@ -0,0 +1,24 @@
# Handoff — the ABI marker symbol, so a crossed pair is refused at dlopen
Branch `dev-loop`, from `682cb74`. This closes the serious finding of `HANDOFF-x86-aggregates.md`: a
redefinition module built by one backend, dlopened into a host built by the other, links and loads and then
dies with SIGSEGV at the first call into a redefined function that takes or returns a struct. Nothing refused
it, and `flan build game.flan --x86 --dev` followed by `flan reload game.flan changed.flan` builds exactly that
pair.
## The plan
A marker symbol, as that handoff recommended.
- `X86.program` defines `flan.abi.x86`; `X86.redefinition` emits a data relocation against it.
- `Emit.program` defines `flan.abi.llvm`; `Emit.redefinition` emits one against that.
- Both sides gated on `dev`, so a release build's output is byte-for-byte what it was.
- The two `dlopen` sites — `test/reload_host.c` and `vendor/agent/flan_agent.c` — recognise a `flan.abi.`
failure and say, in a sentence, that the module and the host were built by different backends.
- `test/test_reload.ml` gains the crossed pair, both directions, asserting the refusal.
`flan reload --x86` is judged out of scope; see below.
## Status
In progress. This file is written early and updated as the work lands.