Index: arch/ia32/include/asm.h
===================================================================
--- arch/ia32/include/asm.h	(revision 5a7d9d102f9d67cd763b1c39365a459c0ad22de8)
+++ arch/ia32/include/asm.h	(revision 23d22eb27cfdf57d63002f3401a0a522db3288b0)
@@ -54,27 +54,34 @@
 static inline void cpu_sleep(void) { __asm__("hlt\n"); };
 
-/** Read CR2
- *
- * Return value in CR2
- *
- * @return Value read.
- */
-static inline __u32 read_cr2(void) { __u32 v; __asm__ volatile ("movl %%cr2,%0\n" : "=r" (v)); return v; }
-
-/** Write CR3
- *
- * Write value to CR3.
- *
- * @param v Value to be written.
- */
-static inline void write_cr3(__u32 v) { __asm__ volatile ("movl %0,%%cr3\n" : : "r" (v)); }
-
-/** Read CR3
- *
- * Return value in CR3
- *
- * @return Value read.
- */
-static inline __u32 read_cr3(void) { __u32 v; __asm__ volatile ("movl %%cr3,%0\n" : "=r" (v)); return v; }
+#define GEN_READ_REG(reg) static inline __native read_ ##reg (void) \
+    { \
+	__native res; \
+	__asm__ volatile ("movl %%" #reg ", %0" : "=r" (res) ); \
+	return res; \
+    }
+
+#define GEN_WRITE_REG(reg) static inline void write_ ##reg (__native regn) \
+    { \
+	__asm__ volatile ("movl %0, %%" #reg : : "r" (regn)); \
+    }
+
+GEN_READ_REG(cr0);
+GEN_READ_REG(cr2);
+GEN_READ_REG(cr3);
+GEN_WRITE_REG(cr3);
+
+GEN_READ_REG(dr0);
+GEN_READ_REG(dr1);
+GEN_READ_REG(dr2);
+GEN_READ_REG(dr3);
+GEN_READ_REG(dr6);
+GEN_READ_REG(dr7);
+
+GEN_WRITE_REG(dr0);
+GEN_WRITE_REG(dr1);
+GEN_WRITE_REG(dr2);
+GEN_WRITE_REG(dr3);
+GEN_WRITE_REG(dr6);
+GEN_WRITE_REG(dr7);
 
 /** Byte to port
Index: arch/ia32/include/cpu.h
===================================================================
--- arch/ia32/include/cpu.h	(revision 5a7d9d102f9d67cd763b1c39365a459c0ad22de8)
+++ arch/ia32/include/cpu.h	(revision 23d22eb27cfdf57d63002f3401a0a522db3288b0)
@@ -34,4 +34,6 @@
 #include <arch/asm.h>
 
+#define EFLAGS_RF       (1 << 16)
+
 struct cpu_arch {
 	int vendor;
Index: arch/ia32/include/debugger.h
===================================================================
--- arch/ia32/include/debugger.h	(revision 23d22eb27cfdf57d63002f3401a0a522db3288b0)
+++ arch/ia32/include/debugger.h	(revision 23d22eb27cfdf57d63002f3401a0a522db3288b0)
@@ -0,0 +1,1 @@
+../../amd64/include/debugger.h
Index: arch/ia32/include/interrupt.h
===================================================================
--- arch/ia32/include/interrupt.h	(revision 5a7d9d102f9d67cd763b1c39365a459c0ad22de8)
+++ arch/ia32/include/interrupt.h	(revision 23d22eb27cfdf57d63002f3401a0a522db3288b0)
@@ -54,4 +54,5 @@
 #endif
 
+#define VECTOR_DEBUG            1
 #define VECTOR_PIC_SPUR		(IVT_IRQBASE+IRQ_PIC_SPUR)
 #define VECTOR_CLK		(IVT_IRQBASE+IRQ_CLK)
