Index: chrome_frame/crash_reporting/vectored_handler.h |
diff --git a/chrome_frame/crash_reporting/vectored_handler.h b/chrome_frame/crash_reporting/vectored_handler.h |
deleted file mode 100644 |
index 1466bb5db17157750b4f8cb584186144a6edc71b..0000000000000000000000000000000000000000 |
--- a/chrome_frame/crash_reporting/vectored_handler.h |
+++ /dev/null |
@@ -1,113 +0,0 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_FRAME_CRASH_REPORTING_VECTORED_HANDLER_H_ |
-#define CHROME_FRAME_CRASH_REPORTING_VECTORED_HANDLER_H_ |
- |
- |
-#if !defined(_M_IX86) |
-#error only x86 is supported for now. |
-#endif |
- |
-// Create dump policy: |
-// 1. Scan SEH chain, if there is a handler/filter that belongs to our |
-// module - assume we expect this one and hence do nothing here. |
-// 2. If the address of the exception is in our module - create dump. |
-// 3. If our module is in somewhere in callstack - create dump. |
-// The E class is supposed to provide external/API functions. Using template |
-// make testability easier. It shall confirm the following concept/archetype: |
-//struct E { |
-// void WriteDump(EXCEPTION_POINTERS* p) { |
-// } |
-// |
-// // Used mainly to ignore exceptions from IsBadRead/Write/Ptr. |
-// bool ShouldIgnoreException(const EXCEPTION_POINTERS* exptr) { |
-// return 0; |
-// } |
-// |
-// // Retrieve the SEH list head. |
-// EXCEPTION_REGISTRATION_RECORD* RtlpGetExceptionList() { |
-// return NULL; |
-// } |
-// |
-// // Get the stack trace as correctly as possible. |
-// WORD RtlCaptureStackBackTrace(DWORD FramesToSkip, DWORD FramesToCapture, |
-// void** BackTrace, DWORD* BackTraceHash) { |
-// return 0; |
-// } |
-// |
-// // Check whether the stack guard page is in place. |
-// bool CheckForStackOverflow(EXCEPTION_POINTERS* p) { |
-// return 0; |
-// } |
-// |
-// bool IsOurModule(const void* address) { |
-// return 0; |
-// } |
-//}; |
-// The methods shall be placed in .text$veh_m |
-template <typename E> |
-class VectoredHandlerT { |
- public: |
- VectoredHandlerT(E* api); |
- ~VectoredHandlerT(); |
- |
- // TODO(stoyan): Come with better way to skip initial stack frames. |
- FORCEINLINE LONG Handler(EXCEPTION_POINTERS* exceptionInfo); |
- long get_exceptions_seen() const { |
- return exceptions_seen_; |
- } |
- |
- private: |
- bool ModuleHasInstalledSEHFilter(); |
- E* api_; |
- long exceptions_seen_; |
-}; |
- |
-// Maintains start and end address of a single module of interest. If we want |
-// do check for multiple modules, this class has to be extended to support a |
-// list of modules (DLLs). |
-struct ModuleOfInterest { |
- // The callback from VectoredHandlerT::Handler(). |
- inline bool IsOurModule(const void* address) { |
- return (start_ <= address && address < end_); |
- } |
- |
- // Helpers. |
- inline void SetModule(const void* module_start, const void* module_end) { |
- start_ = module_start; |
- end_ = module_end; |
- } |
- |
- inline void SetCurrentModule() { |
- // Find current module boundaries. |
- const void* start = &__ImageBase; |
- const char* s = reinterpret_cast<const char*>(start); |
- const IMAGE_NT_HEADERS32* nt = reinterpret_cast<const IMAGE_NT_HEADERS32*> |
- (s + __ImageBase.e_lfanew); |
- const void* end = s + nt->OptionalHeader.SizeOfImage; |
- SetModule(start, end); |
- } |
- |
- const void* start_; |
- const void* end_; |
-}; |
- |
-struct ModuleOfInterestWithExcludedRegion : public ModuleOfInterest { |
- inline bool IsOurModule(const void* address) { |
- return (start_ <= address && address < end_) && |
- (address < special_region_start_ || special_region_end_ <= address); |
- } |
- |
- inline void SetExcludedRegion(const void* start, const void* end) { |
- special_region_start_ = start; |
- special_region_end_ = end; |
- } |
- |
- const void* special_region_start_; |
- const void* special_region_end_; |
-}; |
- |
- |
-#endif // CHROME_FRAME_CRASH_REPORTING_VECTORED_HANDLER_H_ |