24 #include "src/trap-handler/handler-inside-posix.h" 25 #include "src/trap-handler/trap-handler-internal.h" 29 namespace trap_handler {
31 #if V8_TRAP_HANDLER_SUPPORTED 33 struct sigaction g_old_handler;
37 bool g_is_default_signal_handler_registered;
41 bool RegisterDefaultTrapHandler() {
42 CHECK(!g_is_default_signal_handler_registered);
44 struct sigaction action;
45 action.sa_sigaction = HandleSignal;
46 action.sa_flags = SA_SIGINFO;
47 sigemptyset(&action.sa_mask);
51 if (sigaction(kOobSignal, &action, &g_old_handler) != 0) {
60 #if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \ 61 defined(THREAD_SANITIZER) || defined(LEAK_SANITIZER) || \ 62 defined(UNDEFINED_SANITIZER) 63 struct sigaction installed_handler;
64 CHECK_EQ(sigaction(kOobSignal, NULL, &installed_handler), 0);
67 if (installed_handler.sa_sigaction != HandleSignal) {
69 "WARNING: sanitizers are preventing signal handler installation. " 70 "Trap handlers are disabled.\n");
75 g_is_default_signal_handler_registered =
true;
79 void RemoveTrapHandler() {
80 if (g_is_default_signal_handler_registered) {
81 if (sigaction(kOobSignal, &g_old_handler,
nullptr) == 0) {
82 g_is_default_signal_handler_registered =
false;
86 #endif // V8_TRAP_HANDLER_SUPPORTED