linux-packaging-mono/external/corert/Documentation/high-level-engineering-plan.md
Xamarin Public Jenkins (auto-signing) 536cd135cc Imported Upstream version 5.4.0.167
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
2017-08-21 15:34:15 +00:00

1.7 KiB

Runtime

  • Build managed parts
    • Build language source to IL
    • Compile IL assembly with ILC compiler
  • Unix
    • Runtime Unix PAL
    • Assembly port
    • Thread suspension - hijacking
  • RyuJIT EH
    • Define Runtime/Codegen contract
  • Stack unwinding
    • JIT: Produce platform-specific unwind info
    • Runtime to consume the platform specific unwind info
  • Managed/native transitions helpers (both pinvoke and reverse pinvoke)
    • JIT: emit the right transition helpers
    • Implement the transition helpers
  • GC info encoding (for precise GC)
    • Enable conservative GC
    • Toolchain support to write the GCInfo into final binary
    • Runtime to consume GCInfo produced by RyuJIT today for precise GC

Toolchain

  • Split compilation
    • Design document
      • Robust name mangling
      • Generics (comdat foldable section, or special module)
    • Implementation
      • Phase 1 - Single obj for System.Private.CoreLib
      • Phase 2 - Respective object file for everything else (1:1 Assembly:ObjectFile mapping)
  • Produce complete EE types in the toolchain
  • Stubs - Delegates, etc.
  • Adjustments for RyuJIT / UTC difference

Reflection

  • Produce compact metadata in the final binary
  • Produce mapping tables
  • Runtime consumption

Interop

Framework

  • Move all .NET Native System.Private* libraries over to github
  • Complete .NET Native specific libraries in corefx (build, port to Unix)
  • Port to Win32/Unix

Shared generics

  • Toolchain - produce supporting tables and fixups

CPPCodegen

  • Complete IL to CPP codegenerator
  • Portable EH