-void panic (const char *, ...)
- __attribute__ ((format (printf, 1, 2), noreturn));
+/* Prints a debug message along with the source file name, line
+ number, and function name of where it was emitted. CLASS is
+ used to filter out unwanted messages. */
+#define DEBUG(CLASS, ...) \
+ debug_message (__FILE__, __LINE__, __func__, #CLASS, __VA_ARGS__)
+
+/* Halts the OS, printing the source file name, line number, and
+ function name, plus a user-specific message. */
+#define PANIC(...) debug_panic (__FILE__, __LINE__, __func__, __VA_ARGS__)
+
+void debug_enable (char *classes);
+void debug_message (const char *file, int line, const char *function,
+ const char *class, const char *message, ...)
+ PRINTF_FORMAT (5, 6);
+void debug_panic (const char *file, int line, const char *function,
+ const char *message, ...) PRINTF_FORMAT (4, 5) NO_RETURN;
+void debug_backtrace (void);