From 89049700fb0d54d0e2ad0f520195f09e90592f1d Mon Sep 17 00:00:00 2001 From: Jozef Nagy Date: Tue, 21 Nov 2023 18:27:34 +0100 Subject: [PATCH] Implemented trap handler stubs in MASM --- sdk/xtdk/amd64/artypes.h | 29 ++ xtoskrnl/CMakeLists.txt | 1 + xtoskrnl/ar/amd64/procsup.c | 31 +- xtoskrnl/ar/amd64/traps.c | 325 +--------------- xtoskrnl/ar/amd64/traps.s | 596 ++++++++++++++++++++++++++++++ xtoskrnl/includes/amd64/globals.h | 3 + xtoskrnl/ke/krnlinit.c | 5 + 7 files changed, 650 insertions(+), 340 deletions(-) create mode 100644 xtoskrnl/ar/amd64/traps.s diff --git a/sdk/xtdk/amd64/artypes.h b/sdk/xtdk/amd64/artypes.h index e2ad86b..ad22d77 100644 --- a/sdk/xtdk/amd64/artypes.h +++ b/sdk/xtdk/amd64/artypes.h @@ -226,4 +226,33 @@ typedef struct _CPUID_SIGNATURE ULONG Unused2:4; } CPU_SIGNATURE, *PCPU_SIGNATURE; +/* CPU Registers that are pushed to the stack in the interrupt handler */ +typedef struct _EXCEPTION_REGISTERS +{ + ULONG64 R15; + ULONG64 R14; + ULONG64 R13; + ULONG64 R12; + ULONG64 R11; + ULONG64 R10; + ULONG64 R9; + ULONG64 R8; + ULONG64 Rbp; + ULONG64 Rdi; + ULONG64 Rsi; + ULONG64 Rdx; + ULONG64 Rcx; + ULONG64 Rbx; + ULONG64 Rax; + + ULONG64 Vector; + ULONG64 ErrorCode; + + ULONG64 Rip; + ULONG64 CsSeg; + ULONG64 RFlags; + ULONG64 Rsp; + ULONG64 SsSeg; +} PACK EXCEPTION_REGISTERS, *PEXCEPTION_REGISTERS; + #endif /* __XTDK_AMD64_ARTYPES_H */ diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index 8cb0c0e..1121418 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -12,6 +12,7 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/globals.c ${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/procsup.c ${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/traps.c + ${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/traps.s ${XTOSKRNL_SOURCE_DIR}/ex/rundown.c ${XTOSKRNL_SOURCE_DIR}/hl/apic.c ${XTOSKRNL_SOURCE_DIR}/hl/cport.c diff --git a/xtoskrnl/ar/amd64/procsup.c b/xtoskrnl/ar/amd64/procsup.c index 5c165ec..0713fee 100644 --- a/xtoskrnl/ar/amd64/procsup.c +++ b/xtoskrnl/ar/amd64/procsup.c @@ -221,41 +221,28 @@ ArpInitializeGdt(IN PKPROCESSOR_BLOCK ProcessorBlock) * * @since XT 1.0 */ + +EXTERN VOID ArpHandleTrap0(); XTAPI VOID ArpInitializeIdt(IN PKPROCESSOR_BLOCK ProcessorBlock) { UINT Vector; + DebugPrint(L"%lx\n", &ArpTrapHandlers[0]); + DebugPrint(L"%lx\n", &ArpHandleTrap0); + /* Fill in all vectors */ for(Vector = 0; Vector < IDT_ENTRIES; Vector++) { /* Set the IDT to handle unexpected interrupts */ - ArpSetIdtGate(ProcessorBlock->IdtBase, Vector, ArpHandleTrapFF, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); + ArpSetIdtGate(ProcessorBlock->IdtBase, Vector, ArpTrapHandlers[Vector], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); } /* Setup IDT handlers for known interrupts and traps */ - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x00, ArpHandleTrap00, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x01, ArpHandleTrap01, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x02, ArpHandleTrap02, KGDT_R0_CODE, KIDT_IST_PANIC, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x03, ArpHandleTrap03, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x04, ArpHandleTrap04, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x05, ArpHandleTrap05, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x06, ArpHandleTrap06, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x07, ArpHandleTrap07, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x08, ArpHandleTrap08, KGDT_R0_CODE, KIDT_IST_PANIC, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x09, ArpHandleTrap09, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x0A, ArpHandleTrap0A, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x0B, ArpHandleTrap0B, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x0C, ArpHandleTrap0C, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x0D, ArpHandleTrap0D, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x0E, ArpHandleTrap0E, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x10, ArpHandleTrap10, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x11, ArpHandleTrap11, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x12, ArpHandleTrap12, KGDT_R0_CODE, KIDT_IST_MCA, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x13, ArpHandleTrap13, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x2C, ArpHandleTrap2C, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3); - ArpSetIdtGate(ProcessorBlock->IdtBase, 0x2D, ArpHandleTrap2D, KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3); + ArpSetIdtGate(ProcessorBlock->IdtBase, 0x02, ArpTrapHandlers[2], KGDT_R0_CODE, KIDT_IST_PANIC, KIDT_ACCESS_RING0); + ArpSetIdtGate(ProcessorBlock->IdtBase, 0x08, ArpTrapHandlers[8], KGDT_R0_CODE, KIDT_IST_PANIC, KIDT_ACCESS_RING0); + ArpSetIdtGate(ProcessorBlock->IdtBase, 0x12, ArpTrapHandlers[12], KGDT_R0_CODE, KIDT_IST_MCA, KIDT_ACCESS_RING0); } /** diff --git a/xtoskrnl/ar/amd64/traps.c b/xtoskrnl/ar/amd64/traps.c index d0b833f..656f34c 100644 --- a/xtoskrnl/ar/amd64/traps.c +++ b/xtoskrnl/ar/amd64/traps.c @@ -24,7 +24,10 @@ ArpHandleSystemCall64() } /** - * Handles the trap 0x00 when a Divide By Zero exception occurs. + * Handles a trap. + * + * @param Registers + * Supplies a structure containing the values of all general-purpose registers. * * @return This routine does not return any value. * @@ -32,323 +35,9 @@ ArpHandleSystemCall64() */ XTCDECL VOID -ArpHandleTrap00() +ArpHandleTrap(EXCEPTION_REGISTERS Registers) { - DebugPrint(L"Handled Division-By-Zero Error (0x00)!\n"); - for(;;); -} - -/** - * Handles the trap 0x01 when Debug exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap01() -{ - DebugPrint(L"Handled Debug exception (0x01)!\n"); - for(;;); -} - -/** - * Handles the trap 0x02 when Non-Maskable Interrupt (NMI) occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap02() -{ - DebugPrint(L"Handled Non-Maskable-Interrupt (0x02)!\n"); - for(;;); -} - -/** - * Handles the trap 0x03 when the INT3 instruction is executed. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap03() -{ - DebugPrint(L"Handled INT3 (0x03)!\n"); - for(;;); -} - -/** - * Handles the trap 0x04 when the INTO instruction is executed and overflow bit is set. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap04() -{ - DebugPrint(L"Handled Overflow exception (0x04)!\n"); - for(;;); -} - -/** - * Handles the trap 0x05 when the Bound Range Exceeded exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap05() -{ - DebugPrint(L"Handled Bound-Range-Exceeded exception (0x05)!\n"); - for(;;); -} - -/** - * Handles the trap 0x06 when the Invalid Opcode exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap06() -{ - DebugPrint(L"Handled Invalid Opcode exception (0x06)!\n"); - for(;;); -} - -/** - * Handles the trap 0x07 when the Device Not Available exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap07() -{ - DebugPrint(L"Handled Device Not Available exception (0x07)!\n"); - for(;;); -} - -/** - * Handles the trap 0x08 when Double Fault exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap08() -{ - DebugPrint(L"Handled Double-Fault exception (0x08)!\n"); - for(;;); -} - -/** - * Handles the trap 0x09 when the Segment Overrun exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap09() -{ - DebugPrint(L"Handled Segment-Overrun exception (0x09)!\n"); - for(;;); -} - -/** - * Handles the trap 0x0A when the Invalid TSS exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap0A() -{ - DebugPrint(L"Handled Invalid-TSS exception (0x0A)!\n"); - for(;;); -} - -/** - * Handles the trap 0x0B when the Segment Not Present exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap0B() -{ - DebugPrint(L"Handled Segment-Not-Present exception (0x0B)!\n"); - for(;;); -} - -/** - * Handles the trap 0x0C when the Stack Segment Fault exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap0C() -{ - DebugPrint(L"Handled Stack-Segment-Fault exception (0x0C)!\n"); - for(;;); -} - -/** - * Handles the trap 0x0D when General Protection Fault (GPF) exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap0D() -{ - DebugPrint(L"Handled General-Protection-Fault (0x0D)!\n"); - for(;;); -} - -/** - * Handles the trap 0x0E when the Page Fault (PF) exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap0E() -{ - DebugPrint(L"Handled Page-Fault exception (0x0E)!\n"); - for(;;); -} - -/** - * Handles the trap 0x10 when the X87 Floating-Point exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap10() -{ - DebugPrint(L"Handled x87 Floating-Point exception (0x10)!\n"); - for(;;); -} - -/** - * Handles the trap 0x11 when the Alignment Check exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap11() -{ - DebugPrint(L"Handled Alignment-Check exception (0x11)!\n"); - for(;;); -} - -/** - * Handles the trap 0x12 when the Machine Check exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap12() -{ - DebugPrint(L"Handled Machine-Check exception (0x12)!\n"); - for(;;); -} - -/** - * Handles the trap 0x13 when the SIMD Floating-Point exception occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap13() -{ - DebugPrint(L"Handled SIMD Floating-Point exception (0x13)!\n"); - for(;;); -} - -/** - * Handles the trap 0x2C when an assertion is raised. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap2C() -{ - DebugPrint(L"Handled Assertion (0x2C)!\n"); - for(;;); -} - -/** - * Handles the trap 0x2D when a debug service is being requested. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrap2D() -{ - DebugPrint(L"Handled Debug-Service-Request (0x2D)!\n"); - for(;;); -} - -/** - * Handles the trap 0xFF then Unexpected Interrupt occurs. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTCDECL -VOID -ArpHandleTrapFF() -{ - DebugPrint(L"Handled Unexpected-Interrupt (0xFF)!\n"); + DebugPrint(L"I came, I saw.\n"); + DebugPrint(L"Vector: %d\n", Registers.Rip); for(;;); } diff --git a/xtoskrnl/ar/amd64/traps.s b/xtoskrnl/ar/amd64/traps.s new file mode 100644 index 0000000..0755a12 --- /dev/null +++ b/xtoskrnl/ar/amd64/traps.s @@ -0,0 +1,596 @@ +; +; PROJECT: ExectOS +; COPYRIGHT: See COPYING.md in the top level directory +; FILE: xtoskrnl/ar/amd64/traps.s +; DESCRIPTION: AMD64 system trap stubs +; DEVELOPERS: Jozef Nagy +; + +.CODE + +EXTERN ArpHandleTrap :PROC + +pushaq macro + push rax + push rbx + push rcx + push rdx + push rsi + push rdi + push rbp + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 +endm + +popaq macro + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop rbp + pop rdi + pop rsi + pop rdx + pop rcx + pop rbx + pop rax +endm + +ArpISRNoError macro Vector +ArpHandleTrap&Vector&: + cli + push 0 + push Vector + pushaq + cld + call ArpHandleTrap + popaq + add rsp, 16 + iretq +endm + +ArpISRError macro Vector +ArpHandleTrap&Vector&: + cli + push Vector + pushaq + cld + call ArpHandleTrap + popaq + add rsp, 16 + iretq +endm + +;; +; @todo: Find a smarter way to do this. +; +; Apart from the first 32 descriptors, everything should be in some kind of +; loop that would unroll at compile-time. +;; + +ArpISRNoError 0 +ArpISRNoError 1 +ArpISRNoError 2 +ArpISRNoError 3 +ArpISRNoError 4 +ArpISRNoError 5 +ArpISRNoError 6 +ArpISRNoError 7 +ArpISRError 8 +ArpISRNoError 9 +ArpISRError 10 +ArpISRError 11 +ArpISRError 12 +ArpISRError 13 +ArpISRError 14 +ArpISRNoError 15 +ArpISRNoError 16 +ArpISRError 17 +ArpISRNoError 18 +ArpISRNoError 19 +ArpISRNoError 20 +ArpISRNoError 21 +ArpISRNoError 22 +ArpISRNoError 23 +ArpISRNoError 24 +ArpISRNoError 25 +ArpISRNoError 26 +ArpISRNoError 27 +ArpISRNoError 28 +ArpISRNoError 29 +ArpISRError 30 +ArpISRNoError 31 + +ArpISRNoError 32 +ArpISRNoError 33 +ArpISRNoError 34 +ArpISRNoError 35 +ArpISRNoError 36 +ArpISRNoError 37 +ArpISRNoError 38 +ArpISRNoError 39 +ArpISRNoError 40 +ArpISRNoError 41 +ArpISRNoError 42 +ArpISRNoError 43 +ArpISRNoError 44 +ArpISRNoError 45 +ArpISRNoError 46 +ArpISRNoError 47 +ArpISRNoError 48 +ArpISRNoError 49 +ArpISRNoError 50 +ArpISRNoError 51 +ArpISRNoError 52 +ArpISRNoError 53 +ArpISRNoError 54 +ArpISRNoError 55 +ArpISRNoError 56 +ArpISRNoError 57 +ArpISRNoError 58 +ArpISRNoError 59 +ArpISRNoError 60 +ArpISRNoError 61 +ArpISRNoError 62 +ArpISRNoError 63 +ArpISRNoError 64 +ArpISRNoError 65 +ArpISRNoError 66 +ArpISRNoError 67 +ArpISRNoError 68 +ArpISRNoError 69 +ArpISRNoError 70 +ArpISRNoError 71 +ArpISRNoError 72 +ArpISRNoError 73 +ArpISRNoError 74 +ArpISRNoError 75 +ArpISRNoError 76 +ArpISRNoError 77 +ArpISRNoError 78 +ArpISRNoError 79 +ArpISRNoError 80 +ArpISRNoError 81 +ArpISRNoError 82 +ArpISRNoError 83 +ArpISRNoError 84 +ArpISRNoError 85 +ArpISRNoError 86 +ArpISRNoError 87 +ArpISRNoError 88 +ArpISRNoError 89 +ArpISRNoError 90 +ArpISRNoError 91 +ArpISRNoError 92 +ArpISRNoError 93 +ArpISRNoError 94 +ArpISRNoError 95 +ArpISRNoError 96 +ArpISRNoError 97 +ArpISRNoError 98 +ArpISRNoError 99 +ArpISRNoError 100 +ArpISRNoError 101 +ArpISRNoError 102 +ArpISRNoError 103 +ArpISRNoError 104 +ArpISRNoError 105 +ArpISRNoError 106 +ArpISRNoError 107 +ArpISRNoError 108 +ArpISRNoError 109 +ArpISRNoError 110 +ArpISRNoError 111 +ArpISRNoError 112 +ArpISRNoError 113 +ArpISRNoError 114 +ArpISRNoError 115 +ArpISRNoError 116 +ArpISRNoError 117 +ArpISRNoError 118 +ArpISRNoError 119 +ArpISRNoError 120 +ArpISRNoError 121 +ArpISRNoError 122 +ArpISRNoError 123 +ArpISRNoError 124 +ArpISRNoError 125 +ArpISRNoError 126 +ArpISRNoError 127 +ArpISRNoError 128 +ArpISRNoError 129 +ArpISRNoError 130 +ArpISRNoError 131 +ArpISRNoError 132 +ArpISRNoError 133 +ArpISRNoError 134 +ArpISRNoError 135 +ArpISRNoError 136 +ArpISRNoError 137 +ArpISRNoError 138 +ArpISRNoError 139 +ArpISRNoError 140 +ArpISRNoError 141 +ArpISRNoError 142 +ArpISRNoError 143 +ArpISRNoError 144 +ArpISRNoError 145 +ArpISRNoError 146 +ArpISRNoError 147 +ArpISRNoError 148 +ArpISRNoError 149 +ArpISRNoError 150 +ArpISRNoError 151 +ArpISRNoError 152 +ArpISRNoError 153 +ArpISRNoError 154 +ArpISRNoError 155 +ArpISRNoError 156 +ArpISRNoError 157 +ArpISRNoError 158 +ArpISRNoError 159 +ArpISRNoError 160 +ArpISRNoError 161 +ArpISRNoError 162 +ArpISRNoError 163 +ArpISRNoError 164 +ArpISRNoError 165 +ArpISRNoError 166 +ArpISRNoError 167 +ArpISRNoError 168 +ArpISRNoError 169 +ArpISRNoError 170 +ArpISRNoError 171 +ArpISRNoError 172 +ArpISRNoError 173 +ArpISRNoError 174 +ArpISRNoError 175 +ArpISRNoError 176 +ArpISRNoError 177 +ArpISRNoError 178 +ArpISRNoError 179 +ArpISRNoError 180 +ArpISRNoError 181 +ArpISRNoError 182 +ArpISRNoError 183 +ArpISRNoError 184 +ArpISRNoError 185 +ArpISRNoError 186 +ArpISRNoError 187 +ArpISRNoError 188 +ArpISRNoError 189 +ArpISRNoError 190 +ArpISRNoError 191 +ArpISRNoError 192 +ArpISRNoError 193 +ArpISRNoError 194 +ArpISRNoError 195 +ArpISRNoError 196 +ArpISRNoError 197 +ArpISRNoError 198 +ArpISRNoError 199 +ArpISRNoError 200 +ArpISRNoError 201 +ArpISRNoError 202 +ArpISRNoError 203 +ArpISRNoError 204 +ArpISRNoError 205 +ArpISRNoError 206 +ArpISRNoError 207 +ArpISRNoError 208 +ArpISRNoError 209 +ArpISRNoError 210 +ArpISRNoError 211 +ArpISRNoError 212 +ArpISRNoError 213 +ArpISRNoError 214 +ArpISRNoError 215 +ArpISRNoError 216 +ArpISRNoError 217 +ArpISRNoError 218 +ArpISRNoError 219 +ArpISRNoError 220 +ArpISRNoError 221 +ArpISRNoError 222 +ArpISRNoError 223 +ArpISRNoError 224 +ArpISRNoError 225 +ArpISRNoError 226 +ArpISRNoError 227 +ArpISRNoError 228 +ArpISRNoError 229 +ArpISRNoError 230 +ArpISRNoError 231 +ArpISRNoError 232 +ArpISRNoError 233 +ArpISRNoError 234 +ArpISRNoError 235 +ArpISRNoError 236 +ArpISRNoError 237 +ArpISRNoError 238 +ArpISRNoError 239 +ArpISRNoError 240 +ArpISRNoError 241 +ArpISRNoError 242 +ArpISRNoError 243 +ArpISRNoError 244 +ArpISRNoError 245 +ArpISRNoError 246 +ArpISRNoError 247 +ArpISRNoError 248 +ArpISRNoError 249 +ArpISRNoError 250 +ArpISRNoError 251 +ArpISRNoError 252 +ArpISRNoError 253 +ArpISRNoError 254 +ArpISRNoError 255 + +PUBLIC ArpTrapHandlers +ArpTrapHandlers: + DQ ArpHandleTrap0 + DQ ArpHandleTrap1 + DQ ArpHandleTrap2 + DQ ArpHandleTrap3 + DQ ArpHandleTrap4 + DQ ArpHandleTrap5 + DQ ArpHandleTrap6 + DQ ArpHandleTrap7 + DQ ArpHandleTrap8 + DQ ArpHandleTrap9 + DQ ArpHandleTrap10 + DQ ArpHandleTrap11 + DQ ArpHandleTrap12 + DQ ArpHandleTrap13 + DQ ArpHandleTrap14 + DQ ArpHandleTrap15 + DQ ArpHandleTrap16 + DQ ArpHandleTrap17 + DQ ArpHandleTrap18 + DQ ArpHandleTrap19 + DQ ArpHandleTrap20 + DQ ArpHandleTrap21 + DQ ArpHandleTrap22 + DQ ArpHandleTrap23 + DQ ArpHandleTrap24 + DQ ArpHandleTrap25 + DQ ArpHandleTrap26 + DQ ArpHandleTrap27 + DQ ArpHandleTrap28 + DQ ArpHandleTrap29 + DQ ArpHandleTrap30 + DQ ArpHandleTrap31 + DQ ArpHandleTrap32 + DQ ArpHandleTrap33 + DQ ArpHandleTrap34 + DQ ArpHandleTrap35 + DQ ArpHandleTrap36 + DQ ArpHandleTrap37 + DQ ArpHandleTrap38 + DQ ArpHandleTrap39 + DQ ArpHandleTrap40 + DQ ArpHandleTrap41 + DQ ArpHandleTrap42 + DQ ArpHandleTrap43 + DQ ArpHandleTrap44 + DQ ArpHandleTrap45 + DQ ArpHandleTrap46 + DQ ArpHandleTrap47 + DQ ArpHandleTrap48 + DQ ArpHandleTrap49 + DQ ArpHandleTrap50 + DQ ArpHandleTrap51 + DQ ArpHandleTrap52 + DQ ArpHandleTrap53 + DQ ArpHandleTrap54 + DQ ArpHandleTrap55 + DQ ArpHandleTrap56 + DQ ArpHandleTrap57 + DQ ArpHandleTrap58 + DQ ArpHandleTrap59 + DQ ArpHandleTrap60 + DQ ArpHandleTrap61 + DQ ArpHandleTrap62 + DQ ArpHandleTrap63 + DQ ArpHandleTrap64 + DQ ArpHandleTrap65 + DQ ArpHandleTrap66 + DQ ArpHandleTrap67 + DQ ArpHandleTrap68 + DQ ArpHandleTrap69 + DQ ArpHandleTrap70 + DQ ArpHandleTrap71 + DQ ArpHandleTrap72 + DQ ArpHandleTrap73 + DQ ArpHandleTrap74 + DQ ArpHandleTrap75 + DQ ArpHandleTrap76 + DQ ArpHandleTrap77 + DQ ArpHandleTrap78 + DQ ArpHandleTrap79 + DQ ArpHandleTrap80 + DQ ArpHandleTrap81 + DQ ArpHandleTrap82 + DQ ArpHandleTrap83 + DQ ArpHandleTrap84 + DQ ArpHandleTrap85 + DQ ArpHandleTrap86 + DQ ArpHandleTrap87 + DQ ArpHandleTrap88 + DQ ArpHandleTrap89 + DQ ArpHandleTrap90 + DQ ArpHandleTrap91 + DQ ArpHandleTrap92 + DQ ArpHandleTrap93 + DQ ArpHandleTrap94 + DQ ArpHandleTrap95 + DQ ArpHandleTrap96 + DQ ArpHandleTrap97 + DQ ArpHandleTrap98 + DQ ArpHandleTrap99 + DQ ArpHandleTrap100 + DQ ArpHandleTrap101 + DQ ArpHandleTrap102 + DQ ArpHandleTrap103 + DQ ArpHandleTrap104 + DQ ArpHandleTrap105 + DQ ArpHandleTrap106 + DQ ArpHandleTrap107 + DQ ArpHandleTrap108 + DQ ArpHandleTrap109 + DQ ArpHandleTrap110 + DQ ArpHandleTrap111 + DQ ArpHandleTrap112 + DQ ArpHandleTrap113 + DQ ArpHandleTrap114 + DQ ArpHandleTrap115 + DQ ArpHandleTrap116 + DQ ArpHandleTrap117 + DQ ArpHandleTrap118 + DQ ArpHandleTrap119 + DQ ArpHandleTrap120 + DQ ArpHandleTrap121 + DQ ArpHandleTrap122 + DQ ArpHandleTrap123 + DQ ArpHandleTrap124 + DQ ArpHandleTrap125 + DQ ArpHandleTrap126 + DQ ArpHandleTrap127 + DQ ArpHandleTrap128 + DQ ArpHandleTrap129 + DQ ArpHandleTrap130 + DQ ArpHandleTrap131 + DQ ArpHandleTrap132 + DQ ArpHandleTrap133 + DQ ArpHandleTrap134 + DQ ArpHandleTrap135 + DQ ArpHandleTrap136 + DQ ArpHandleTrap137 + DQ ArpHandleTrap138 + DQ ArpHandleTrap139 + DQ ArpHandleTrap140 + DQ ArpHandleTrap141 + DQ ArpHandleTrap142 + DQ ArpHandleTrap143 + DQ ArpHandleTrap144 + DQ ArpHandleTrap145 + DQ ArpHandleTrap146 + DQ ArpHandleTrap147 + DQ ArpHandleTrap148 + DQ ArpHandleTrap149 + DQ ArpHandleTrap150 + DQ ArpHandleTrap151 + DQ ArpHandleTrap152 + DQ ArpHandleTrap153 + DQ ArpHandleTrap154 + DQ ArpHandleTrap155 + DQ ArpHandleTrap156 + DQ ArpHandleTrap157 + DQ ArpHandleTrap158 + DQ ArpHandleTrap159 + DQ ArpHandleTrap160 + DQ ArpHandleTrap161 + DQ ArpHandleTrap162 + DQ ArpHandleTrap163 + DQ ArpHandleTrap164 + DQ ArpHandleTrap165 + DQ ArpHandleTrap166 + DQ ArpHandleTrap167 + DQ ArpHandleTrap168 + DQ ArpHandleTrap169 + DQ ArpHandleTrap170 + DQ ArpHandleTrap171 + DQ ArpHandleTrap172 + DQ ArpHandleTrap173 + DQ ArpHandleTrap174 + DQ ArpHandleTrap175 + DQ ArpHandleTrap176 + DQ ArpHandleTrap177 + DQ ArpHandleTrap178 + DQ ArpHandleTrap179 + DQ ArpHandleTrap180 + DQ ArpHandleTrap181 + DQ ArpHandleTrap182 + DQ ArpHandleTrap183 + DQ ArpHandleTrap184 + DQ ArpHandleTrap185 + DQ ArpHandleTrap186 + DQ ArpHandleTrap187 + DQ ArpHandleTrap188 + DQ ArpHandleTrap189 + DQ ArpHandleTrap190 + DQ ArpHandleTrap191 + DQ ArpHandleTrap192 + DQ ArpHandleTrap193 + DQ ArpHandleTrap194 + DQ ArpHandleTrap195 + DQ ArpHandleTrap196 + DQ ArpHandleTrap197 + DQ ArpHandleTrap198 + DQ ArpHandleTrap199 + DQ ArpHandleTrap200 + DQ ArpHandleTrap201 + DQ ArpHandleTrap202 + DQ ArpHandleTrap203 + DQ ArpHandleTrap204 + DQ ArpHandleTrap205 + DQ ArpHandleTrap206 + DQ ArpHandleTrap207 + DQ ArpHandleTrap208 + DQ ArpHandleTrap209 + DQ ArpHandleTrap210 + DQ ArpHandleTrap211 + DQ ArpHandleTrap212 + DQ ArpHandleTrap213 + DQ ArpHandleTrap214 + DQ ArpHandleTrap215 + DQ ArpHandleTrap216 + DQ ArpHandleTrap217 + DQ ArpHandleTrap218 + DQ ArpHandleTrap219 + DQ ArpHandleTrap220 + DQ ArpHandleTrap221 + DQ ArpHandleTrap222 + DQ ArpHandleTrap223 + DQ ArpHandleTrap224 + DQ ArpHandleTrap225 + DQ ArpHandleTrap226 + DQ ArpHandleTrap227 + DQ ArpHandleTrap228 + DQ ArpHandleTrap229 + DQ ArpHandleTrap230 + DQ ArpHandleTrap231 + DQ ArpHandleTrap232 + DQ ArpHandleTrap233 + DQ ArpHandleTrap234 + DQ ArpHandleTrap235 + DQ ArpHandleTrap236 + DQ ArpHandleTrap237 + DQ ArpHandleTrap238 + DQ ArpHandleTrap239 + DQ ArpHandleTrap240 + DQ ArpHandleTrap241 + DQ ArpHandleTrap242 + DQ ArpHandleTrap243 + DQ ArpHandleTrap244 + DQ ArpHandleTrap245 + DQ ArpHandleTrap246 + DQ ArpHandleTrap247 + DQ ArpHandleTrap248 + DQ ArpHandleTrap249 + DQ ArpHandleTrap250 + DQ ArpHandleTrap251 + DQ ArpHandleTrap252 + DQ ArpHandleTrap253 + DQ ArpHandleTrap254 + DQ ArpHandleTrap255 diff --git a/xtoskrnl/includes/amd64/globals.h b/xtoskrnl/includes/amd64/globals.h index 70c6aa0..c3fad6d 100644 --- a/xtoskrnl/includes/amd64/globals.h +++ b/xtoskrnl/includes/amd64/globals.h @@ -30,4 +30,7 @@ EXTERN UCHAR ArKernelBootStack[KERNEL_STACK_SIZE]; /* Kernel own fault stack */ EXTERN UCHAR ArKernelFaultStack[KERNEL_STACK_SIZE]; +/* Trap handlers */ +EXTERN PVOID ArpTrapHandlers[IDT_ENTRIES]; + #endif /* __XTOSKRNL_AMD64_GLOBALS_H */ diff --git a/xtoskrnl/ke/krnlinit.c b/xtoskrnl/ke/krnlinit.c index 958f465..5db7faa 100644 --- a/xtoskrnl/ke/krnlinit.c +++ b/xtoskrnl/ke/krnlinit.c @@ -52,6 +52,11 @@ KeStartXtSystem(IN PKERNEL_INITIALIZATION_BLOCK Parameters) /* Architecture specific kernel initialization */ KepInitializeMachine(); +#ifdef _DEBUG + DebugPrint(L"Initiating crash...\n"); + asm("int $0x00"); +#endif + /* Switch boot stack aligning it to 4 byte boundary */ KepSwitchBootStack((ULONG_PTR)&ArKernelBootStack & ~0x3); }