Index: kernel/arch/amd64/include/arch/context.h
===================================================================
--- kernel/arch/amd64/include/arch/context.h	(revision 4236b18ef8b01c2658d23f54ca802874c8232232)
+++ kernel/arch/amd64/include/arch/context.h	(revision 33add3a8e1974ac8117cfbec11267a0c35a85660)
@@ -36,5 +36,5 @@
 #define KERN_amd64_CONTEXT_H_
 
-#include <typedefs.h>
+#include <arch/context_struct.h>
 
 /*
@@ -52,22 +52,4 @@
 	} while (0)
 
-/* We include only registers that must be preserved
- * during function call
- */
-typedef struct {
-	uintptr_t sp;
-	uintptr_t pc;
-	
-	uint64_t rbx;
-	uint64_t rbp;
-	
-	uint64_t r12;
-	uint64_t r13;
-	uint64_t r14;
-	uint64_t r15;
-	
-	ipl_t ipl;
-} __attribute__ ((packed)) context_t;
-
 #endif
 
Index: kernel/arch/amd64/include/arch/context_offset.h
===================================================================
--- kernel/arch/amd64/include/arch/context_offset.h	(revision 4236b18ef8b01c2658d23f54ca802874c8232232)
+++ 	(revision )
@@ -1,79 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef KERN_amd64_CONTEXT_OFFSET_H_
-#define KERN_amd64_CONTEXT_OFFSET_H_
-
-#define OFFSET_SP   0x00
-#define OFFSET_PC   0x08
-#define OFFSET_RBX  0x10
-#define OFFSET_RBP  0x18
-#define OFFSET_R12  0x20
-#define OFFSET_R13  0x28
-#define OFFSET_R14  0x30
-#define OFFSET_R15  0x38
-
-#ifdef KERNEL
-	#define OFFSET_IPL  0x40
-#else
-	#define OFFSET_TLS  0x40
-#endif
-
-#ifdef __ASM__
-
-# ctx: address of the structure with saved context
-# pc: return address
-.macro CONTEXT_SAVE_ARCH_CORE ctx:req pc:req
-	movq \pc, OFFSET_PC(\ctx)
-	movq %rsp, OFFSET_SP(\ctx)
-	
-	movq %rbx, OFFSET_RBX(\ctx)
-	movq %rbp, OFFSET_RBP(\ctx)
-	movq %r12, OFFSET_R12(\ctx)
-	movq %r13, OFFSET_R13(\ctx)
-	movq %r14, OFFSET_R14(\ctx)
-	movq %r15, OFFSET_R15(\ctx)
-.endm
-
-# ctx: address of the structure with saved context
-.macro CONTEXT_RESTORE_ARCH_CORE ctx:req pc:req
-	movq OFFSET_R15(\ctx), %r15
-	movq OFFSET_R14(\ctx), %r14
-	movq OFFSET_R13(\ctx), %r13
-	movq OFFSET_R12(\ctx), %r12
-	movq OFFSET_RBP(\ctx), %rbp
-	movq OFFSET_RBX(\ctx), %rbx
-	
-	movq OFFSET_SP(\ctx), %rsp   # ctx->sp -> %rsp
-	
-	movq OFFSET_PC(\ctx), \pc
-.endm
-
-#endif
-
-#endif
Index: kernel/arch/amd64/include/arch/context_struct.ag
===================================================================
--- kernel/arch/amd64/include/arch/context_struct.ag	(revision 33add3a8e1974ac8117cfbec11267a0c35a85660)
+++ kernel/arch/amd64/include/arch/context_struct.ag	(revision 33add3a8e1974ac8117cfbec11267a0c35a85660)
@@ -0,0 +1,83 @@
+# Copyright (c) 2014 Jakub Jermar 
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+{
+        name : context,
+
+        includes : [
+                {
+                        include : <typedefs.h>
+                }
+        ],
+
+        members : [
+                #
+                # We include only registers that must be preserved
+                # during function call.
+                #
+
+                {
+                        name : sp,
+                        type : uint64_t
+                },
+                {
+                        name : pc,
+                        type : uint64_t
+                },
+
+                {
+                        name : rbx,
+                        type : uint64_t
+                },
+                {
+                        name : rbp,
+                        type : uint64_t
+                },
+
+                {
+                        name : r12,
+                        type : uint64_t
+                },
+                {
+                        name : r13,
+                        type : uint64_t
+                },
+                {
+                        name : r14,
+                        type : uint64_t
+                },
+                {
+                        name : r15,
+                        type : uint64_t
+                },
+
+                {
+                        name : ipl,
+                        type : ipl_t
+                }
+        ]
+}
