aboutsummaryrefslogtreecommitdiff
path: root/NOTES.md
diff options
context:
space:
mode:
Diffstat (limited to 'NOTES.md')
-rw-r--r--NOTES.md18
1 files changed, 16 insertions, 2 deletions
diff --git a/NOTES.md b/NOTES.md
index 5358eb5..3463729 100644
--- a/NOTES.md
+++ b/NOTES.md
@@ -18,8 +18,8 @@
**Branch**: `CLAUDE_TEST`
**Phase**: Phase 2 — User Space Foundation
-**Last commit**: `[Phase 2.1] GDT user space segments + heap growth`
-**Next task**: `[Phase 2.2]` — SYSCALL/SYSRET MSR setup
+**Last commit**: `[Phase 2.2/2.3] SYSCALL/SYSRET MSR setup + syscall dispatcher`
+**Next task**: `[Phase 2.4]` — Process structure (task/process.rs)
---
@@ -75,6 +75,20 @@ User address limit: 0x0000_8000_0000_0000 (canonical boundary)
**Next**: Phase 2.1 — Extend GDT.
**Decisions**: None new.
+### [Phase 2.2/2.3] 2026-04-08 — SYSCALL/SYSRET MSR setup + dispatcher
+**Done**:
+- `src/syscall/mod.rs`: configure STAR/LSTAR/SFMASK/EFER.SCE MSRs
+- Naked assembly `syscall_entry_asm`: swapgs, save user RSP, load kernel RSP, remap r10→rcx for arg4, call `syscall_handler`, restore, sysretq
+- `src/syscall/dispatch.rs`: dispatcher with `write(1)`, `exit(60)`, `exit_group(231)`; unknown → `-ENOSYS`
+- `sys_write`: validates user pointer before dereference; uses `read_volatile` to avoid aliasing UB
+- Registered `syscall::init()` + `syscall::init_kernel_stack()` in `strix_os::init()`
+- All existing integration tests still pass in QEMU
+**Next**: Phase 2.4 — Process structure
+**Decisions**:
+- Use `swapgs` pattern for user/kernel GS switching (per-CPU scratch for user RSP)
+- `sys_write` uses raw pointer + `read_volatile` loop (not `&[u8]` slice) on user memory
+- `sys_exit` currently halts; Phase 2.5 will add proper process termination
+
### [Phase 2.1] 2026-04-08 — GDT user space segments + heap growth
**Done**:
- Restructured `StrixKernel/src/gdt.rs`: added `kernel_data`, `user_data`, `user_code` segments in the correct order for SYSCALL/SYSRET ABI