Repository navigation
v0.9.10
Dynamic linking for Space
- SCI v2 binary emitter:
--emit scinow produces the 64-byte-manifest v2 format — export table (all defined functions), import table (externcall rel32 0call sites), and a shared NUL-terminated name pool. A Space-style loader can bind imports at load time and register providers per domain. - Boot export table:
--emit bootappends a kernel export table after the code and stores its address in boot-header[40..48], letting the running kernel register itself as a symbol provider for dynamically linked components. - Freestanding string ABI: SCI and boot artifacts now emit NUL-terminated C strings (value address = first byte); hosted JIT keeps the length-prefixed instring ABI.
Fixed
- x86_64 ELF static-lib objects are lowered for real: the object backend previously emitted a canned
mov eax, exit_code; retstub and ignored the module. It now lowers the actual function bodies (entry exported globally, siblings omitted from the symbol table to avoid host link collisions), and extern calls carryR_X86_64_PLT32relocations through the new.rela.textsection. Modules requiring absolute globals/strings are refused rather than emitted with baked load addresses.
check-native-linkable-objects (link a C harness against a compiled .in object and assert the exit value) now passes.