aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/servo/Cargo.lock7
-rw-r--r--components/servo/Cargo.toml4
-rw-r--r--components/servo/main.rs33
-rw-r--r--ports/cef/Cargo.lock7
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"