[NTOSKRNL]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 23 Jul 2010 23:30:00 +0000 (23:30 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 23 Jul 2010 23:30:00 +0000 (23:30 +0000)
- Add KiGetLinkedTrapFrame for amd64
- Add MiAddressToPti
- Fix MmCreateProcessAddressSpace, MmInitializeHandBuiltProcess prototype (ULONG -> ULONG_PTR)
- #if out some C_ASSERTs for other architectures than x86
- #define InitializeSListHead to RtlInitializeSListHead on amd64
- Don't implement MiSyncARM3WithROS on amd64
- Implement RtlPcToFileHeader, RtlpGetStackLimits

svn path=/trunk/; revision=48219

reactos/ntoskrnl/include/internal/amd64/ke.h
reactos/ntoskrnl/include/internal/amd64/mm.h
reactos/ntoskrnl/include/internal/mm.h
reactos/ntoskrnl/include/internal/ntoskrnl.h
reactos/ntoskrnl/include/internal/rtl.h
reactos/ntoskrnl/mm/ARM3/mminit.c
reactos/ntoskrnl/rtl/libsupp.c

index deab4f4..fc4fe24 100644 (file)
@@ -96,6 +96,9 @@ extern ULONG KeI386CpuStep;
 #define KeGetTrapFramePc(TrapFrame) \
     ((TrapFrame)->Rip)
 
 #define KeGetTrapFramePc(TrapFrame) \
     ((TrapFrame)->Rip)
 
+#define KiGetLinkedTrapFrame(x) \
+    (PKTRAP_FRAME)((x)->Rdx)
+
 #define KeGetContextReturnRegister(Context) \
     ((Context)->Rax)
 
 #define KeGetContextReturnRegister(Context) \
     ((Context)->Rax)
 
index f0d4342..889c43e 100644 (file)
@@ -102,6 +102,17 @@ _MiAddressToPte(PVOID Address)
 }
 #define MiAddressToPte(x) _MiAddressToPte((PVOID)(x))
 
 }
 #define MiAddressToPte(x) _MiAddressToPte((PVOID)(x))
 
+ULONG
+FORCEINLINE
+MiAddressToPti(PVOID Address)
+{
+    ULONG64 Pti = (ULONG64)Address >> PTI_SHIFT;
+    Pti &= PTI_MASK_AMD64;
+    return Pti;
+}
+
+#define MiAddressToPteOffset(x) MiAddressToPti(x)
+
 /* Convert a PTE into a corresponding address */
 PVOID
 FORCEINLINE
 /* Convert a PTE into a corresponding address */
 PVOID
 FORCEINLINE
index f74a150..a7154de 100644 (file)
@@ -1407,14 +1407,14 @@ NTAPI
 MmCreateProcessAddressSpace(
     IN ULONG MinWs,
     IN PEPROCESS Dest,
 MmCreateProcessAddressSpace(
     IN ULONG MinWs,
     IN PEPROCESS Dest,
-    IN PULONG DirectoryTableBase
+    IN PULONG_PTR DirectoryTableBase
 );
 
 NTSTATUS
 NTAPI
 MmInitializeHandBuiltProcess(
     IN PEPROCESS Process,
 );
 
 NTSTATUS
 NTAPI
 MmInitializeHandBuiltProcess(
     IN PEPROCESS Process,
-    IN PULONG DirectoryTableBase
+    IN PULONG_PTR DirectoryTableBase
 );
 
 
 );
 
 
index 41d4843..7aa74ef 100644 (file)
@@ -145,7 +145,7 @@ typedef struct _INFORMATION_CLASS_INFO
 
 #endif
 
 
 #endif
 
-#if defined (_M_IX86) || defined(_M_AMD64)
+#ifdef _M_IX86
 C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, SystemCall) == 0x300);
 C_ASSERT(FIELD_OFFSET(KTHREAD, InitialStack) == KTHREAD_INITIAL_STACK);
 C_ASSERT(FIELD_OFFSET(KTHREAD, Teb) == KTHREAD_TEB);
 C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, SystemCall) == 0x300);
 C_ASSERT(FIELD_OFFSET(KTHREAD, InitialStack) == KTHREAD_INITIAL_STACK);
 C_ASSERT(FIELD_OFFSET(KTHREAD, Teb) == KTHREAD_TEB);
index 1848904..4a2f0b4 100644 (file)
@@ -1,5 +1,9 @@
 #pragma once
 
 #pragma once
 
+#ifdef _WIN64
+#define InitializeSListHead RtlInitializeSListHead
+#endif
+
 NTSTATUS
 NTAPI
 RtlQueryAtomListInAtomTable(
 NTSTATUS
 NTAPI
 RtlQueryAtomListInAtomTable(
index f595ece..28358f1 100644 (file)
@@ -350,6 +350,7 @@ SIZE_T MmTotalCommitLimitMaximum;
 
 /* PRIVATE FUNCTIONS **********************************************************/
 
 
 /* PRIVATE FUNCTIONS **********************************************************/
 
+#ifndef _M_AMD64
 //
 // In Bavaria, this is probably a hate crime
 //
 //
 // In Bavaria, this is probably a hate crime
 //
@@ -372,6 +373,7 @@ MiSyncARM3WithROS(IN PVOID AddressStart,
         Pde++;
     }
 }
         Pde++;
     }
 }
+#endif
 
 PFN_NUMBER
 NTAPI
 
 PFN_NUMBER
 NTAPI
index cbff179..aba04f1 100644 (file)
@@ -28,6 +28,30 @@ SIZE_T RtlpAllocDeallocQueryBufferSize = 128;
 
 /* FUNCTIONS *****************************************************************/
 
 
 /* FUNCTIONS *****************************************************************/
 
+PVOID
+NTAPI
+RtlPcToFileHeader(
+    IN  PVOID PcValue,
+    OUT PVOID *BaseOfImage)
+{
+    PLDR_DATA_TABLE_ENTRY LdrEntry;
+    BOOLEAN InSystem;
+
+    /* Get the base for this file */
+    if ((ULONG_PTR)PcValue > (ULONG_PTR)MmHighestUserAddress)
+    {
+        /* We are in kernel */
+        *BaseOfImage = KiPcToFileHeader(PcValue, &LdrEntry, FALSE, &InSystem);
+    }
+    else
+    {
+        /* We are in user land */
+        *BaseOfImage = KiRosPcToUserFileHeader(PcValue, &LdrEntry);
+    }
+
+    return *BaseOfImage;
+}
+
 VOID
 NTAPI
 RtlInitializeRangeListPackage(VOID)
 VOID
 NTAPI
 RtlInitializeRangeListPackage(VOID)
@@ -417,6 +441,19 @@ RtlWalkFrameChain(OUT PVOID *Callers,
 
 #endif
 
 
 #endif
 
+#ifdef _AMD64_
+VOID
+NTAPI
+RtlpGetStackLimits(
+    OUT PULONG_PTR LowLimit,
+    OUT PULONG_PTR HighLimit)
+{
+    PKTHREAD CurrentThread = KeGetCurrentThread();
+    *HighLimit = (ULONG_PTR)CurrentThread->InitialStack;
+    *LowLimit = (ULONG_PTR)CurrentThread->StackLimit;
+}
+#endif
+
 /* RTL Atom Tables ************************************************************/
 
 NTSTATUS
 /* RTL Atom Tables ************************************************************/
 
 NTSTATUS