Ignore:
File:
1 edited

Legend:

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

    r586cd56 rf24d300  
    3434
    3535#include <userspace.h>
    36 #include <arch/cpu.h>
    3736#include <arch/pm.h>
    3837#include <arch/types.h>
     
    5150        ipl_t ipl = interrupts_disable();
    5251       
    53         ipl &= ~(RFLAGS_CF | RFLAGS_PF | RFLAGS_AF | RFLAGS_ZF | RFLAGS_SF |
    54             RFLAGS_DF | RFLAGS_OF);
     52        /* Clear CF, PF, AF, ZF, SF, DF, OF */
     53        ipl &= ~(0xcd4);
    5554       
    5655        asm volatile (
    57                 "pushq %[udata_des]\n"
    58                 "pushq %[stack_size]\n"
    59                 "pushq %[ipl]\n"
    60                 "pushq %[utext_des]\n"
    61                 "pushq %[entry]\n"
    62                 "movq %[uarg], %%rax\n"
     56                        "pushq %[udata_des]\n"
     57                        "pushq %[stack_size]\n"
     58                        "pushq %[ipl]\n"
     59                        "pushq %[utext_des]\n"
     60                        "pushq %[entry]\n"
     61                        "movq %[uarg], %%rax\n"
    6362                       
    64                 /* %rdi is defined to hold pcb_ptr - set it to 0 */
    65                 "xorq %%rdi, %%rdi\n"
    66                 "iretq\n"
    67                 :: [udata_des] "i" (gdtselector(UDATA_DES) | PL_USER),
    68                    [stack_size] "r" (kernel_uarg->uspace_stack + THREAD_STACK_SIZE),
    69                    [ipl] "r" (ipl),
    70                    [utext_des] "i" (gdtselector(UTEXT_DES) | PL_USER),
    71                    [entry] "r" (kernel_uarg->uspace_entry),
    72                    [uarg] "r" (kernel_uarg->uspace_uarg)
    73                 : "rax"
    74         );
     63                        /* %rdi is defined to hold pcb_ptr - set it to 0 */
     64                        "xorq %%rdi, %%rdi\n"
     65                        "iretq\n"
     66                        :: [udata_des] "i" (gdtselector(UDATA_DES) | PL_USER),
     67                           [stack_size] "r" (kernel_uarg->uspace_stack + THREAD_STACK_SIZE),
     68                           [ipl] "r" (ipl),
     69                           [utext_des] "i" (gdtselector(UTEXT_DES) | PL_USER),
     70                           [entry] "r" (kernel_uarg->uspace_entry),
     71                           [uarg] "r" (kernel_uarg->uspace_uarg)
     72                        : "rax"
     73                );
    7574       
    7675        /* Unreachable */
    77         while (1)
    78                 ;
     76        while (1);
    7977}
    8078
Note: See TracChangeset for help on using the changeset viewer.