core/win32/callback.c
/* Remember that every path out of here must invoke the DR exit hook.
 * The normal return path will do so as the interception code has an
 * enter and exit hook around the call to this routine.
 */
Remember that every path out of here must invoke the DR exit hook.
The normal return path will do so as the interception code has an
enter and exit hook around the call to this routine.
Remember that every path out of here must invoke the DR exit hook . The normal return path will do so as the interception code has an enter and exit hook around the call to this routine .
static after_intercept_action_t  
intercept_raise_exception(app_state_at_intercept_t *state)
{
    ASSERT_NOT_TESTED();
    if (intercept_asynch_for_self(false)) {
        SELF_PROTECT_LOCAL(get_thread_private_dcontext(), WRITABLE);
        LOG(THREAD_GET, LOG_ASYNCH, 1, "ASYNCH intercept_raise_exception()\n");
        STATS_INC(num_raise_exceptions);
        asynch_retakeover_if_native();
        state->callee_arg = (void *) false ;
        asynch_take_over(state);
    } else
        STATS_INC(num_raise_exceptions_noasynch);
    return AFTER_INTERCEPT_LET_GO;
}
static after_intercept_action_t intercept_raise_exception ( app_state_at_intercept_t * state ) { ASSERT_NOT_TESTED ( ) ; if ( intercept_asynch_for_self ( false ) ) { SELF_PROTECT_LOCAL ( get_thread_private_dcontext ( ) , WRITABLE ) ; LOG ( THREAD_GET , LOG_ASYNCH , 1 , " \n " ) ; STATS_INC ( num_raise_exceptions ) ; asynch_retakeover_if_native ( ) ; state -> callee_arg = ( void * ) false ; asynch_take_over ( state ) ; } else STATS_INC ( num_raise_exceptions_noasynch ) ; return AFTER_INTERCEPT_LET_GO ; }
Remember that every path out of here must invoke the DR exit hook.
Remember that every path out of here must invoke the DR exit hook .
/* note return value will be ignored */ /*no unknown threads*/ /* won't be re-protected until dispatch->fcache */ /* We want to squash the current trace (don't want traces
         * following exceptions), asynch_take_over does that for us.
         * We don't save the cur dcontext.
         */ /* use cur dcontext */