- Put IDT in RW .data section
authorAlex Ionescu <aionescu@gmail.com>
Sun, 1 Oct 2006 07:24:24 +0000 (07:24 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Sun, 1 Oct 2006 07:24:24 +0000 (07:24 +0000)
- Fix Ki386InitializeTss to properly set Boot TSS descriptor data (set it to 32-bits). Also properly setup the DF/NMI Task Gates in the IDT.

svn path=/trunk/; revision=24336

reactos/ntoskrnl/ke/i386/cpu.c
reactos/ntoskrnl/ke/i386/kiinit.c
reactos/ntoskrnl/ke/i386/trap.s

index ea4e3be..98425d7 100644 (file)
@@ -554,12 +554,13 @@ FASTCALL
 Ki386InitializeTss(IN PKTSS Tss,\r
                    IN PKIDTENTRY Idt)\r
 {\r
-    PKGDTENTRY TssEntry;\r
-    PKIDTENTRY TaskGateEntry;\r
-    PKIDT_ACCESS TaskGateAccess;\r
+    PKGDTENTRY TssEntry, TaskGateEntry;\r
 \r
     /* Initialize the boot TSS. */\r
     TssEntry = &KiBootGdt[KGDT_TSS / sizeof(KGDTENTRY)];\r
+    TssEntry->HighWord.Bits.Type = I386_TSS;\r
+    TssEntry->HighWord.Bits.Pres = 1;\r
+    TssEntry->HighWord.Bits.Dpl = 0;\r
     KiInitializeTSS2(Tss, TssEntry);\r
     KiInitializeTSS(Tss);\r
 \r
@@ -567,14 +568,11 @@ Ki386InitializeTss(IN PKTSS Tss,
     Ke386SetTr(KGDT_TSS);\r
 \r
     /* Setup the Task Gate for Double Fault Traps */\r
-    TaskGateEntry = &Idt[8];\r
-    TaskGateAccess = (PKIDT_ACCESS)&TaskGateEntry->Access;\r
-#if 0\r
-    TaskGateAccess->SegmentType = I386_TASK_GATE;\r
-    TaskGateAccess->Present = 1;\r
-    TaskGateAccess->Dpl = 0;\r
-    TaskGateEntry->Selector = KGDT_DF_TSS;\r
-#endif\r
+    TaskGateEntry = (PKGDTENTRY)&Idt[8];\r
+    TaskGateEntry->HighWord.Bits.Type = I386_TASK_GATE;\r
+    TaskGateEntry->HighWord.Bits.Pres = 1;\r
+    TaskGateEntry->HighWord.Bits.Dpl = 0;\r
+    ((PKIDTENTRY)TaskGateEntry)->Selector = KGDT_DF_TSS;\r
 \r
     /* Initialize the TSS used for handling double faults. */\r
     Tss = (PKTSS)KiDoubleFaultTSS;\r
@@ -599,13 +597,11 @@ Ki386InitializeTss(IN PKTSS Tss,
     TssEntry->LimitLow = KTSS_IO_MAPS;\r
 \r
     /* Now setup the NMI Task Gate */\r
-    TaskGateEntry = &Idt[2];\r
-    TaskGateAccess = (PKIDT_ACCESS)&TaskGateEntry->Access;\r
-#if 0\r
-    TaskGateAccess->SegmentType = I386_TASK_GATE;\r
-    TaskGateAccess->Present = 1;\r
-    TaskGateEntry->Selector = KGDT_NMI_TSS;\r
-#endif\r
+    TaskGateEntry = (PKGDTENTRY)&Idt[2];\r
+    TaskGateEntry->HighWord.Bits.Type = I386_TASK_GATE;\r
+    TaskGateEntry->HighWord.Bits.Pres = 1;\r
+    TaskGateEntry->HighWord.Bits.Dpl = 0;\r
+    ((PKIDTENTRY)TaskGateEntry)->Selector = KGDT_NMI_TSS;\r
 \r
     /* Initialize the actual TSS */\r
     Tss = (PKTSS)KiNMITSS;\r
index 898f3c1..60a8452 100644 (file)
@@ -367,7 +367,7 @@ AppCpuInit:
     if (!Cpu)
     {
         /* Initialize debugging system */
-        KdInitSystem (0, KeLoaderBlock);
+        KdInitSystem(0, KeLoaderBlock);
 
         /* Check for break-in */
         if (KdPollBreakIn()) DbgBreakPointWithStatus(1);
index 30a952d..f2ad0f7 100644 (file)
@@ -14,6 +14,7 @@
 
 /* GLOBALS *******************************************************************/
 
+.data
 .globl _KiIdt
 _KiIdt:
 /* This is the Software Interrupt Table that we handle in this file:        */
@@ -87,6 +88,7 @@ _UnexpectedMsg:
     .asciz "\n\x7\x7!!! Unexpected Interrupt %02lx !!!\n"
 
 /* SOFTWARE INTERRUPT SERVICES ***********************************************/
+.text
 
 _KiGetTickCount:
 _KiCallbackReturn: