[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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user