A plan for the ABI marker, written before the code
This commit is contained in:
parent
682cb745ac
commit
b47f137b05
24
HANDOFF-x86-abi-marker.md
Normal file
24
HANDOFF-x86-abi-marker.md
Normal 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.
|
||||
Loading…
x
Reference in New Issue
Block a user