mirror of
https://github.com/chromium/crashpad.git
synced 2025-03-10 14:46:07 +00:00
When assertions were enabled in Chrome in https://crrev.com/c/3833545, crashpad_wer now requires libc++ to be explicitly included if compiled with -std=c++20 because <vector> would now reference symbols defined outside the libc++ headers. We attempted to add libc++ as a dependency in https://crrev.com/c/3862974; however, that was deemed unacceptable because the library needs to be kept small in order for Windows to load it to handle crashes. Therefore, the only alternative is to update the library to remove std::vector Bug: chromium:1357827 Change-Id: I1494204a7bd679fa1632a0f08597cb7e93267196 Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3864248 Reviewed-by: Joshua Peraza <jperaza@chromium.org> Commit-Queue: Alan Zhao <ayzhao@google.com>
87 lines
2.8 KiB
C++
87 lines
2.8 KiB
C++
// Copyright 2022 The Crashpad Authors. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// See:
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/werapi/nf-werapi-werregisterruntimeexceptionmodule
|
|
|
|
#include "handler/win/wer/crashpad_wer.h"
|
|
|
|
#include <Windows.h>
|
|
#include <werapi.h>
|
|
|
|
// Functions that will be exported from the DLL.
|
|
extern "C" {
|
|
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) {
|
|
return true;
|
|
}
|
|
|
|
// PFN_WER_RUNTIME_EXCEPTION_EVENT
|
|
// pContext is the address of a crashpad::internal::WerRegistration in the
|
|
// target process.
|
|
HRESULT OutOfProcessExceptionEventCallback(
|
|
PVOID pContext,
|
|
const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation,
|
|
BOOL* pbOwnershipClaimed,
|
|
PWSTR pwszEventName,
|
|
PDWORD pchSize,
|
|
PDWORD pdwSignatureCount) {
|
|
DWORD wanted_exceptions[] = {
|
|
0xC0000602, // STATUS_FAIL_FAST_EXCEPTION
|
|
0xC0000409, // STATUS_STACK_BUFFER_OVERRUN
|
|
};
|
|
// Default to not-claiming as bailing out is easier.
|
|
*pbOwnershipClaimed = FALSE;
|
|
bool result =
|
|
crashpad::wer::ExceptionEvent(wanted_exceptions,
|
|
sizeof(wanted_exceptions) / sizeof(DWORD),
|
|
pContext,
|
|
pExceptionInformation);
|
|
|
|
if (result) {
|
|
*pbOwnershipClaimed = TRUE;
|
|
// Technically we failed as we terminated the process.
|
|
return E_FAIL;
|
|
}
|
|
// Pass.
|
|
return S_OK;
|
|
}
|
|
|
|
// PFN_WER_RUNTIME_EXCEPTION_EVENT_SIGNATURE
|
|
HRESULT OutOfProcessExceptionEventSignatureCallback(
|
|
PVOID pContext,
|
|
const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation,
|
|
DWORD dwIndex,
|
|
PWSTR pwszName,
|
|
PDWORD pchName,
|
|
PWSTR pwszValue,
|
|
PDWORD pchValue) {
|
|
// We handle everything in the call to OutOfProcessExceptionEventCallback.
|
|
// This function should never be called.
|
|
return E_FAIL;
|
|
}
|
|
|
|
// PFN_WER_RUNTIME_EXCEPTION_DEBUGGER_LAUNCH
|
|
HRESULT OutOfProcessExceptionEventDebuggerLaunchCallback(
|
|
PVOID pContext,
|
|
const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation,
|
|
PBOOL pbIsCustomDebugger,
|
|
PWSTR pwszDebuggerLaunch,
|
|
PDWORD pchDebuggerLaunch,
|
|
PBOOL pbIsDebuggerAutolaunch) {
|
|
// We handle everything in the call to OutOfProcessExceptionEventCallback.
|
|
// This function should never be called.
|
|
return E_FAIL;
|
|
}
|
|
} // extern "C"
|