1*c9945492SAndroid Build Coastguard Worker #include <stdlib.h> 2*c9945492SAndroid Build Coastguard Worker #include <stdint.h> 3*c9945492SAndroid Build Coastguard Worker #include "libc.h" 4*c9945492SAndroid Build Coastguard Worker dummy()5*c9945492SAndroid Build Coastguard Workerstatic void dummy() 6*c9945492SAndroid Build Coastguard Worker { 7*c9945492SAndroid Build Coastguard Worker } 8*c9945492SAndroid Build Coastguard Worker 9*c9945492SAndroid Build Coastguard Worker /* atexit.c and __stdio_exit.c override these. the latter is linked 10*c9945492SAndroid Build Coastguard Worker * as a consequence of linking either __toread.c or __towrite.c. */ 11*c9945492SAndroid Build Coastguard Worker weak_alias(dummy, __funcs_on_exit); 12*c9945492SAndroid Build Coastguard Worker weak_alias(dummy, __stdio_exit); 13*c9945492SAndroid Build Coastguard Worker weak_alias(dummy, _fini); 14*c9945492SAndroid Build Coastguard Worker 15*c9945492SAndroid Build Coastguard Worker extern weak hidden void (*const __fini_array_start)(void), (*const __fini_array_end)(void); 16*c9945492SAndroid Build Coastguard Worker libc_exit_fini(void)17*c9945492SAndroid Build Coastguard Workerstatic void libc_exit_fini(void) 18*c9945492SAndroid Build Coastguard Worker { 19*c9945492SAndroid Build Coastguard Worker uintptr_t a = (uintptr_t)&__fini_array_end; 20*c9945492SAndroid Build Coastguard Worker for (; a>(uintptr_t)&__fini_array_start; a-=sizeof(void(*)())) 21*c9945492SAndroid Build Coastguard Worker (*(void (**)())(a-sizeof(void(*)())))(); 22*c9945492SAndroid Build Coastguard Worker _fini(); 23*c9945492SAndroid Build Coastguard Worker } 24*c9945492SAndroid Build Coastguard Worker 25*c9945492SAndroid Build Coastguard Worker weak_alias(libc_exit_fini, __libc_exit_fini); 26*c9945492SAndroid Build Coastguard Worker exit(int code)27*c9945492SAndroid Build Coastguard Worker_Noreturn void exit(int code) 28*c9945492SAndroid Build Coastguard Worker { 29*c9945492SAndroid Build Coastguard Worker __funcs_on_exit(); 30*c9945492SAndroid Build Coastguard Worker __libc_exit_fini(); 31*c9945492SAndroid Build Coastguard Worker __stdio_exit(); 32*c9945492SAndroid Build Coastguard Worker _Exit(code); 33*c9945492SAndroid Build Coastguard Worker } 34