@@ -21,6 +21,14 @@ pub const TR_OK: i32 = 50; |
|
|
21 |
21 |
#[cfg(windows)] |
22 |
22 |
const STATUS_ABORTED: i32 = 0xC0000409u32 as i32; |
23 |
23 |
|
|
24 |
+// On Zircon (the Fuchsia kernel), an abort from userspace calls the |
|
25 |
+// LLVM implementation of __builtin_trap(), e.g., ud2 on x86, which |
|
26 |
+// raises a kernel exception. If a userspace process does not |
|
27 |
+// otherwise arrange exception handling, the kernel kills the process |
|
28 |
+// with this return code. |
|
29 |
+#[cfg(target_os = "fuchsia")] |
|
30 |
+const ZX_TASK_RETCODE_EXCEPTION_KILL: i32 = -1028; |
|
31 |
+ |
24 |
32 |
#[derive(Debug, Clone, PartialEq)] |
25 |
33 |
pub enum TestResult { |
26 |
34 |
TrOk, |
@@ -105,6 +113,9 @@ pub fn get_result_from_exit_code( |
|
|
105 |
113 |
} |
106 |
114 |
None => unreachable!("status.code() returned None but status.signal() was None"), |
107 |
115 |
}, |
|
116 |
+// Upon an abort, Fuchsia returns the status code ZX_TASK_RETCODE_EXCEPTION_KILL. |
|
117 |
+#[cfg(target_os = "fuchsia")] |
|
118 |
+Some(ZX_TASK_RETCODE_EXCEPTION_KILL) => TestResult::TrFailed, |
108 |
119 |
#[cfg(not(unix))] |
109 |
120 |
None => TestResult::TrFailedMsg(format!("unknown return code")), |
110 |
121 |
#[cfg(any(windows, unix))] |