Merge all amd64 related changes from cmake branch

svn path=/trunk/; revision=50640
This commit is contained in:
Timo Kreuzer 2011-02-10 10:30:43 +00:00
parent 7c7511301a
commit fee844b6ff
28 changed files with 283 additions and 162 deletions

View 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
//

View file

@ -67,7 +67,7 @@ KfRaiseIrql(IN KIRQL NewIrql)
{
KIRQL OldIrql;
OldIrql = __readcr8();
OldIrql = (KIRQL)__readcr8();
//ASSERT(OldIrql <= NewIrql);
__writecr8(NewIrql);
return OldIrql;

View file

@ -10,21 +10,25 @@
#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 */

View file

@ -17,42 +17,43 @@
/* 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

View file

@ -10,18 +10,21 @@
#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

View file

@ -11,11 +11,12 @@
#include <asm.inc>
#include <ksamd64.inc>
/* FUNCTIONS ****************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC atan
atan:
UNIMPLEMENTED atan
ret
END

View file

@ -11,11 +11,12 @@
#include <asm.inc>
#include <ksamd64.inc>
/* FUNCTIONS ****************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC atan2
atan2:
UNIMPLEMENTED atan2
ret
END

View 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

View 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

View file

@ -11,8 +11,7 @@
#include <asm.inc>
#include <ksamd64.inc>
/* FUNCTIONS ****************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC exp

View file

@ -10,12 +10,12 @@
#include <asm.inc>
/* FUNCTIONS ****************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC fabs
fabs:
PUBLIC _fabs
_fabs:
UNIMPLEMENTED fabs
ret
END

View file

@ -11,8 +11,7 @@
#include <asm.inc>
#include <ksamd64.inc>
/* FUNCTIONS ****************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC floor

View file

@ -11,8 +11,7 @@
#include <asm.inc>
#include <ksamd64.inc>
/* FUNCTIONS ****************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC floorf

View file

@ -10,10 +10,11 @@
#include <asm.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC fmod
fmod:
PUBLIC _fmod
_fmod:
UNIMPLEMENTED fmod
ret

View file

@ -10,7 +10,8 @@
#include <asm.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC fmodf
fmodf:

View file

@ -10,7 +10,8 @@
#include <asm.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC ldexp
ldexp:

View file

@ -10,9 +10,12 @@
#include <asm.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC log
log:
UNIMPLEMENTED log
ret
END

View file

@ -10,10 +10,12 @@
#include <asm.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC log10
log10:
UNIMPLEMENTED log10
ret
END

View file

@ -11,10 +11,12 @@
#include <asm.inc>
#include <ksamd64.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC pow
pow:
UNIMPLEMENTED pow
ret
END

View file

@ -11,7 +11,8 @@
#include <asm.inc>
#include <ksamd64.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC sqrt
sqrt:

View file

@ -11,7 +11,8 @@
#include <asm.inc>
#include <ksamd64.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC sqrtf
sqrtf:

View file

@ -11,7 +11,8 @@
#include <asm.inc>
#include <ksamd64.inc>
/* DATA *********************************************************************/
/* CODE **********************************************************************/
.code64
PUBLIC tan
tan:

View file

@ -11,41 +11,45 @@
#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

View 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

View file

@ -12,24 +12,9 @@
#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;

View 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

View 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

View 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