#ifndef _SANITYCHECK_H #define _SANITYCHECK_H 1 #include "vm.h" #include "glo.h" #if SANITYCHECKS /* This macro is used in the sanity check functions, where file and * line are function arguments. */ #define MYASSERT(c) do { if(!(c)) { \ printf("VM:%s:%d: %s failed\n", file, line, #c); \ vm_panic("sanity check failed", NO_NUM); } } while(0) #define SANITYCHECK(l) if(!nocheck && ((l) <= vm_sanitychecklevel)) { \ int failflag = 0; \ u32_t *origptr = CHECKADDR;\ int _sanep; \ struct vmproc *vmp; \ \ for(_sanep = 0; _sanep < sizeof(data1) / sizeof(*origptr); \ _sanep++) { \ if(origptr[_sanep] != data1[_sanep]) { \ printf("%d: %08lx != %08lx ", \ _sanep, origptr[_sanep], data1[_sanep]); failflag = 1; \ } \ } \ if(failflag) { \ printf("%s:%d: memory corruption test failed\n", \ __FILE__, __LINE__); \ vm_panic("memory corruption", NO_NUM); \ } \ for(vmp = vmproc; vmp <= &vmproc[_NR_PROCS]; vmp++) { \ if((vmp->vm_flags & (VMF_INUSE | VMF_HASPT)) == \ (VMF_INUSE | VMF_HASPT)) { \ pt_sanitycheck(&vmp->vm_pt, __FILE__, __LINE__); \ } \ } \ map_sanitycheck(__FILE__, __LINE__); \ } #else #define SANITYCHECK #endif #endif