Index: kernel/arch/sparc64/Makefile.inc
===================================================================
--- kernel/arch/sparc64/Makefile.inc	(revision 50805c9fe7d60aa26c79db6832302ee379195077)
+++ kernel/arch/sparc64/Makefile.inc	(revision b482287643c356a0fe7f894a9952ca2a25b96498)
@@ -109,4 +109,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/sparc64/include/arch/context.h
===================================================================
--- kernel/arch/sparc64/include/arch/context.h	(revision 50805c9fe7d60aa26c79db6832302ee379195077)
+++ kernel/arch/sparc64/include/arch/context.h	(revision b482287643c356a0fe7f894a9952ca2a25b96498)
@@ -37,4 +37,5 @@
 
 #include <arch/stack.h>
+#include <arch/context_struct.h>
 #include <typedefs.h>
 #include <align.h>
@@ -50,30 +51,4 @@
 	} while (0)
 
-/*
- * Save only registers that must be preserved across
- * function calls.
- */
-typedef struct {
-	uintptr_t sp;		/* %o6 */
-	uintptr_t pc;		/* %o7 */
-	uint64_t i0;
-	uint64_t i1;
-	uint64_t i2;
-	uint64_t i3;
-	uint64_t i4;
-	uint64_t i5;
-	uintptr_t fp;		/* %i6 */
-	uintptr_t i7;
-	uint64_t l0;
-	uint64_t l1;
-	uint64_t l2;
-	uint64_t l3;
-	uint64_t l4;
-	uint64_t l5;
-	uint64_t l6;
-	uint64_t l7;
-	ipl_t ipl;
-} context_t;
-
 #endif
 
Index: rnel/arch/sparc64/include/arch/context_offset.h
===================================================================
--- kernel/arch/sparc64/include/arch/context_offset.h	(revision 50805c9fe7d60aa26c79db6832302ee379195077)
+++ 	(revision )
@@ -1,107 +1,0 @@
-/*
- * Copyright (c) 2005 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.
- */
-
-#ifndef KERN_sparc64_CONTEXT_OFFSET_H_
-#define KERN_sparc64_CONTEXT_OFFSET_H_
-
-#define OFFSET_SP       0x0
-#define OFFSET_PC       0x8
-#define OFFSET_I0       0x10
-#define OFFSET_I1       0x18
-#define OFFSET_I2       0x20
-#define OFFSET_I3       0x28
-#define OFFSET_I4       0x30
-#define OFFSET_I5       0x38
-#define OFFSET_FP       0x40
-#define OFFSET_I7       0x48
-#define OFFSET_L0       0x50
-#define OFFSET_L1       0x58
-#define OFFSET_L2       0x60
-#define OFFSET_L3       0x68
-#define OFFSET_L4       0x70
-#define OFFSET_L5       0x78
-#define OFFSET_L6       0x80
-#define OFFSET_L7       0x88
-
-#ifndef KERNEL		
-# define OFFSET_TP      0x90
-#endif
-
-#ifdef __ASM__ 
-
-.macro CONTEXT_SAVE_ARCH_CORE ctx:req
-	stx %sp, [\ctx + OFFSET_SP]
-	stx %o7, [\ctx + OFFSET_PC]
-	stx %i0, [\ctx + OFFSET_I0]
-	stx %i1, [\ctx + OFFSET_I1]
-	stx %i2, [\ctx + OFFSET_I2]
-	stx %i3, [\ctx + OFFSET_I3]
-	stx %i4, [\ctx + OFFSET_I4]
-	stx %i5, [\ctx + OFFSET_I5]
-	stx %fp, [\ctx + OFFSET_FP]
-	stx %i7, [\ctx + OFFSET_I7]
-	stx %l0, [\ctx + OFFSET_L0]
-	stx %l1, [\ctx + OFFSET_L1]
-	stx %l2, [\ctx + OFFSET_L2]
-	stx %l3, [\ctx + OFFSET_L3]
-	stx %l4, [\ctx + OFFSET_L4]
-	stx %l5, [\ctx + OFFSET_L5]
-	stx %l6, [\ctx + OFFSET_L6]
-	stx %l7, [\ctx + OFFSET_L7]
-#ifndef KERNEL		
-	stx %g7, [\ctx + OFFSET_TP]
-#endif
-.endm
-
-.macro CONTEXT_RESTORE_ARCH_CORE ctx:req
-	ldx [\ctx + OFFSET_SP], %sp
-	ldx [\ctx + OFFSET_PC], %o7
-	ldx [\ctx + OFFSET_I0], %i0
-	ldx [\ctx + OFFSET_I1], %i1
-	ldx [\ctx + OFFSET_I2], %i2
-	ldx [\ctx + OFFSET_I3], %i3
-	ldx [\ctx + OFFSET_I4], %i4
-	ldx [\ctx + OFFSET_I5], %i5
-	ldx [\ctx + OFFSET_FP], %fp
-	ldx [\ctx + OFFSET_I7], %i7
-	ldx [\ctx + OFFSET_L0], %l0
-	ldx [\ctx + OFFSET_L1], %l1
-	ldx [\ctx + OFFSET_L2], %l2
-	ldx [\ctx + OFFSET_L3], %l3
-	ldx [\ctx + OFFSET_L4], %l4
-	ldx [\ctx + OFFSET_L5], %l5
-	ldx [\ctx + OFFSET_L6], %l6
-	ldx [\ctx + OFFSET_L7], %l7
-#ifndef KERNEL		
-	ldx [\ctx + OFFSET_TP], %g7
-#endif
-.endm
-
-#endif /* __ASM__ */ 
-
-#endif
Index: kernel/arch/sparc64/include/arch/context_struct.ag
===================================================================
--- kernel/arch/sparc64/include/arch/context_struct.ag	(revision b482287643c356a0fe7f894a9952ca2a25b96498)
+++ kernel/arch/sparc64/include/arch/context_struct.ag	(revision b482287643c356a0fe7f894a9952ca2a25b96498)
@@ -0,0 +1,122 @@
+# 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>
+                }
+        ],
+
+        #
+        # Save only registers that must be preserved across function calls.
+        #
+        members : [
+                {
+                        # %o6
+                        name : sp,
+                        type : uintptr_t
+                },
+                {
+                        # %o7
+                        name : pc,
+                        type : uintptr_t
+                },
+                {
+                        name : i0,
+                        type : uint64_t
+                },
+                {
+                        name : i1,
+                        type : uint64_t
+                },
+                {
+                        name : i2,
+                        type : uint64_t
+                },
+                {
+                        name : i3,
+                        type : uint64_t
+                },
+                {
+                        name : i4,
+                        type : uint64_t
+                },
+                {
+                        name : i5,
+                        type : uint64_t
+                },
+                {
+                        # %i6
+                        name : fp,
+                        type : uintptr_t
+                },
+                {
+                        name : i7,
+                        type : uintptr_t
+                },
+                {
+                        name : l0,
+                        type : uint64_t
+                },
+                {
+                        name : l1,
+                        type : uint64_t
+                },
+                {
+                        name : l2,
+                        type : uint64_t
+                },
+                {
+                        name : l3,
+                        type : uint64_t
+                },
+                {
+                        name : l4,
+                        type : uint64_t
+                },
+                {
+                        name : l5,
+                        type : uint64_t
+                },
+                {
+                        name : l6,
+                        type : uint64_t
+                },
+                {
+                        name : l7,
+                        type : uint64_t
+                },
+                {
+                        name : ipl,
+                        type : ipl_t
+                }
+        ]
+}
+
Index: kernel/arch/sparc64/src/context.S
===================================================================
--- kernel/arch/sparc64/src/context.S	(revision 50805c9fe7d60aa26c79db6832302ee379195077)
+++ kernel/arch/sparc64/src/context.S	(revision b482287643c356a0fe7f894a9952ca2a25b96498)
@@ -27,5 +27,5 @@
 #
 
-#include <arch/context_offset.h>
+#include <arch/context_struct.h>
 #include <arch/arch.h>
 #include <arch/regdef.h>
@@ -47,5 +47,22 @@
 	flushw
 
-	CONTEXT_SAVE_ARCH_CORE %o0
+	stx %sp, [%o0 + CONTEXT_OFFSET_SP]
+	stx %o7, [%o0 + CONTEXT_OFFSET_PC]
+	stx %i0, [%o0 + CONTEXT_OFFSET_I0]
+	stx %i1, [%o0 + CONTEXT_OFFSET_I1]
+	stx %i2, [%o0 + CONTEXT_OFFSET_I2]
+	stx %i3, [%o0 + CONTEXT_OFFSET_I3]
+	stx %i4, [%o0 + CONTEXT_OFFSET_I4]
+	stx %i5, [%o0 + CONTEXT_OFFSET_I5]
+	stx %fp, [%o0 + CONTEXT_OFFSET_FP]
+	stx %i7, [%o0 + CONTEXT_OFFSET_I7]
+	stx %l0, [%o0 + CONTEXT_OFFSET_L0]
+	stx %l1, [%o0 + CONTEXT_OFFSET_L1]
+	stx %l2, [%o0 + CONTEXT_OFFSET_L2]
+	stx %l3, [%o0 + CONTEXT_OFFSET_L3]
+	stx %l4, [%o0 + CONTEXT_OFFSET_L4]
+	stx %l5, [%o0 + CONTEXT_OFFSET_L5]
+	stx %l6, [%o0 + CONTEXT_OFFSET_L6]
+	stx %l7, [%o0 + CONTEXT_OFFSET_L7]
 	retl
 	mov 1, %o0		! context_save_arch returns 1
@@ -69,5 +86,22 @@
 	wrpr %l0, %pstate
 
-	CONTEXT_RESTORE_ARCH_CORE %o0
+	ldx [%o0 + CONTEXT_OFFSET_SP], %sp
+	ldx [%o0 + CONTEXT_OFFSET_PC], %o7
+	ldx [%o0 + CONTEXT_OFFSET_I0], %i0
+	ldx [%o0 + CONTEXT_OFFSET_I1], %i1
+	ldx [%o0 + CONTEXT_OFFSET_I2], %i2
+	ldx [%o0 + CONTEXT_OFFSET_I3], %i3
+	ldx [%o0 + CONTEXT_OFFSET_I4], %i4
+	ldx [%o0 + CONTEXT_OFFSET_I5], %i5
+	ldx [%o0 + CONTEXT_OFFSET_FP], %fp
+	ldx [%o0 + CONTEXT_OFFSET_I7], %i7
+	ldx [%o0 + CONTEXT_OFFSET_L0], %l0
+	ldx [%o0 + CONTEXT_OFFSET_L1], %l1
+	ldx [%o0 + CONTEXT_OFFSET_L2], %l2
+	ldx [%o0 + CONTEXT_OFFSET_L3], %l3
+	ldx [%o0 + CONTEXT_OFFSET_L4], %l4
+	ldx [%o0 + CONTEXT_OFFSET_L5], %l5
+	ldx [%o0 + CONTEXT_OFFSET_L6], %l6
+	ldx [%o0 + CONTEXT_OFFSET_L7], %l7
 	retl
 	xor %o0, %o0, %o0	! context_restore_arch returns 0
Index: kernel/arch/sparc64/src/sun4u/start.S
===================================================================
--- kernel/arch/sparc64/src/sun4u/start.S	(revision 50805c9fe7d60aa26c79db6832302ee379195077)
+++ kernel/arch/sparc64/src/sun4u/start.S	(revision b482287643c356a0fe7f894a9952ca2a25b96498)
@@ -39,5 +39,5 @@
 
 #ifdef CONFIG_SMP
-#include <arch/context_offset.h>
+#include <arch/context_struct.h>
 #endif
 
@@ -356,5 +356,5 @@
 	 */
 	set ctx, %g1
-	add %g1, OFFSET_SP, %g1
+	add %g1, CONTEXT_OFFSET_SP, %g1
 	ldx [%g1], %o6
 
Index: kernel/arch/sparc64/src/sun4v/start.S
===================================================================
--- kernel/arch/sparc64/src/sun4v/start.S	(revision 50805c9fe7d60aa26c79db6832302ee379195077)
+++ kernel/arch/sparc64/src/sun4v/start.S	(revision b482287643c356a0fe7f894a9952ca2a25b96498)
@@ -31,5 +31,5 @@
 #include <arch/stack.h>
 #include <arch/regdef.h>
-#include <arch/context_offset.h>
+#include <arch/context_struct.h>
 #include <arch/sun4v/regdef.h>
 #include <arch/sun4v/hypercall.h>
@@ -291,5 +291,5 @@
 	 */
 	set ctx, %g1
-	add %g1, OFFSET_SP, %g1
+	add %g1, CONTEXT_OFFSET_SP, %g1
 	ldx [%g1], %o6
 
