Index: kernel/arch/amd64/include/context.h
===================================================================
--- kernel/arch/amd64/include/context.h	(revision 33be9ac44c5c83d4c49a72fac69ecd83ce53b2e7)
+++ kernel/arch/amd64/include/context.h	(revision fc2e71e546816f936b7a6de413aba3885f444a5f)
@@ -46,4 +46,11 @@
 #define SP_DELTA     16
 
+#define context_set(c, _pc, stack, size) \
+	do { \
+		(c)->pc = (uintptr_t) (_pc); \
+		(c)->sp = ((uintptr_t) (stack)) + (size) - SP_DELTA; \
+		(c)->rbp = 0; \
+	} while (0)
+
 #endif /* KERNEL */
 
Index: kernel/arch/amd64/include/interrupt.h
===================================================================
--- kernel/arch/amd64/include/interrupt.h	(revision 33be9ac44c5c83d4c49a72fac69ecd83ce53b2e7)
+++ kernel/arch/amd64/include/interrupt.h	(revision fc2e71e546816f936b7a6de413aba3885f444a5f)
@@ -70,5 +70,5 @@
 
 /** This is passed to interrupt handlers */
-typedef struct {
+typedef struct istate {
 	uint64_t rax;
 	uint64_t rcx;
@@ -80,4 +80,5 @@
 	uint64_t r10;
 	uint64_t r11;
+	uint64_t rbp;
 	uint64_t error_word;
 	uint64_t rip;
@@ -101,4 +102,8 @@
 	return istate->rip;
 }
+static inline unative_t istate_get_fp(istate_t *istate)
+{
+	return istate->rbp;
+}
 
 extern void (* disable_irqs_function)(uint16_t irqmask);
