47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
|
#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((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
|