X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=misc%2Ftest_vm%2Finclude%2Fgeekos%2Fkassert.h;fp=misc%2Ftest_vm%2Finclude%2Fgeekos%2Fkassert.h;h=434a8a8517472846af243177b80e00ccb389be13;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hp=0000000000000000000000000000000000000000;hpb=626595465a2c6987606a6bc697df65130ad8c2d3;p=palacios.releases.git diff --git a/misc/test_vm/include/geekos/kassert.h b/misc/test_vm/include/geekos/kassert.h new file mode 100644 index 0000000..434a8a8 --- /dev/null +++ b/misc/test_vm/include/geekos/kassert.h @@ -0,0 +1,81 @@ +/* + * Definition of KASSERT() macro, and other useful debug macros + * Copyright (c) 2001, David H. Hovemeyer + * $Revision: 1.1 $ + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "COPYING". + */ + +#ifndef GEEKOS_KASSERT_H +#define GEEKOS_KASSERT_H + +#include + +#ifndef NDEBUG + +struct Kernel_Thread; +extern struct Kernel_Thread* g_currentThread; + +#define KASSERT(cond) \ +do { \ + if (!(cond)) { \ + Set_Current_Attr(ATTRIB(RED, GRAY|BRIGHT)); \ + Print("Failed assertion in %s: %s at %s, line %d, RA=%lx, thread=%p\n",\ + __func__, #cond, __FILE__, __LINE__, \ + (ulong_t) __builtin_return_address(0), \ + g_currentThread); \ + while (1) \ + ; \ + } \ +} while (0) + +#define TODO(message) \ +do { \ + Set_Current_Attr(ATTRIB(BLUE, GRAY|BRIGHT)); \ + Print("Unimplemented feature: %s\n", (message)); \ + while (1) \ + ; \ +} while (0) + +/* + * Spin for some number of iterations. + * This is useful for slowing down things that go by too + * quickly. + */ +#define PAUSE(count) \ +do { \ + ulong_t i; \ + for (i = 0; i < (count); ++i) \ + ; \ +} while (0) + +#else + +/* + * The debug macros are no-ops when NDEBUG is defined. + */ +#define KASSERT(cond) +#define TODO(message) +#define PAUSE(count) + +#endif + +/* + * Stop dead. + * Its behavior does not depend on whether or not this + * is a debug build. + */ +#define STOP() while (1) + +/* + * Panic function. + */ +#define Panic(args...) \ +do { \ + Set_Current_Attr(ATTRIB(RED, GRAY|BRIGHT)); \ + Print(args); \ + while (1) ; \ +} while (0) + +#endif /* GEEKOS_KASSERT_H */