/* * Ugly hack of doom to set insert debugging information for CIF programs. */ #warning "CIF DMem tracking hack in use" typedef unsigned int word; extern word mdparam1, mdparam2; static char insert_info[80]; static void get_insert_info () { mdparam1 = (word) insert_info; } static void set_insert_info (int line, const char *file) { ((int *) insert_info)[0] = 1; ((int *) insert_info)[1] = 2 * sizeof (int); strcpy (insert_info + 2 * sizeof(int), file); mdparam1 = (word) line; mdparam2 = (word) get_insert_info; } static void *track_DMemAlloc (int line, const char *file, size_t size) { CTRACE ("alloc %s:%d %d\n", file, line, size); set_insert_info (line, file); return DMemAlloc (size); } static void track_DMemFree (int line, const char *file, void *ptr) { CTRACE ("free %s:%d %08x\n", file, line, (unsigned int) ptr); set_insert_info (line, file); DMemFree (ptr); } #define SetInsert() set_insert_info (__LINE__, __FILE__) #undef DMemAlloc #define DMemAlloc(size) track_DMemAlloc (__LINE__, __FILE__, size) #undef DMemFree #define DMemFree(ptr) track_DMemFree (__LINE__, __FILE__, ptr)