Index: kernel/arch/arm32/Makefile.inc
===================================================================
--- kernel/arch/arm32/Makefile.inc	(revision 95b2276c6b101a8842777b88c5d4c6bb23146e9a)
+++ kernel/arch/arm32/Makefile.inc	(revision 6a8ddd3712c234be2a222a7dc9d7803bc9c667b0)
@@ -97,4 +97,5 @@
 
 ARCH_AUTOGENS_AG = \
-	arch/$(KARCH)/include/arch/istate_struct.ag
+	arch/$(KARCH)/include/arch/istate_struct.ag \
+	arch/$(KARCH)/include/arch/context_struct.ag
 
Index: kernel/arch/arm32/include/arch/context.h
===================================================================
--- kernel/arch/arm32/include/arch/context.h	(revision 95b2276c6b101a8842777b88c5d4c6bb23146e9a)
+++ kernel/arch/arm32/include/arch/context.h	(revision 6a8ddd3712c234be2a222a7dc9d7803bc9c667b0)
@@ -39,4 +39,5 @@
 #include <align.h>
 #include <arch/stack.h>
+#include <arch/context_struct.h>
 
 /* Put one item onto the stack to support get_stack_base() and align it up. */
@@ -52,27 +53,4 @@
 #ifndef __ASM__
 
-#include <typedefs.h>
-
-/** Thread context containing registers that must be preserved across function
- * calls.
- */
-typedef struct {
-	uint32_t cpu_mode;
-	uintptr_t sp;
-	uintptr_t pc;
-	
-	uint32_t r4;
-	uint32_t r5;
-	uint32_t r6;
-	uint32_t r7;
-	uint32_t r8;
-	uint32_t r9;
-	uint32_t r10;
-	uint32_t fp;	/* r11 */
-	
-	ipl_t ipl;
-} context_t;
-
-
 #endif /* __ASM__ */
 
Index: kernel/arch/arm32/include/arch/context_struct.ag
===================================================================
--- kernel/arch/arm32/include/arch/context_struct.ag	(revision 6a8ddd3712c234be2a222a7dc9d7803bc9c667b0)
+++ kernel/arch/arm32/include/arch/context_struct.ag	(revision 6a8ddd3712c234be2a222a7dc9d7803bc9c667b0)
@@ -0,0 +1,95 @@
+# 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>
+                },
+        ],
+
+        #
+        # Thread context containing registers that must be preserved across
+        # function calls.
+        #
+        members : [
+                {
+                        name : cpu_mode,
+                        type : uint32_t
+                },
+                {
+                        name : sp,
+                        type : uintptr_t
+                },
+                {
+                        name : pc,
+                        type : uintptr_t
+                },
+
+                {
+                        name : r4,
+                        type : uint32_t
+                },
+                {
+                        name : r5,
+                        type : uint32_t
+                },
+                {
+                        name : r6,
+                        type : uint32_t
+                },
+                {
+                        name : r7,
+                        type : uint32_t
+                },
+                {
+                        name : r8,
+                        type : uint32_t
+                },
+                {
+                        name : r9,
+                        type : uint32_t
+                },
+                {
+                        name : r10,
+                        type : uint32_t
+                },
+                {
+                        # r11
+                        name : fp,
+                        type : uint32_t
+                },
+
+                {
+                        name : ipl,
+                        type : ipl_t
+                }
+        ]
+}
+
