Index: kernel/arch/sparc64/src/sun4u/asm.S
===================================================================
--- kernel/arch/sparc64/src/sun4u/asm.S	(revision 29029ac024277f2a6a352b32f8f9c910088a3afb)
+++ kernel/arch/sparc64/src/sun4u/asm.S	(revision 89e5c0c74547ac080d125e5482bd7736822f26de)
@@ -83,5 +83,5 @@
  */
 FUNCTION_BEGIN(switch_to_userspace)
-	save %o1, -(STACK_WINDOW_SAVE_AREA_SIZE + STACK_ARG_SAVE_AREA_SIZE), %sp
+	save %o1, 0, %sp
 	flushw
 	wrpr %g0, 0, %cleanwin		! avoid information leak
Index: kernel/arch/sparc64/src/sun4u/sparc64.c
===================================================================
--- kernel/arch/sparc64/src/sun4u/sparc64.c	(revision 29029ac024277f2a6a352b32f8f9c910088a3afb)
+++ kernel/arch/sparc64/src/sun4u/sparc64.c	(revision 89e5c0c74547ac080d125e5482bd7736822f26de)
@@ -159,13 +159,14 @@
 }
 
+uintptr_t arch_get_initial_sp(uintptr_t stack_base, uintptr_t stack_size)
+{
+	return ALIGN_DOWN(stack_base + stack_size - STACK_WINDOW_SAVE_AREA_SIZE - STACK_ARG_SAVE_AREA_SIZE, 16) - STACK_BIAS;
+}
+
 /** Switch to userspace. */
-void userspace(uspace_arg_t *kernel_uarg)
+void userspace(uintptr_t pc, uintptr_t sp)
 {
 	(void) interrupts_disable();
-	switch_to_userspace(kernel_uarg->uspace_entry,
-	    kernel_uarg->uspace_stack +
-	    kernel_uarg->uspace_stack_size -
-	    (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS),
-	    kernel_uarg->uspace_uarg);
+	switch_to_userspace(pc, sp, 0);
 
 	/* Not reached */
Index: kernel/arch/sparc64/src/sun4v/asm.S
===================================================================
--- kernel/arch/sparc64/src/sun4v/asm.S	(revision 29029ac024277f2a6a352b32f8f9c910088a3afb)
+++ kernel/arch/sparc64/src/sun4v/asm.S	(revision 89e5c0c74547ac080d125e5482bd7736822f26de)
@@ -41,5 +41,5 @@
  */
 FUNCTION_BEGIN(switch_to_userspace)
-	save %o1, -(STACK_WINDOW_SAVE_AREA_SIZE + STACK_ARG_SAVE_AREA_SIZE), %sp
+	save %o1, 0, %sp
 	flushw
 	wrpr %g0, 0, %cleanwin		! avoid information leak
Index: kernel/arch/sparc64/src/sun4v/sparc64.c
===================================================================
--- kernel/arch/sparc64/src/sun4v/sparc64.c	(revision 29029ac024277f2a6a352b32f8f9c910088a3afb)
+++ kernel/arch/sparc64/src/sun4v/sparc64.c	(revision 89e5c0c74547ac080d125e5482bd7736822f26de)
@@ -157,13 +157,14 @@
 }
 
+uintptr_t arch_get_initial_sp(uintptr_t stack_base, uintptr_t stack_size)
+{
+	return ALIGN_DOWN(stack_base + stack_size - STACK_WINDOW_SAVE_AREA_SIZE - STACK_ARG_SAVE_AREA_SIZE, 16) - STACK_BIAS;
+}
+
 /** Switch to userspace. */
-void userspace(uspace_arg_t *kernel_uarg)
+void userspace(uintptr_t pc, uintptr_t sp)
 {
 	(void) interrupts_disable();
-	switch_to_userspace(kernel_uarg->uspace_entry,
-	    kernel_uarg->uspace_stack +
-	    kernel_uarg->uspace_stack_size -
-	    (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS),
-	    kernel_uarg->uspace_uarg);
+	switch_to_userspace(pc, sp, 0);
 
 	/* Not reached */
