Quoting Richard Braun (2014-12-27 12:20:17) > On Fri, Dec 26, 2014 at 06:32:33PM +0100, Justus Winter wrote: > > Quoting Richard Braun (2014-12-26 17:10:19) > > > What kind of non-elf files ? > > > > Any file. I created this patch in an attempt to use a dead task > > (i.e. a task w/o a thread) as a ramdisk. Now I'm (ab)using this patch > > to load the script that my interpreter runs: > > But how does Mach handle the loading of a non-elf file ?
This isn't ready for inclusion, but for now it's mainly: @@ -746,9 +756,20 @@ static void user_bootstrap(void) exec_info_t boot_exec_info; int err; char **av; + boolean_t executable = TRUE; /* Load this task up from the executable file in the module. */ err = exec_load(boot_read, read_exec, info->mod, &boot_exec_info); + if (err == EX_NOT_EXECUTABLE) + { + struct multiboot_module *mod = info->mod; + printf("reading %d bytes into map %p\n", mod->mod_end - mod->mod_start, current_task()->map); + err = read_in (mod, + 0, mod->mod_end - mod->mod_start, + 0, mod->mod_end - mod->mod_start, + VM_PROT_READ); + executable = FALSE; + } if (err) panic ("Cannot load user executable module (error code %d): %s", err, info->argv[0]); @@ -770,6 +791,9 @@ static void user_bootstrap(void) info->done = 1; thread_wakeup ((event_t) info); + if (! executable) + thread_terminate (current_thread ()); + /* * Exit to user thread. */ I generalized `read_exec' into `read_in' for that. Justus