aboutsummaryrefslogtreecommitdiffhomepage
path: root/notes/c_abi_compat.txt
blob: 0d504ccc5977d38aa1a94c300c696d96ef25b3a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24


Areas where SLUL is incompatible with the C ABI:
- struct layout (due to tighter packing)
- maybe calling conventions (smaller stack alignment, arena parameter?, etc)
- maybe unavailability of TLS
- maybe async thread termination
- maybe lack of mapping/pinning between "logical threads" and OS threads.
- string pointer encoding
- plus any extensions (e.g. "tight call" with a few or no caller-saved regs)


struct layout:
- simple             (C)
- tight-extendable   (SLUL, exported structs)
- tight-closed       (SLUL, explicitly closed structs.
                      - Can we make this match what Rust does?)
                      - XXX Is this different from tight-extendable at all?

We need to be able to specify that a function or data type should use the
C ABI (calling conventions and struct layout etc.).

Functions using the C ABI must not take SLUL structs.
- but private types should work