Refactor AR subsystem
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 32s

This commit is contained in:
2025-09-11 20:23:51 +02:00
parent 96043f3d70
commit 3a11d536d5
10 changed files with 223 additions and 301 deletions

View File

@@ -9,10 +9,6 @@
#include <xtos.hh>
/* Architecture-specific Library */
namespace AR
{
/**
* Dispatches the trap provided by common trap handler.
*
@@ -25,7 +21,7 @@ namespace AR
*/
XTCDECL
VOID
Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame)
AR::Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame)
{
/* Check vector and call appropriate handler */
switch(TrapFrame->Vector)
@@ -142,7 +138,7 @@ Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleSystemCall32(VOID)
AR::Traps::HandleSystemCall32(VOID)
{
DebugPrint(L"Handled 32-bit system call!\n");
}
@@ -156,7 +152,7 @@ Traps::HandleSystemCall32(VOID)
*/
XTCDECL
VOID
Traps::HandleSystemCall64(VOID)
AR::Traps::HandleSystemCall64(VOID)
{
DebugPrint(L"Handled 64-bit system call!\n");
}
@@ -173,7 +169,7 @@ Traps::HandleSystemCall64(VOID)
*/
XTCDECL
VOID
Traps::HandleTrap00(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap00(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Division-By-Zero Error (0x00)!\n");
for(;;);
@@ -191,7 +187,7 @@ Traps::HandleTrap00(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap01(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap01(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Debug exception (0x01)!\n");
for(;;);
@@ -209,7 +205,7 @@ Traps::HandleTrap01(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap02(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap02(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Non-Maskable-Interrupt (0x02)!\n");
for(;;);
@@ -227,7 +223,7 @@ Traps::HandleTrap02(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap03(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap03(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled INT3 (0x03)!\n");
for(;;);
@@ -245,7 +241,7 @@ Traps::HandleTrap03(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap04(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap04(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Overflow exception (0x04)!\n");
for(;;);
@@ -263,7 +259,7 @@ Traps::HandleTrap04(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap05(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap05(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Bound-Range-Exceeded exception (0x05)!\n");
for(;;);
@@ -281,7 +277,7 @@ Traps::HandleTrap05(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap06(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap06(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Invalid Opcode exception (0x06)!\n");
for(;;);
@@ -299,7 +295,7 @@ Traps::HandleTrap06(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap07(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap07(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Device Not Available exception (0x07)!\n");
for(;;);
@@ -317,7 +313,7 @@ Traps::HandleTrap07(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap08(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap08(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Double-Fault exception (0x08)!\n");
for(;;);
@@ -335,7 +331,7 @@ Traps::HandleTrap08(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap09(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap09(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Segment-Overrun exception (0x09)!\n");
for(;;);
@@ -353,7 +349,7 @@ Traps::HandleTrap09(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap0A(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap0A(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Invalid-TSS exception (0x0A)!\n");
for(;;);
@@ -371,7 +367,7 @@ Traps::HandleTrap0A(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap0B(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap0B(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Segment-Not-Present exception (0x0B)!\n");
for(;;);
@@ -389,7 +385,7 @@ Traps::HandleTrap0B(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap0C(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap0C(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Stack-Segment-Fault exception (0x0C)!\n");
for(;;);
@@ -407,7 +403,7 @@ Traps::HandleTrap0C(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap0D(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap0D(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled General-Protection-Fault (0x0D)!\n");
for(;;);
@@ -425,7 +421,7 @@ Traps::HandleTrap0D(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap0E(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap0E(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Page-Fault exception (0x0E)!\n");
for(;;);
@@ -443,7 +439,7 @@ Traps::HandleTrap0E(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap10(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap10(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled x87 Floating-Point exception (0x10)!\n");
for(;;);
@@ -461,7 +457,7 @@ Traps::HandleTrap10(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap11(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap11(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Alignment-Check exception (0x11)!\n");
for(;;);
@@ -479,7 +475,7 @@ Traps::HandleTrap11(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap12(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap12(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Machine-Check exception (0x12)!\n");
for(;;);
@@ -497,7 +493,7 @@ Traps::HandleTrap12(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap13(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap13(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled SIMD Floating-Point exception (0x13)!\n");
for(;;);
@@ -515,7 +511,7 @@ Traps::HandleTrap13(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap1F(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap1F(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Unhandled software interrupt at APC level (0x1F)!\n");
}
@@ -532,7 +528,7 @@ Traps::HandleTrap1F(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap2C(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap2C(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Assertion (0x2C)!\n");
for(;;);
@@ -550,7 +546,7 @@ Traps::HandleTrap2C(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Debug-Service-Request (0x2D)!\n");
for(;;);
@@ -568,7 +564,7 @@ Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrap2F(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrap2F(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Unhandled software interrupt at DISPATCH level (0x2F)!\n");
}
@@ -585,7 +581,7 @@ Traps::HandleTrap2F(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrapE1(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrapE1(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Unhandled IPI interrupt (0xE1)!\n");
}
@@ -602,7 +598,7 @@ Traps::HandleTrapE1(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::HandleTrapFF(IN PKTRAP_FRAME TrapFrame)
AR::Traps::HandleTrapFF(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Unexpected-Interrupt (0xFF)!\n");
for(;;);
@@ -617,7 +613,7 @@ Traps::HandleTrapFF(IN PKTRAP_FRAME TrapFrame)
*/
XTCDECL
VOID
Traps::InitializeSystemCallMsrs(VOID)
AR::Traps::InitializeSystemCallMsrs(VOID)
{
/* Initialize system calls MSR */
CpuFunc::WriteModelSpecificRegister(X86_MSR_STAR, (((ULONG64)KGDT_R3_CMCODE | RPL_MASK) << 48) | ((ULONG64)KGDT_R0_CODE << 32));
@@ -629,8 +625,6 @@ Traps::InitializeSystemCallMsrs(VOID)
CpuFunc::WriteModelSpecificRegister(X86_MSR_EFER, CpuFunc::ReadModelSpecificRegister(X86_MSR_EFER) | X86_MSR_EFER_SCE);
}
} /* namespace */
/**
* C-linkage wrapper for dispatching the trap provided by common trap handler.
*