mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-18 06:45:33 +00:00
![Gabriele Svelto](/assets/img/avatar_default.png)
This is a minimal implementation of a WER exception module that can intercept crashes of Firefox processes and write out a fully formed crash report, that is a minidump, an .extra file containing the minimum annotations required by Socorro and an event file. The module in and by itself is not functional: an entry needs to be added to the registry and the processes which want to be monitored need to register it at runtime. With this patch applied it will only be built but it won't be packaged with Firefox nor it will be used when doing local development. The module implementation has a few notable properties: * We use an empty C++ shim (mozwer) to build the module DLL. This is because the build system doesn't support building DLLs directly from Rust. * The actual implementation is written in Rust (mozwer-rust) and exposes the callbacks that will be invoked by the WER service. * We use the winapi crate to access Windows native functionality but given it is missing some bits (including upstream!) we declare them in our crate for the time being. * The minidump uses the same options we use in Firefox and should be of similar size. I manually tested different type of crashes including __fastail() ones and they're all reliably captured. * The .extra file contains only the annotations that are strictly required for submitting the crash to crash-stats.mozilla.org. More should be added in the future. The existing annotations are all extracted from within the module code because we have no way to access the ones that were stored in Firefox' crashed processes (nor should we, since we hope to catch crashes that happen even before Firefox sets up crash reporting internally). * The module does not distinguish between main process and content process crashes at the moment. This will need to be implemented when we hook it up with the crash reporting code within Firefox. * We use libc's time() function to get the crash time in order to be consistent with what the regular exception handler does. Differential Revision: https://phabricator.services.mozilla.com/D101708
106 lines
3.9 KiB
TOML
106 lines
3.9 KiB
TOML
[workspace]
|
|
|
|
# These are the "root" crates, which we build and test as top-level targets.
|
|
# Their transitive dependencies and dev-dependencies are included automatically
|
|
# and do not need to be listed here. Their external dependencies are vendored
|
|
# into `third_party/rust` by `mach vendor rust`.
|
|
members = [
|
|
"js/src/frontend/smoosh",
|
|
"js/src/rust",
|
|
"js/src/wasm/cranelift",
|
|
"netwerk/test/http3server",
|
|
"security/manager/ssl/osclientcerts",
|
|
"testing/geckodriver",
|
|
"toolkit/crashreporter/rust_minidump_writer_linux",
|
|
"toolkit/crashreporter/mozwer-rust",
|
|
"toolkit/library/gtest/rust",
|
|
"toolkit/library/rust/",
|
|
"toolkit/mozapps/defaultagent/rust",
|
|
]
|
|
|
|
# Excluded crates may be built as dependencies, but won't be considered members
|
|
# of the workspace and their dev-dependencies won't be included.
|
|
exclude = [
|
|
# Excluded because it's for a toolchain task
|
|
"build/liblowercase",
|
|
|
|
# Exclude third-party code vendored into mozilla-central.
|
|
"servo",
|
|
"third_party/rust",
|
|
|
|
# Excluded because these crates have their own Cargo workspaces so they can't
|
|
# be included in the top-level one.
|
|
"gfx/wgpu",
|
|
"gfx/wr",
|
|
|
|
# Excluded because they are used only as dependencies, not top-level targets,
|
|
# so we don't need to vendor their dev-dependencies.
|
|
"gfx/webrender_bindings",
|
|
"media/mp4parse-rust/mp4parse",
|
|
"media/mp4parse-rust/mp4parse_capi",
|
|
"xpcom/rust/gkrust_utils",
|
|
"tools/lint/test/files/clippy",
|
|
"tools/fuzzing/rust",
|
|
]
|
|
|
|
# Explicitly specify what our profiles use. The opt-level setting here is
|
|
# a total fiction; see the setup of MOZ_RUST_DEFAULT_FLAGS for what the
|
|
# opt-level setting will be as a result of various other configure flags.
|
|
[profile.dev]
|
|
opt-level = 1
|
|
rpath = false
|
|
lto = false
|
|
debug-assertions = true
|
|
panic = "abort"
|
|
|
|
[profile.release]
|
|
opt-level = 2
|
|
rpath = false
|
|
debug-assertions = false
|
|
panic = "abort"
|
|
|
|
# Optimize build dependencies, because bindgen and proc macros / style
|
|
# compilation take more to run than to build otherwise.
|
|
[profile.dev.build-override]
|
|
opt-level = 1
|
|
|
|
[profile.release.build-override]
|
|
opt-level = 1
|
|
|
|
# optimizing glsl more makes a big difference in swgl build times
|
|
[profile.dev.package.glsl]
|
|
opt-level = 2
|
|
|
|
[profile.release.package.glsl]
|
|
opt-level = 2
|
|
|
|
[patch.crates-io]
|
|
chardetng = { git = "https://github.com/hsivonen/chardetng", rev="fd4ed671ef495af4dcda4c4cba3ef8d426db8af1" }
|
|
chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" }
|
|
libudev-sys = { path = "dom/webauthn/libudev-sys" }
|
|
packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" }
|
|
rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="f3cace4fb8b53db0849c62af4fa62bade5a620f7" }
|
|
nix = { git = "https://github.com/shravanrn/nix/", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" }
|
|
spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu5" }
|
|
# failure's backtrace feature might break our builds, see bug 1608157.
|
|
failure = { git = "https://github.com/badboy/failure", rev = "64af847bc5fdcb6d2438bec8a6030812a80519a5" }
|
|
failure_derive = { git = "https://github.com/badboy/failure", rev = "64af847bc5fdcb6d2438bec8a6030812a80519a5" }
|
|
minidump_writer_linux = { git = "https://github.com/msirringhaus/minidump_writer_linux.git", rev = "01c7a0da8d34059f7dae8ab9e7512529ff16347a" }
|
|
xmldecl = { git = "https://github.com/hsivonen/xmldecl", rev="a74f7df5bf6cb11194fb74daa0c3cf42f326fd90" }
|
|
|
|
[patch.crates-io.cranelift-codegen]
|
|
git = "https://github.com/mozilla-spidermonkey/wasmtime"
|
|
rev = "a25399760e9f12b679aa267dd2af7cfedc72bb71"
|
|
|
|
[patch.crates-io.cranelift-wasm]
|
|
git = "https://github.com/mozilla-spidermonkey/wasmtime"
|
|
rev = "a25399760e9f12b679aa267dd2af7cfedc72bb71"
|
|
|
|
# Patch autocfg to hide rustc output. Workaround for https://github.com/cuviper/autocfg/issues/30
|
|
[patch.crates-io.autocfg]
|
|
path = "third_party/rust/autocfg"
|
|
|
|
[patch.crates-io.autocfg01]
|
|
path = "third_party/rust/autocfg-0.1.6"
|
|
package = "autocfg"
|