Changeset f24d300 in mainline for kernel/arch/amd64/src/userspace.c
- Timestamp:
- 2009-03-03T15:52:55Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e762b43
- Parents:
- add04f7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/userspace.c
radd04f7 rf24d300 27 27 */ 28 28 29 /** @addtogroup amd64 29 /** @addtogroup amd64 30 30 * @{ 31 31 */ … … 48 48 void userspace(uspace_arg_t *kernel_uarg) 49 49 { 50 ipl_t ipl ;50 ipl_t ipl = interrupts_disable(); 51 51 52 ipl = interrupts_disable(); 53 54 /* Clear CF,PF,AF,ZF,SF,DF,OF */ 52 /* Clear CF, PF, AF, ZF, SF, DF, OF */ 55 53 ipl &= ~(0xcd4); 56 57 asm volatile ( ""58 "pushq %0\n"59 "pushq %1\n"60 "pushq %2\n"61 "pushq %3\n"62 "pushq %4\n"63 "movq %5, %%rax\n"64 /* %rdi is defined to hold pcb_ptr - set it to 0 */65 "xorq %%rdi, %%rdi\n"66 "iretq\n"67 : :68 "i" (gdtselector(UDATA_DES) | PL_USER),69 "r" (kernel_uarg->uspace_stack+THREAD_STACK_SIZE),70 "r" (ipl),71 "i" (gdtselector(UTEXT_DES) | PL_USER),72 "r" (kernel_uarg->uspace_entry),73 "r" (kernel_uarg->uspace_uarg)74 75 54 55 asm volatile ( 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" 62 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 ); 76 74 77 75 /* Unreachable */ 78 for(;;) 79 ; 76 while (1); 80 77 } 81 78
Note:
See TracChangeset
for help on using the changeset viewer.