Architectural Support: x86_64 (#37)
[lunaix-os.git] / lunaix-os / arch / x86 / mm / fault.c
diff --git a/lunaix-os/arch/x86/mm/fault.c b/lunaix-os/arch/x86/mm/fault.c
new file mode 100644 (file)
index 0000000..62f9d80
--- /dev/null
@@ -0,0 +1,24 @@
+#include <lunaix/mm/fault.h>
+#include <lunaix/mm/region.h>
+#include <lunaix/process.h>
+#include <lunaix/hart_state.h>
+
+#include <sys/mm/mm_defs.h>
+
+bool
+__arch_prepare_fault_context(struct fault_context* fault)
+{
+    struct hart_state* ictx = fault->hstate;
+
+    ptr_t ptr = cpu_ldeaddr();
+    if (!ptr) {
+        return false;
+    }
+
+    fault->fault_ptep  = mkptep_va(VMS_SELF, ptr);
+    fault->fault_data  = ictx->execp->err_code;
+    fault->fault_instn = hart_pc(ictx);
+    fault->fault_va    = ptr;
+
+    return true;
+}
\ No newline at end of file