aboutsummaryrefslogtreecommitdiff
path: root/mirai/asm/debug/debug.zig
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-20 15:57:18 +0530
committerBobby <[email protected]>2026-03-20 15:57:18 +0530
commita55d1a8cc9d59dd48964e8be797e9f396b69aaed (patch)
treee95e1848e7e6d2d7fba34579970e3c1abfd44bd8 /mirai/asm/debug/debug.zig
parenta51c50b236f4480bc5eed76a7c78ebb14f8710ef (diff)
downloadakiba-a55d1a8cc9d59dd48964e8be797e9f396b69aaed.tar.xz
akiba-a55d1a8cc9d59dd48964e8be797e9f396b69aaed.zip
Implement exception handling framework with hardware, software, and resource exception raising
- Added `hardware.zig` for raising hardware exceptions from vectors and interrupts. - Introduced `raise.zig` to consolidate exception raising functions. - Created `resource.zig` for raising resource-related exceptions (memory, CPU, file limits). - Developed `software.zig` for raising software exceptions (assertions, aborts, user-defined). - Implemented `actions.zig` for parsing and encoding reply actions. - Added `catch.zig` for handling received exceptions. - Created `reply.zig` for constructing and sending exception replies. - Developed `recover` module for managing recovery operations (resume, skip, terminate). - Implemented rendering modules for displaying exception and context information. - Established global state management in `state.zig` for tracking exceptions. - Defined various types (context, exception, frame, identity, port) in `types` directory.
Diffstat (limited to 'mirai/asm/debug/debug.zig')
-rw-r--r--mirai/asm/debug/debug.zig95
1 files changed, 95 insertions, 0 deletions
diff --git a/mirai/asm/debug/debug.zig b/mirai/asm/debug/debug.zig
new file mode 100644
index 0000000..9110202
--- /dev/null
+++ b/mirai/asm/debug/debug.zig
@@ -0,0 +1,95 @@
+//! Debug Register Operations
+
+pub fn read_dr0() u64 {
+ var value: u64 = undefined;
+ asm volatile ("mov %%dr0, %[value]"
+ : [value] "=r" (value),
+ );
+ return value;
+}
+
+pub fn read_dr1() u64 {
+ var value: u64 = undefined;
+ asm volatile ("mov %%dr1, %[value]"
+ : [value] "=r" (value),
+ );
+ return value;
+}
+
+pub fn read_dr2() u64 {
+ var value: u64 = undefined;
+ asm volatile ("mov %%dr2, %[value]"
+ : [value] "=r" (value),
+ );
+ return value;
+}
+
+pub fn read_dr3() u64 {
+ var value: u64 = undefined;
+ asm volatile ("mov %%dr3, %[value]"
+ : [value] "=r" (value),
+ );
+ return value;
+}
+
+pub fn read_dr6() u64 {
+ var value: u64 = undefined;
+ asm volatile ("mov %%dr6, %[value]"
+ : [value] "=r" (value),
+ );
+ return value;
+}
+
+pub fn read_dr7() u64 {
+ var value: u64 = undefined;
+ asm volatile ("mov %%dr7, %[value]"
+ : [value] "=r" (value),
+ );
+ return value;
+}
+
+pub fn write_dr0(value: u64) void {
+ asm volatile ("mov %[value], %%dr0"
+ :
+ : [value] "r" (value),
+ );
+}
+
+pub fn write_dr1(value: u64) void {
+ asm volatile ("mov %[value], %%dr1"
+ :
+ : [value] "r" (value),
+ );
+}
+
+pub fn write_dr2(value: u64) void {
+ asm volatile ("mov %[value], %%dr2"
+ :
+ : [value] "r" (value),
+ );
+}
+
+pub fn write_dr3(value: u64) void {
+ asm volatile ("mov %[value], %%dr3"
+ :
+ : [value] "r" (value),
+ );
+}
+
+pub fn write_dr6(value: u64) void {
+ asm volatile ("mov %[value], %%dr6"
+ :
+ : [value] "r" (value),
+ );
+}
+
+pub fn write_dr7(value: u64) void {
+ asm volatile ("mov %[value], %%dr7"
+ :
+ : [value] "r" (value),
+ );
+}
+
+pub fn clear_dr6() void {
+ write_dr6(0);
+}