X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=test%2Fgeekos_test_vm%2Finclude%2Fgeekos%2Fkassert.h;fp=test%2Fgeekos_test_vm%2Finclude%2Fgeekos%2Fkassert.h;h=434a8a8517472846af243177b80e00ccb389be13;hp=0000000000000000000000000000000000000000;hb=a70930549d1b741704dd7af4e6bb0e89f6f8a519;hpb=afb634a80f946634454a5d067a92aa600227bd93 diff --git a/test/geekos_test_vm/include/geekos/kassert.h b/test/geekos_test_vm/include/geekos/kassert.h new file mode 100644 index 0000000..434a8a8 --- /dev/null +++ b/test/geekos_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 */