starnix_core/arch/x64/
task.rs1use crate::task::PageFaultExceptionReport;
6use starnix_uapi::signals::{SIGFPE, SIGSEGV, Signal};
7
8pub fn decode_page_fault_exception_report(
9 data: &zx::ExceptionArchData,
10) -> PageFaultExceptionReport {
11 let faulting_address = data.cr2;
13 let not_present = data.err_code & 0x01 == 0; let is_write = data.err_code & 0x02 != 0;
15 let is_execute = data.err_code & 0xF0 != 0;
16
17 PageFaultExceptionReport { faulting_address, not_present, is_write, is_execute }
18}
19
20pub fn get_signal_for_general_exception(data: &zx::ExceptionArchData) -> Option<Signal> {
21 match data.vector {
24 0 | 16 | 19 => Some(SIGFPE),
28
29 13 => Some(SIGSEGV),
31
32 _ => None,
33 }
34}