2013-08-23 2 views
0

MinGW использует этот код в качестве начала для каждой программыUnix альтернатива этому MinGW кода выполнения

static void __attribute__((noreturn)) __mingw_CRTStartup (void)  
{ 
    int nRet; 
    SetUnhandledExceptionFilter (_gnu_exception_handler); 
    _fpreset(); 
    _mingw32_init_mainargs(); 
    _mingw32_init_fmode(); 
    _pei386_runtime_relocator(); 
    asm __volatile__ ("andl $-16, %%esp" : : : "%esp"); 
    nRet = main (_argc, _argv, environ); 
    _cexit(); 
    ExitProcess (nRet); 
} 

Что является альтернативой для Linux для линии ExitProcess(nRet);, которая заканчивается все нити и обрабатывает возвращаемое значение? Где я могу найти исходный код для Linux/OS X gcc runtime? Запускает ли Linux-GCC/XCode все потоки? Если нет, как он обрабатывает возвращаемые значения main?

ответ

0

Соответствующий код, который является справедливой немного сложнее в «Glibc», чем выше MinGW коды (так как он имеет много вариантов, которые, как компилировать плитки и выполнение выбор, связанный с ними):

http://sourceware.org/git/?p=glibc.git;a=blob;f=csu/libc-start.c;h=a14ed71616a3f63f092837e9c30780f8344b4fbe;hb=cvs/glibc-2_9-branch

Однако простая точка зрения, что он делает:

result = main (argc, argv, __environ MAIN_AUXVEC_PARAM); 
exit (result); 

И да, exit будет убивать все темы (если ничего другого, операционная система не будет, когда системный вызов для выхода вызывается в _exit().

 Смежные вопросы

  • Нет связанных вопросов^_^