1 // Copyright 2018 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // PLEASE READ BEFORE CHANGING THIS FILE! 6 // 7 // This file implements the support code for the out of bounds trap handler. 8 // Nothing in here actually runs in the trap handler, but the code here 9 // manipulates data structures used by the trap handler so we still need to be 10 // careful. In order to minimize this risk, here are some rules to follow. 11 // 12 // 1. Avoid introducing new external dependencies. The files in src/trap-handler 13 // should be as self-contained as possible to make it easy to audit the code. 14 // 15 // 2. Any changes must be reviewed by someone from the crash reporting 16 // or security team. Se OWNERS for suggested reviewers. 17 // 18 // For more information, see https://goo.gl/yMeyUY. 19 // 20 // For the code that runs in the trap handler itself, see handler-inside.cc. 21 22 #include <windows.h> 23 24 #include "src/trap-handler/handler-inside-win.h" 25 #include "src/trap-handler/trap-handler.h" 26 27 namespace v8 { 28 namespace internal { 29 namespace trap_handler { 30 31 #if V8_TRAP_HANDLER_SUPPORTED 32 33 namespace { 34 35 // A handle to our registered exception handler, so that we can remove it 36 // again later. 37 void* g_registered_handler = nullptr; 38 39 } // namespace 40 RegisterDefaultTrapHandler()41bool RegisterDefaultTrapHandler() { 42 constexpr ULONG first = TRUE; 43 CHECK_NULL(g_registered_handler); 44 g_registered_handler = AddVectoredExceptionHandler(first, HandleWasmTrap); 45 46 return nullptr != g_registered_handler; 47 } 48 RemoveTrapHandler()49void RemoveTrapHandler() { 50 if (!g_registered_handler) return; 51 52 RemoveVectoredExceptionHandler(g_registered_handler); 53 g_registered_handler = nullptr; 54 } 55 56 #endif // V8_TRAP_HANDLER_SUPPORTED 57 58 } // namespace trap_handler 59 } // namespace internal 60 } // namespace v8 61