diff options
-rw-r--r-- | components/servo/Cargo.lock | 7 | ||||
-rw-r--r-- | components/servo/Cargo.toml | 4 | ||||
-rw-r--r-- | components/servo/main.rs | 33 | ||||
-rw-r--r-- | ports/cef/Cargo.lock | 7 |
4 files changed, 50 insertions, 1 deletions
diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index caba1fc1beb..a2bd75ae8c1 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -3,6 +3,7 @@ name = "servo" version = "0.0.1" dependencies = [ "android_glue 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "browserhtml 0.1.7 (git+https://github.com/browserhtml/browserhtml?branch=gh-pages)", "canvas 0.0.1", "canvas_traits 0.0.1", @@ -35,6 +36,7 @@ dependencies = [ "script 0.0.1", "script_tests 0.0.1", "script_traits 0.0.1", + "sig 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_tests 0.0.1", "url 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2113,6 +2115,11 @@ dependencies = [ ] [[package]] +name = "sig" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "simd" version = "0.1.0" source = "git+https://github.com/huonw/simd#03de1cd0a278ab902b4beb402d57505f3797ea56" diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml index b7956a6b198..3898ef08e8b 100644 --- a/components/servo/Cargo.toml +++ b/components/servo/Cargo.toml @@ -73,6 +73,10 @@ euclid = "0.6.4" libc = "0.2" url = "1.0.0" +[target.'cfg(not(target_os = "android"))'.dependencies] +sig = "0.1" +backtrace = "0.2" + [target.'cfg(target_os = "android")'.dependencies] log = "0.3" android_glue = "0.1.3" diff --git a/components/servo/main.rs b/components/servo/main.rs index 4622040fa44..bf4c0b14f4c 100644 --- a/components/servo/main.rs +++ b/components/servo/main.rs @@ -15,11 +15,13 @@ //! //! [glutin]: https://github.com/tomaka/glutin -#![feature(start)] +#![feature(start, core_intrinsics)] #[cfg(target_os = "android")] #[macro_use] extern crate android_glue; +#[cfg(not(target_os = "android"))] +extern crate backtrace; extern crate env_logger; // The window backed by glutin extern crate glutin_app as app; @@ -30,6 +32,9 @@ extern crate libc; extern crate log; // The Servo engine extern crate servo; +#[cfg(not(target_os = "android"))] +#[macro_use] +extern crate sig; use servo::Browser; use servo::compositing::windowing::WindowEvent; @@ -48,7 +53,33 @@ pub mod platform { pub fn deinit() {} } +#[cfg(not(target_os = "android"))] +fn install_crash_handler() { + use backtrace::Backtrace; + use sig::ffi::Sig; + use std::intrinsics::abort; + use std::thread; + + fn handler(_sig: i32) { + let name = thread::current().name() + .map(|n| format!(" for thread \"{}\"", n)) + .unwrap_or("".to_owned()); + println!("Stack trace{}\n{:?}", name, Backtrace::new()); + unsafe { + abort(); + } + } + + signal!(Sig::SEGV, handler); +} + +#[cfg(target_os = "android")] +fn install_crash_handler() { +} + fn main() { + install_crash_handler(); + // Parse the command line options and store them globally let opts_result = opts::from_cmdline_args(&*args()); diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 69af9dcbedf..9bc43bd3af5 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -1864,6 +1864,7 @@ name = "servo" version = "0.0.1" dependencies = [ "android_glue 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "browserhtml 0.1.7 (git+https://github.com/browserhtml/browserhtml?branch=gh-pages)", "canvas 0.0.1", "canvas_traits 0.0.1", @@ -1888,6 +1889,7 @@ dependencies = [ "profile_traits 0.0.1", "script 0.0.1", "script_traits 0.0.1", + "sig 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "url 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", @@ -1998,6 +2000,11 @@ dependencies = [ ] [[package]] +name = "sig" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "simd" version = "0.1.0" source = "git+https://github.com/huonw/simd#03de1cd0a278ab902b4beb402d57505f3797ea56" |