mirror of
https://github.com/reactos/reactos.git
synced 2024-05-18 03:12:06 +00:00
[NTOS:KE/x64][SDK] Add some trap handling support asm macros
This commit is contained in:
parent
5329e475db
commit
88e24bc463
|
@ -848,12 +848,7 @@ GLOBAL_LABEL KiSystemCall64Again
|
|||
|
||||
GLOBAL_LABEL KiSystemServiceExit
|
||||
|
||||
#if DBG
|
||||
test dword ptr [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_EFlags], HEX(200)
|
||||
jnz IntsEnabled
|
||||
int 3
|
||||
IntsEnabled:
|
||||
#endif
|
||||
ASSERT_TRAP_FRAME_INTS_ENABLED rsp + MAX_SYSCALL_PARAM_SIZE
|
||||
|
||||
/* Check for pending user APC */
|
||||
mov rcx, gs:qword ptr [PcCurrentThread]
|
||||
|
|
|
@ -1,3 +1,41 @@
|
|||
/*
|
||||
* PROJECT: ReactOS SDK
|
||||
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||
* PURPOSE: ASM macros for x64 trap handling
|
||||
* COPYRIGHT: Copyright 2011-2024 Timo Kreuzer (timo.kreuzer@reactos.org)
|
||||
*/
|
||||
|
||||
MACRO(ASSERT_TRAP_FRAME_INTS_ENABLED, Register)
|
||||
#if DBG
|
||||
LOCAL IntsAreEnabled
|
||||
test dword ptr [Register + KTRAP_FRAME_EFlags], HEX(200)
|
||||
jnz IntsAreEnabled
|
||||
int HEX(2C)
|
||||
IntsAreEnabled:
|
||||
#endif
|
||||
ENDM
|
||||
|
||||
MACRO(ASSERT_TRAP_FRAME_IRQL_VALID, Register)
|
||||
#if DBG
|
||||
LOCAL IrqlIsValid
|
||||
mov rax, cr8
|
||||
cmp byte ptr [Register + KTRAP_FRAME_PreviousIrql], al
|
||||
je IrqlIsValid
|
||||
int HEX(2C)
|
||||
IrqlIsValid:
|
||||
#endif
|
||||
ENDM
|
||||
|
||||
MACRO(ASSERT_IRQL_PASSIVE)
|
||||
#if DBG
|
||||
LOCAL IrqlIsPassive
|
||||
mov rax, cr8
|
||||
test rax, rax
|
||||
jz IrqlIsPassive
|
||||
int HEX(2C)
|
||||
IrqlIsPassive:
|
||||
#endif
|
||||
ENDM
|
||||
|
||||
APIC_EOI = HEX(0FFFFFFFFFFFE00B0)
|
||||
|
||||
|
@ -122,13 +160,7 @@ MACRO(EnterTrap, Flags)
|
|||
/* Load kernel MXCSR */
|
||||
ldmxcsr gs:[PcMxCsr]
|
||||
|
||||
#if DBG
|
||||
/* Check IRQL */
|
||||
mov rax, cr8
|
||||
test rax, rax
|
||||
jz kernel_mode_entry
|
||||
int HEX(2c)
|
||||
#endif
|
||||
ASSERT_IRQL_PASSIVE
|
||||
|
||||
kernel_mode_entry:
|
||||
|
||||
|
@ -163,19 +195,9 @@ ENDM
|
|||
*/
|
||||
MACRO(ExitTrap, Flags)
|
||||
LOCAL kernel_mode_return
|
||||
LOCAL IntsEnabled
|
||||
LOCAL NoUserApc
|
||||
LOCAL IrqlPassive
|
||||
LOCAL irql_ok
|
||||
|
||||
#if DBG
|
||||
/* Check previous irql */
|
||||
mov rax, cr8
|
||||
cmp [rbp + KTRAP_FRAME_PreviousIrql], al
|
||||
je irql_ok
|
||||
int HEX(2c)
|
||||
irql_ok:
|
||||
#endif
|
||||
ASSERT_TRAP_FRAME_IRQL_VALID rbp
|
||||
|
||||
if (Flags AND TF_SEGMENTS)
|
||||
/* Restore segment selectors */
|
||||
|
@ -203,21 +225,8 @@ MACRO(ExitTrap, Flags)
|
|||
NoUserApc:
|
||||
endif
|
||||
|
||||
#if DBG
|
||||
/*Make sure interrupts are enabled */
|
||||
test dword ptr [rbp + KTRAP_FRAME_EFlags], HEX(200)
|
||||
jnz IntsEnabled
|
||||
int HEX(2c)
|
||||
IntsEnabled:
|
||||
|
||||
/* Make sure we are at passive level */
|
||||
mov rax, cr8
|
||||
test rax, rax
|
||||
jz IrqlPassive
|
||||
int HEX(2C)
|
||||
|
||||
IrqlPassive:
|
||||
#endif
|
||||
ASSERT_TRAP_FRAME_INTS_ENABLED rbp
|
||||
ASSERT_IRQL_PASSIVE
|
||||
|
||||
cli
|
||||
|
||||
|
|
Loading…
Reference in a new issue