/* 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();
}