Updates to sel4runtime from seL4 10.1.x to 11.0.x

  • Created sel4runtime project to be a runtime for running a C or C-compatible process, i.e. one with a C-like main, in a minimal seL4 environment.
    • Added seL4 roottask runtime entry points for: AARCH32, AARCH64, IA32, x86_64, RISC-V 32-bit and RISC-V 64-bit with supporting documentation for calling conventions.
    • Added regular runtime entry points for non-roottask new processes for the above architectures.
    • Added CMake rules for replacing musllibc’s CRT files with a CMake object library.
    • Added CMake configuration option, Sel4RuntimeRootStack, for setting Roottask’s initial stack size.
    • Create runtime datastructure containing:
      • process name likely read from argv[0].
      • AUX vector with additional seL4 specific AUX values:
        • AT_SEL4_BOOT_INFO: seL4_BootInfo pointer in current vspace.
        • AT_SEL4_IPC_BUFFER_PTR: IPC buffer pointer in current vspace of initial thread.
        • AT_SEL4_TCB: TCP capability seL4_CPtr to initial thread’s TCB object.
      • Environment vector.
      • Bootinfo pointer to be initialized with bootinfo address from AUX vector.
      • ELF headers to be initialized with info from AUX vectors.
      • Initial thread information:
        • Thread local storage image information.
        • Cap to TCB if given in AUX vectors.
        • IPC buffer: if given in AUX vectors.
    • Add support for calling constructors and destructors.
    • Add support for managing threads’ static TLS regions.
    • set a global __sysinfo pointer if AT_SYSINFO is set in AUX vector.
    • Call main() with required argc and argv arguments.
    • Support for setting TLS variables of threads remotely.
    • Call seL4_DebugNameThread if the runtime has a process name and the initial thread has a TCB cap and IPC buffer set.
    • Add Findsel4runtime.cmake module for importing as CMake module.