Index: kernel/arch/ppc32/include/arch/context.h
===================================================================
--- kernel/arch/ppc32/include/arch/context.h	(revision beb16cfab60e9cad4457c189c54a916ace701046)
+++ kernel/arch/ppc32/include/arch/context.h	(revision a595f5a870609327cc2a8359997728004f3d034c)
@@ -36,5 +36,5 @@
 #define KERN_ppc32_CONTEXT_H_
 
-#include <typedefs.h>
+#include <arch/context_struct.h>
 
 #define SP_DELTA  16
@@ -43,34 +43,4 @@
     context_set_generic(ctx, pc, stack, size)
 
-typedef struct {
-	uintptr_t sp;
-	uintptr_t pc;
-	
-	uint32_t r2;
-	uint32_t r13;
-	uint32_t r14;
-	uint32_t r15;
-	uint32_t r16;
-	uint32_t r17;
-	uint32_t r18;
-	uint32_t r19;
-	uint32_t r20;
-	uint32_t r21;
-	uint32_t r22;
-	uint32_t r23;
-	uint32_t r24;
-	uint32_t r25;
-	uint32_t r26;
-	uint32_t r27;
-	uint32_t r28;
-	uint32_t r29;
-	uint32_t r30;
-	uint32_t r31;
-	
-	uint32_t cr;
-	
-	ipl_t ipl;
-} __attribute__((packed)) context_t;
-
 #endif
 
Index: kernel/arch/ppc32/include/arch/context_offset.h
===================================================================
--- kernel/arch/ppc32/include/arch/context_offset.h	(revision beb16cfab60e9cad4457c189c54a916ace701046)
+++ 	(revision )
@@ -1,154 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * 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_ppc32_CONTEXT_OFFSET_H_
-#define KERN_ppc32_CONTEXT_OFFSET_H_
-
-#define OFFSET_SP    0x0
-#define OFFSET_PC    0x4
-#define OFFSET_R2    0x8
-#define OFFSET_R13   0xc
-#define OFFSET_R14   0x10
-#define OFFSET_R15   0x14
-#define OFFSET_R16   0x18
-#define OFFSET_R17   0x1c
-#define OFFSET_R18   0x20
-#define OFFSET_R19   0x24
-#define OFFSET_R20   0x28
-#define OFFSET_R21   0x2c
-#define OFFSET_R22   0x30
-#define OFFSET_R23   0x34
-#define OFFSET_R24   0x38
-#define OFFSET_R25   0x3c
-#define OFFSET_R26   0x40
-#define OFFSET_R27   0x44
-#define OFFSET_R28   0x48
-#define OFFSET_R29   0x4c
-#define OFFSET_R30   0x50
-#define OFFSET_R31   0x54
-#define OFFSET_CR    0x58
-
-#define OFFSET_FR0  0x0
-#define OFFSET_FR1  0x8
-#define OFFSET_FR2  0x10
-#define OFFSET_FR3  0x18
-#define OFFSET_FR4  0x20
-#define OFFSET_FR5  0x28
-#define OFFSET_FR6  0x30
-#define OFFSET_FR7  0x38
-#define OFFSET_FR8  0x40
-#define OFFSET_FR9  0x48
-#define OFFSET_FR10  0x50
-#define OFFSET_FR11  0x58
-#define OFFSET_FR12  0x60
-#define OFFSET_FR13  0x68
-#define OFFSET_FR14  0x70
-#define OFFSET_FR15  0x78
-#define OFFSET_FR16  0x80
-#define OFFSET_FR17  0x88
-#define OFFSET_FR18  0x90
-#define OFFSET_FR19  0x98
-#define OFFSET_FR20  0xa0
-#define OFFSET_FR21  0xa8
-#define OFFSET_FR22  0xb0
-#define OFFSET_FR23  0xb8
-#define OFFSET_FR24  0xc0
-#define OFFSET_FR25  0xc8
-#define OFFSET_FR26  0xd0
-#define OFFSET_FR27  0xd8
-#define OFFSET_FR28  0xe0
-#define OFFSET_FR29  0xe8
-#define OFFSET_FR30  0xf0
-#define OFFSET_FR31  0xf8
-#define OFFSET_FPSCR 0x100
-
-#ifdef __ASM__
-
-#ifdef KERNEL
-
-#include <arch/asm/regname.h>
-
-#else /* KERNEL */
-
-#include <libarch/regname.h>
-
-#endif /* KERNEL */
-
-/* ctx: address of the structure with saved context */
-.macro CONTEXT_SAVE_ARCH_CORE ctx:req
-	stw sp, OFFSET_SP(\ctx)
-	stw r2, OFFSET_R2(\ctx)
-	stw r13, OFFSET_R13(\ctx)
-	stw r14, OFFSET_R14(\ctx)
-	stw r15, OFFSET_R15(\ctx)
-	stw r16, OFFSET_R16(\ctx)
-	stw r17, OFFSET_R17(\ctx)
-	stw r18, OFFSET_R18(\ctx)
-	stw r19, OFFSET_R19(\ctx)
-	stw r20, OFFSET_R20(\ctx)
-	stw r21, OFFSET_R21(\ctx)
-	stw r22, OFFSET_R22(\ctx)
-	stw r23, OFFSET_R23(\ctx)
-	stw r24, OFFSET_R24(\ctx)
-	stw r25, OFFSET_R25(\ctx)
-	stw r26, OFFSET_R26(\ctx)
-	stw r27, OFFSET_R27(\ctx)
-	stw r28, OFFSET_R28(\ctx)
-	stw r29, OFFSET_R29(\ctx)
-	stw r30, OFFSET_R30(\ctx)
-	stw r31, OFFSET_R31(\ctx)
-.endm
-
-/* ctx: address of the structure with saved context */
-.macro CONTEXT_RESTORE_ARCH_CORE ctx:req
-	lwz sp, OFFSET_SP(\ctx)
-	lwz r2, OFFSET_R2(\ctx)
-	lwz r13, OFFSET_R13(\ctx)
-	lwz r14, OFFSET_R14(\ctx)
-	lwz r15, OFFSET_R15(\ctx)
-	lwz r16, OFFSET_R16(\ctx)
-	lwz r17, OFFSET_R17(\ctx)
-	lwz r18, OFFSET_R18(\ctx)
-	lwz r19, OFFSET_R19(\ctx)
-	lwz r20, OFFSET_R20(\ctx)
-	lwz r21, OFFSET_R21(\ctx)
-	lwz r22, OFFSET_R22(\ctx)
-	lwz r23, OFFSET_R23(\ctx)
-	lwz r24, OFFSET_R24(\ctx)
-	lwz r25, OFFSET_R25(\ctx)
-	lwz r26, OFFSET_R26(\ctx)
-	lwz r27, OFFSET_R27(\ctx)
-	lwz r28, OFFSET_R28(\ctx)
-	lwz r29, OFFSET_R29(\ctx)
-	lwz r30, OFFSET_R30(\ctx)
-	lwz r31, OFFSET_R31(\ctx)
-.endm
-
-#endif /* __ASM__ */
-
-#endif
Index: kernel/arch/ppc32/include/arch/context_struct.ag
===================================================================
--- kernel/arch/ppc32/include/arch/context_struct.ag	(revision a595f5a870609327cc2a8359997728004f3d034c)
+++ kernel/arch/ppc32/include/arch/context_struct.ag	(revision a595f5a870609327cc2a8359997728004f3d034c)
@@ -0,0 +1,139 @@
+# 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 : [
+                {
+                        name : sp,
+                        type : uint32_t
+                },
+                {
+                        name : pc,
+                        type : uint32_t
+                },
+
+                {
+                        name : r2,
+                        type : uint32_t
+                },
+                {
+                        name : r13,
+                        type : uint32_t
+                },
+                {
+                        name : r14,
+                        type : uint32_t
+                },
+                {
+                        name : r15,
+                        type : uint32_t
+                },
+                {
+                        name : r16,
+                        type : uint32_t
+                },
+                {
+                        name : r17,
+                        type : uint32_t
+                },
+                {
+                        name : r18,
+                        type : uint32_t
+                },
+                {
+                        name : r19,
+                        type : uint32_t
+                },
+                {
+                        name : r20,
+                        type : uint32_t
+                },
+                {
+                        name : r21,
+                        type : uint32_t
+                },
+                {
+                        name : r22,
+                        type : uint32_t
+                },
+                {
+                        name : r23,
+                        type : uint32_t
+                },
+                {
+                        name : r24,
+                        type : uint32_t
+                },
+                {
+                        name : r25,
+                        type : uint32_t
+                },
+                {
+                        name : r26,
+                        type : uint32_t
+                },
+                {
+                        name : r27,
+                        type : uint32_t
+                },
+                {
+                        name : r28,
+                        type : uint32_t
+                },
+                {
+                        name : r29,
+                        type : uint32_t
+                },
+                {
+                        name : r30,
+                        type : uint32_t
+                },
+                {
+                        name : r31,
+                        type : uint32_t
+                },
+
+                {
+                        name : cr,
+                        type : uint32_t
+                },
+
+                {
+                        name : ipl,
+                        type : ipl_t
+                }
+        ]
+}
+
Index: kernel/arch/ppc32/include/arch/fpu_context.h
===================================================================
--- kernel/arch/ppc32/include/arch/fpu_context.h	(revision beb16cfab60e9cad4457c189c54a916ace701046)
+++ kernel/arch/ppc32/include/arch/fpu_context.h	(revision a595f5a870609327cc2a8359997728004f3d034c)
@@ -38,41 +38,5 @@
 #define FPU_CONTEXT_ALIGN	8	
 
-#include <typedefs.h>
-
-typedef struct {
-	uint64_t fr0;
-	uint64_t fr1;
-	uint64_t fr2;
-	uint64_t fr3;
-	uint64_t fr4;
-	uint64_t fr5;
-	uint64_t fr6;
-	uint64_t fr7;
-	uint64_t fr8;
-	uint64_t fr9;
-	uint64_t fr10;
-	uint64_t fr11;
-	uint64_t fr12;
-	uint64_t fr13;
-	uint64_t fr14;
-	uint64_t fr15;
-	uint64_t fr16;
-	uint64_t fr17;
-	uint64_t fr18;
-	uint64_t fr19;
-	uint64_t fr20;
-	uint64_t fr21;
-	uint64_t fr22;
-	uint64_t fr23;
-	uint64_t fr24;
-	uint64_t fr25;
-	uint64_t fr26;
-	uint64_t fr27;
-	uint64_t fr28;
-	uint64_t fr29;
-	uint64_t fr30;
-	uint64_t fr31;
-	uint64_t fpscr;
-} __attribute__ ((packed)) fpu_context_t;
+#include <arch/fpu_context_struct.h>
 
 #endif
Index: kernel/arch/ppc32/include/arch/fpu_context_struct.ag
===================================================================
--- kernel/arch/ppc32/include/arch/fpu_context_struct.ag	(revision a595f5a870609327cc2a8359997728004f3d034c)
+++ kernel/arch/ppc32/include/arch/fpu_context_struct.ag	(revision a595f5a870609327cc2a8359997728004f3d034c)
@@ -0,0 +1,173 @@
+# 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 : fpu_context,
+
+        includes : [
+                {
+                        include : <typedefs.h>
+                }
+        ],
+
+        members : [
+                {
+                        name : fr0,
+                        type : uint64_t
+                },
+                {
+                        name : fr1,
+                        type : uint64_t
+                },
+                {
+                        name : fr2,
+                        type : uint64_t
+                },
+                {
+                        name : fr3,
+                        type : uint64_t
+                },
+                {
+                        name : fr4,
+                        type : uint64_t
+                },
+                {
+                        name : fr5,
+                        type : uint64_t
+                },
+                {
+                        name : fr6,
+                        type : uint64_t
+                },
+                {
+                        name : fr7,
+                        type : uint64_t
+                },
+                {
+                        name : fr8,
+                        type : uint64_t
+                },
+                {
+                        name : fr9,
+                        type : uint64_t
+                },
+                {
+                        name : fr10,
+                        type : uint64_t
+                },
+                {
+                        name : fr11,
+                        type : uint64_t
+                },
+                {
+                        name : fr12,
+                        type : uint64_t
+                },
+                {
+                        name : fr13,
+                        type : uint64_t
+                },
+                {
+                        name : fr14,
+                        type : uint64_t
+                },
+                {
+                        name : fr15,
+                        type : uint64_t
+                },
+                {
+                        name : fr16,
+                        type : uint64_t
+                },
+                {
+                        name : fr17,
+                        type : uint64_t
+                },
+                {
+                        name : fr18,
+                        type : uint64_t
+                },
+                {
+                        name : fr19,
+                        type : uint64_t
+                },
+                {
+                        name : fr20,
+                        type : uint64_t
+                },
+                {
+                        name : fr21,
+                        type : uint64_t
+                },
+                {
+                        name : fr22,
+                        type : uint64_t
+                },
+                {
+                        name : fr23,
+                        type : uint64_t
+                },
+                {
+                        name : fr24,
+                        type : uint64_t
+                },
+                {
+                        name : fr25,
+                        type : uint64_t
+                },
+                {
+                        name : fr26,
+                        type : uint64_t
+                },
+                {
+                        name : fr27,
+                        type : uint64_t
+                },
+                {
+                        name : fr28,
+                        type : uint64_t
+                },
+                {
+                        name : fr29,
+                        type : uint64_t
+                },
+                {
+                        name : fr30,
+                        type : uint64_t
+                },
+                {
+                        name : fr31,
+                        type : uint64_t
+                },
+                {
+                        name : fpscr,
+                        type : uint64_t
+                }
+
+        ]
+}
+
