diff options
Diffstat (limited to 'tools/crashreporter/injector')
-rw-r--r-- | tools/crashreporter/injector/app.mozbuild | 14 | ||||
-rw-r--r-- | tools/crashreporter/injector/injector.cc | 40 | ||||
-rw-r--r-- | tools/crashreporter/injector/moz.build | 36 | ||||
-rw-r--r-- | tools/crashreporter/injector/moz.configure | 3 |
4 files changed, 93 insertions, 0 deletions
diff --git a/tools/crashreporter/injector/app.mozbuild b/tools/crashreporter/injector/app.mozbuild new file mode 100644 index 0000000000..3e7a6f9cf1 --- /dev/null +++ b/tools/crashreporter/injector/app.mozbuild @@ -0,0 +1,14 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +DIRS += [ + '/toolkit/crashreporter/google-breakpad/src/common', + '/toolkit/crashreporter/google-breakpad/src/processor', + '/tools/crashreporter/injector', +] + +if CONFIG['OS_TARGET'] in ('Linux', 'Android'): + DIRS += [ + '/toolkit/crashreporter/google-breakpad/src/common/linux', + ] diff --git a/tools/crashreporter/injector/injector.cc b/tools/crashreporter/injector/injector.cc new file mode 100644 index 0000000000..eeb74038c8 --- /dev/null +++ b/tools/crashreporter/injector/injector.cc @@ -0,0 +1,40 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "linux/handler/exception_handler.h" + +using google_breakpad::ExceptionHandler; + +static ExceptionHandler* gExceptionHandler = nullptr; + +// Flag saying whether to generate a minidump. Can be (probably temporarily) set +// to false when a crash is expected. +bool __attribute__((visibility("default"))) gBreakpadInjectorEnabled = true; + +bool TestEnabled(void* /* context */) { return gBreakpadInjectorEnabled; } + +bool SetGlobalExceptionHandler( + ExceptionHandler::FilterCallback filterCallback, + ExceptionHandler::MinidumpCallback minidumpCallback) { + const char* tempPath = getenv("TMPDIR"); + if (!tempPath) tempPath = "/tmp"; + + google_breakpad::MinidumpDescriptor descriptor(tempPath); + + gExceptionHandler = new ExceptionHandler(descriptor, filterCallback, + minidumpCallback, nullptr, true, -1); + if (!gExceptionHandler) return false; + + return true; +} + +// Called when loading the DLL (eg via LD_PRELOAD, or the JS shell --dll +// option). +void __attribute__((constructor)) SetBreakpadExceptionHandler() { + if (gExceptionHandler) abort(); + + if (!SetGlobalExceptionHandler(TestEnabled, nullptr)) abort(); + + if (!gExceptionHandler) abort(); +} diff --git a/tools/crashreporter/injector/moz.build b/tools/crashreporter/injector/moz.build new file mode 100644 index 0000000000..d16300fbfb --- /dev/null +++ b/tools/crashreporter/injector/moz.build @@ -0,0 +1,36 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +SharedLibrary("breakpadinjector") + +UNIFIED_SOURCES += [ + "/toolkit/crashreporter/breakpad-client/linux/crash_generation/crash_generation_client.cc", + "/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/thread_info.cc", + "/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc", + "/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc", + "/toolkit/crashreporter/breakpad-client/linux/handler/guid_generator.cc", + "/toolkit/crashreporter/breakpad-client/linux/handler/minidump_descriptor.cc", + "/toolkit/crashreporter/breakpad-client/linux/log/log.cc", + "/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc", + "/toolkit/crashreporter/breakpad-client/linux/minidump_writer/linux_dumper.cc", + "/toolkit/crashreporter/breakpad-client/linux/minidump_writer/linux_ptrace_dumper.cc", + "/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc", + "/toolkit/crashreporter/breakpad-client/minidump_file_writer.cc", + "injector.cc", +] + +USE_LIBS += [ + "breakpad_common_s", + "breakpad_linux_common_s", +] + +DisableStlWrapping() + +# On Linux we override the guid_creator.h header and use our own instead +if CONFIG["OS_TARGET"] in ("Linux", "Android"): + DEFINES["COMMON_LINUX_GUID_CREATOR_H__"] = 1 + +include("/toolkit/crashreporter/crashreporter.mozbuild") diff --git a/tools/crashreporter/injector/moz.configure b/tools/crashreporter/injector/moz.configure new file mode 100644 index 0000000000..6fbe8159b2 --- /dev/null +++ b/tools/crashreporter/injector/moz.configure @@ -0,0 +1,3 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. |