kernel: some boottime sanitychecks
. 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.
This commit is contained in:
parent
77b6e2dcaa
commit
ba05f39d1e
3 changed files with 7 additions and 1 deletions
|
@ -84,6 +84,7 @@
|
|||
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
|
||||
|
|
|
@ -419,7 +419,8 @@ void arch_boot_proc(struct boot_image *ip, struct proc *rp)
|
|||
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".
|
||||
|
|
|
@ -143,6 +143,10 @@ void kmain(kinfo_t *local_cbi)
|
|||
|
||||
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;
|
||||
|
|
Loading…
Reference in a new issue