Index: arch/mips32/include/arg.h
===================================================================
--- arch/mips32/include/arg.h	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/mips32/include/arg.h	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -30,6 +30,4 @@
 #define __mips32_ARG_H__
 
-//#include <stackarg.h>
-
 #include <arch/types.h>
 
@@ -40,11 +38,11 @@
 
 #define va_start(ap, lst) 		\
-	(ap).pos = sizeof(lst); 			\
+	(ap).pos = sizeof(lst);		\
 	(ap).last = (__u8 *) &(lst)
 
 /**
-* va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not)
-* To satisfy this, paddings must be sometimes inserted. 
-*/
+ * va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not)
+ * To satisfy this, paddings must be sometimes inserted. 
+ */
 #define va_arg(ap, type) 		\
 	(*((type *)((ap).last + ((ap).pos  += sizeof(type) + ((sizeof(type)==8)&&(((ap).pos)&(4))?4:0)) - sizeof(type))))
Index: arch/ppc32/Makefile.inc
===================================================================
--- arch/ppc32/Makefile.inc	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/ppc32/Makefile.inc	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -19,4 +19,5 @@
 
 arch_sources= \
+	src/arch/console.c \
 	src/arch/context.S \
 	src/arch/debug/panic.s \
Index: arch/ppc32/src/console.c
===================================================================
--- arch/ppc32/src/console.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ arch/ppc32/src/console.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+#include <putchar.h>
+#include <genarch/firmware/ofw/ofw.h>
+
+/** Print one character.
+ *
+ * @param ch Character to be printed.
+ */
+void putchar(const char ch)
+{
+	ofw_putchar(ch);
+}
Index: arch/sparc64/Makefile.inc
===================================================================
--- arch/sparc64/Makefile.inc	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/Makefile.inc	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -15,10 +15,16 @@
 
 DEFS=-DARCH=$(ARCH)
-CFLAGS=$(DEFS) -nostdlib -fno-builtin -O2
+CFLAGS=$(DEFS) -nostdlib -fno-builtin -mcpu=ultrasparc -m64 -O2
 LFLAGS=-M -no-check-sections -N
 
 arch_sources= \
+	src/arch/asm.S \
+	src/arch/console.c \
+	src/arch/context.S \
 	src/arch/dummy.s \
+	src/arch/sparc64.c \
 	src/arch/start.S \
-	src/arch/sparc64.c
+	src/arch/mm/frame.c \
+	src/arch/mm/page.c
+	
 
Index: arch/sparc64/_link.ld
===================================================================
--- arch/sparc64/_link.ld	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/_link.ld	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -31,5 +31,5 @@
 		LONG(kdata_end - kdata_start);
 		hardcoded_load_address = .;
-		LONG(0x4000);
+		QUAD(0x4000);
 		*(.bss);		/* uninitialized static variables */	
 		*(COMMON); 		/* global variables */
Index: arch/sparc64/include/arg.h
===================================================================
--- arch/sparc64/include/arg.h	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/include/arg.h	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -30,5 +30,5 @@
 #define __sparc64_ARG_H__
 
-#include <stackarg.h>
+#include <stdarg.h>
 
 #endif
Index: arch/sparc64/include/asm.h
===================================================================
--- arch/sparc64/include/asm.h	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/include/asm.h	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -79,4 +79,9 @@
 static inline __address get_stack_base(void)
 {
+	__address v;
+	
+	__asm__ volatile ("and %%o6, %1, %0\n" : "=r" (v) : "r" (~(STACK_SIZE-1)));
+	
+	return v;
 }
 
Index: arch/sparc64/include/context.h
===================================================================
--- arch/sparc64/include/context.h	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/include/context.h	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -30,8 +30,13 @@
 #define __sparc64_CONTEXT_H__
 
-#include <arch/types.h>
-#include <typedefs.h>
-#include <align.h>
+#ifndef __sparc64_TYPES_H__
+# include <arch/types.h>
+#endif
 
+#ifndef __ALIGN_H__
+# include <align.h>
+#endif
+
+#define STACK_ALIGNMENT			8
 #define STACK_ITEM_SIZE			8
 
@@ -41,4 +46,12 @@
 #define SP_DELTA	(0+STACK_ITEM_SIZE)
 
+#ifdef context_set
+#undef context_set
+#endif
+
+#define context_set(c, _pc, stack, size)                                                                \
+        (c)->pc = ((__address) _pc) - 8;                                                                \
+        (c)->sp = ((__address) stack) + (ALIGN((size), STACK_ALIGNMENT) + 1) - SP_DELTA;			
+
 /*
  * Only save registers that must be preserved across
@@ -46,10 +59,21 @@
  */
 struct context {
-
-	__address bsp;
-	__address sp;
-	__address pc;
+	__u64 l0;
+	__u64 l1;
+	__u64 l2;
+	__u64 l3;
+	__u64 l4;
+	__u64 l5;
+	__u64 l6;
+	__u64 l7;
+	__u64 i1;
+	__u64 i2;
+	__u64 i3;
+	__u64 i4;
+	__u64 i5;
+	__address sp;		/* %i6 */
+	__address pc;		/* %i7 */
 	ipl_t ipl;
-} __attribute__ ((packed));
+};
 
 #endif
Index: arch/sparc64/include/types.h
===================================================================
--- arch/sparc64/include/types.h	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/include/types.h	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -36,6 +36,6 @@
 typedef unsigned char __u8;
 typedef unsigned short __u16;
-typedef unsigned long __u32;
-typedef long long __u64;
+typedef unsigned int __u32;
+typedef unsigned long __u64;
 
 typedef __u64 __address;
Index: arch/sparc64/src/asm.S
===================================================================
--- arch/sparc64/src/asm.S	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ arch/sparc64/src/asm.S	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -0,0 +1,41 @@
+#
+# 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.
+#
+
+.text
+
+.global memcpy
+.global memsetb
+
+memcpy:
+	b _memcpy
+	nop
+
+memsetb:
+	b _memsetb
+	nop
+
Index: arch/sparc64/src/console.c
===================================================================
--- arch/sparc64/src/console.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ arch/sparc64/src/console.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+#include <putchar.h>
+#include <genarch/firmware/ofw/ofw.h>
+
+/** Print one character.
+ *
+ * @param ch Character to be printed.
+ */
+void putchar(const char ch)
+{
+	if (ch == '\n')
+		ofw_putchar('\r');
+	ofw_putchar(ch);
+}
Index: arch/sparc64/src/context.S
===================================================================
--- arch/sparc64/src/context.S	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ arch/sparc64/src/context.S	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -0,0 +1,91 @@
+#
+# 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.
+#
+
+#define __ASM__
+#include <arch/context_offset.h>
+	
+.text   
+
+.global context_save_arch
+.global context_restore_arch
+
+.macro CONTEXT_STORE r
+	stx %l0, [\r + OFFSET_L0]
+	stx %l1, [\r + OFFSET_L1]
+	stx %l2, [\r + OFFSET_L2]
+	stx %l3, [\r + OFFSET_L3]
+	stx %l4, [\r + OFFSET_L4]
+	stx %l5, [\r + OFFSET_L5]
+	stx %l6, [\r + OFFSET_L6]
+	stx %l7, [\r + OFFSET_L7]
+	stx %i1, [\r + OFFSET_I1]
+	stx %i2, [\r + OFFSET_I2]
+	stx %i3, [\r + OFFSET_I3]
+	stx %i4, [\r + OFFSET_I4]
+	stx %i5, [\r + OFFSET_I5]
+	stx %i6, [\r + OFFSET_SP]
+	stx %i7, [\r + OFFSET_PC]
+.endm
+
+.macro CONTEXT_LOAD r
+	ldx [\r + OFFSET_L0], %l0
+	ldx [\r + OFFSET_L1], %l1
+	ldx [\r + OFFSET_L2], %l2
+	ldx [\r + OFFSET_L3], %l3
+	ldx [\r + OFFSET_L4], %l4
+	ldx [\r + OFFSET_L5], %l5
+	ldx [\r + OFFSET_L6], %l6
+	ldx [\r + OFFSET_L7], %l7
+	ldx [\r + OFFSET_I1], %i1
+	ldx [\r + OFFSET_I2], %i2
+	ldx [\r + OFFSET_I3], %i3
+	ldx [\r + OFFSET_I4], %i4
+	ldx [\r + OFFSET_I5], %i5
+	ldx [\r + OFFSET_SP], %i6
+	ldx [\r + OFFSET_PC], %i7
+	ldx [\r + OFFSET_SP], %sp
+.endm
+
+	
+context_save_arch:
+	save %sp, 0, %sp
+	CONTEXT_STORE %i0
+
+	# context_save returns 1
+	mov 1, %i0	
+	ret
+	restore %sp, 0, %sp
+	
+context_restore_arch:
+	save %sp, 0, %sp
+	CONTEXT_LOAD %i0
+
+	# context_restore returns 0
+	xor %i0, %i0, %i0			
+	ret
+	restore %sp, 0, %sp	
Index: arch/sparc64/src/dummy.s
===================================================================
--- arch/sparc64/src/dummy.s	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/src/dummy.s	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -31,6 +31,4 @@
 .global asm_delay_loop
 .global before_thread_runs_arch
-.global context_restore_arch
-.global context_save_arch
 .global cpu_arch_init
 .global cpu_halt
@@ -47,8 +45,4 @@
 .global fpu_enable
 .global fpu_init
-.global frame_arch_init
-.global memcpy
-.global memsetb
-.global page_arch_init
 .global panic_printf
 .global userspace
@@ -58,6 +52,4 @@
 asm_delay_loop:
 before_thread_runs_arch:
-context_restore_arch:
-context_save_arch:
 cpu_arch_init:
 cpu_halt:
@@ -74,8 +66,4 @@
 fpu_enable:
 fpu_init:
-frame_arch_init:
-memcpy:
-memsetb:
-page_arch_init:
 panic_printf:
 userspace:
Index: arch/sparc64/src/mm/frame.c
===================================================================
--- arch/sparc64/src/mm/frame.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ arch/sparc64/src/mm/frame.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+#include <arch/mm/frame.h>
+#include <mm/frame.h>
+#include <config.h>
+#include <panic.h>
+
+void frame_arch_init(void)
+{
+	zone_t *z;
+	
+	z = zone_create(0, config.memory_size, 0);
+	if (!z) {
+		panic("Can't allocate zone (%dB).\n", config.memory_size);
+	}
+	zone_attach(z);
+}
Index: arch/sparc64/src/mm/page.c
===================================================================
--- arch/sparc64/src/mm/page.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ arch/sparc64/src/mm/page.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+#include <arch/mm/page.h>
+
+void page_arch_init(void)
+{
+}
Index: arch/sparc64/src/start.S
===================================================================
--- arch/sparc64/src/start.S	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ arch/sparc64/src/start.S	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -27,4 +27,9 @@
 #
 
+.register %g2, #scratch
+.register %g3, #scratch
+.register %g6, #scratch
+.register %g7, #scratch
+
 .section K_TEXT_START, "ax"
 
@@ -52,6 +57,10 @@
 	nop
 
+	call main_bsp
+	nop
+
+	/* Not reached. */
+
 2:
 	b 2b
 	nop
-
Index: build.sparc64
===================================================================
--- build.sparc64	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ build.sparc64	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -1,3 +1,6 @@
 #! /bin/sh
 
+# Generate context_offset.h
+(cd tools/sparc64/;make gencontext;./gencontext)
+
 make all ARCH=sparc64
Index: clean.sparc64
===================================================================
--- clean.sparc64	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ clean.sparc64	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -2,2 +2,5 @@
 
 make dist-clean ARCH=sparc64
+
+rm tools/sparc64/gencontext
+rm arch/sparc64/include/context_offset.h
Index: genarch/include/firmware/ofw/ofw.h
===================================================================
--- genarch/include/firmware/ofw/ofw.h	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ genarch/include/firmware/ofw/ofw.h	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __ppc32_OFW_H__
-#define __ppc32_OFW_H__
+#ifndef __OFW_H__
+#define __OFW_H__
 
 #include <arch/types.h>
@@ -59,5 +59,4 @@
 extern int ofw_get_property(const phandle device, const char *name, void *buf, const int buflen);
 extern void *ofw_claim(const void *addr, const int size, const int align);
-extern void putchar(const char ch);
 
 #endif
Index: genarch/src/firmware/ofw/ofw.c
===================================================================
--- genarch/src/firmware/ofw/ofw.c	(revision 2cd0485d2e900e9cb3a5b2f8eb3d987e49103a61)
+++ genarch/src/firmware/ofw/ofw.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -99,7 +99,2 @@
 	return (void *) ofw_call("claim", 3, 1, addr, size, align);
 }
-
-void putchar(const char ch)
-{
-	ofw_putchar(ch);
-}
Index: tools/sparc64/gencontext.c
===================================================================
--- tools/sparc64/gencontext.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ tools/sparc64/gencontext.c	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
@@ -0,0 +1,49 @@
+#include <stdio.h>
+
+typedef long long __u64;
+typedef __u64 ipl_t;
+typedef __u64 __address;
+
+#define __sparc64_TYPES_H__
+#define __ALIGN_H__
+
+#include "../../arch/sparc64/include/context.h"
+
+#define FILENAME "../../arch/sparc64/include/context_offset.h"
+
+int main(void)
+{
+	FILE *f;
+	struct context *pctx = NULL;
+	
+
+	f = fopen(FILENAME,"w");
+	if (!f) {
+		perror(FILENAME);
+		return 1;
+	}
+
+	fprintf(f, "/* This file is automatically generated by %s. */\n", __FILE__);	
+
+	fprintf(f,"/* struct context */\n");
+
+	fprintf(f,"#define OFFSET_SP  0x%x\n",((int)&pctx->sp) - (int )pctx);
+	fprintf(f,"#define OFFSET_PC  0x%x\n",((int)&pctx->pc) - (int )pctx);
+	fprintf(f,"#define OFFSET_L0  0x%x\n",((int)&pctx->l0) - (int )pctx);
+	fprintf(f,"#define OFFSET_L1  0x%x\n",((int)&pctx->l1) - (int )pctx);
+	fprintf(f,"#define OFFSET_L2  0x%x\n",((int)&pctx->l2) - (int )pctx);
+	fprintf(f,"#define OFFSET_L3  0x%x\n",((int)&pctx->l3) - (int )pctx);
+	fprintf(f,"#define OFFSET_L4  0x%x\n",((int)&pctx->l4) - (int )pctx);
+	fprintf(f,"#define OFFSET_L5  0x%x\n",((int)&pctx->l5) - (int )pctx);
+	fprintf(f,"#define OFFSET_L6  0x%x\n",((int)&pctx->l6) - (int )pctx);
+	fprintf(f,"#define OFFSET_L7  0x%x\n",((int)&pctx->l7) - (int )pctx);
+	fprintf(f,"#define OFFSET_I1  0x%x\n",((int)&pctx->i1) - (int )pctx);
+	fprintf(f,"#define OFFSET_I2  0x%x\n",((int)&pctx->i2) - (int )pctx);
+	fprintf(f,"#define OFFSET_I3  0x%x\n",((int)&pctx->i3) - (int )pctx);
+	fprintf(f,"#define OFFSET_I4  0x%x\n",((int)&pctx->i4) - (int )pctx);
+	fprintf(f,"#define OFFSET_I5  0x%x\n",((int)&pctx->i5) - (int )pctx);
+
+	fclose(f);
+
+	return 0;
+}
