| #![allow(nonstandard_style)] |
| |
| #[repr(C)] |
| #[derive(Debug, Copy, Clone, PartialEq)] |
| pub enum _Unwind_Reason_Code { |
| _URC_NO_REASON = 0, |
| _URC_FOREIGN_EXCEPTION_CAUGHT = 1, |
| _URC_FATAL_PHASE2_ERROR = 2, |
| _URC_FATAL_PHASE1_ERROR = 3, |
| _URC_NORMAL_STOP = 4, |
| _URC_END_OF_STACK = 5, |
| _URC_HANDLER_FOUND = 6, |
| _URC_INSTALL_CONTEXT = 7, |
| _URC_CONTINUE_UNWIND = 8, |
| _URC_FAILURE = 9, // used only by ARM EHABI |
| } |
| pub use _Unwind_Reason_Code::*; |
| |
| pub type _Unwind_Exception_Class = u64; |
| pub type _Unwind_Word = *const u8; |
| |
| pub const unwinder_private_data_size: usize = cfg_select! { |
| target_arch = "x86" => 5, |
| all(target_arch = "x86_64", not(any(target_os = "windows", target_os = "cygwin"))) => 2, |
| all(target_arch = "x86_64", any(target_os = "windows", target_os = "cygwin")) => 6, |
| all(target_arch = "arm", not(target_vendor = "apple")) => 20, |
| all(target_arch = "arm", target_vendor = "apple") => 5, |
| all(target_arch = "aarch64", target_pointer_width = "64", not(target_os = "windows")) => 2, |
| all(target_arch = "aarch64", target_pointer_width = "64", target_os = "windows") => 6, |
| all(target_arch = "aarch64", target_pointer_width = "32") => 5, |
| target_arch = "m68k" => 2, |
| any(target_arch = "mips", target_arch = "mips32r6") => 2, |
| target_arch = "csky" => 2, |
| any(target_arch = "mips64", target_arch = "mips64r6") => 2, |
| any(target_arch = "powerpc", target_arch = "powerpc64") => 2, |
| target_arch = "s390x" => 2, |
| any(target_arch = "sparc", target_arch = "sparc64") => 2, |
| any(target_arch = "riscv64", target_arch = "riscv32") => 2, |
| target_family = "wasm" => 2, |
| target_arch = "hexagon" => 5, |
| any(target_arch = "loongarch32", target_arch = "loongarch64") => 2, |
| }; |
| |
| #[repr(C)] |
| pub struct _Unwind_Exception { |
| pub exception_class: _Unwind_Exception_Class, |
| pub exception_cleanup: _Unwind_Exception_Cleanup_Fn, |
| pub private: [_Unwind_Word; unwinder_private_data_size], |
| } |
| |
| // Check the size of _Unwind_Exception against the source of truth when using the unwinding crate. |
| #[cfg(target_os = "xous")] |
| const _: () = { |
| assert!(size_of::<unwinding::abi::UnwindException>() == size_of::<_Unwind_Exception>()); |
| }; |
| |
| pub type _Unwind_Exception_Cleanup_Fn = |
| Option<extern "C" fn(unwind_code: _Unwind_Reason_Code, exception: *mut _Unwind_Exception)>; |