Skip to content

v0.9.10

Choose a tag to compare

@undivisible undivisible released this 20 Sep 13:38
· 1329 commits to main since this release
1af71ab

Dynamic linking for Space

  • SCI v2 binary emitter: --emit sci now produces the 64-byte-manifest v2 format — export table (all defined functions), import table (extern call rel32 0 call 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 boot appends 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; ret stub 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 carry R_X86_64_PLT32 relocations through the new .rela.text section. 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.