Implemented trap handler stubs in MASM

This commit is contained in:
Jozef Nagy 2023-11-21 18:27:34 +01:00
parent c66ea77a8b
commit 89049700fb
No known key found for this signature in database
GPG Key ID: 8DFAAD3DACABA61F
7 changed files with 650 additions and 340 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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);
}
/**

View File

@ -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(;;);
}

596
xtoskrnl/ar/amd64/traps.s Normal file
View File

@ -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 <schkwve@gmail.com>
;
.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

View File

@ -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 */

View File

@ -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);
}