diff options
| author | Bobby <[email protected]> | 2026-03-20 15:57:18 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-03-20 15:57:18 +0530 |
| commit | a55d1a8cc9d59dd48964e8be797e9f396b69aaed (patch) | |
| tree | e95e1848e7e6d2d7fba34579970e3c1abfd44bd8 /mirai/asm/debug/debug.zig | |
| parent | a51c50b236f4480bc5eed76a7c78ebb14f8710ef (diff) | |
| download | akiba-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.zig | 95 |
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); +} |
