clock_t exp_time, tmr_func_t watchdog, clock_t *new_head) );
#define PRINT_STATS(cum_spenttime, cum_instances) { \
- if(ex64hi(cum_spenttime)) { printf(" ???\n"); } \
- printf("%s:%d,%lu,%lu,%lu,%d.%04d%%\n", \
- __FILE__, __LINE__, cum_instances, \
- div64u(cum_spenttime, cum_instances), \
- ex64lo(cum_spenttime), \
- perc/10000, perc%10000); \
+ if(ex64hi(cum_spenttime)) { util_stacktrace(); printf(" ( ??? %lu %lu)\n", \
+ ex64hi(cum_spenttime), ex64lo(cum_spenttime)); } \
+ printf("%s:%d,%lu,%lu\n", \
+ __FILE__, __LINE__, cum_instances, \
+ ex64lo(cum_spenttime)); \
}
#define RESET_STATS(starttime, cum_instances, cum_spenttime, cum_starttime) { \
static int _cum_instances; \
u64_t _next_cum_spent, _starttime, _endtime, _dt, _cum_dt; \
u32_t _dt_micros; \
- int perc; \
read_tsc_64(&_starttime); \
do { timed_code_block } while(0); \
read_tsc_64(&_endtime); \
_cum_spenttime = add64(_cum_spenttime, _dt); \
_cum_instances++; \
_cum_dt = sub64(_endtime, _cum_starttime); \
- perc=ex64lo(div64(mul64(_cum_spenttime,make64(1000000,0)), _cum_dt)); \
if(cmp64(_cum_dt, make64(0, 120)) > 0) { \
PRINT_STATS(_cum_spenttime, _cum_instances); \
RESET_STATS(_starttime, _cum_instances, _cum_spenttime, _cum_starttime); \
#include <minix/ansi.h>
#endif
+#if TIME_ASSERTS
+#define _ASSERT_EVALUATE(st) do { TIME_BLOCK(st); } while(0)
+#else
+#define _ASSERT_EVALUATE(st) do { st } while(0)
+#endif
+
#ifdef NDEBUG
/* Debugging disabled -- do not evaluate assertions. */
#define assert(expr) ((void) 0)
#define __xstr(x) __makestr(x)
_PROTOTYPE( void __bad_assertion, (const char *_mess) );
-#define assert(expr) ((expr)? (void)0 : \
- __bad_assertion("Assertion \"" #expr \
- "\" failed, file " __xstr(__FILE__) \
- ", line " __xstr(__LINE__) "\n"))
+#define assert(expr) do { int _av; \
+ _ASSERT_EVALUATE(_av = !!(expr);); \
+ if(!_av) { \
+ __bad_assertion("Assertion \"" #expr "\" failed, file " __xstr(__FILE__) ", line " __xstr(__LINE__) "\n"); \
+ } } while(0)
#else
#define assert(expr) ((void) ((expr) ? 0 : __assert( __FILE__, __LINE__)))
#endif /* _ANSI */
message m_pagefault;
int err;
- assert(frame);
-
pagefaultcr2 = read_cr2();
#if 0
pr->p_endpoint, pagefaultcr2, pr->p_seg.p_cr3, read_cr3());
#endif
- if(pr->p_seg.p_cr3) {
- assert(pr->p_seg.p_cr3 == read_cr3());
- }
-
in_physcopy = (frame->eip > (vir_bytes) phys_copy) &&
(frame->eip < (vir_bytes) phys_copy_fault);
}
/* Don't schedule this process until pagefault is handled. */
- assert(pr->p_seg.p_cr3 == read_cr3());
- assert(!RTS_ISSET(pr, RTS_PAGEFAULT));
RTS_SET(pr, RTS_PAGEFAULT);
/* tell Vm about the pagefault */