/* * CrashReport.hpp * Structured crash report for userspace process faults * Copyright (c) 2026 Daniel Hammer */ #pragma once #include #include namespace CrashReport { static constexpr int MaxReports = 8; struct Report { int pid; char processName[64]; uint8_t exceptionVector; char exceptionName[32]; uint64_t faultingAddress; uint64_t instructionPointer; uint64_t stackPointer; uint64_t codeSegment; uint64_t flags; uint64_t stackSegment; // Page fault error code bits (vector 0xE / page fault only) uint8_t pfPresent : 1; uint8_t pfWrite : 1; uint8_t pfUser : 1; uint8_t pfReservedWrite : 1; uint8_t pfInstructionFetch : 1; uint8_t pfProtectionKey : 1; uint8_t pfShadowStack : 1; uint8_t pfSGX : 1; uint64_t timestampTick; bool valid; }; // Kernel-side ring buffer (written by exception handlers, read by SYS_CRASH_REPORT) extern Report g_reports[MaxReports]; extern int g_reportHead; extern int g_reportCount; // Add a report to the kernel ring buffer void AddReport(const Report& report); } // namespace CrashReport