Index: kernel/generic/include/interrupt.h
===================================================================
--- kernel/generic/include/interrupt.h	(revision ada559c5e94ba58f9ea3b263de2877127eba8873)
+++ kernel/generic/include/interrupt.h	(revision 8eec3c82a9d04f56cd45c25f1e2466f94a863763)
@@ -46,4 +46,14 @@
 typedef void (* iroutine)(int, istate_t *);
 
+typedef struct {
+	const char *name;
+	iroutine f;
+	uint64_t cycles;
+	uint64_t count;
+} exc_table_t;
+
+IRQ_SPINLOCK_EXTERN(exctbl_lock);
+extern exc_table_t exc_table[];
+
 extern void fault_if_from_uspace(istate_t *, const char *, ...);
 extern iroutine exc_register(int, const char *, iroutine);
Index: kernel/generic/include/sysinfo/abi.h
===================================================================
--- kernel/generic/include/sysinfo/abi.h	(revision ada559c5e94ba58f9ea3b263de2877127eba8873)
+++ kernel/generic/include/sysinfo/abi.h	(revision 8eec3c82a9d04f56cd45c25f1e2466f94a863763)
@@ -40,6 +40,7 @@
 #define LOAD_STEPS  3
 
-/** Maximum task name size */
+/** Maximum name sizes */
 #define TASK_NAME_BUFLEN  20
+#define EXC_NAME_BUFLEN   20
 
 /** Thread states */
@@ -123,4 +124,14 @@
 } stats_thread_t;
 
+/** Statistics about a single exception
+ *
+ */
+typedef struct {
+	unsigned int id;             /**< Exception ID */
+	char desc[EXC_NAME_BUFLEN];  /**< Description */
+	uint64_t cycles;             /**< Number of CPU cycles in the handler */
+	uint64_t count;              /**< Number of handled exceptions */
+} stats_exc_t;
+
 /** Load fixed-point value */
 typedef uint32_t load_t;
