summaryrefslogtreecommitdiffstats
path: root/third_party/rust/crash-context/src/lib.rs
blob: 4056de8e73c91dc90bb9a92a50e6b55bbed14c97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! This crate exposes a platform specific [`CrashContext`] which contains the
//! details for a crash (signal, exception, etc). This crate is fairly minimal
//! since the intended use case is to more easily share these crash details
//! between different crates without requiring lots of dependencies, and is
//! currently only really made for the purposes of the crates in this repo, and
//! [minidump-writer](https://github.com/rust-minidump/minidump-writer).
//!
//! ## Linux/Android
//!
//! This crate also contains a portable implementation of [`getcontext`](
//! https://man7.org/linux/man-pages/man3/getcontext.3.html), as not all libc
//! implementations (notably `musl`) implement it as it has been deprecated from
//! POSIX.
//!
//! ## Macos
//!
//! One major difference on Macos is that the details in the [`CrashContext`]
//! cannot be transferred to another process via normal methods (eg. sockets)
//! and must be sent via the criminally undocumented mach ports. This crate
//! provides a `Client` and `Server` that can be used to send and receive a
//! [`CrashContext`] across processes so that you don't have to suffer like I
//! did.

// crate-specific exceptions:
#![allow(unsafe_code, nonstandard_style)]

cfg_if::cfg_if! {
    if #[cfg(any(target_os = "linux", target_os = "android"))] {
        mod linux;
        pub use linux::*;
    } else if #[cfg(target_os = "windows")] {
        mod windows;
        pub use windows::*;
    } else if #[cfg(target_os = "macos")] {
        mod mac;
        pub use mac::*;
    }
}