void __cdecl abort ( void ) { _PHNDLR sigabrt_act = SIG_DFL; #ifdef _DEBUG if (__abort_behavior & _WRITE_ABORT_MSG) { /* write the abort message */ _NMSG_WRITE(_RT_ABORT); } #endif /* _DEBUG */ /* Check if the user installed a handler for SIGABRT. * We need to read the user handler atomically in the case * another thread is aborting while we change the signal * handler. */ sigabrt_act = __get_sigabrt(); if (sigabrt_act != SIG_DFL) { raise(SIGABRT); } /* If there is no user handler for SIGABRT or if the user * handler returns, then exit from the program anyway */ if (__abort_behavior & _CALL_REPORTFAULT) { #if defined (_M_ARM) || defined (_CRT_APP) __fastfail(FAST_FAIL_FATAL_APP_EXIT); #else /* defined (_M_ARM) || defined (_CRT_APP) */ if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)) __fastfail(FAST_FAIL_FATAL_APP_EXIT); _call_reportfault(_CRT_DEBUGGER_ABORT, STATUS_FATAL_APP_EXIT, EXCEPTION_NONCONTINUABLE); #endif /* defined (_M_ARM) || defined (_CRT_APP) */ } /* If we don't want to call ReportFault, then we call _exit(3), which is the * same as invoking the default handler for SIGABRT */ _exit(3); }
static void __cdecl fast_error_exit( int rterrnum ) { /* * Note that here there is no other option other then to use __error_mode * as even if we use _set_error_mode, there is very slim possiblity if * proper _ser_error_mode forwarding is really working. */ #ifdef _WINMAIN_ if (__error_mode == _OUT_TO_STDERR) #else /* _WINMAIN_ */ if (__error_mode != _OUT_TO_MSGBOX) #endif /* _WINMAIN_ */ _FF_MSGBANNER(); /* write run-time error banner */ _NMSG_WRITE(rterrnum); /* write message */ __crtExitProcess(255); /* normally _exit(255) */ }