Index: kernel/arch/ia32/include/interrupt.h
===================================================================
--- kernel/arch/ia32/include/interrupt.h	(revision f1a2c6e79489f5b9db610f0a4b56bc17174821e9)
+++ kernel/arch/ia32/include/interrupt.h	(revision 8fb47ec08ad751bb678a4335f10281077684e7a5)
@@ -69,8 +69,9 @@
 #define VECTOR_DEBUG_IPI		(IVT_FREEBASE + 2)
 
-typedef struct {
+typedef struct istate {
 	uint32_t eax;
 	uint32_t ecx;
 	uint32_t edx;
+	uint32_t ebp;
 
 	uint32_t gs;
@@ -102,4 +103,9 @@
 }
 
+static inline unative_t istate_get_fp(istate_t *istate)
+{
+	return istate->ebp;
+}
+
 extern void (* disable_irqs_function)(uint16_t irqmask);
 extern void (* enable_irqs_function)(uint16_t irqmask);
Index: kernel/arch/ia32/src/asm.S
===================================================================
--- kernel/arch/ia32/src/asm.S	(revision f1a2c6e79489f5b9db610f0a4b56bc17174821e9)
+++ kernel/arch/ia32/src/asm.S	(revision 8fb47ec08ad751bb678a4335f10281077684e7a5)
@@ -269,4 +269,5 @@
 	pushl %gs
 
+	pushl %ebp
 	pushl %edx
 	pushl %ecx
@@ -278,5 +279,6 @@
 	movw %ax, %es
 
-	cld
+	# stop stack traces here
+	xorl %ebp, %ebp
 
 	pushl %esp          # *istate
@@ -290,4 +292,5 @@
 	popl %ecx
 	popl %edx
+	popl %ebp
 	
 	popl %gs
