aboutsummaryrefslogtreecommitdiff
path: root/mirai/crimson/types/exception.zig
diff options
context:
space:
mode:
Diffstat (limited to 'mirai/crimson/types/exception.zig')
-rw-r--r--mirai/crimson/types/exception.zig17
1 files changed, 17 insertions, 0 deletions
diff --git a/mirai/crimson/types/exception.zig b/mirai/crimson/types/exception.zig
new file mode 100644
index 0000000..47723e5
--- /dev/null
+++ b/mirai/crimson/types/exception.zig
@@ -0,0 +1,17 @@
+//! Exception Structure
+
+const constants = @import("../constants/constants.zig");
+const Context = @import("context.zig").Context;
+const Frame = @import("frame.zig").Frame;
+const ExceptionType = constants.ExceptionType;
+
+pub const Exception = struct {
+ exception_type: ExceptionType, code: u64, subcode: u64, vector: u8, address: u64,
+ context: *Context, frame: *Frame, kata_id: u64, thread_id: u64, recoverable: bool,
+
+ pub fn is_kernel(self: *const Exception) bool { return self.kata_id == 0; }
+ pub fn is_user(self: *const Exception) bool { return self.kata_id != 0; }
+ pub fn is_page_fault(self: *const Exception) bool { return self.vector == 14; }
+ pub fn is_fatal(self: *const Exception) bool { return !self.recoverable; }
+ pub fn get_type_name(self: *const Exception) []const u8 { return self.exception_type.name(); }
+};