Merge all amd64 related changes from cmake branch
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 10 Feb 2011 10:30:43 +0000 (10:30 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 10 Feb 2011 10:30:43 +0000 (10:30 +0000)
svn path=/trunk/; revision=50640

28 files changed:
reactos/include/ndk/amd64/ketypes.h
reactos/include/xdk/amd64/ke.h
reactos/lib/sdk/crt/except/amd64/chkstk_asm.s
reactos/lib/sdk/crt/except/amd64/seh.s
reactos/lib/sdk/crt/math/amd64/alldiv.S
reactos/lib/sdk/crt/math/amd64/atan.S
reactos/lib/sdk/crt/math/amd64/atan2.S
reactos/lib/sdk/crt/math/amd64/ceil.S
reactos/lib/sdk/crt/math/amd64/ceilf.S
reactos/lib/sdk/crt/math/amd64/exp.S
reactos/lib/sdk/crt/math/amd64/fabs.S
reactos/lib/sdk/crt/math/amd64/floor.S
reactos/lib/sdk/crt/math/amd64/floorf.S
reactos/lib/sdk/crt/math/amd64/fmod.S
reactos/lib/sdk/crt/math/amd64/fmodf.S
reactos/lib/sdk/crt/math/amd64/ldexp.S
reactos/lib/sdk/crt/math/amd64/log.S
reactos/lib/sdk/crt/math/amd64/log10.S
reactos/lib/sdk/crt/math/amd64/pow.S
reactos/lib/sdk/crt/math/amd64/sqrt.S
reactos/lib/sdk/crt/math/amd64/sqrtf.S
reactos/lib/sdk/crt/math/amd64/tan.S
reactos/lib/sdk/crt/setjmp/amd64/setjmp.s
reactos/ntoskrnl/include/internal/amd64/mm.h
reactos/ntoskrnl/ke/amd64/thrdini.c
reactos/ntoskrnl/ke/amd64/trap.S
reactos/ntoskrnl/mm/amd64/init.c
reactos/tools/rsym/rsym64.h

index 9e9042f..9a9ee6f 100644 (file)
@@ -81,6 +81,7 @@ Author:
 #define CR4_PGE                 0x80
 #define CR4_FXSR                0x200
 #define CR4_XMMEXCPT            0x400
+#define CR4_CHANNELS            0x800
 
 //
 // EFlags
@@ -98,6 +99,39 @@ Author:
 #define EFLAGS_USER_SANITIZE    0x3F4DD7
 #define EFLAG_SIGN              0x8000
 #define EFLAG_ZERO              0x4000
+#define EFLAGS_TF_MASK          0x0100
+#define EFLAGS_TF_SHIFT         0x0008
+#define EFLAGS_ID_MASK          0x200000
+#define EFLAGS_IF_MASK          0x0200
+#define EFLAGS_IF_SHIFT         0x0009
+
+//
+// Machine Specific Registers
+//
+#define MSR_EFER         0xC0000080
+#define MSR_STAR         0xC0000081
+#define MSR_LSTAR        0xC0000082
+#define MSR_CSTAR        0xC0000083
+#define MSR_SYSCALL_MASK 0xC0000084
+#define MSR_FS_BASE      0xC0000100
+#define MSR_GS_BASE      0xC0000101
+#define MSR_GS_SWAP      0xC0000102
+#define MSR_MCG_STATUS   0x017A
+#define MSR_AMD_ACCESS   0x9C5A203A
+
+//
+// Flags in MSR_EFER
+//
+#define MSR_LMA                 0x0400
+#define MSR_LME                 0x0100
+#define MSR_SCE                 0x0001
+#define MSR_NXE                 0x0800
+#define MSR_PAT                 0x0277
+#define MSR_DEGUG_CTL           0x01D9
+#define MSR_LAST_BRANCH_FROM    0x01DB
+#define MSR_LAST_BRANCH_TO      0x01DC
+#define MSR_LAST_EXCEPTION_FROM 0x01DD
+#define MSR_LAST_EXCEPTION_TO   0x01DE
 
 //
 // IPI Types
@@ -115,6 +149,15 @@ Author:
 #define PRCB_BUILD_DEBUG        1
 #define PRCB_BUILD_UNIPROCESSOR 2
 
+//
+// Service Table
+//
+#define NUMBER_SERVICE_TABLES 2
+#define SERVICE_NUMBER_MASK 0xFFF
+#define SERVICE_TABLE_SHIFT 7
+#define SERVICE_TABLE_MASK 0x20
+#define SERVICE_TABLE_TEST 0x20
+
 //
 // HAL Variables
 //
@@ -144,6 +187,8 @@ Author:
 #define SYNCH_LEVEL             (IPI_LEVEL - 2)
 #endif
 
+#define NMI_STACK_SIZE 0x2000
+
 //
 // Trap Frame Definition
 //
@@ -863,6 +908,56 @@ typedef struct _KEXCEPTION_FRAME
     UINT64 Return;
 } KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
 
+typedef struct _DISPATCHER_CONTEXT
+{
+    ULONG64 ControlPc;
+    PVOID ImageBase;
+    PVOID FunctionEntry;
+    PVOID EstablisherFrame;
+    ULONG64 TargetIp;
+    PVOID ContextRecord;
+    PVOID LanguageHandler;
+    PVOID HandlerData;
+    PVOID HistoryTable;
+    ULONG ScopeIndex;
+} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
+
+
+typedef struct _KSTART_FRAME
+{
+    ULONG64 P1Home;
+    ULONG64 P2Home;
+    ULONG64 P3Home;
+    ULONG64 P4Home;
+    ULONG64 P5Home;
+    ULONG64 Return;
+} KSTART_FRAME, *PKSTART_FRAME;
+
+typedef struct _KSWITCH_FRAME
+{
+    ULONG64 P1Home;
+    ULONG64 P2Home;
+    ULONG64 P3Home;
+    ULONG64 P4Home;
+    ULONG64 P5Home;
+    ULONG64 ApcBypass;
+    ULONG64 Rbp;
+    ULONG64 Return;
+} KSWITCH_FRAME, *PKSWITCH_FRAME;
+
+typedef struct _KTIMER_TABLE_ENTRY
+{
+    ULONG_PTR Lock;
+    LIST_ENTRY Entry;
+    ULARGE_INTEGER Time;
+} KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
+
+typedef struct _KTIMER_TABLE
+{
+    KTIMER* TimerExpiry[64];
+    KTIMER_TABLE_ENTRY TimerEntries[256];
+} KTIMER_TABLE, *PKTIMER_TABLE;
+
 //
 // Inline function to get current KPRCB
 //
index 833aca8..f63add4 100644 (file)
@@ -67,7 +67,7 @@ KfRaiseIrql(IN KIRQL NewIrql)
 {
   KIRQL OldIrql;
 
-  OldIrql = __readcr8();
+  OldIrql = (KIRQL)__readcr8();
   //ASSERT(OldIrql <= NewIrql);
   __writecr8(NewIrql);
   return OldIrql;
index b1486de..113b45b 100644 (file)
 
 #include <asm.inc>
 
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC MsgUnimplemented
 MsgUnimplemented:
 .asciz "WARNING:  %s at %s:%d is UNIMPLEMENTED!\n"
 
 
-.proc _chkstk
+FUNC _chkstk
+    .endprolog
     UNIMPLEMENTED chkstk
     ret
-.endp
+ENDFUNC _chkstk
 
-.proc _alloca_probe
+FUNC _alloca_probe
+    .endprolog
     UNIMPLEMENTED alloca_probe
     ret
-.endp
+ENDFUNC _alloca_probe
 
 END
 /* EOF */
index 9d44d3f..b714dda 100644 (file)
 
 /* GLOBALS *******************************************************************/
 
-.globl _global_unwind2
-.globl _local_unwind2
-.globl _abnormal_termination
-.globl _except_handler2
-.globl _except_handler3
+PUBLIC _global_unwind2
+PUBLIC _local_unwind2
+PUBLIC _abnormal_termination
+PUBLIC _except_handler2
+PUBLIC _except_handler3
 
-/* FUNCTIONS *****************************************************************/
+/* CODE **********************************************************************/
+.code64
 
-.func _unwind_handler
-_unwind_handler:
+FUNC _unwind_handler
+    .endprolog
     ret
-.endfunc
+ENDFUNC _unwind_handler
 
-.func _global_unwind2
-_global_unwind2:
+FUNC _global_unwind2
+    .endprolog
     ret
-.endfunc
+ENDFUNC _global_unwind2
 
-.func _abnormal_termination
-_abnormal_termination:
+FUNC _abnormal_termination
+    .endprolog
     ret
-.endfunc
+ENDFUNC _abnormal_termination
 
-.func _local_unwind2
-_local_unwind2:
+FUNC _local_unwind2
+    .endprolog
     ret
-.endfunc
+ENDFUNC _local_unwind2
 
-.func _except_handler2
-_except_handler2:
+FUNC _except_handler2
+    .endprolog
     ret
-.endfunc
+ENDFUNC _except_handler2
 
-.func _except_handler3
-_except_handler3:
+FUNC _except_handler3
+    .endprolog
     ret
-.endfunc
+ENDFUNC _except_handler3
 
 END
index b4018cc..f4608b2 100644 (file)
 
 #include <asm.inc>
 
-/* DATA *********************************************************************/
+/* DATA **********************************************************************/
+.code64
 
 PUBLIC _fltused
 _fltused:
-        .long 0x9875
-
-/* FUNCTIONS ****************************************************************/
+        .long HEX(9875)
 
+/* CODE **********************************************************************/
 .code64
 
-.proc alldiv
+FUNC alldiv
+    .endprolog
     UNIMPLEMENTED alldiv
     ret
 
-.endp alldiv
+ENDFUNC alldiv
+
+END
index 889f10e..b649ec0 100644 (file)
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
 PUBLIC atan
 atan:
     UNIMPLEMENTED atan
     ret
+
+END
index fd61110..bccaeaf 100644 (file)
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
 PUBLIC atan2
 atan2:
     UNIMPLEMENTED atan2
     ret
+
+END
index 17ae015..c5b7d6d 100644 (file)
@@ -11,8 +11,7 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
 PUBLIC ceil
@@ -20,3 +19,4 @@ ceil:
     UNIMPLEMENTED ceil
     ret
 
+END
index 2b2d14b..fd04e4d 100644 (file)
@@ -11,8 +11,7 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
 PUBLIC ceilf
@@ -39,7 +38,7 @@ ceilf:
 
     fstp dword ptr [rsp]
     movss xmm0, [rsp]
-    
+
     add rsp, 16
     ret
 
index 44b324e..8fda82b 100644 (file)
@@ -11,8 +11,7 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
 PUBLIC exp
index 3c1e8f2..84452dc 100644 (file)
 
 #include <asm.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
-PUBLIC fabs
-fabs:
+PUBLIC _fabs
+_fabs:
     UNIMPLEMENTED fabs
     ret
 
+END
index c0fba3d..ee39d77 100644 (file)
@@ -11,8 +11,7 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
 PUBLIC floor
index 0ac9098..bfb3581 100644 (file)
@@ -11,8 +11,7 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* FUNCTIONS ****************************************************************/
-
+/* CODE **********************************************************************/
 .code64
 
 PUBLIC floorf
index 697257a..5117d8b 100644 (file)
 
 #include <asm.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
-PUBLIC fmod
-fmod:
+PUBLIC _fmod
+_fmod:
     UNIMPLEMENTED fmod
     ret
 
index d0e24ef..711ef59 100644 (file)
@@ -10,7 +10,8 @@
 
 #include <asm.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC fmodf
 fmodf:
index a83660a..4635d75 100644 (file)
@@ -10,7 +10,8 @@
 
 #include <asm.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC ldexp
 ldexp:
index 1289a74..f7ffc57 100644 (file)
 
 #include <asm.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC log
 log:
     UNIMPLEMENTED log
     ret
+
+END
index f8014aa..5038d17 100644 (file)
 
 #include <asm.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC log10
 log10:
     UNIMPLEMENTED log10
     ret
 
+END
index 48adf39..fd8d104 100644 (file)
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC pow
 pow:
     UNIMPLEMENTED pow
     ret
 
+END
index 282419e..4c234eb 100644 (file)
@@ -11,7 +11,8 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC sqrt
 sqrt:
index da75fcf..e4d3508 100644 (file)
@@ -11,7 +11,8 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC sqrtf
 sqrtf:
index 93e5d01..53d8287 100644 (file)
@@ -11,7 +11,8 @@
 #include <asm.inc>
 #include <ksamd64.inc>
 
-/* DATA *********************************************************************/
+/* CODE **********************************************************************/
+.code64
 
 PUBLIC tan
 tan:
index a969bc4..3c4b449 100644 (file)
 #include <asm.inc>
 #include <ksamd64.inc>
 
-#define JUMP_BUFFER_Frame 0x00
-#define JUMP_BUFFER_Rbx   0x08
-#define JUMP_BUFFER_Rsp   0x10
-#define JUMP_BUFFER_Rbp   0x18
-#define JUMP_BUFFER_Rsi   0x20
-#define JUMP_BUFFER_Rdi   0x28
-#define JUMP_BUFFER_R12   0x30
-#define JUMP_BUFFER_R13   0x38
-#define JUMP_BUFFER_R14   0x40
-#define JUMP_BUFFER_R15   0x48
-#define JUMP_BUFFER_Rip   0x50
-#define JUMP_BUFFER_Spare 0x58
-#define JUMP_BUFFER_Xmm6  0x60
-#define JUMP_BUFFER_Xmm7  0x70
-#define JUMP_BUFFER_Xmm8  0x80
-#define JUMP_BUFFER_Xmm9  0x90
-#define JUMP_BUFFER_Xmm10 0xa0
-#define JUMP_BUFFER_Xmm11 0xb0
-#define JUMP_BUFFER_Xmm12 0xc0
-#define JUMP_BUFFER_Xmm13 0xd0
-#define JUMP_BUFFER_Xmm14 0xe0
-#define JUMP_BUFFER_Xmm15 0xf0
+#define JUMP_BUFFER_Frame   0 /* 0x00 */
+#define JUMP_BUFFER_Rbx     8 /* 0x08 */
+#define JUMP_BUFFER_Rsp    16 /* 0x10 */
+#define JUMP_BUFFER_Rbp    24 /* 0x18 */
+#define JUMP_BUFFER_Rsi    32 /* 0x20 */
+#define JUMP_BUFFER_Rdi    40 /* 0x28 */
+#define JUMP_BUFFER_R12    48 /* 0x30 */
+#define JUMP_BUFFER_R13    56 /* 0x38 */
+#define JUMP_BUFFER_R14    64 /* 0x40 */
+#define JUMP_BUFFER_R15    72 /* 0x48 */
+#define JUMP_BUFFER_Rip    80 /* 0x50 */
+#define JUMP_BUFFER_Spare  88 /* 0x58 */
+#define JUMP_BUFFER_Xmm6   96 /* 0x60 */
+#define JUMP_BUFFER_Xmm7  112 /* 0x70 */
+#define JUMP_BUFFER_Xmm8  128 /* 0x80 */
+#define JUMP_BUFFER_Xmm9  144 /* 0x90 */
+#define JUMP_BUFFER_Xmm10 160 /* 0xa0 */
+#define JUMP_BUFFER_Xmm11 176 /* 0xb0 */
+#define JUMP_BUFFER_Xmm12 192 /* 0xc0 */
+#define JUMP_BUFFER_Xmm13 208 /* 0xd0 */
+#define JUMP_BUFFER_Xmm14 224 /* 0xe0 */
+#define JUMP_BUFFER_Xmm15 240 /* 0xf0 */
 
 
 /* FUNCTIONS ******************************************************************/
+.code64
 
-/*
+/*!
  * int _setjmp(jmp_buf env);
  *
- * Parameters: <rcx> - jmp_buf env
- * Returns:    0
- * Notes:      Sets up the jmp_buf
+ * \param   <rcx> - jmp_buf env
+ * \return  0
+ * \note    Sets up the jmp_buf
  */
 PUBLIC _setjmp
-.proc _setjmp
+FUNC _setjmp
+
+    .endprolog
+
     /* Load rsp as it was before the call into rax */
     lea rax, [rsp + 8]
     /* Load return address into r8 */
@@ -73,18 +77,21 @@ PUBLIC _setjmp
     movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15
     xor rax, rax
     ret
-.endp setjmp
+ENDFUNC _setjmp
 
-/*
+/*!
  * int _setjmpex(jmp_buf _Buf,void *_Ctx);
  *
- * Parameters: <rcx> - jmp_buf env
- *             <rdx> - frame
- * Returns:    0
- * Notes:      Sets up the jmp_buf
+ * \param   <rcx> - jmp_buf env
+ * \param   <rdx> - frame
+ * \return  0
+ * \note    Sets up the jmp_buf
  */
 PUBLIC _setjmpex
-.proc _setjmpex
+FUNC _setjmpex
+
+    .endprolog
+
     /* Load rsp as it was before the call into rax */
     lea rax, [rsp + 8]
     /* Load return address into r8 */
@@ -112,19 +119,21 @@ PUBLIC _setjmpex
     movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15
     xor rax, rax
     ret
-.endp setjmpex
+ENDFUNC _setjmpex
 
 
-/*
+/*!
  * void longjmp(jmp_buf env, int value);
  *
- * Parameters: <rcx> - jmp_buf setup by _setjmp
- *             <rdx> - int     value to return
- * Returns:    Doesn't return
- * Notes:      Non-local goto
+ * \param    <rcx> - jmp_buf setup by _setjmp
+ * \param    <rdx> - int     value to return
+ * \return   Doesn't return
+ * \note     Non-local goto
  */
 PUBLIC longjmp
-.proc longjmp
+FUNC longjmp
+
+    .endprolog
 
     // FIXME: handle frame
 
@@ -152,9 +161,9 @@ PUBLIC longjmp
     /* return param2 or 1 if it was 0 */
     mov rax, rdx
     test rax, rax
-    jnz 2f
+    jnz l2
     inc rax
-2:  jmp r8
-.endp longjmp
+l2: jmp r8
+ENDFUNC longjmp
 
 END
index d6343ed..38380cf 100644 (file)
@@ -131,6 +131,7 @@ MiPteToAddress(PMMPTE Pte)
     Temp >>= 16;
     return (PVOID)Temp;
 }
+#define MiPdeToAddress MiPteToAddress
 
 BOOLEAN
 FORCEINLINE
@@ -157,8 +158,6 @@ VOID
 MI_MAKE_PROTOTYPE_PTE(IN PMMPTE NewPte,
                       IN PMMPTE PointerPte)
 {
-    ULONG_PTR Offset;
-
     /* Store the Address */
     NewPte->u.Long = (ULONG64)PointerPte;
 
@@ -197,9 +196,11 @@ MmInitGlobalKernelPageDirectory(VOID)
 // FIXME, only copied from x86
 #define MI_MAKE_LOCAL_PAGE(x)      ((x)->u.Hard.Global = 0)
 #define MI_MAKE_DIRTY_PAGE(x)      ((x)->u.Hard.Dirty = 1)
+#define MI_MAKE_ACCESSED_PAGE(x)   ((x)->u.Hard.Accessed = 1)
 #define MI_PAGE_DISABLE_CACHE(x)   ((x)->u.Hard.CacheDisable = 1)
 #define MI_PAGE_WRITE_THROUGH(x)   ((x)->u.Hard.WriteThrough = 1)
 #define MI_PAGE_WRITE_COMBINED(x)  ((x)->u.Hard.WriteThrough = 0)
+#define MI_IS_PAGE_LARGE(x)        ((x)->u.Hard.LargePage == 1)
 #if !defined(CONFIG_SMP)
 #define MI_IS_PAGE_WRITEABLE(x)    ((x)->u.Hard.Write == 1)
 #else
@@ -231,8 +232,13 @@ MmInitGlobalKernelPageDirectory(VOID)
 #define MI_MAPPING_RANGE_START              (ULONG)HYPER_SPACE
 #define MI_MAPPING_RANGE_END                (MI_MAPPING_RANGE_START + \
                                              MI_HYPERSPACE_PTES * PAGE_SIZE)
-#define MI_ZERO_PTE                         (PMMPTE)(MI_MAPPING_RANGE_END + \
-                                             PAGE_SIZE)
+#define MI_DUMMY_PTE                        (PMMPTE)(MI_MAPPING_RANGE_END + \
+                                                     PAGE_SIZE)
+#define MI_VAD_BITMAP                       (PMMPTE)(MI_DUMMY_PTE + \
+                                                     PAGE_SIZE)
+#define MI_WORKING_SET_LIST                 (PMMPTE)(MI_VAD_BITMAP + \
+                                                     PAGE_SIZE)
+
 
 /* On x86, these two are the same */
 #define MMPDE MMPTE
index 616cd30..ce81b13 100644 (file)
 #define NDEBUG
 #include <debug.h>
 
-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;
+    KSWITCH_FRAME CtxSwitchFrame;
     KSTART_FRAME StartFrame;
     KTRAP_FRAME TrapFrame;
     //FX_SAVE_AREA FxSaveArea;
@@ -37,7 +22,7 @@ typedef struct _KUINIT_FRAME
 
 typedef struct _KKINIT_FRAME
 {
-    KSWITCHFRAME CtxSwitchFrame;
+    KSWITCH_FRAME CtxSwitchFrame;
     KSTART_FRAME StartFrame;
     //FX_SAVE_AREA FxSaveArea;
 } KKINIT_FRAME, *PKKINIT_FRAME;
@@ -55,7 +40,7 @@ KiInitializeContextThread(IN PKTHREAD Thread,
     //PFX_SAVE_AREA FxSaveArea;
     //PFXSAVE_FORMAT FxSaveFormat;
     PKSTART_FRAME StartFrame;
-    PKSWITCHFRAME CtxSwitchFrame;
+    PKSWITCH_FRAME CtxSwitchFrame;
     PKTRAP_FRAME TrapFrame;
     CONTEXT LocalContext;
     PCONTEXT Context = NULL;
@@ -140,7 +125,7 @@ KiInitializeContextThread(IN PKTHREAD Thread,
         Thread->PreviousMode = UserMode;
 
         /* Tell KiThreadStartup of that too */
-        StartFrame->UserThread = TRUE;
+//        StartFrame->UserThread = TRUE;
     }
     else
     {
@@ -170,18 +155,18 @@ KiInitializeContextThread(IN PKTHREAD Thread,
         Thread->PreviousMode = KernelMode;
 
         /* Tell KiThreadStartup of that too */
-        StartFrame->UserThread = FALSE;
+//        StartFrame->UserThread = FALSE;
     }
 
     /* Now setup the remaining data for KiThreadStartup */
-    StartFrame->StartContext = StartContext;
-    StartFrame->StartRoutine = StartRoutine;
-    StartFrame->SystemRoutine = SystemRoutine;
+//    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;;
+//    CtxSwitchFrame->RetAddr = KiThreadStartup;
+//    CtxSwitchFrame->ApcBypassDisable = TRUE;
+//    CtxSwitchFrame->ExceptionList = EXCEPTION_CHAIN_END;;
 
     /* Save back the new value of the kernel stack. */
     Thread->KernelStack = (PVOID)CtxSwitchFrame;
index 2b95b42..e0831d2 100644 (file)
@@ -76,7 +76,7 @@ ENDM
 #define TRAPFLAG_SYSTEMSERVICE (TRAPFLAG_VOLATILES|TRAPFLAG_DEBUG)
 #define TRAPFLAG_ALL HEX(ff)
 
-/* 
+/*
  * Stack Layout:
  * |-------------------|
  * | KTRAP_FRAME       |
@@ -89,7 +89,7 @@ ENDM
  */
 
 /*
- * ENTER_TRAP_FRAME - Allocate SIZE_KTRAP_FRAME and save registers to it
+ * ENTER_TRAP_FRAME - Allocate KTRAP_FRAME_LENGTH and save registers to it
  */
 MACRO(ENTER_TRAP_FRAME, Flags)
 LOCAL dont_swap
@@ -107,8 +107,8 @@ else
 endif
 
     /* Make room for a KTRAP_FRAME */
-    sub rsp, (SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME)
-    .allocstack (SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME)
+    sub rsp, (KTRAP_FRAME_LENGTH - SIZE_INITIAL_FRAME)
+    .allocstack (KTRAP_FRAME_LENGTH - SIZE_INITIAL_FRAME)
     .endprolog
 
     /* Save rbp */
@@ -278,12 +278,12 @@ ENDR
 .PROC InternalDispatchException
 
     /* Allocate stack space for EXCEPTION_RECORD and KEXCEPTION_FRAME */
-    sub rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME
-    .allocstack (SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME)
+    sub rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH
+    .allocstack (EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH)
     .endprolog
 
     /* Set up EXCEPTION_RECORD */
-    lea rcx, [rsp + SIZE_KEXCEPTION_FRAME]
+    lea rcx, [rsp + KEXCEPTION_FRAME_LENGTH]
     mov [rcx + EXCEPTION_RECORD_ExceptionCode], eax
     xor rax, rax
     mov [rcx + EXCEPTION_RECORD_ExceptionFlags], eax
@@ -341,7 +341,7 @@ ENDR
     movdqa xmm14, [rsp + KEXCEPTION_FRAME_Xmm14]
     movdqa xmm15, [rsp + KEXCEPTION_FRAME_Xmm15]
 
-    add rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME
+    add rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH
     ret
 .ENDP InternalDispatchException
 
@@ -516,7 +516,7 @@ PUBLIC KiInvalidOpcodeFault
 
 KiInvalidOpcodeKernel:
     /* Kernel mode fault */
-    
+
     /* Dispatch the exception */
     mov eax, STATUS_ILLEGAL_INSTRUCTION
     mov edx, 3
@@ -837,7 +837,7 @@ PUBLIC KiRaiseAssertion
     mov r10, 0
     mov r11, 0
     call InternalDispatchException
+
     LEAVE_TRAP_FRAME
     iretq
 .ENDP KiRaiseAssertion
index 3211b99..bf2dad4 100644 (file)
@@ -27,10 +27,16 @@ HalInitializeBios(ULONG Unknown, PLOADER_PARAMETER_BLOCK LoaderBlock);
 /* GLOBALS *****************************************************************/
 
 /* Template PTE and PDE for a kernel page */
-MMPTE ValidKernelPde = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1};
-MMPTE ValidKernelPte = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1};
-MMPDE DemandZeroPde  = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)};
-MMPTE PrototypePte = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) | PTE_PROTOTYPE | 0xFFFFF000};
+MMPTE ValidKernelPde = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}};
+MMPTE ValidKernelPte = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}};
+
+/* Template PDE for a demand-zero page */
+MMPDE DemandZeroPde  = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}};
+MMPTE DemandZeroPte  = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}};
+
+/* Template PTE for prototype page */
+MMPTE PrototypePte = {{(MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) |
+                      PTE_PROTOTYPE | (MI_PTE_LOOKUP_NEEDED << PAGE_SHIFT)}};
 
 /* Sizes */
 ///SIZE_T MmSessionSize = MI_SESSION_SIZE;
@@ -413,7 +419,7 @@ MiInitializePageTable()
     TmplPte.u.Flush.Write = 1;
     HyperTemplatePte = TmplPte;
 
-    /* Create PDPTs (72 KB) for shared system address space, 
+    /* Create PDPTs (72 KB) for shared system address space,
      * skip page tables and hyperspace */
 
     /* Loop the PXEs */
@@ -492,7 +498,7 @@ MiBuildNonPagedPool(VOID)
 
     /* Page-align the nonpaged pool size */
     MmSizeOfNonPagedPoolInBytes &= ~(PAGE_SIZE - 1);
-    
+
     /* Now, check if there was a registry size for the maximum size */
     if (!MmMaximumNonPagedPoolInBytes)
     {
@@ -501,7 +507,7 @@ MiBuildNonPagedPool(VOID)
         MmMaximumNonPagedPoolInBytes += (MmNumberOfPhysicalPages - 1024) /
                                          256 * MmMaxAdditionNonPagedPoolPerMb;
     }
-    
+
     /* Don't let the maximum go too high */
     if (MmMaximumNonPagedPoolInBytes > MI_MAX_NONPAGED_POOL_SIZE)
     {
@@ -517,7 +523,7 @@ MiBuildNonPagedPool(VOID)
     {
         /* Put non paged pool after the PFN database */
         MmNonPagedPoolStart = (PCHAR)MmPfnDatabase + MxPfnSizeInBytes;
-        MmMaximumNonPagedPoolInBytes = (ULONG64)MmNonPagedPoolEnd - 
+        MmMaximumNonPagedPoolInBytes = (ULONG64)MmNonPagedPoolEnd -
                                        (ULONG64)MmNonPagedPoolStart;
     }
 
@@ -688,7 +694,7 @@ MiBuildPagedPool_x(VOID)
     PMMPTE Pte;
     MMPTE TmplPte;
     ULONG Size, BitMapSize;
-    
+
     /* Default size for paged pool is 4 times non paged pool */
     MmSizeOfPagedPoolInBytes = 4 * MmMaximumNonPagedPoolInBytes;
 
@@ -767,7 +773,7 @@ MiBuildPagedPool_x(VOID)
     // Allocate the allocation bitmap, which tells us which regions have not yet
     // been mapped into memory
 
-    MmPagedPoolInfo.PagedPoolAllocationMap = 
+    MmPagedPoolInfo.PagedPoolAllocationMap =
         ExAllocatePoolWithTag(NonPagedPool, Size, '  mM');
     ASSERT(MmPagedPoolInfo.PagedPoolAllocationMap);
 
@@ -783,7 +789,7 @@ MiBuildPagedPool_x(VOID)
     // Given the allocation bitmap and a base address, we can therefore figure
     // out which page is the last page of that allocation, and thus how big the
     // entire allocation is.
-    MmPagedPoolInfo.EndOfPagedPoolBitmap = 
+    MmPagedPoolInfo.EndOfPagedPoolBitmap =
         ExAllocatePoolWithTag(NonPagedPool, Size, '  mM');
     ASSERT(MmPagedPoolInfo.EndOfPagedPoolBitmap);
 
@@ -859,7 +865,7 @@ MmArmInitSystem_x(IN ULONG Phase,
         //MmPagedPoolSize = MM_PAGED_POOL_SIZE;
         //ASSERT((PCHAR)MmPagedPoolBase + MmPagedPoolSize < (PCHAR)MmNonPagedSystemStart);
 
-        
+
         HalInitializeBios(0, LoaderBlock);
     }
 
@@ -871,7 +877,7 @@ FASTCALL
 MiSyncARM3WithROS(IN PVOID AddressStart,
                   IN PVOID AddressEnd)
 {
-    
+
 }
 
 NTSTATUS
index cae44f5..0249ebc 100644 (file)
@@ -10,6 +10,7 @@ typedef uint64_t ULONG64;
 #endif
 
 
+#define IMAGE_FILE_MACHINE_I386 0x14c
 #define IMAGE_FILE_MACHINE_AMD64 0x8664
 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3