mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 21:44:31 +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
|
GLOBAL_LABEL KiSystemServiceExit
|
||||||
|
|
||||||
#if DBG
|
ASSERT_TRAP_FRAME_INTS_ENABLED rsp + MAX_SYSCALL_PARAM_SIZE
|
||||||
test dword ptr [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_EFlags], HEX(200)
|
|
||||||
jnz IntsEnabled
|
|
||||||
int 3
|
|
||||||
IntsEnabled:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Check for pending user APC */
|
/* Check for pending user APC */
|
||||||
mov rcx, gs:qword ptr [PcCurrentThread]
|
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)
|
APIC_EOI = HEX(0FFFFFFFFFFFE00B0)
|
||||||
|
|
||||||
|
@ -122,13 +160,7 @@ MACRO(EnterTrap, Flags)
|
||||||
/* Load kernel MXCSR */
|
/* Load kernel MXCSR */
|
||||||
ldmxcsr gs:[PcMxCsr]
|
ldmxcsr gs:[PcMxCsr]
|
||||||
|
|
||||||
#if DBG
|
ASSERT_IRQL_PASSIVE
|
||||||
/* Check IRQL */
|
|
||||||
mov rax, cr8
|
|
||||||
test rax, rax
|
|
||||||
jz kernel_mode_entry
|
|
||||||
int HEX(2c)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
kernel_mode_entry:
|
kernel_mode_entry:
|
||||||
|
|
||||||
|
@ -163,19 +195,9 @@ ENDM
|
||||||
*/
|
*/
|
||||||
MACRO(ExitTrap, Flags)
|
MACRO(ExitTrap, Flags)
|
||||||
LOCAL kernel_mode_return
|
LOCAL kernel_mode_return
|
||||||
LOCAL IntsEnabled
|
|
||||||
LOCAL NoUserApc
|
LOCAL NoUserApc
|
||||||
LOCAL IrqlPassive
|
|
||||||
LOCAL irql_ok
|
|
||||||
|
|
||||||
#if DBG
|
ASSERT_TRAP_FRAME_IRQL_VALID rbp
|
||||||
/* Check previous irql */
|
|
||||||
mov rax, cr8
|
|
||||||
cmp [rbp + KTRAP_FRAME_PreviousIrql], al
|
|
||||||
je irql_ok
|
|
||||||
int HEX(2c)
|
|
||||||
irql_ok:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (Flags AND TF_SEGMENTS)
|
if (Flags AND TF_SEGMENTS)
|
||||||
/* Restore segment selectors */
|
/* Restore segment selectors */
|
||||||
|
@ -203,21 +225,8 @@ MACRO(ExitTrap, Flags)
|
||||||
NoUserApc:
|
NoUserApc:
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#if DBG
|
ASSERT_TRAP_FRAME_INTS_ENABLED rbp
|
||||||
/*Make sure interrupts are enabled */
|
ASSERT_IRQL_PASSIVE
|
||||||
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
|
|
||||||
|
|
||||||
cli
|
cli
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue