[srv.init] Serve a service locator protocol from init

The init process now serves as a service locator for its children,
passing all children a mailbox handle on which it is serving the service
locator protocol.
This commit is contained in:
Justin C. Miller
2022-02-28 20:23:18 -08:00
parent ef307e8ec6
commit 17dcb961ec
10 changed files with 165 additions and 4 deletions

View File

@@ -19,7 +19,10 @@ constexpr size_t stack_size = 0x10000;
constexpr uintptr_t stack_top = 0x80000000000;
bool
load_program(const module_program &prog, j6_handle_t sys, char *err_msg)
load_program(
const module_program &prog,
j6_handle_t sys, j6_handle_t slp,
char *err_msg)
{
if (prog.mod_flags && module_flags::no_load) {
sprintf(err_msg, " skipping pre-loaded program module '%s' at %lx", prog.filename, prog.base_address);
@@ -60,6 +63,12 @@ load_program(const module_program &prog, j6_handle_t sys, char *err_msg)
return false;
}
res = j6_process_give_handle(proc, slp, nullptr);
if (res != j6_status_ok) {
sprintf(err_msg, " ** error loading program '%s': giving SLP handle: %lx", prog.filename, res);
return false;
}
for (auto &seg : progelf.programs()) {
if (seg.type != elf::segment_type::load)
continue;