Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/src/userspace.c

    r3fcea34 r5a5269d  
    6161} ustate_t;
    6262
    63 uintptr_t arch_get_initial_sp(uintptr_t stack_base, uintptr_t stack_size)
    64 {
    65         return stack_base + stack_size;
    66 }
    67 
    6863/** Change processor mode
    6964 *
     
    7166 *
    7267 */
    73 void userspace(uintptr_t pc, uintptr_t sp)
     68void userspace(uspace_arg_t *kernel_uarg)
    7469{
    75         volatile ustate_t ustate = { };
     70        volatile ustate_t ustate;
     71
     72        /* set first parameter */
     73        ustate.r0 = kernel_uarg->uspace_uarg;
     74
     75        /* %r1 is defined to hold pcb_ptr - set it to 0 */
     76        ustate.r1 = 0;
    7677
    7778        /* pass the RAS page address in %r2 */
    7879        ustate.r2 = (uintptr_t) ras_page;
    7980
    80         ustate.sp = sp;
    81         ustate.pc = pc;
     81        /* clear other registers */
     82        ustate.r3 = 0;
     83        ustate.r4 = 0;
     84        ustate.r5 = 0;
     85        ustate.r6 = 0;
     86        ustate.r7 = 0;
     87        ustate.r8 = 0;
     88        ustate.r9 = 0;
     89        ustate.r10 = 0;
     90        ustate.r11 = 0;
     91        ustate.r12 = 0;
     92        ustate.lr = 0;
     93
     94        /* set user stack */
     95        ustate.sp = kernel_uarg->uspace_stack +
     96            kernel_uarg->uspace_stack_size;
     97
     98        /* set where uspace execution starts */
     99        ustate.pc = kernel_uarg->uspace_entry;
    82100
    83101        /* status register in user mode */
Note: See TracChangeset for help on using the changeset viewer.