[ros-diffs] [tkreuzer] 35740: Fix Ki386InitializeTss. Load idt in KeInitExceptions. Implement KiDebugServiceTrap. Add #ifed out threadini.c. Update Stubs. Now DbgPrints are working.

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Fri Aug 29 02:38:15 CEST 2008


Author: tkreuzer
Date: Thu Aug 28 19:38:15 2008
New Revision: 35740

URL: http://svn.reactos.org/svn/reactos?rev=35740&view=rev
Log:
Fix Ki386InitializeTss. Load idt in KeInitExceptions.  Implement KiDebugServiceTrap. Add #ifed out threadini.c. Update Stubs. Now DbgPrints are working.

Added:
    branches/ros-amd64-bringup/reactos/ntoskrnl/kd/amd64/
    branches/ros-amd64-bringup/reactos/ntoskrnl/kd/amd64/kd.c   (with props)
    branches/ros-amd64-bringup/reactos/ntoskrnl/kdbg/amd64/
    branches/ros-amd64-bringup/reactos/ntoskrnl/kdbg/amd64/kdb.c   (with props)
    branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/thrdini.c   (with props)
Modified:
    branches/ros-amd64-bringup/reactos/ntoskrnl/amd64stubs.c
    branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/cpu.c
    branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/except.c
    branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S
    branches/ros-amd64-bringup/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild

Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/amd64stubs.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/amd64stubs.c?rev=35740&r1=35739&r2=35740&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/amd64stubs.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/amd64stubs.c [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -69,7 +69,6 @@
 STUB(KeFeatureBits)
 STUB(KiSystemService)
 STUB(KdpGdbStubInit)
-STUB(KdbpGetCommandLineSettings)
 STUB(KdbpSafeReadMemory)
 STUB(RtlFillMemoryUlong)
 STUB(RtlCaptureContext)

Added: branches/ros-amd64-bringup/reactos/ntoskrnl/kd/amd64/kd.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/kd/amd64/kd.c?rev=35740&view=auto
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/kd/amd64/kd.c (added)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/kd/amd64/kd.c [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -1,0 +1,30 @@
+
+#include <ntoskrnl.h>
+#define NDEBUG
+#include <debug.h>
+
+VOID
+STDCALL
+KdbpGetCommandLineSettings(PCHAR p1)
+{
+    PCHAR p2;
+
+    while (p1 && (p2 = strchr(p1, ' ')))
+    {
+        p2++;
+
+        if (!_strnicmp(p2, "KDSERIAL", 8))
+        {
+            p2 += 8;
+            KdbDebugState |= KD_DEBUG_KDSERIAL;
+            KdpDebugMode.Serial = TRUE;
+        }
+        else if (!_strnicmp(p2, "KDNOECHO", 8))
+        {
+            p2 += 8;
+            KdbDebugState |= KD_DEBUG_KDNOECHO;
+        }
+
+        p1 = p2;
+    }
+}

Propchange: branches/ros-amd64-bringup/reactos/ntoskrnl/kd/amd64/kd.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: branches/ros-amd64-bringup/reactos/ntoskrnl/kdbg/amd64/kdb.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/kdbg/amd64/kdb.c?rev=35740&view=auto
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/kdbg/amd64/kdb.c (added)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/kdbg/amd64/kdb.c [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -1,0 +1,47 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            ntoskrnl/kdbg/kdb.c
+ * PURPOSE:         Kernel Debugger
+ *
+ * PROGRAMMERS:     Gregor Anich
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ntoskrnl.h>
+#define NDEBUG
+#include <internal/debug.h>
+
+/* GLOBALS *******************************************************************/
+
+ULONG KdbDebugState = 0; /* KDBG Settings (NOECHO, KDSERIAL) */
+
+/* FUNCTIONS *****************************************************************/
+
+VOID
+STDCALL
+KdbpGetCommandLineSettings(PCHAR p1)
+{
+    PCHAR p2;
+
+    while (p1 && (p2 = strchr(p1, ' ')))
+    {
+        p2++;
+
+        if (!_strnicmp(p2, "KDSERIAL", 8))
+        {
+            p2 += 8;
+            KdbDebugState |= KD_DEBUG_KDSERIAL;
+            KdpDebugMode.Serial = TRUE;
+        }
+        else if (!_strnicmp(p2, "KDNOECHO", 8))
+        {
+            p2 += 8;
+            KdbDebugState |= KD_DEBUG_KDNOECHO;
+        }
+
+        p1 = p2;
+    }
+}
+

Propchange: branches/ros-amd64-bringup/reactos/ntoskrnl/kdbg/amd64/kdb.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/cpu.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/cpu.c?rev=35740&r1=35739&r2=35740&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/cpu.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/cpu.c [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -456,30 +456,45 @@
                    IN PKGDTENTRY Gdt,
                    IN UINT64 Stack)
 {
-    PKGDTENTRY TssEntry;
-
-    /* Initialize the boot TSS entry */
-    TssEntry = &Gdt[KGDT_TSS / sizeof(KGDTENTRY)];
-    TssEntry->Bits.Type = I386_TSS;
+    PKGDTENTRY64 TssEntry;
+
+    /* Initialize the TSS descriptor entry */
+    TssEntry = (PVOID)((ULONG64)Gdt + KGDT_TSS);
+    TssEntry->Bits.Type = 9;//AMD64_TSS;
+    TssEntry->Bits.Dpl = 0;
     TssEntry->Bits.Present = 1;
-    TssEntry->Bits.Dpl = 0;
-
-    /* FIXME: I/O Map */
+    TssEntry->Bits.System = 0;
+    TssEntry->Bits.LongMode = 0;
+    TssEntry->Bits.DefaultBig = 0;
+    TssEntry->Bits.Granularity = 0;
+
+    /* Descriptor base is the TSS address */
+    TssEntry->BaseLow = (ULONG64)Tss & 0xffff;
+    TssEntry->Bits.BaseMiddle = ((ULONG64)Tss >> 16) & 0xff;
+    TssEntry->Bits.BaseHigh = ((ULONG64)Tss >> 24) & 0xff;
+    TssEntry->BaseUpper = (ULONG64)Tss >> 32;
+
+    /* Set the limit */
+    TssEntry->LimitLow = sizeof(KTSS64) -1;
+    TssEntry->Bits.LimitHigh = 0;
+
+    /* FIXME: I/O Map? */
+    Tss->IoMapBase = 0;
+
+    /* Setup ring 0 stack pointer */
+    Tss->Rsp0 = Stack;
+
+    /* Setup a stack for Double Fault Traps */
+    Tss->Ist[1] = (ULONG64)KiDoubleFaultStack;
+
+    /* Setup a stack for CheckAbort Traps */
+    Tss->Ist[2] = (ULONG64)KiDoubleFaultStack;
+
+    /* Setup a stack for NMI Traps */
+    Tss->Ist[3] = (ULONG64)KiDoubleFaultStack;
 
     /* Load the task register */
     Ke386SetTr(KGDT_TSS);
-
-    /* Setup stack pointer */
-    Tss->Rsp0 = Stack;
-
-    /* Setup a stack for Double Fault Traps */
-    Tss->Ist[1] = PtrToUlong(KiDoubleFaultStack);
-
-    /* Setup a stack for CheckAbort Traps */
-    Tss->Ist[2] = PtrToUlong(KiDoubleFaultStack);
-
-    /* Setup a stack for NMI Traps */
-    Tss->Ist[3] = PtrToUlong(KiDoubleFaultStack);
 
 }
 

Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/except.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/except.c?rev=35740&r1=35739&r2=35740&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/except.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/except.c [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -87,5 +87,6 @@
         KiIdt[i].Reserved1 = 0;
     }
 
+    __lidt(&KiIdtDescriptor.Limit);
 }
 

Added: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/thrdini.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/thrdini.c?rev=35740&view=auto
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/thrdini.c (added)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/thrdini.c [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -1,0 +1,231 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            ntoskrnl/ke/i386/thread.c
+ * PURPOSE:         i386 Thread Context Creation
+ * PROGRAMMER:      Alex Ionescu (alex at relsoft.net)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ntoskrnl.h>
+#define NDEBUG
+#include <debug.h>
+#if 0
+typedef struct _KSWITCHFRAME
+{
+    PVOID ExceptionList;
+    BOOLEAN ApcBypassDisable;
+    PVOID RetAddr;
+} KSWITCHFRAME, *PKSWITCHFRAME;
+
+typedef struct _KSTART_FRAME
+{
+    PKSYSTEM_ROUTINE SystemRoutine;
+    PKSTART_ROUTINE StartRoutine;
+    PVOID StartContext;
+    BOOLEAN UserThread;
+} KSTART_FRAME, *PKSTART_FRAME;
+
+typedef struct _KUINIT_FRAME
+{
+    KSWITCHFRAME CtxSwitchFrame;
+    KSTART_FRAME StartFrame;
+    KTRAP_FRAME TrapFrame;
+    FX_SAVE_AREA FxSaveArea;
+} KUINIT_FRAME, *PKUINIT_FRAME;
+
+typedef struct _KKINIT_FRAME
+{
+    KSWITCHFRAME CtxSwitchFrame;
+    KSTART_FRAME StartFrame;
+    FX_SAVE_AREA FxSaveArea;
+} KKINIT_FRAME, *PKKINIT_FRAME;
+#endif
+/* FUNCTIONS *****************************************************************/
+
+VOID
+NTAPI
+Ke386InitThreadWithContext(IN PKTHREAD Thread,
+                           IN PKSYSTEM_ROUTINE SystemRoutine,
+                           IN PKSTART_ROUTINE StartRoutine,
+                           IN PVOID StartContext,
+                           IN PCONTEXT ContextPointer)
+{
+	FrLdrDbgPrint("Ke386InitThreadWithContext stub\n");
+#if 0
+    PFX_SAVE_AREA FxSaveArea;
+    PFXSAVE_FORMAT FxSaveFormat;
+    PKSTART_FRAME StartFrame;
+    PKSWITCHFRAME CtxSwitchFrame;
+    PKTRAP_FRAME TrapFrame;
+    CONTEXT LocalContext;
+    PCONTEXT Context = NULL;
+    ULONG ContextFlags;
+
+    /* Check if this is a With-Context Thread */
+    if (ContextPointer)
+    {
+        /* Set up the Initial Frame */
+        PKUINIT_FRAME InitFrame;
+        InitFrame = (PKUINIT_FRAME)((ULONG_PTR)Thread->InitialStack -
+                                    sizeof(KUINIT_FRAME));
+
+        /* Copy over the context we got */
+        RtlCopyMemory(&LocalContext, ContextPointer, sizeof(CONTEXT));
+        Context = &LocalContext;
+        ContextFlags = CONTEXT_CONTROL;
+
+        /* Zero out the trap frame and save area */
+        RtlZeroMemory(&InitFrame->TrapFrame,
+                      KTRAP_FRAME_LENGTH + sizeof(FX_SAVE_AREA));
+
+        /* Setup the Fx Area */
+        FxSaveArea = &InitFrame->FxSaveArea;
+
+        /* Check if we support FXsr */
+        if (KeI386FxsrPresent)
+        {
+            /* Get the FX Save Format Area */
+            FxSaveFormat = (PFXSAVE_FORMAT)Context->ExtendedRegisters;
+
+            /* Set an initial state */
+            FxSaveFormat->ControlWord = 0x27F;
+            FxSaveFormat->StatusWord = 0;
+            FxSaveFormat->TagWord = 0;
+            FxSaveFormat->ErrorOffset = 0;
+            FxSaveFormat->ErrorSelector = 0;
+            FxSaveFormat->DataOffset = 0;
+            FxSaveFormat->DataSelector = 0;
+            FxSaveFormat->MXCsr = 0x1F80;
+        }
+        else
+        {
+            /* Setup the regular save area */
+            Context->FloatSave.ControlWord = 0x27F;
+            Context->FloatSave.StatusWord = 0;
+            Context->FloatSave.TagWord = -1;
+            Context->FloatSave.ErrorOffset = 0;
+            Context->FloatSave.ErrorSelector = 0;
+            Context->FloatSave.DataOffset =0;
+            Context->FloatSave.DataSelector = 0;
+        }
+
+        /* Check if the CPU has NPX */
+        if (KeI386NpxPresent)
+        {
+            /* Set an intial NPX State */
+            Context->FloatSave.Cr0NpxState = 0;
+            FxSaveArea->Cr0NpxState = 0;
+            FxSaveArea->NpxSavedCpu = 0;
+
+            /* Now set the context flags depending on XMM support */
+            ContextFlags |= (KeI386FxsrPresent) ? CONTEXT_EXTENDED_REGISTERS :
+                                                  CONTEXT_FLOATING_POINT;
+
+            /* Set the Thread's NPX State */
+            Thread->NpxState = NPX_STATE_NOT_LOADED;
+            Thread->DispatcherHeader.NpxIrql = PASSIVE_LEVEL;
+        }
+        else
+        {
+            /* We'll use emulation */
+            FxSaveArea->Cr0NpxState = CR0_EM;
+            Thread->NpxState = NPX_STATE_NOT_LOADED &~ CR0_MP;
+        }
+
+        /* Disable any debug regiseters */
+        Context->ContextFlags &= ~CONTEXT_DEBUG_REGISTERS;
+
+        /* Setup the Trap Frame */
+        TrapFrame = &InitFrame->TrapFrame;
+
+        /* Set up a trap frame from the context. */
+        KeContextToTrapFrame(Context,
+                             NULL,
+                             TrapFrame,
+                             Context->ContextFlags | ContextFlags,
+                             UserMode);
+
+        /* Set SS, DS, ES's RPL Mask properly */
+        TrapFrame->HardwareSegSs |= RPL_MASK;
+        TrapFrame->SegDs |= RPL_MASK;
+        TrapFrame->SegEs |= RPL_MASK;
+        TrapFrame->Dr7 = 0;
+
+        /* Set the debug mark */
+        TrapFrame->DbgArgMark = 0xBADB0D00;
+
+        /* Set the previous mode as user */
+        TrapFrame->PreviousPreviousMode = UserMode;
+
+        /* Terminate the Exception Handler List */
+        TrapFrame->ExceptionList = EXCEPTION_CHAIN_END;
+
+        /* Setup the Stack for KiThreadStartup and Context Switching */
+        StartFrame = &InitFrame->StartFrame;
+        CtxSwitchFrame = &InitFrame->CtxSwitchFrame;
+
+        /* Tell the thread it will run in User Mode */
+        Thread->PreviousMode = UserMode;
+
+        /* Tell KiThreadStartup of that too */
+        StartFrame->UserThread = TRUE;
+    }
+    else
+    {
+        /* Set up the Initial Frame for the system thread */
+        PKKINIT_FRAME InitFrame;
+        InitFrame = (PKKINIT_FRAME)((ULONG_PTR)Thread->InitialStack -
+                                    sizeof(KKINIT_FRAME));
+
+        /* Setup the Fx Area */
+        FxSaveArea = &InitFrame->FxSaveArea;
+        RtlZeroMemory(FxSaveArea, sizeof(FX_SAVE_AREA));
+
+        /* Check if we have Fxsr support */
+        if (KeI386FxsrPresent)
+        {
+            /* Set the stub FX area */
+            FxSaveArea->U.FxArea.ControlWord = 0x27F;
+            FxSaveArea->U.FxArea.MXCsr = 0x1F80;
+        }
+        else
+        {
+            /* Set the stub FN area */
+            FxSaveArea->U.FnArea.ControlWord = 0x27F;
+            FxSaveArea->U.FnArea.TagWord = -1;
+        }
+
+        /* No NPX State */
+        Thread->NpxState = NPX_STATE_NOT_LOADED;
+
+        /* Setup the Stack for KiThreadStartup and Context Switching */
+        StartFrame = &InitFrame->StartFrame;
+        CtxSwitchFrame = &InitFrame->CtxSwitchFrame;
+
+        /* Tell the thread it will run in Kernel Mode */
+        Thread->PreviousMode = KernelMode;
+
+        /* Tell KiThreadStartup of that too */
+        StartFrame->UserThread = FALSE;
+    }
+
+    /* Now setup the remaining data for KiThreadStartup */
+    StartFrame->StartContext = StartContext;
+    StartFrame->StartRoutine = StartRoutine;
+    StartFrame->SystemRoutine = SystemRoutine;
+
+    /* And set up the Context Switch Frame */
+    CtxSwitchFrame->RetAddr = KiThreadStartup;
+    CtxSwitchFrame->ApcBypassDisable = TRUE;
+    CtxSwitchFrame->ExceptionList = EXCEPTION_CHAIN_END;;
+
+    /* Save back the new value of the kernel stack. */
+    Thread->KernelStack = (PVOID)CtxSwitchFrame;
+#endif
+}
+
+/* EOF */
+
+

Propchange: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/thrdini.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S?rev=35740&r1=35739&r2=35740&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -17,6 +17,9 @@
 
 .data
 
+_MsgPageFault:
+.ascii "Page fault 0x%x at %p!\n\0"
+
 _MsgGeneralProtFault:
 .ascii "General protection fault at %p!\n\0"
 
@@ -33,55 +36,95 @@
 
 .global _KiDivideErrorFault
 _KiDivideErrorFault:
+    /* Push pseudo error code */
+    push 0
+
 
 .global _KiDebugTrapOrFault
 _KiDebugTrapOrFault:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiNmiInterrupt
 _KiNmiInterrupt:
+    /* Push pseudo error code */
+    push 0
+
+jmp $
 
 .global _KiBreakpointTrap
 _KiBreakpointTrap:
-//    mov rdx, [rsp]
+    /* Push pseudo error code */
+    push 0
+
+    push rax
+    push rcx
+    push rdx
+
     sub rsp, 0x10
-//    movabs rcx, offset _MsgBreakpointTrap
-//    movabs rax, offset _FrLdrDbgPrint
-//    call [rax]
+    movabs rcx, offset _MsgBreakpointTrap
+    mov rdx, [rsp + 0x10 + 24 + 8]
+    movabs rax, offset _FrLdrDbgPrint
+    call [rax]
     add rsp, 0x10
-    iret
+
+    pop rdx
+    pop rcx
+    pop rax
+    add rsp, 8
+    iretq
 
 .global _KiOverflowTrap
 _KiOverflowTrap:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiBoundFault
 _KiBoundFault:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiInvalidOpcodeFault
 _KiInvalidOpcodeFault:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiNpxNotAvailableFault
 _KiNpxNotAvailableFault:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiDoubleFaultAbort
 _KiDoubleFaultAbort:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiNpxSegmentOverrunAbort
 _KiNpxSegmentOverrunAbort:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiInvalidTssFault
 _KiInvalidTssFault:
+    /* We have an error code */
+
 
 .global _KiSegmentNotPresentFault
 _KiSegmentNotPresentFault:
+    /* We have an error code */
+
 
 .global _KiStackFault
 _KiStackFault:
+    /* We have an error code */
 
 jmp $
 
 
 .global _KiGeneralProtectionFault
 _KiGeneralProtectionFault:
+    /* We have an error code */
+
     mov rdx, 0
     mov dx, ss
     movabs rcx, offset _MsgGeneralProtFault
@@ -92,18 +135,34 @@
 
 .global _KiPageFault
 _KiPageFault:
+    /* We have an error code */
+    movabs rcx, offset _MsgPageFault
+    mov rdx, [rsp]
+    mov r8, [rsp+8]
+    mov r9, rsp
+    movabs rax, offset _FrLdrDbgPrint
+    call [rax]
+    jmp $
+
 
 .global _KiFloatingErrorFault
 _KiFloatingErrorFault:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiAlignmentFault
 _KiAlignmentFault:
+    /* We have an error code */
 
 .global _KiMcheckAbort
 _KiMcheckAbort:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiXmmException
 _KiXmmException:
+    /* Push pseudo error code */
+    push 0
 
 .global _KiApcInterrupt
 _KiApcInterrupt:
@@ -111,9 +170,40 @@
 
 .global _KiRaiseAssertion
 _KiRaiseAssertion:
+jmp $
 
 .global _KiDebugServiceTrap
 _KiDebugServiceTrap:
+    /* Push pseudo error code */
+    push 0
+
+    push rax
+    push rcx
+    push rdx
+    push r8
+    push r9
+
+    /* Create stack space for parameters */
+    sub rsp, 0x18
+
+    /* just forward first 3 parameters */
+    call _KdpServiceDispatcher
+
+    /* Skip the int 3, increment return rip */
+    inc qword ptr [rsp + 0x18 + 48]
+
+    /* Cleanup */
+    add rsp, 0x18
+
+    pop r9
+    pop r8
+    pop rdx
+    pop rcx
+    pop rax
+
+    add rsp, 8
+    iretq
+
 
 .global _KiDpcInterrupt
 _KiDpcInterrupt:
@@ -121,10 +211,12 @@
 
 .global _KiIpiInterrupt
 _KiIpiInterrupt:
-    iret
+jmp $
+
 
 .global _KiUnexpectedInterrupt
 _KiUnexpectedInterrupt:
+jmp $
     movabs rcx, offset _MsgUnexpectedInterrupt
     movabs rax, offset _FrLdrDbgPrint
     call [rax]

Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild?rev=35740&r1=35739&r2=35740&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild [iso-8859-1] Thu Aug 28 19:38:15 2008
@@ -95,6 +95,7 @@
 				<file>except.c</file>
 				<file>irql.c</file>
 				<file>kiinit.c</file>
+				<file>thrdini.c</file>
 				<file>trap.S</file>
 			</directory>
 		</if>
@@ -303,6 +304,11 @@
 				<!-- file>kdb_expr.c</file -->
 				<file>kdb_keyboard.c</file>
 				<file>kdb_serial.c</file>
+				<if property="ARCH" value="amd64">
+					<directory name="amd64">
+						<file>kdb.c</file>
+					</directory>
+				</if>
 			</if>
 			<if property="DBG_OR_KDBG" value="true">
 				<file>kdb_symbols.c</file>



More information about the Ros-diffs mailing list