#include "SignalTranslator.h" namespace UnitTest { sigjmp_buf* SignalTranslator::s_jumpTarget = 0; namespace { void SignalHandler ( int sig ) { siglongjmp ( *SignalTranslator::s_jumpTarget, sig ); } } SignalTranslator::SignalTranslator() { m_oldJumpTarget = s_jumpTarget; s_jumpTarget = &m_currentJumpTarget; struct sigaction action; action.sa_flags = 0; action.sa_handler = SignalHandler; sigemptyset ( &action.sa_mask ); sigaction ( SIGSEGV, &action, &m_old_SIGSEGV_action ); sigaction ( SIGFPE , &action, &m_old_SIGFPE_action ); sigaction ( SIGTRAP, &action, &m_old_SIGTRAP_action ); sigaction ( SIGBUS , &action, &m_old_SIGBUS_action ); sigaction ( SIGILL , &action, &m_old_SIGBUS_action ); } SignalTranslator::~SignalTranslator() { sigaction ( SIGILL , &m_old_SIGBUS_action , 0 ); sigaction ( SIGBUS , &m_old_SIGBUS_action , 0 ); sigaction ( SIGTRAP, &m_old_SIGTRAP_action, 0 ); sigaction ( SIGFPE , &m_old_SIGFPE_action , 0 ); sigaction ( SIGSEGV, &m_old_SIGSEGV_action, 0 ); s_jumpTarget = m_oldJumpTarget; } }