Boot framework rework (#45)
[lunaix-os.git] / lunaix-os / arch / x86 / mm / fault.c
1 #include <lunaix/mm/fault.h>
2 #include <lunaix/mm/region.h>
3 #include <lunaix/process.h>
4 #include <lunaix/hart_state.h>
5
6 #include <sys/mm/mm_defs.h>
7
8 bool
9 __arch_prepare_fault_context(struct fault_context* fault)
10 {
11     struct hart_state* ictx = fault->hstate;
12
13     ptr_t ptr = cpu_ldeaddr();
14     if (!ptr) {
15         return false;
16     }
17
18     fault->fault_ptep  = mkptep_va(VMS_SELF, ptr);
19     fault->fault_data  = ictx->execp->err_code;
20     fault->fault_instn = hart_pc(ictx);
21     fault->fault_va    = ptr;
22
23     return true;
24 }