Index: kernel/arch/mips32/include/arch/asm.h
===================================================================
--- kernel/arch/mips32/include/arch/asm.h	(revision 47607932cbd36ab7b6c155cdf94805b947d98d82)
+++ kernel/arch/mips32/include/arch/asm.h	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -81,5 +81,5 @@
 extern void cpu_halt(void) __attribute__((noreturn));
 extern void asm_delay_loop(uint32_t);
-extern void userspace_asm(uintptr_t, uintptr_t, uintptr_t);
+extern void userspace_asm(uintptr_t, uintptr_t);
 
 extern ipl_t interrupts_disable(void);
Index: kernel/arch/mips32/src/mips32.c
===================================================================
--- kernel/arch/mips32/src/mips32.c	(revision 47607932cbd36ab7b6c155cdf94805b947d98d82)
+++ kernel/arch/mips32/src/mips32.c	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -163,14 +163,16 @@
 }
 
-void userspace(uspace_arg_t *kernel_uarg)
+uintptr_t arch_get_initial_sp(uintptr_t stack_base, uintptr_t stack_size)
+{
+	return stack_base + stack_size;
+}
+
+void userspace(uintptr_t pc, uintptr_t sp)
 {
 	/* EXL = 1, UM = 1, IE = 1 */
 	cp0_status_write(cp0_status_read() | (cp0_status_exl_exception_bit |
 	    cp0_status_um_bit | cp0_status_ie_enabled_bit));
-	cp0_epc_write(kernel_uarg->uspace_entry);
-	userspace_asm(kernel_uarg->uspace_stack +
-	    kernel_uarg->uspace_stack_size,
-	    kernel_uarg->uspace_uarg,
-	    kernel_uarg->uspace_entry);
+	cp0_epc_write(pc);
+	userspace_asm(sp, pc);
 
 	while (true)
Index: kernel/arch/mips32/src/start.S
===================================================================
--- kernel/arch/mips32/src/start.S	(revision 47607932cbd36ab7b6c155cdf94805b947d98d82)
+++ kernel/arch/mips32/src/start.S	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -339,8 +339,7 @@
 FUNCTION_BEGIN(userspace_asm)
 	move $sp, $a0
-	move $v0, $a1
-	move $t9, $a2      /* set up correct entry into PIC code */
-	xor $a0, $a0, $a0  /* $a0 is defined to hold pcb_ptr */
-	                   /* set it to 0 */
+	xor $a0, $a0, $a0  /* $a0 is defined to hold pcb_ptr, set it to 0 */
+	xor $fp, $fp, $fp  // FIXME: wipe all userspace-accessible registers
+	xor $ra, $ra, $ra
 	eret
 FUNCTION_END(userspace_asm)
