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:
Ben Gras 2012-11-06 15:36:53 +01:00
parent 77b6e2dcaa
commit ba05f39d1e
3 changed files with 7 additions and 1 deletions

View file

@ -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

View file

@ -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".

View file

@ -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;