[ros-dev] Re: [ros-svn] [hbirr] 13102: - Set the limit of the user mode code/data segment back to 4GB.

Hartmut Birr hartmut.birr at gmx.de
Tue Jan 18 01:49:55 CET 2005


Ge van Geldorp schrieb:

>>From: Alex Ionescu
>>
>>Do you know however if any of ROS Kernel depends on the old 
>>GDT? There are two weird issues with SYSEXIT:
>>
>>1) GvG reported that FPU is broken
>>2) Explorer now crashes in shlwapi when clicking on a disk.
>>    
>>
>
>Actually, it's only one issue. The crash in shlwapi is in
>StrFormatByteSizeW(), which uses floating point.
>
>Gé van Geldorp.
>  
>
Hi,

adding the stack segment register to one instruction at the begin of 
_KiFastCallEntry does fix the fpu problem for me. And I don't understand 
why the interrupt flag is manipulated after sysenter and before sysexit.

- Hartmut

-------------- next part --------------

E:\Sandbox\ros_mp\reactos>set SVN_EDITOR=notepad 

E:\Sandbox\ros_mp\reactos>d:\programme\subversion\bin\svn.exe diff ntoskrnl\ke\i386\syscall.s        
Index: ntoskrnl/ke/i386/syscall.S
===================================================================
--- ntoskrnl/ke/i386/syscall.S	(Revision 13103)
+++ ntoskrnl/ke/i386/syscall.S	(Arbeitskopie)
@@ -26,21 +26,22 @@
 .globl _KiSystemService
 
 _KiFastCallEntry:
-
+    sti
+    
     /* Set FS to PCR */
     movl $PCR_SELECTOR, %ecx
     movw %cx, %fs
     
     /* Set the current stack to Kernel Stack */
     movl %fs:KPCR_TSS, %ecx
-    movl KTSS_ESP0(%ecx), %ecx
+    movl %ss:KTSS_ESP0(%ecx), %ecx
     movl %ecx, %esp
     
     /* Set up a fake INT Stack. */
     pushl $USER_DS
     pushl %edx                  /* Ring 3 SS:ESP */
     pushfl
-    orl $200, (%esp)            /* Re-enable IRQs in EFLAGS, to fake INT */
+//    orl $200, (%esp)            /* Re-enable IRQs in EFLAGS, to fake INT */
     pushl $USER_CS
     pushl $KUSER_SHARED_SYSCALL_RET
     
@@ -205,7 +206,7 @@
     /* Save pointer to Trap Frame */
     movl %esp, %ebx
     
-    /* Raise IRQL to HIGH_LEVEL */
+    /* Raise IRQL to APC_LEVEL */
     movl $1, %ecx
     call @KfRaiseIrql at 4
     
@@ -280,7 +281,6 @@
     /* We will be cleaning up the stack ourselves */
     popl %edx                 /* New Ring 3 EIP */
     add $0x4, %esp            /* Skip Ring 3 DS */
-    andl $0xFD, 9(%esp)       /* Remove IRQ hack from EFLAGS */
     popfl                     /* Restore old EFLAGS */
     popl %ecx                 /* Old Ring 3 SS:ESP */   
        


More information about the Ros-dev mailing list