. Check if we have the right number of boot modules
. Check if the ELF parsing of VM actually succeeded
Both these are root causes of less-than-obvious other
errors/asserts a little further down the line; uncovered
while experimenting with booting by iPXE, specifically
(a) iPXE having a 8-multiboot-modules limit and
(b) trying to boot a gzipped VM.
computation in macros.*/
#define INIT_PROC_NR ((endpoint_t) LAST_SPECIAL_PROC_NR) /* init
-- goes multiuser */
+#define NR_BOOT_MODULES (INIT_PROC_NR+1)
/* Root system process and root user process. */
#define ROOT_SYS_PROC_NR RS_PROC_NR
execi.clearproc = NULL;
/* parse VM ELF binary and alloc/map it into bootstrap pagetable */
- libexec_load_elf(&execi);
+ if(libexec_load_elf(&execi) != OK)
+ panic("VM loading failed");
/* Initialize the server stack pointer. Take it down three words
* to give startup code something to use as "argc", "argv" and "envp".
proc_init();
+ if(NR_BOOT_MODULES != kinfo.mbi.mods_count)
+ panic("expecting %d boot processes/modules, found %d",
+ NR_BOOT_MODULES, kinfo.mbi.mods_count);
+
/* Set up proc table entries for processes in boot image. */
for (i=0; i < NR_BOOT_PROCS; ++i) {
int schedulable_proc;