[ros-diffs] [ros-arm-bringup] 34483: - Implement KeContextToTrapFrame. - No, we don't sanitize anything right now. There's no user-mode at this point, so it doesn't matter. If you think we should sanitize right now, you need to get out and get laid. - So this brings us back to KiPrefetchAbortHandler's while (TRUE). - We have to make sure the funky PC modifications are going to work well, and after that, we can exit the trap.

ros-arm-bringup at svn.reactos.org ros-arm-bringup at svn.reactos.org
Mon Jul 14 02:04:53 CEST 2008


Author: ros-arm-bringup
Date: Sun Jul 13 19:04:53 2008
New Revision: 34483

URL: http://svn.reactos.org/svn/reactos?rev=34483&view=rev
Log:
- Implement KeContextToTrapFrame.
- No, we don't sanitize anything right now. There's no user-mode at this point, so it doesn't matter. If you think we should sanitize right now, you need to get out and get laid.
- So this brings us back to KiPrefetchAbortHandler's while (TRUE).
- We have to make sure the funky PC modifications are going to work well, and after that, we can exit the trap.


Modified:
    trunk/reactos/ntoskrnl/ke/arm/exp.c
    trunk/reactos/ntoskrnl/ke/arm/trapc.c

Modified: trunk/reactos/ntoskrnl/ke/arm/exp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/arm/exp.c?rev=34483&r1=34482&r2=34483&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/arm/exp.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/arm/exp.c [iso-8859-1] Sun Jul 13 19:04:53 2008
@@ -29,8 +29,73 @@
                      IN ULONG ContextFlags,
                      IN KPROCESSOR_MODE PreviousMode)
 {
-    while (TRUE);
-    return;
+    KIRQL OldIrql;
+    
+    //
+    // Do this at APC_LEVEL
+    //
+    OldIrql = KeGetCurrentIrql();
+    if (OldIrql < APC_LEVEL) KeRaiseIrql(APC_LEVEL, &OldIrql);
+    
+    //
+    // Start with the Control flags
+    //
+    if ((Context->ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL)
+    {
+        //
+        // So this basically means all the special stuff
+        //
+        if (PreviousMode == UserMode)
+        {
+            //
+            // ARM has register banks
+            //
+            TrapFrame->UserSp = Context->Sp;
+            TrapFrame->UserLr = Context->Lr;
+        }
+        else
+        {
+            //
+            // ARM has register banks
+            //
+            TrapFrame->SvcSp = Context->Sp;
+            TrapFrame->SvcLr = Context->Lr;
+        }
+        
+        //
+        // The rest is already in the right mode
+        //
+        TrapFrame->Pc = Context->Pc;
+        TrapFrame->Spsr = Context->Psr;
+    }
+    
+    //
+    // Now do the integers
+    //
+    if ((Context->ContextFlags & CONTEXT_INTEGER) == CONTEXT_INTEGER)
+    {
+        //
+        // Basically everything else but FPU
+        //
+        TrapFrame->R0 = Context->R0;
+        TrapFrame->R1 = Context->R1;
+        TrapFrame->R2 = Context->R2;
+        TrapFrame->R3 = Context->R3;
+        TrapFrame->R4 = Context->R4;
+        TrapFrame->R5 = Context->R5;
+        TrapFrame->R6 = Context->R6;
+        TrapFrame->R7 = Context->R7;
+        TrapFrame->R8 = Context->R8;
+        TrapFrame->R0 = Context->R9;
+        TrapFrame->R10 = Context->R10;
+        TrapFrame->R11 = Context->R11;
+        TrapFrame->R12 = Context->R12;
+    }
+    
+    //
+    // Restore IRQL
+    //
+    if (OldIrql < APC_LEVEL) KeLowerIrql(OldIrql);  
 }
 
 VOID
@@ -55,7 +120,7 @@
         //
         // So this basically means all the special stuff
         //
-        if (KiGetPreviousMode(TrapFrame))
+        if (KiGetPreviousMode(TrapFrame) == UserMode)
         {
             //
             // ARM has register banks

Modified: trunk/reactos/ntoskrnl/ke/arm/trapc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/arm/trapc.c?rev=34483&r1=34482&r2=34483&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/arm/trapc.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/arm/trapc.c [iso-8859-1] Sun Jul 13 19:04:53 2008
@@ -491,7 +491,6 @@
                             TrapFrame,
                             KiGetPreviousMode(TrapFrame),
                             TRUE);
-        
         //
         // TODO
         //



More information about the Ros-diffs mailing list