Landin target contracts source
target contracts

Target contracts

spec.md [1975] owns the language-facing C and link-name rules. ROADMAP.md R5.20 records implementation evidence and dispositions; this page explains the package boundaries, not a second work list.

fact or operationowner
pointer width, alignment, byte order, architecture, intended C ABILandin.Targets
implemented C signatures, records and variadic callsLandin.Targets.Capabilities
object format, symbol prefix, available backend/debug format and tripletLandin.Targets.Capabilities
source-level C subset eligibilitychecking, using capability queries
physical C transportbackend ABI planner; currently guarded SysV only
frame preflight and emission selectionLandin.Backend.Dispatch
assembly, local labels, libc dependencies, register/frame placement and DWARFconcrete backend
logical hosted helper identitiesLandin.Hosted, shared by checker and backend
GNU archive/build-id argumentstarget-guarded Landin.Backend.Toolchain
C alias identitiesordinary core/c, guarded by the selected ABI fact
actual header/tool ABI verificationbindings/generate.py, explicit Clang target and sysroot

The Linux and Darwin descriptions both use 64-bit pointers, eight-byte pointer alignment, sixteen-byte stack alignment and little-endian storage. Equal widths do not imply equal calling conventions. Darwin's description names its own ABI, but C signatures, C records, variadic calls, backend and debugger availability remain disabled until their roadmap owners implement them. Native Landin source can be checked against --target=darwin-arm64; an emission request reports L0500 before writing outputs or invoking tools. The default remains Linux. Existing in-process x86 assembly-text tests may supply synthetic 32-bit layout facts while inspecting ELF text. That deliberate test seam does not grant the synthetic target an emitter or toolchain; Darwin facts are refused by the concrete x86 emitter as well as by driver dispatch.

Darwin layout facts follow Apple's ARM64 platform ABI. The description does not claim Darwin argument allocation, varargs or C record support. R5.30 owns those and the native linker policy; R5.40 owns Mach-O debug identity and source debugging. The synthetic 32-bit description still supplies an independent width control and has no object format or C ABI.

A logical external name such as _entry stays unchanged in checking and IR. The target mapping yields _entry on ELF and __entry on Darwin. Quoting an assembly operand is a later rendering step, and a leading underscore in source does not escape the platform prefix. The same mapping applies to explicit native names, C imports/exports and compiler-owned hosted helpers. Local labels are allocated separately. Existing ELF spelling and golden records remain valid.

core/c deliberately continues to assert compiler.c_sysv_lp64; a Darwin LP64 description cannot satisfy that identity. The binding generator separately probes Clang's target macros and data model before writing its four outputs. Neither a host pointer width nor an architecture name enables that contract. There is no added language scalar or configuration fact in R5.20. The generator and compiler remain separate tools, with their own independently tested guards.