www.pudn.com > LFYOS.zip > restore.s


.global restore_parameter 
 
restore_parameter: 
	lss kernel_stack_descr,%esp 
	call system_call 
	cmpl $(0x00),reload_cr3_flag 
	je 1f 
	movl $(0x00),reload_cr3_flag 
	movl %cr3,%eax 
	movl %eax,%cr3 
1: 
	movl current,%esi 
	cmpl $(0x00),%esi 
	je restore_parameter 
 
	movl 0x44(%esi),%esp 
 
	pushl 0x30(%esi)		/*restore ss */ 
	pushl 0x2c(%esi)		/*restore esp */ 
	pushl 0x28(%esi)		/*restore eflag*/ 
	pushl 0x24(%esi)		/*restore  cs */ 
	pushl 0x20(%esi)		/*restore eip */ 
		/*push the upper four value for return to user mode*/ 
	movl 0x38(%esi),%eax		/*restore es*/ 
	movl %eax,%es 
	movl 0x3c(%esi),%eax		/*restore fs*/ 
	movl %eax,%fs			 
	movl 0x40(%esi),%eax		/*restore gs*/ 
	movl %eax,%gs 
 
	movl  0x00(%esi),%eax		/*restore eax */ 
	movl  0x04(%esi),%ebx		/*restore ebx */ 
	movl  0x08(%esi),%ecx		/*restore ecx */ 
	movl  0x0c(%esi),%edx		/*restore edx */ 
	pushl 0x10(%esi)		/*push esi for restore*/ 
	movl  0x14(%esi),%edi		/*restore edi */ 
	movl  0x18(%esi),%ebp		/*restore edi */ 
	 
	movl 0x34(%esi),%esi 
	movl %esi,%ds			/*restore ds*/ 
	popl %esi			/*restore esi from stack*/ 
	iret				/* return to user mode */